Merge branch '10.3' into 10.4
This commit is contained in:
commit
29633dc0c0
@ -38,7 +38,6 @@ IF(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang" AND RUN_ABI_CHECK)
|
|||||||
SET(API_PREPROCESSOR_HEADER
|
SET(API_PREPROCESSOR_HEADER
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql/plugin_audit.h
|
${CMAKE_SOURCE_DIR}/include/mysql/plugin_audit.h
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql/plugin_ftparser.h
|
${CMAKE_SOURCE_DIR}/include/mysql/plugin_ftparser.h
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql.h
|
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v1.h
|
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v1.h
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v2.h
|
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v2.h
|
||||||
${CMAKE_SOURCE_DIR}/include/mysql/client_plugin.h
|
${CMAKE_SOURCE_DIR}/include/mysql/client_plugin.h
|
||||||
|
57
include/mariadb_capi_rename.h
Normal file
57
include/mariadb_capi_rename.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/* Copyright (c) 2022, MariaDB
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; version 2 of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
|
||||||
|
|
||||||
|
/* Renaming C API symbols inside server
|
||||||
|
* client.c defines a number of functions from the C API, that are used in replication, in number of storage engine plugins, mariadb-backup.
|
||||||
|
* That can cause a problem if a plugin loads libmariadb/libmysql or a library, that has dependency on them. The known case is ODBC driver.
|
||||||
|
* Thus the header re-names those functions for internal use.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MARIADB_CAPI_RENAME_INCLUDED
|
||||||
|
#define MARIADB_CAPI_RENAME_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(EMBEDDED_LIBRARY)
|
||||||
|
|
||||||
|
#define MARIADB_ADD_PREFIX(_SYMBOL) server_##_SYMBOL
|
||||||
|
#define mysql_real_connect MARIADB_ADD_PREFIX(mysql_real_connect)
|
||||||
|
#define mysql_init MARIADB_ADD_PREFIX(mysql_init)
|
||||||
|
#define mysql_close MARIADB_ADD_PREFIX(mysql_close)
|
||||||
|
#define mysql_options MARIADB_ADD_PREFIX(mysql_options)
|
||||||
|
#define mysql_load_plugin MARIADB_ADD_PREFIX(mysql_load_plugin)
|
||||||
|
#define mysql_load_plugin_v MARIADB_ADD_PREFIX(mysql_load_plugin_v)
|
||||||
|
#define mysql_client_find_plugin MARIADB_ADD_PREFIX(mysql_client_find_plugin)
|
||||||
|
#define mysql_real_query MARIADB_ADD_PREFIX(mysql_real_query)
|
||||||
|
#define mysql_send_query MARIADB_ADD_PREFIX(mysql_send_query)
|
||||||
|
#define mysql_free_result MARIADB_ADD_PREFIX(mysql_free_result)
|
||||||
|
#define mysql_get_socket MARIADB_ADD_PREFIX(mysql_get_socket)
|
||||||
|
#define mysql_set_character_set MARIADB_ADD_PREFIX(mysql_set_character_set)
|
||||||
|
#define mysql_get_server_version MARIADB_ADD_PREFIX(mysql_get_server_version)
|
||||||
|
#define mysql_error MARIADB_ADD_PREFIX(mysql_error)
|
||||||
|
#define mysql_errno MARIADB_ADD_PREFIX(mysql_errno)
|
||||||
|
#define mysql_num_fields MARIADB_ADD_PREFIX(mysql_num_fields)
|
||||||
|
#define mysql_num_rows MARIADB_ADD_PREFIX(mysql_num_rows)
|
||||||
|
#define mysql_options4 MARIADB_ADD_PREFIX(mysql_options4)
|
||||||
|
#define mysql_fetch_lengths MARIADB_ADD_PREFIX(mysql_fetch_lengths)
|
||||||
|
#define mysql_fetch_row MARIADB_ADD_PREFIX(mysql_fetch_row)
|
||||||
|
#define mysql_affected_rows MARIADB_ADD_PREFIX(mysql_affected_rows)
|
||||||
|
#define mysql_store_result MARIADB_ADD_PREFIX(mysql_store_result)
|
||||||
|
#define mysql_select_db MARIADB_ADD_PREFIX(mysql_select_db)
|
||||||
|
#define mysql_get_ssl_cipher MARIADB_ADD_PREFIX(mysql_get_ssl_cipher)
|
||||||
|
#define mysql_ssl_set MARIADB_ADD_PREFIX(mysql_ssl_set)
|
||||||
|
#define mysql_client_register_plugin MARIADB_ADD_PREFIX(mysql_client_register_plugin)
|
||||||
|
|
||||||
|
#endif // !EMBEDDED_LIBRARY && !MYSQL_DYNAMIC_PLUGIN
|
||||||
|
|
||||||
|
#endif // !MARIADB_CAPI_RENAME_INCLUDED
|
@ -73,6 +73,7 @@ typedef int my_socket;
|
|||||||
#endif /* my_socket_defined */
|
#endif /* my_socket_defined */
|
||||||
#endif /* MY_GLOBAL_INCLUDED */
|
#endif /* MY_GLOBAL_INCLUDED */
|
||||||
|
|
||||||
|
#include "mariadb_capi_rename.h"
|
||||||
#include "mysql_version.h"
|
#include "mysql_version.h"
|
||||||
#include "mysql_com.h"
|
#include "mysql_com.h"
|
||||||
#include "mysql_time.h"
|
#include "mysql_time.h"
|
||||||
|
@ -1,772 +0,0 @@
|
|||||||
typedef char my_bool;
|
|
||||||
typedef int my_socket;
|
|
||||||
enum enum_server_command
|
|
||||||
{
|
|
||||||
COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST,
|
|
||||||
COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS,
|
|
||||||
COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING,
|
|
||||||
COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP,
|
|
||||||
COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE,
|
|
||||||
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
|
|
||||||
COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
|
|
||||||
COM_UNIMPLEMENTED,
|
|
||||||
COM_RESET_CONNECTION,
|
|
||||||
COM_MDB_GAP_BEG,
|
|
||||||
COM_MDB_GAP_END=249,
|
|
||||||
COM_STMT_BULK_EXECUTE=250,
|
|
||||||
COM_SLAVE_WORKER=251,
|
|
||||||
COM_SLAVE_IO=252,
|
|
||||||
COM_SLAVE_SQL=253,
|
|
||||||
COM_MULTI=254,
|
|
||||||
COM_END=255
|
|
||||||
};
|
|
||||||
enum enum_indicator_type
|
|
||||||
{
|
|
||||||
STMT_INDICATOR_NONE= 0,
|
|
||||||
STMT_INDICATOR_NULL,
|
|
||||||
STMT_INDICATOR_DEFAULT,
|
|
||||||
STMT_INDICATOR_IGNORE
|
|
||||||
};
|
|
||||||
struct st_vio;
|
|
||||||
typedef struct st_vio Vio;
|
|
||||||
typedef struct st_net {
|
|
||||||
Vio *vio;
|
|
||||||
unsigned char *buff,*buff_end,*write_pos,*read_pos;
|
|
||||||
my_socket fd;
|
|
||||||
unsigned long remain_in_buf,length, buf_length, where_b;
|
|
||||||
unsigned long max_packet,max_packet_size;
|
|
||||||
unsigned int pkt_nr,compress_pkt_nr;
|
|
||||||
unsigned int write_timeout, read_timeout, retry_count;
|
|
||||||
int fcntl;
|
|
||||||
unsigned int *return_status;
|
|
||||||
unsigned char reading_or_writing;
|
|
||||||
char save_char;
|
|
||||||
char net_skip_rest_factor;
|
|
||||||
my_bool thread_specific_malloc;
|
|
||||||
unsigned char compress;
|
|
||||||
my_bool unused3;
|
|
||||||
void *thd;
|
|
||||||
unsigned int last_errno;
|
|
||||||
unsigned char error;
|
|
||||||
my_bool unused4;
|
|
||||||
my_bool unused5;
|
|
||||||
char last_error[512];
|
|
||||||
char sqlstate[5 +1];
|
|
||||||
void *extension;
|
|
||||||
} NET;
|
|
||||||
enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
|
|
||||||
MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG,
|
|
||||||
MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE,
|
|
||||||
MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP,
|
|
||||||
MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
|
|
||||||
MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
|
|
||||||
MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,
|
|
||||||
MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR,
|
|
||||||
MYSQL_TYPE_BIT,
|
|
||||||
MYSQL_TYPE_TIMESTAMP2,
|
|
||||||
MYSQL_TYPE_DATETIME2,
|
|
||||||
MYSQL_TYPE_TIME2,
|
|
||||||
MYSQL_TYPE_BLOB_COMPRESSED= 140,
|
|
||||||
MYSQL_TYPE_VARCHAR_COMPRESSED= 141,
|
|
||||||
MYSQL_TYPE_NEWDECIMAL=246,
|
|
||||||
MYSQL_TYPE_ENUM=247,
|
|
||||||
MYSQL_TYPE_SET=248,
|
|
||||||
MYSQL_TYPE_TINY_BLOB=249,
|
|
||||||
MYSQL_TYPE_MEDIUM_BLOB=250,
|
|
||||||
MYSQL_TYPE_LONG_BLOB=251,
|
|
||||||
MYSQL_TYPE_BLOB=252,
|
|
||||||
MYSQL_TYPE_VAR_STRING=253,
|
|
||||||
MYSQL_TYPE_STRING=254,
|
|
||||||
MYSQL_TYPE_GEOMETRY=255
|
|
||||||
};
|
|
||||||
enum mysql_enum_shutdown_level {
|
|
||||||
SHUTDOWN_DEFAULT = 0,
|
|
||||||
SHUTDOWN_WAIT_CONNECTIONS= (unsigned char)(1 << 0),
|
|
||||||
SHUTDOWN_WAIT_TRANSACTIONS= (unsigned char)(1 << 1),
|
|
||||||
SHUTDOWN_WAIT_UPDATES= (unsigned char)(1 << 3),
|
|
||||||
SHUTDOWN_WAIT_ALL_BUFFERS= ((unsigned char)(1 << 3) << 1),
|
|
||||||
SHUTDOWN_WAIT_CRITICAL_BUFFERS= ((unsigned char)(1 << 3) << 1) + 1
|
|
||||||
};
|
|
||||||
enum enum_cursor_type
|
|
||||||
{
|
|
||||||
CURSOR_TYPE_NO_CURSOR= 0,
|
|
||||||
CURSOR_TYPE_READ_ONLY= 1,
|
|
||||||
CURSOR_TYPE_FOR_UPDATE= 2,
|
|
||||||
CURSOR_TYPE_SCROLLABLE= 4
|
|
||||||
};
|
|
||||||
enum enum_mysql_set_option
|
|
||||||
{
|
|
||||||
MYSQL_OPTION_MULTI_STATEMENTS_ON,
|
|
||||||
MYSQL_OPTION_MULTI_STATEMENTS_OFF
|
|
||||||
};
|
|
||||||
enum enum_session_state_type
|
|
||||||
{
|
|
||||||
SESSION_TRACK_SYSTEM_VARIABLES,
|
|
||||||
SESSION_TRACK_SCHEMA,
|
|
||||||
SESSION_TRACK_STATE_CHANGE,
|
|
||||||
SESSION_TRACK_GTIDS,
|
|
||||||
SESSION_TRACK_TRANSACTION_CHARACTERISTICS,
|
|
||||||
SESSION_TRACK_TRANSACTION_STATE,
|
|
||||||
SESSION_TRACK_always_at_the_end
|
|
||||||
};
|
|
||||||
my_bool my_net_init(NET *net, Vio* vio, void *thd, unsigned int my_flags);
|
|
||||||
void my_net_local_init(NET *net);
|
|
||||||
void net_end(NET *net);
|
|
||||||
void net_clear(NET *net, my_bool clear_buffer);
|
|
||||||
my_bool net_realloc(NET *net, size_t length);
|
|
||||||
my_bool net_flush(NET *net);
|
|
||||||
my_bool my_net_write(NET *net,const unsigned char *packet, size_t len);
|
|
||||||
my_bool net_write_command(NET *net,unsigned char command,
|
|
||||||
const unsigned char *header, size_t head_len,
|
|
||||||
const unsigned char *packet, size_t len);
|
|
||||||
int net_real_write(NET *net,const unsigned char *packet, size_t len);
|
|
||||||
unsigned long my_net_read_packet(NET *net, my_bool read_from_server);
|
|
||||||
unsigned long my_net_read_packet_reallen(NET *net, my_bool read_from_server,
|
|
||||||
unsigned long* reallen);
|
|
||||||
struct sockaddr;
|
|
||||||
int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen,
|
|
||||||
unsigned int timeout);
|
|
||||||
struct my_rnd_struct;
|
|
||||||
enum Item_result
|
|
||||||
{
|
|
||||||
STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, DECIMAL_RESULT,
|
|
||||||
TIME_RESULT
|
|
||||||
};
|
|
||||||
typedef struct st_udf_args
|
|
||||||
{
|
|
||||||
unsigned int arg_count;
|
|
||||||
enum Item_result *arg_type;
|
|
||||||
char **args;
|
|
||||||
unsigned long *lengths;
|
|
||||||
char *maybe_null;
|
|
||||||
const char **attributes;
|
|
||||||
unsigned long *attribute_lengths;
|
|
||||||
void *extension;
|
|
||||||
} UDF_ARGS;
|
|
||||||
typedef struct st_udf_init
|
|
||||||
{
|
|
||||||
my_bool maybe_null;
|
|
||||||
unsigned int decimals;
|
|
||||||
unsigned long max_length;
|
|
||||||
char *ptr;
|
|
||||||
my_bool const_item;
|
|
||||||
void *extension;
|
|
||||||
} UDF_INIT;
|
|
||||||
void create_random_string(char *to, unsigned int length,
|
|
||||||
struct my_rnd_struct *rand_st);
|
|
||||||
void hash_password(unsigned long *to, const char *password, unsigned int password_len);
|
|
||||||
void make_scrambled_password_323(char *to, const char *password);
|
|
||||||
void scramble_323(char *to, const char *message, const char *password);
|
|
||||||
my_bool check_scramble_323(const unsigned char *reply, const char *message,
|
|
||||||
unsigned long *salt);
|
|
||||||
void get_salt_from_password_323(unsigned long *res, const char *password);
|
|
||||||
void make_scrambled_password(char *to, const char *password);
|
|
||||||
void scramble(char *to, const char *message, const char *password);
|
|
||||||
my_bool check_scramble(const unsigned char *reply, const char *message,
|
|
||||||
const unsigned char *hash_stage2);
|
|
||||||
void get_salt_from_password(unsigned char *res, const char *password);
|
|
||||||
char *octet2hex(char *to, const char *str, size_t len);
|
|
||||||
char *get_tty_password(const char *opt_message);
|
|
||||||
void get_tty_password_buff(const char *opt_message, char *to, size_t length);
|
|
||||||
const char *mysql_errno_to_sqlstate(unsigned int mysql_errno);
|
|
||||||
my_bool my_thread_init(void);
|
|
||||||
void my_thread_end(void);
|
|
||||||
typedef long my_time_t;
|
|
||||||
enum enum_mysql_timestamp_type
|
|
||||||
{
|
|
||||||
MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1,
|
|
||||||
MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2
|
|
||||||
};
|
|
||||||
typedef struct st_mysql_time
|
|
||||||
{
|
|
||||||
unsigned int year, month, day, hour, minute, second;
|
|
||||||
unsigned long second_part;
|
|
||||||
my_bool neg;
|
|
||||||
enum enum_mysql_timestamp_type time_type;
|
|
||||||
} MYSQL_TIME;
|
|
||||||
typedef struct st_list {
|
|
||||||
struct st_list *prev,*next;
|
|
||||||
void *data;
|
|
||||||
} LIST;
|
|
||||||
typedef int (*list_walk_action)(void *,void *);
|
|
||||||
extern LIST *list_add(LIST *root,LIST *element);
|
|
||||||
extern LIST *list_delete(LIST *root,LIST *element);
|
|
||||||
extern LIST *list_cons(void *data,LIST *root);
|
|
||||||
extern LIST *list_reverse(LIST *root);
|
|
||||||
extern void list_free(LIST *root,unsigned int free_data);
|
|
||||||
extern unsigned int list_length(LIST *);
|
|
||||||
extern int list_walk(LIST *,list_walk_action action,unsigned char * argument);
|
|
||||||
extern unsigned int mariadb_deinitialize_ssl;
|
|
||||||
extern unsigned int mysql_port;
|
|
||||||
extern char *mysql_unix_port;
|
|
||||||
typedef struct st_mysql_field {
|
|
||||||
char *name;
|
|
||||||
char *org_name;
|
|
||||||
char *table;
|
|
||||||
char *org_table;
|
|
||||||
char *db;
|
|
||||||
char *catalog;
|
|
||||||
char *def;
|
|
||||||
unsigned long length;
|
|
||||||
unsigned long max_length;
|
|
||||||
unsigned int name_length;
|
|
||||||
unsigned int org_name_length;
|
|
||||||
unsigned int table_length;
|
|
||||||
unsigned int org_table_length;
|
|
||||||
unsigned int db_length;
|
|
||||||
unsigned int catalog_length;
|
|
||||||
unsigned int def_length;
|
|
||||||
unsigned int flags;
|
|
||||||
unsigned int decimals;
|
|
||||||
unsigned int charsetnr;
|
|
||||||
enum enum_field_types type;
|
|
||||||
void *extension;
|
|
||||||
} MYSQL_FIELD;
|
|
||||||
typedef char **MYSQL_ROW;
|
|
||||||
typedef unsigned int MYSQL_FIELD_OFFSET;
|
|
||||||
typedef unsigned long long my_ulonglong;
|
|
||||||
typedef struct st_used_mem
|
|
||||||
{
|
|
||||||
struct st_used_mem *next;
|
|
||||||
size_t left;
|
|
||||||
size_t size;
|
|
||||||
} USED_MEM;
|
|
||||||
typedef struct st_mem_root
|
|
||||||
{
|
|
||||||
USED_MEM *free;
|
|
||||||
USED_MEM *used;
|
|
||||||
USED_MEM *pre_alloc;
|
|
||||||
size_t min_malloc;
|
|
||||||
size_t block_size;
|
|
||||||
size_t total_alloc;
|
|
||||||
unsigned int block_num;
|
|
||||||
unsigned int first_block_usage;
|
|
||||||
void (*error_handler)(void);
|
|
||||||
const char *name;
|
|
||||||
} MEM_ROOT;
|
|
||||||
typedef struct st_typelib {
|
|
||||||
unsigned int count;
|
|
||||||
const char *name;
|
|
||||||
const char **type_names;
|
|
||||||
unsigned int *type_lengths;
|
|
||||||
} TYPELIB;
|
|
||||||
extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position);
|
|
||||||
extern int find_type_with_warning(const char *x, TYPELIB *typelib,
|
|
||||||
const char *option);
|
|
||||||
extern int find_type(const char *x, const TYPELIB *typelib, unsigned int flags);
|
|
||||||
extern void make_type(char *to,unsigned int nr,TYPELIB *typelib);
|
|
||||||
extern const char *get_type(TYPELIB *typelib,unsigned int nr);
|
|
||||||
extern TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from);
|
|
||||||
extern TYPELIB sql_protocol_typelib;
|
|
||||||
my_ulonglong find_set_from_flags(const TYPELIB *lib, unsigned int default_name,
|
|
||||||
my_ulonglong cur_set, my_ulonglong default_set,
|
|
||||||
const char *str, unsigned int length,
|
|
||||||
char **err_pos, unsigned int *err_len);
|
|
||||||
typedef struct st_mysql_rows {
|
|
||||||
struct st_mysql_rows *next;
|
|
||||||
MYSQL_ROW data;
|
|
||||||
unsigned long length;
|
|
||||||
} MYSQL_ROWS;
|
|
||||||
typedef MYSQL_ROWS *MYSQL_ROW_OFFSET;
|
|
||||||
typedef struct embedded_query_result EMBEDDED_QUERY_RESULT;
|
|
||||||
typedef struct st_mysql_data {
|
|
||||||
MYSQL_ROWS *data;
|
|
||||||
struct embedded_query_result *embedded_info;
|
|
||||||
MEM_ROOT alloc;
|
|
||||||
my_ulonglong rows;
|
|
||||||
unsigned int fields;
|
|
||||||
void *extension;
|
|
||||||
} MYSQL_DATA;
|
|
||||||
enum mysql_option
|
|
||||||
{
|
|
||||||
MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE,
|
|
||||||
MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP,
|
|
||||||
MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE,
|
|
||||||
MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT,
|
|
||||||
MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT,
|
|
||||||
MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION,
|
|
||||||
MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH,
|
|
||||||
MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT,
|
|
||||||
MYSQL_OPT_SSL_VERIFY_SERVER_CERT, MYSQL_PLUGIN_DIR, MYSQL_DEFAULT_AUTH,
|
|
||||||
MYSQL_OPT_BIND,
|
|
||||||
MYSQL_OPT_SSL_KEY, MYSQL_OPT_SSL_CERT,
|
|
||||||
MYSQL_OPT_SSL_CA, MYSQL_OPT_SSL_CAPATH, MYSQL_OPT_SSL_CIPHER,
|
|
||||||
MYSQL_OPT_SSL_CRL, MYSQL_OPT_SSL_CRLPATH,
|
|
||||||
MYSQL_OPT_CONNECT_ATTR_RESET, MYSQL_OPT_CONNECT_ATTR_ADD,
|
|
||||||
MYSQL_OPT_CONNECT_ATTR_DELETE,
|
|
||||||
MYSQL_SERVER_PUBLIC_KEY,
|
|
||||||
MYSQL_ENABLE_CLEARTEXT_PLUGIN,
|
|
||||||
MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS,
|
|
||||||
MYSQL_PROGRESS_CALLBACK=5999,
|
|
||||||
MYSQL_OPT_NONBLOCK,
|
|
||||||
MYSQL_OPT_USE_THREAD_SPECIFIC_MEMORY
|
|
||||||
};
|
|
||||||
struct st_mysql_options_extention;
|
|
||||||
struct st_mysql_options {
|
|
||||||
unsigned int connect_timeout, read_timeout, write_timeout;
|
|
||||||
unsigned int port, protocol;
|
|
||||||
unsigned long client_flag;
|
|
||||||
char *host,*user,*password,*unix_socket,*db;
|
|
||||||
struct st_dynamic_array *init_commands;
|
|
||||||
char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name;
|
|
||||||
char *ssl_key;
|
|
||||||
char *ssl_cert;
|
|
||||||
char *ssl_ca;
|
|
||||||
char *ssl_capath;
|
|
||||||
char *ssl_cipher;
|
|
||||||
char *shared_memory_base_name;
|
|
||||||
unsigned long max_allowed_packet;
|
|
||||||
my_bool use_ssl;
|
|
||||||
my_bool compress,named_pipe;
|
|
||||||
my_bool use_thread_specific_memory;
|
|
||||||
my_bool unused2;
|
|
||||||
my_bool unused3;
|
|
||||||
my_bool unused4;
|
|
||||||
enum mysql_option methods_to_use;
|
|
||||||
char *client_ip;
|
|
||||||
my_bool secure_auth;
|
|
||||||
my_bool report_data_truncation;
|
|
||||||
int (*local_infile_init)(void **, const char *, void *);
|
|
||||||
int (*local_infile_read)(void *, char *, unsigned int);
|
|
||||||
void (*local_infile_end)(void *);
|
|
||||||
int (*local_infile_error)(void *, char *, unsigned int);
|
|
||||||
void *local_infile_userdata;
|
|
||||||
struct st_mysql_options_extention *extension;
|
|
||||||
};
|
|
||||||
enum mysql_status
|
|
||||||
{
|
|
||||||
MYSQL_STATUS_READY, MYSQL_STATUS_GET_RESULT, MYSQL_STATUS_USE_RESULT,
|
|
||||||
MYSQL_STATUS_STATEMENT_GET_RESULT
|
|
||||||
};
|
|
||||||
enum mysql_protocol_type
|
|
||||||
{
|
|
||||||
MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
|
|
||||||
MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
|
|
||||||
};
|
|
||||||
typedef struct character_set
|
|
||||||
{
|
|
||||||
unsigned int number;
|
|
||||||
unsigned int state;
|
|
||||||
const char *csname;
|
|
||||||
const char *name;
|
|
||||||
const char *comment;
|
|
||||||
const char *dir;
|
|
||||||
unsigned int mbminlen;
|
|
||||||
unsigned int mbmaxlen;
|
|
||||||
} MY_CHARSET_INFO;
|
|
||||||
struct st_mysql_methods;
|
|
||||||
struct st_mysql_stmt;
|
|
||||||
typedef struct st_mysql
|
|
||||||
{
|
|
||||||
NET net;
|
|
||||||
unsigned char *connector_fd;
|
|
||||||
char *host,*user,*passwd,*unix_socket,*server_version,*host_info;
|
|
||||||
char *info, *db;
|
|
||||||
const struct charset_info_st *charset;
|
|
||||||
MYSQL_FIELD *fields;
|
|
||||||
MEM_ROOT field_alloc;
|
|
||||||
my_ulonglong affected_rows;
|
|
||||||
my_ulonglong insert_id;
|
|
||||||
my_ulonglong extra_info;
|
|
||||||
unsigned long thread_id;
|
|
||||||
unsigned long packet_length;
|
|
||||||
unsigned int port;
|
|
||||||
unsigned long client_flag,server_capabilities;
|
|
||||||
unsigned int protocol_version;
|
|
||||||
unsigned int field_count;
|
|
||||||
unsigned int server_status;
|
|
||||||
unsigned int server_language;
|
|
||||||
unsigned int warning_count;
|
|
||||||
struct st_mysql_options options;
|
|
||||||
enum mysql_status status;
|
|
||||||
my_bool free_me;
|
|
||||||
my_bool reconnect;
|
|
||||||
char scramble[20 +1];
|
|
||||||
my_bool auto_local_infile;
|
|
||||||
void *unused2, *unused3, *unused4, *unused5;
|
|
||||||
LIST *stmts;
|
|
||||||
const struct st_mysql_methods *methods;
|
|
||||||
void *thd;
|
|
||||||
my_bool *unbuffered_fetch_owner;
|
|
||||||
char *info_buffer;
|
|
||||||
void *extension;
|
|
||||||
} MYSQL;
|
|
||||||
typedef struct st_mysql_res {
|
|
||||||
my_ulonglong row_count;
|
|
||||||
MYSQL_FIELD *fields;
|
|
||||||
MYSQL_DATA *data;
|
|
||||||
MYSQL_ROWS *data_cursor;
|
|
||||||
unsigned long *lengths;
|
|
||||||
MYSQL *handle;
|
|
||||||
const struct st_mysql_methods *methods;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
MYSQL_ROW current_row;
|
|
||||||
MEM_ROOT field_alloc;
|
|
||||||
unsigned int field_count, current_field;
|
|
||||||
my_bool eof;
|
|
||||||
my_bool unbuffered_fetch_cancelled;
|
|
||||||
void *extension;
|
|
||||||
} MYSQL_RES;
|
|
||||||
typedef struct st_mysql_parameters
|
|
||||||
{
|
|
||||||
unsigned long *p_max_allowed_packet;
|
|
||||||
unsigned long *p_net_buffer_length;
|
|
||||||
void *extension;
|
|
||||||
} MYSQL_PARAMETERS;
|
|
||||||
int mysql_server_init(int argc, char **argv, char **groups);
|
|
||||||
void mysql_server_end(void);
|
|
||||||
MYSQL_PARAMETERS * mysql_get_parameters(void);
|
|
||||||
my_bool mysql_thread_init(void);
|
|
||||||
void mysql_thread_end(void);
|
|
||||||
my_ulonglong mysql_num_rows(MYSQL_RES *res);
|
|
||||||
unsigned int mysql_num_fields(MYSQL_RES *res);
|
|
||||||
my_bool mysql_eof(MYSQL_RES *res);
|
|
||||||
MYSQL_FIELD * mysql_fetch_field_direct(MYSQL_RES *res,
|
|
||||||
unsigned int fieldnr);
|
|
||||||
MYSQL_FIELD * mysql_fetch_fields(MYSQL_RES *res);
|
|
||||||
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *res);
|
|
||||||
MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *res);
|
|
||||||
unsigned int mysql_field_count(MYSQL *mysql);
|
|
||||||
my_ulonglong mysql_affected_rows(MYSQL *mysql);
|
|
||||||
my_ulonglong mysql_insert_id(MYSQL *mysql);
|
|
||||||
unsigned int mysql_errno(MYSQL *mysql);
|
|
||||||
const char * mysql_error(MYSQL *mysql);
|
|
||||||
const char * mysql_sqlstate(MYSQL *mysql);
|
|
||||||
unsigned int mysql_warning_count(MYSQL *mysql);
|
|
||||||
const char * mysql_info(MYSQL *mysql);
|
|
||||||
unsigned long mysql_thread_id(MYSQL *mysql);
|
|
||||||
const char * mysql_character_set_name(MYSQL *mysql);
|
|
||||||
int mysql_set_character_set(MYSQL *mysql, const char *csname);
|
|
||||||
int mysql_set_character_set_start(int *ret, MYSQL *mysql,
|
|
||||||
const char *csname);
|
|
||||||
int mysql_set_character_set_cont(int *ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
MYSQL * mysql_init(MYSQL *mysql);
|
|
||||||
my_bool mysql_ssl_set(MYSQL *mysql, const char *key,
|
|
||||||
const char *cert, const char *ca,
|
|
||||||
const char *capath, const char *cipher);
|
|
||||||
const char * mysql_get_ssl_cipher(MYSQL *mysql);
|
|
||||||
my_bool mysql_change_user(MYSQL *mysql, const char *user,
|
|
||||||
const char *passwd, const char *db);
|
|
||||||
int mysql_change_user_start(my_bool *ret, MYSQL *mysql,
|
|
||||||
const char *user,
|
|
||||||
const char *passwd,
|
|
||||||
const char *db);
|
|
||||||
int mysql_change_user_cont(my_bool *ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
MYSQL * mysql_real_connect(MYSQL *mysql, const char *host,
|
|
||||||
const char *user,
|
|
||||||
const char *passwd,
|
|
||||||
const char *db,
|
|
||||||
unsigned int port,
|
|
||||||
const char *unix_socket,
|
|
||||||
unsigned long clientflag);
|
|
||||||
int mysql_real_connect_start(MYSQL **ret, MYSQL *mysql,
|
|
||||||
const char *host,
|
|
||||||
const char *user,
|
|
||||||
const char *passwd,
|
|
||||||
const char *db,
|
|
||||||
unsigned int port,
|
|
||||||
const char *unix_socket,
|
|
||||||
unsigned long clientflag);
|
|
||||||
int mysql_real_connect_cont(MYSQL **ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
int mysql_select_db(MYSQL *mysql, const char *db);
|
|
||||||
int mysql_select_db_start(int *ret, MYSQL *mysql,
|
|
||||||
const char *db);
|
|
||||||
int mysql_select_db_cont(int *ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
int mysql_query(MYSQL *mysql, const char *q);
|
|
||||||
int mysql_query_start(int *ret, MYSQL *mysql,
|
|
||||||
const char *q);
|
|
||||||
int mysql_query_cont(int *ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
int mysql_send_query(MYSQL *mysql, const char *q,
|
|
||||||
unsigned long length);
|
|
||||||
int mysql_send_query_start(int *ret, MYSQL *mysql,
|
|
||||||
const char *q,
|
|
||||||
unsigned long length);
|
|
||||||
int mysql_send_query_cont(int *ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
int mysql_real_query(MYSQL *mysql, const char *q,
|
|
||||||
unsigned long length);
|
|
||||||
int mysql_real_query_start(int *ret, MYSQL *mysql,
|
|
||||||
const char *q,
|
|
||||||
unsigned long length);
|
|
||||||
int mysql_real_query_cont(int *ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
MYSQL_RES * mysql_store_result(MYSQL *mysql);
|
|
||||||
int mysql_store_result_start(MYSQL_RES **ret, MYSQL *mysql);
|
|
||||||
int mysql_store_result_cont(MYSQL_RES **ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
MYSQL_RES * mysql_use_result(MYSQL *mysql);
|
|
||||||
void mysql_get_character_set_info(MYSQL *mysql,
|
|
||||||
MY_CHARSET_INFO *charset);
|
|
||||||
void
|
|
||||||
mysql_set_local_infile_handler(MYSQL *mysql,
|
|
||||||
int (*local_infile_init)(void **, const char *,
|
|
||||||
void *),
|
|
||||||
int (*local_infile_read)(void *, char *,
|
|
||||||
unsigned int),
|
|
||||||
void (*local_infile_end)(void *),
|
|
||||||
int (*local_infile_error)(void *, char*,
|
|
||||||
unsigned int),
|
|
||||||
void *);
|
|
||||||
void
|
|
||||||
mysql_set_local_infile_default(MYSQL *mysql);
|
|
||||||
int mysql_shutdown(MYSQL *mysql,
|
|
||||||
enum mysql_enum_shutdown_level
|
|
||||||
shutdown_level);
|
|
||||||
int mysql_shutdown_start(int *ret, MYSQL *mysql,
|
|
||||||
enum mysql_enum_shutdown_level
|
|
||||||
shutdown_level);
|
|
||||||
int mysql_shutdown_cont(int *ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
int mysql_dump_debug_info(MYSQL *mysql);
|
|
||||||
int mysql_dump_debug_info_start(int *ret, MYSQL *mysql);
|
|
||||||
int mysql_dump_debug_info_cont(int *ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
int mysql_refresh(MYSQL *mysql,
|
|
||||||
unsigned int refresh_options);
|
|
||||||
int mysql_refresh_start(int *ret, MYSQL *mysql,
|
|
||||||
unsigned int refresh_options);
|
|
||||||
int mysql_refresh_cont(int *ret, MYSQL *mysql, int status);
|
|
||||||
int mysql_kill(MYSQL *mysql,unsigned long pid);
|
|
||||||
int mysql_kill_start(int *ret, MYSQL *mysql,
|
|
||||||
unsigned long pid);
|
|
||||||
int mysql_kill_cont(int *ret, MYSQL *mysql, int status);
|
|
||||||
int mysql_set_server_option(MYSQL *mysql,
|
|
||||||
enum enum_mysql_set_option
|
|
||||||
option);
|
|
||||||
int mysql_set_server_option_start(int *ret, MYSQL *mysql,
|
|
||||||
enum enum_mysql_set_option
|
|
||||||
option);
|
|
||||||
int mysql_set_server_option_cont(int *ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
int mysql_ping(MYSQL *mysql);
|
|
||||||
int mysql_ping_start(int *ret, MYSQL *mysql);
|
|
||||||
int mysql_ping_cont(int *ret, MYSQL *mysql, int status);
|
|
||||||
const char * mysql_stat(MYSQL *mysql);
|
|
||||||
int mysql_stat_start(const char **ret, MYSQL *mysql);
|
|
||||||
int mysql_stat_cont(const char **ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
const char * mysql_get_server_info(MYSQL *mysql);
|
|
||||||
const char * mysql_get_server_name(MYSQL *mysql);
|
|
||||||
const char * mysql_get_client_info(void);
|
|
||||||
unsigned long mysql_get_client_version(void);
|
|
||||||
const char * mysql_get_host_info(MYSQL *mysql);
|
|
||||||
unsigned long mysql_get_server_version(MYSQL *mysql);
|
|
||||||
unsigned int mysql_get_proto_info(MYSQL *mysql);
|
|
||||||
MYSQL_RES * mysql_list_dbs(MYSQL *mysql,const char *wild);
|
|
||||||
int mysql_list_dbs_start(MYSQL_RES **ret, MYSQL *mysql,
|
|
||||||
const char *wild);
|
|
||||||
int mysql_list_dbs_cont(MYSQL_RES **ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
MYSQL_RES * mysql_list_tables(MYSQL *mysql,const char *wild);
|
|
||||||
int mysql_list_tables_start(MYSQL_RES **ret, MYSQL *mysql,
|
|
||||||
const char *wild);
|
|
||||||
int mysql_list_tables_cont(MYSQL_RES **ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
MYSQL_RES * mysql_list_processes(MYSQL *mysql);
|
|
||||||
int mysql_list_processes_start(MYSQL_RES **ret,
|
|
||||||
MYSQL *mysql);
|
|
||||||
int mysql_list_processes_cont(MYSQL_RES **ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
int mysql_options(MYSQL *mysql,enum mysql_option option,
|
|
||||||
const void *arg);
|
|
||||||
int mysql_options4(MYSQL *mysql,enum mysql_option option,
|
|
||||||
const void *arg1, const void *arg2);
|
|
||||||
void mysql_free_result(MYSQL_RES *result);
|
|
||||||
int mysql_free_result_start(MYSQL_RES *result);
|
|
||||||
int mysql_free_result_cont(MYSQL_RES *result, int status);
|
|
||||||
void mysql_data_seek(MYSQL_RES *result,
|
|
||||||
my_ulonglong offset);
|
|
||||||
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result,
|
|
||||||
MYSQL_ROW_OFFSET offset);
|
|
||||||
MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result,
|
|
||||||
MYSQL_FIELD_OFFSET offset);
|
|
||||||
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
|
|
||||||
int mysql_fetch_row_start(MYSQL_ROW *ret,
|
|
||||||
MYSQL_RES *result);
|
|
||||||
int mysql_fetch_row_cont(MYSQL_ROW *ret, MYSQL_RES *result,
|
|
||||||
int status);
|
|
||||||
unsigned long * mysql_fetch_lengths(MYSQL_RES *result);
|
|
||||||
MYSQL_FIELD * mysql_fetch_field(MYSQL_RES *result);
|
|
||||||
MYSQL_RES * mysql_list_fields(MYSQL *mysql, const char *table,
|
|
||||||
const char *wild);
|
|
||||||
int mysql_list_fields_start(MYSQL_RES **ret, MYSQL *mysql,
|
|
||||||
const char *table,
|
|
||||||
const char *wild);
|
|
||||||
int mysql_list_fields_cont(MYSQL_RES **ret, MYSQL *mysql,
|
|
||||||
int status);
|
|
||||||
unsigned long mysql_escape_string(char *to,const char *from,
|
|
||||||
unsigned long from_length);
|
|
||||||
unsigned long mysql_hex_string(char *to,const char *from,
|
|
||||||
unsigned long from_length);
|
|
||||||
unsigned long mysql_real_escape_string(MYSQL *mysql,
|
|
||||||
char *to,const char *from,
|
|
||||||
unsigned long length);
|
|
||||||
void mysql_debug(const char *debug);
|
|
||||||
void myodbc_remove_escape(MYSQL *mysql,char *name);
|
|
||||||
unsigned int mysql_thread_safe(void);
|
|
||||||
my_bool mysql_embedded(void);
|
|
||||||
my_bool mariadb_connection(MYSQL *mysql);
|
|
||||||
my_bool mysql_read_query_result(MYSQL *mysql);
|
|
||||||
int mysql_read_query_result_start(my_bool *ret,
|
|
||||||
MYSQL *mysql);
|
|
||||||
int mysql_read_query_result_cont(my_bool *ret,
|
|
||||||
MYSQL *mysql, int status);
|
|
||||||
enum enum_mysql_stmt_state
|
|
||||||
{
|
|
||||||
MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE,
|
|
||||||
MYSQL_STMT_FETCH_DONE
|
|
||||||
};
|
|
||||||
typedef struct st_mysql_bind
|
|
||||||
{
|
|
||||||
unsigned long *length;
|
|
||||||
my_bool *is_null;
|
|
||||||
void *buffer;
|
|
||||||
my_bool *error;
|
|
||||||
unsigned char *row_ptr;
|
|
||||||
void (*store_param_func)(NET *net, struct st_mysql_bind *param);
|
|
||||||
void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *,
|
|
||||||
unsigned char **row);
|
|
||||||
void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *,
|
|
||||||
unsigned char **row);
|
|
||||||
unsigned long buffer_length;
|
|
||||||
unsigned long offset;
|
|
||||||
unsigned long length_value;
|
|
||||||
unsigned int param_number;
|
|
||||||
unsigned int pack_length;
|
|
||||||
enum enum_field_types buffer_type;
|
|
||||||
my_bool error_value;
|
|
||||||
my_bool is_unsigned;
|
|
||||||
my_bool long_data_used;
|
|
||||||
my_bool is_null_value;
|
|
||||||
void *extension;
|
|
||||||
} MYSQL_BIND;
|
|
||||||
struct st_mysql_stmt_extension;
|
|
||||||
typedef struct st_mysql_stmt
|
|
||||||
{
|
|
||||||
MEM_ROOT mem_root;
|
|
||||||
LIST list;
|
|
||||||
MYSQL *mysql;
|
|
||||||
MYSQL_BIND *params;
|
|
||||||
MYSQL_BIND *bind;
|
|
||||||
MYSQL_FIELD *fields;
|
|
||||||
MYSQL_DATA result;
|
|
||||||
MYSQL_ROWS *data_cursor;
|
|
||||||
int (*read_row_func)(struct st_mysql_stmt *stmt,
|
|
||||||
unsigned char **row);
|
|
||||||
my_ulonglong affected_rows;
|
|
||||||
my_ulonglong insert_id;
|
|
||||||
unsigned long stmt_id;
|
|
||||||
unsigned long flags;
|
|
||||||
unsigned long prefetch_rows;
|
|
||||||
unsigned int server_status;
|
|
||||||
unsigned int last_errno;
|
|
||||||
unsigned int param_count;
|
|
||||||
unsigned int field_count;
|
|
||||||
enum enum_mysql_stmt_state state;
|
|
||||||
char last_error[512];
|
|
||||||
char sqlstate[5 +1];
|
|
||||||
my_bool send_types_to_server;
|
|
||||||
my_bool bind_param_done;
|
|
||||||
unsigned char bind_result_done;
|
|
||||||
my_bool unbuffered_fetch_cancelled;
|
|
||||||
my_bool update_max_length;
|
|
||||||
struct st_mysql_stmt_extension *extension;
|
|
||||||
} MYSQL_STMT;
|
|
||||||
enum enum_stmt_attr_type
|
|
||||||
{
|
|
||||||
STMT_ATTR_UPDATE_MAX_LENGTH,
|
|
||||||
STMT_ATTR_CURSOR_TYPE,
|
|
||||||
STMT_ATTR_PREFETCH_ROWS
|
|
||||||
};
|
|
||||||
MYSQL_STMT * mysql_stmt_init(MYSQL *mysql);
|
|
||||||
int mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query,
|
|
||||||
unsigned long length);
|
|
||||||
int mysql_stmt_prepare_start(int *ret, MYSQL_STMT *stmt,
|
|
||||||
const char *query, unsigned long length);
|
|
||||||
int mysql_stmt_prepare_cont(int *ret, MYSQL_STMT *stmt, int status);
|
|
||||||
int mysql_stmt_execute(MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_execute_start(int *ret, MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_execute_cont(int *ret, MYSQL_STMT *stmt, int status);
|
|
||||||
int mysql_stmt_fetch(MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_fetch_start(int *ret, MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_fetch_cont(int *ret, MYSQL_STMT *stmt, int status);
|
|
||||||
int mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg,
|
|
||||||
unsigned int column,
|
|
||||||
unsigned long offset);
|
|
||||||
int mysql_stmt_store_result(MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_store_result_start(int *ret, MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_store_result_cont(int *ret, MYSQL_STMT *stmt,
|
|
||||||
int status);
|
|
||||||
unsigned long mysql_stmt_param_count(MYSQL_STMT * stmt);
|
|
||||||
my_bool mysql_stmt_attr_set(MYSQL_STMT *stmt,
|
|
||||||
enum enum_stmt_attr_type attr_type,
|
|
||||||
const void *attr);
|
|
||||||
my_bool mysql_stmt_attr_get(MYSQL_STMT *stmt,
|
|
||||||
enum enum_stmt_attr_type attr_type,
|
|
||||||
void *attr);
|
|
||||||
my_bool mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd);
|
|
||||||
my_bool mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd);
|
|
||||||
my_bool mysql_stmt_close(MYSQL_STMT * stmt);
|
|
||||||
int mysql_stmt_close_start(my_bool *ret, MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_close_cont(my_bool *ret, MYSQL_STMT * stmt, int status);
|
|
||||||
my_bool mysql_stmt_reset(MYSQL_STMT * stmt);
|
|
||||||
int mysql_stmt_reset_start(my_bool *ret, MYSQL_STMT * stmt);
|
|
||||||
int mysql_stmt_reset_cont(my_bool *ret, MYSQL_STMT *stmt, int status);
|
|
||||||
my_bool mysql_stmt_free_result(MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_free_result_start(my_bool *ret, MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_free_result_cont(my_bool *ret, MYSQL_STMT *stmt,
|
|
||||||
int status);
|
|
||||||
my_bool mysql_stmt_send_long_data(MYSQL_STMT *stmt,
|
|
||||||
unsigned int param_number,
|
|
||||||
const char *data,
|
|
||||||
unsigned long length);
|
|
||||||
int mysql_stmt_send_long_data_start(my_bool *ret, MYSQL_STMT *stmt,
|
|
||||||
unsigned int param_number,
|
|
||||||
const char *data,
|
|
||||||
unsigned long len);
|
|
||||||
int mysql_stmt_send_long_data_cont(my_bool *ret, MYSQL_STMT *stmt,
|
|
||||||
int status);
|
|
||||||
MYSQL_RES * mysql_stmt_result_metadata(MYSQL_STMT *stmt);
|
|
||||||
MYSQL_RES * mysql_stmt_param_metadata(MYSQL_STMT *stmt);
|
|
||||||
unsigned int mysql_stmt_errno(MYSQL_STMT * stmt);
|
|
||||||
const char * mysql_stmt_error(MYSQL_STMT * stmt);
|
|
||||||
const char * mysql_stmt_sqlstate(MYSQL_STMT * stmt);
|
|
||||||
MYSQL_ROW_OFFSET mysql_stmt_row_seek(MYSQL_STMT *stmt,
|
|
||||||
MYSQL_ROW_OFFSET offset);
|
|
||||||
MYSQL_ROW_OFFSET mysql_stmt_row_tell(MYSQL_STMT *stmt);
|
|
||||||
void mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset);
|
|
||||||
my_ulonglong mysql_stmt_num_rows(MYSQL_STMT *stmt);
|
|
||||||
my_ulonglong mysql_stmt_affected_rows(MYSQL_STMT *stmt);
|
|
||||||
my_ulonglong mysql_stmt_insert_id(MYSQL_STMT *stmt);
|
|
||||||
unsigned int mysql_stmt_field_count(MYSQL_STMT *stmt);
|
|
||||||
my_bool mysql_commit(MYSQL * mysql);
|
|
||||||
int mysql_commit_start(my_bool *ret, MYSQL * mysql);
|
|
||||||
int mysql_commit_cont(my_bool *ret, MYSQL * mysql, int status);
|
|
||||||
my_bool mysql_rollback(MYSQL * mysql);
|
|
||||||
int mysql_rollback_start(my_bool *ret, MYSQL * mysql);
|
|
||||||
int mysql_rollback_cont(my_bool *ret, MYSQL * mysql, int status);
|
|
||||||
my_bool mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
|
|
||||||
int mysql_autocommit_start(my_bool *ret, MYSQL * mysql,
|
|
||||||
my_bool auto_mode);
|
|
||||||
int mysql_autocommit_cont(my_bool *ret, MYSQL * mysql, int status);
|
|
||||||
my_bool mysql_more_results(MYSQL *mysql);
|
|
||||||
int mysql_next_result(MYSQL *mysql);
|
|
||||||
int mysql_next_result_start(int *ret, MYSQL *mysql);
|
|
||||||
int mysql_next_result_cont(int *ret, MYSQL *mysql, int status);
|
|
||||||
int mysql_stmt_next_result(MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_next_result_start(int *ret, MYSQL_STMT *stmt);
|
|
||||||
int mysql_stmt_next_result_cont(int *ret, MYSQL_STMT *stmt, int status);
|
|
||||||
void mysql_close_slow_part(MYSQL *mysql);
|
|
||||||
void mysql_close(MYSQL *sock);
|
|
||||||
int mysql_close_start(MYSQL *sock);
|
|
||||||
int mysql_close_cont(MYSQL *sock, int status);
|
|
||||||
my_socket mysql_get_socket(const MYSQL *mysql);
|
|
||||||
unsigned int mysql_get_timeout_value(const MYSQL *mysql);
|
|
||||||
unsigned int mysql_get_timeout_value_ms(const MYSQL *mysql);
|
|
||||||
unsigned long mysql_net_read_packet(MYSQL *mysql);
|
|
||||||
unsigned long mysql_net_field_length(unsigned char **packet);
|
|
2
mysql-test/main/bad_startup_options.result
Normal file
2
mysql-test/main/bad_startup_options.result
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
FOUND 1 /\[ERROR\] SSL error: Unable to get certificate/ in errorlog.err
|
||||||
|
# restart
|
19
mysql-test/main/bad_startup_options.test
Normal file
19
mysql-test/main/bad_startup_options.test
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
--source include/not_embedded.inc
|
||||||
|
--source include/have_ssl_communication.inc
|
||||||
|
|
||||||
|
--source include/shutdown_mysqld.inc
|
||||||
|
|
||||||
|
# Try to start the server, with bad values for some options.
|
||||||
|
# Make sure, the starts fails, and expected message is in the error log
|
||||||
|
|
||||||
|
--let errorlog=$MYSQL_TMP_DIR/errorlog.err
|
||||||
|
--let SEARCH_FILE=$errorlog
|
||||||
|
|
||||||
|
# Bad ssl-cert
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQLD --defaults-group-suffix=.1 --defaults-file=$MYSQLTEST_VARDIR/my.cnf --ssl-cert=bad --log-error=$errorlog
|
||||||
|
--let SEARCH_PATTERN=\[ERROR\] SSL error: Unable to get certificate
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
--remove_file $SEARCH_FILE
|
||||||
|
|
||||||
|
--source include/start_mysqld.inc
|
@ -4977,6 +4977,15 @@ ERROR HY000: Illegal parameter data type geometry for operation 'is_free_lock'
|
|||||||
SELECT IS_USED_LOCK(POINT(1,1));
|
SELECT IS_USED_LOCK(POINT(1,1));
|
||||||
ERROR HY000: Illegal parameter data type geometry for operation 'is_used_lock'
|
ERROR HY000: Illegal parameter data type geometry for operation 'is_used_lock'
|
||||||
#
|
#
|
||||||
|
# MDEV-26161 crash in Gis_point::calculate_haversine
|
||||||
|
#
|
||||||
|
select st_distance_sphere(x'01030000000400000004000000000000', multipoint(point(124,204)), 10);
|
||||||
|
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||||
|
select st_distance_sphere(x'010300000004000000040000', multipoint(point(124,204)), 10);
|
||||||
|
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||||
|
select st_distance_sphere(x'010300000001000000040000', multipoint(point(124,204)), 10);
|
||||||
|
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||||
|
#
|
||||||
# End of 10.3 tests
|
# End of 10.3 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -3089,6 +3089,15 @@ SELECT IS_FREE_LOCK(POINT(1,1));
|
|||||||
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
|
||||||
SELECT IS_USED_LOCK(POINT(1,1));
|
SELECT IS_USED_LOCK(POINT(1,1));
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-26161 crash in Gis_point::calculate_haversine
|
||||||
|
--echo #
|
||||||
|
--error ER_CANT_CREATE_GEOMETRY_OBJECT
|
||||||
|
select st_distance_sphere(x'01030000000400000004000000000000', multipoint(point(124,204)), 10);
|
||||||
|
--error ER_CANT_CREATE_GEOMETRY_OBJECT
|
||||||
|
select st_distance_sphere(x'010300000004000000040000', multipoint(point(124,204)), 10);
|
||||||
|
--error ER_CANT_CREATE_GEOMETRY_OBJECT
|
||||||
|
select st_distance_sphere(x'010300000001000000040000', multipoint(point(124,204)), 10);
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.3 tests
|
--echo # End of 10.3 tests
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
source include/not_embedded.inc;
|
||||||
#
|
#
|
||||||
# MDEV-6543 Crash if enable 'federatedx' when 'federated' plugin already enabled, and vice-versa
|
# MDEV-6543 Crash if enable 'federatedx' when 'federated' plugin already enabled, and vice-versa
|
||||||
#
|
#
|
||||||
|
@ -2596,56 +2596,58 @@ double Item_func_sphere_distance::spherical_distance_points(Geometry *g1,
|
|||||||
double res= 0.0;
|
double res= 0.0;
|
||||||
// Length for the single point (25 Bytes)
|
// Length for the single point (25 Bytes)
|
||||||
uint32 len= SRID_SIZE + POINT_DATA_SIZE + WKB_HEADER_SIZE;
|
uint32 len= SRID_SIZE + POINT_DATA_SIZE + WKB_HEADER_SIZE;
|
||||||
int error= 0;
|
int err_hv= 0, err_sph= 0;
|
||||||
|
|
||||||
switch (g2->get_class_info()->m_type_id)
|
switch (g2->get_class_info()->m_type_id)
|
||||||
{
|
{
|
||||||
case Geometry::wkb_point:
|
case Geometry::wkb_point:
|
||||||
|
{
|
||||||
|
Gis_point *g2p= static_cast<Gis_point *>(g2);
|
||||||
// Optimization for point-point case
|
// Optimization for point-point case
|
||||||
if (g1->get_class_info()->m_type_id == Geometry::wkb_point)
|
if (g1->get_class_info()->m_type_id == Geometry::wkb_point)
|
||||||
{
|
{
|
||||||
res= static_cast<Gis_point *>(g2)->calculate_haversine(g1, r, &error);
|
res= g2p->calculate_haversine(g1, r, &err_hv);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Optimization for single point in Multipoint
|
// Optimization for single point in Multipoint
|
||||||
if (g1->get_data_size() == len)
|
if (g1->get_data_size() == len)
|
||||||
{
|
{
|
||||||
res= static_cast<Gis_point *>(g2)->calculate_haversine(g1, r, &error);
|
res= g2p->calculate_haversine(g1, r, &err_hv);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// There are multipoints in g1
|
// There are multipoints in g1
|
||||||
// g1 is MultiPoint and calculate MP.sphericaldistance from g2 Point
|
// g1 is MultiPoint and calculate MP.sphericaldistance from g2 Point
|
||||||
if (g1->get_data_size() != GET_SIZE_ERROR)
|
if (g1->get_data_size() != GET_SIZE_ERROR)
|
||||||
static_cast<Gis_point *>(g2)->spherical_distance_multipoints(
|
err_sph= g2p->spherical_distance_multipoints(g1, r, &res, &err_hv);
|
||||||
(Gis_multi_point *)g1, r, &res, &error);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case Geometry::wkb_multipoint:
|
case Geometry::wkb_multipoint:
|
||||||
// Optimization for point-point case
|
// Optimization for point-point case
|
||||||
if (g1->get_class_info()->m_type_id == Geometry::wkb_point)
|
if (g1->get_class_info()->m_type_id == Geometry::wkb_point)
|
||||||
{
|
{
|
||||||
|
Gis_point *g1p= static_cast<Gis_point *>(g1);
|
||||||
// Optimization for single point in Multipoint g2
|
// Optimization for single point in Multipoint g2
|
||||||
if (g2->get_data_size() == len)
|
if (g2->get_data_size() == len)
|
||||||
{
|
{
|
||||||
res= static_cast<Gis_point *>(g1)->calculate_haversine(g2, r, &error);
|
res= g1p->calculate_haversine(g2, r, &err_hv);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (g2->get_data_size() != GET_SIZE_ERROR)
|
if (g2->get_data_size() != GET_SIZE_ERROR)
|
||||||
// g1 is a point (casted to multi_point) and g2 multipoint
|
// g1 is a point (casted to multi_point) and g2 multipoint
|
||||||
static_cast<Gis_point *>(g1)->spherical_distance_multipoints(
|
err_sph= g1p->spherical_distance_multipoints(g2, r, &res, &err_hv);
|
||||||
(Gis_multi_point *)g2, r, &res, &error);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Gis_multi_point *g1mp= static_cast<Gis_multi_point *>(g1);
|
||||||
// Multipoints in g1 and g2 - no optimization
|
// Multipoints in g1 and g2 - no optimization
|
||||||
static_cast<Gis_multi_point *>(g1)->spherical_distance_multipoints(
|
err_sph= g1mp->spherical_distance_multipoints(g2, r, &res, &err_hv);
|
||||||
(Gis_multi_point *)g2, r, &res, &error);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2654,16 +2656,14 @@ double Item_func_sphere_distance::spherical_distance_points(Geometry *g1,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res < 0)
|
if (err_hv == 1)
|
||||||
goto handle_error;
|
|
||||||
|
|
||||||
handle_error:
|
|
||||||
if (error > 0)
|
|
||||||
my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0),
|
my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0),
|
||||||
"Longitude should be [-180,180]", "ST_Distance_Sphere");
|
"Longitude should be [-180,180]", "ST_Distance_Sphere");
|
||||||
else if(error < 0)
|
else if(err_hv < 0)
|
||||||
my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0),
|
my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0),
|
||||||
"Latitude should be [-90,90]", "ST_Distance_Sphere");
|
"Latitude should be [-90,90]", "ST_Distance_Sphere");
|
||||||
|
else if (err_sph || err_hv == 2)
|
||||||
|
my_error(ER_CANT_CREATE_GEOMETRY_OBJECT, MYF(0));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4763,10 +4763,9 @@ static void init_ssl()
|
|||||||
DBUG_PRINT("info",("ssl_acceptor_fd: %p", ssl_acceptor_fd));
|
DBUG_PRINT("info",("ssl_acceptor_fd: %p", ssl_acceptor_fd));
|
||||||
if (!ssl_acceptor_fd)
|
if (!ssl_acceptor_fd)
|
||||||
{
|
{
|
||||||
sql_print_warning("Failed to setup SSL");
|
sql_print_error("Failed to setup SSL");
|
||||||
sql_print_warning("SSL error: %s", sslGetErrString(error));
|
sql_print_error("SSL error: %s", sslGetErrString(error));
|
||||||
opt_use_ssl = 0;
|
unireg_abort(1);
|
||||||
have_ssl= SHOW_OPTION_DISABLED;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ssl_acceptor_stats.init();
|
ssl_acceptor_stats.init();
|
||||||
|
@ -1071,10 +1071,9 @@ double Gis_point::calculate_haversine(const Geometry *g,
|
|||||||
point_temp[point_size-1]= '\0';
|
point_temp[point_size-1]= '\0';
|
||||||
Geometry_buffer gbuff;
|
Geometry_buffer gbuff;
|
||||||
Geometry *gg= Geometry::construct(&gbuff, point_temp, point_size-1);
|
Geometry *gg= Geometry::construct(&gbuff, point_temp, point_size-1);
|
||||||
DBUG_ASSERT(gg);
|
if (!gg || static_cast<Gis_point *>(gg)->get_xy_radian(&x2r, &y2r))
|
||||||
if (static_cast<Gis_point *>(gg)->get_xy_radian(&x2r, &y2r))
|
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(0);
|
*error= 2;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1082,15 +1081,16 @@ double Gis_point::calculate_haversine(const Geometry *g,
|
|||||||
{
|
{
|
||||||
if (static_cast<const Gis_point *>(g)->get_xy_radian(&x2r, &y2r))
|
if (static_cast<const Gis_point *>(g)->get_xy_radian(&x2r, &y2r))
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(0);
|
*error= 2;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this->get_xy_radian(&x1r, &y1r))
|
if (this->get_xy_radian(&x1r, &y1r))
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(0);
|
*error= 2;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
//
|
||||||
// Check boundary conditions: longitude[-180,180]
|
// Check boundary conditions: longitude[-180,180]
|
||||||
if (!((x2r >= -M_PI && x2r <= M_PI) && (x1r >= -M_PI && x1r <= M_PI)))
|
if (!((x2r >= -M_PI && x2r <= M_PI) && (x1r >= -M_PI && x1r <= M_PI)))
|
||||||
{
|
{
|
||||||
@ -1143,15 +1143,20 @@ int Gis_point::spherical_distance_multipoints(Geometry *g, const double r,
|
|||||||
{
|
{
|
||||||
Geometry_buffer buff_temp;
|
Geometry_buffer buff_temp;
|
||||||
Geometry *temp;
|
Geometry *temp;
|
||||||
|
const char *pt_ptr= g->get_data_ptr()+
|
||||||
|
4+WKB_HEADER_SIZE*i + POINT_DATA_SIZE*(i-1);
|
||||||
|
|
||||||
// First 4 bytes are handled already, make sure to create a Point
|
// First 4 bytes are handled already, make sure to create a Point
|
||||||
memset(s + 4, Geometry::wkb_point, 1);
|
memset(s + 4, Geometry::wkb_point, 1);
|
||||||
|
if (g->no_data(pt_ptr, POINT_DATA_SIZE))
|
||||||
|
return 1;
|
||||||
|
|
||||||
memcpy(s + 5, g->get_data_ptr() + 5, 4);
|
memcpy(s + 5, g->get_data_ptr() + 5, 4);
|
||||||
memcpy(s + 4 + WKB_HEADER_SIZE, g->get_data_ptr() + 4 + WKB_HEADER_SIZE*i +\
|
memcpy(s + 4 + WKB_HEADER_SIZE, pt_ptr, POINT_DATA_SIZE);
|
||||||
POINT_DATA_SIZE*(i-1), POINT_DATA_SIZE);
|
|
||||||
s[len-1]= '\0';
|
s[len-1]= '\0';
|
||||||
temp= Geometry::construct(&buff_temp, s, len);
|
temp= Geometry::construct(&buff_temp, s, len);
|
||||||
DBUG_ASSERT(temp);
|
if (!temp)
|
||||||
|
return 1;
|
||||||
temp_res= this->calculate_haversine(temp, r, err);
|
temp_res= this->calculate_haversine(temp, r, err);
|
||||||
if (res > temp_res)
|
if (res > temp_res)
|
||||||
res= temp_res;
|
res= temp_res;
|
||||||
@ -2328,14 +2333,18 @@ int Gis_multi_point::spherical_distance_multipoints(Geometry *g, const double r,
|
|||||||
Geometry *temp;
|
Geometry *temp;
|
||||||
double temp_res= 0.0;
|
double temp_res= 0.0;
|
||||||
char s[len];
|
char s[len];
|
||||||
|
const char *pt_ptr= get_data_ptr()+
|
||||||
|
4+WKB_HEADER_SIZE*i + POINT_DATA_SIZE*(i-1);
|
||||||
// First 4 bytes are handled already, make sure to create a Point
|
// First 4 bytes are handled already, make sure to create a Point
|
||||||
memset(s + 4, Geometry::wkb_point, 1);
|
memset(s + 4, Geometry::wkb_point, 1);
|
||||||
|
if (no_data(pt_ptr, POINT_DATA_SIZE))
|
||||||
|
return 1;
|
||||||
memcpy(s + 5, this->get_data_ptr() + 5, 4);
|
memcpy(s + 5, this->get_data_ptr() + 5, 4);
|
||||||
memcpy(s + 4 + WKB_HEADER_SIZE, this->get_data_ptr() + 4 + WKB_HEADER_SIZE*i +\
|
memcpy(s + 4 + WKB_HEADER_SIZE, pt_ptr, POINT_DATA_SIZE);
|
||||||
POINT_DATA_SIZE*(i-1), POINT_DATA_SIZE);
|
|
||||||
s[len-1]= '\0';
|
s[len-1]= '\0';
|
||||||
temp= Geometry::construct(&buff_temp, s, len);
|
temp= Geometry::construct(&buff_temp, s, len);
|
||||||
DBUG_ASSERT(temp);
|
if (!temp)
|
||||||
|
return 1;
|
||||||
// Optimization for single Multipoint
|
// Optimization for single Multipoint
|
||||||
if (num_of_points2 == 1)
|
if (num_of_points2 == 1)
|
||||||
{
|
{
|
||||||
@ -2347,14 +2356,18 @@ int Gis_multi_point::spherical_distance_multipoints(Geometry *g, const double r,
|
|||||||
Geometry_buffer buff_temp2;
|
Geometry_buffer buff_temp2;
|
||||||
Geometry *temp2;
|
Geometry *temp2;
|
||||||
char s2[len];
|
char s2[len];
|
||||||
|
const char *pt_ptr= g->get_data_ptr()+
|
||||||
|
4+WKB_HEADER_SIZE*j + POINT_DATA_SIZE*(j-1);
|
||||||
// First 4 bytes are handled already, make sure to create a Point
|
// First 4 bytes are handled already, make sure to create a Point
|
||||||
memset(s2 + 4, Geometry::wkb_point, 1);
|
memset(s2 + 4, Geometry::wkb_point, 1);
|
||||||
|
if (g->no_data(pt_ptr, POINT_DATA_SIZE))
|
||||||
|
return 1;
|
||||||
memcpy(s2 + 5, g->get_data_ptr() + 5, 4);
|
memcpy(s2 + 5, g->get_data_ptr() + 5, 4);
|
||||||
memcpy(s2 + 4 + WKB_HEADER_SIZE, g->get_data_ptr() + 4 + WKB_HEADER_SIZE*j +\
|
memcpy(s2 + 4 + WKB_HEADER_SIZE, pt_ptr, POINT_DATA_SIZE);
|
||||||
POINT_DATA_SIZE*(j-1), POINT_DATA_SIZE);
|
|
||||||
s2[len-1]= '\0';
|
s2[len-1]= '\0';
|
||||||
temp2= Geometry::construct(&buff_temp2, s2, len);
|
temp2= Geometry::construct(&buff_temp2, s2, len);
|
||||||
DBUG_ASSERT(temp2);
|
if (!temp2)
|
||||||
|
return 1;
|
||||||
temp_res= static_cast<Gis_point *>(temp)->calculate_haversine(temp2, r, err);
|
temp_res= static_cast<Gis_point *>(temp)->calculate_haversine(temp2, r, err);
|
||||||
if (res > temp_res)
|
if (res > temp_res)
|
||||||
res= temp_res;
|
res= temp_res;
|
||||||
|
@ -354,6 +354,7 @@ protected:
|
|||||||
const char *get_mbr_for_points(MBR *mbr, const char *data, uint offset)
|
const char *get_mbr_for_points(MBR *mbr, const char *data, uint offset)
|
||||||
const;
|
const;
|
||||||
|
|
||||||
|
public:
|
||||||
/**
|
/**
|
||||||
Check if there're enough data remaining as requested
|
Check if there're enough data remaining as requested
|
||||||
|
|
||||||
@ -384,6 +385,7 @@ protected:
|
|||||||
(expected_points > ((m_data_end - data) /
|
(expected_points > ((m_data_end - data) /
|
||||||
(POINT_DATA_SIZE + extra_point_space))));
|
(POINT_DATA_SIZE + extra_point_space))));
|
||||||
}
|
}
|
||||||
|
protected:
|
||||||
const char *m_data;
|
const char *m_data;
|
||||||
const char *m_data_end;
|
const char *m_data_end;
|
||||||
};
|
};
|
||||||
|
@ -6108,10 +6108,11 @@ opt_part_option:
|
|||||||
|
|
||||||
opt_versioning_rotation:
|
opt_versioning_rotation:
|
||||||
/* empty */ {}
|
/* empty */ {}
|
||||||
| INTERVAL_SYM expr interval opt_versioning_interval_start
|
| { Lex->clause_that_disallows_subselect= "INTERVAL"; }
|
||||||
|
INTERVAL_SYM expr interval opt_versioning_interval_start
|
||||||
{
|
{
|
||||||
partition_info *part_info= Lex->part_info;
|
partition_info *part_info= Lex->part_info;
|
||||||
if (unlikely(part_info->vers_set_interval(thd, $2, $3, $4)))
|
if (unlikely(part_info->vers_set_interval(thd, $3, $4, $5)))
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| LIMIT ulonglong_num
|
| LIMIT ulonglong_num
|
||||||
|
@ -3571,14 +3571,14 @@ char *bson_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
|||||||
if (!CheckMemory(g, initid, args, 2, false, false, true)) {
|
if (!CheckMemory(g, initid, args, 2, false, false, true)) {
|
||||||
JTYP type;
|
JTYP type;
|
||||||
BJNX bnx(g);
|
BJNX bnx(g);
|
||||||
PBVAL jvp, top = NULL;
|
PBVAL jvp = NULL, top = NULL;
|
||||||
PBVAL jsp[2] = {NULL, NULL};
|
PBVAL jsp[2] = {NULL, NULL};
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
jvp = bnx.MakeValue(args, i, true);
|
jvp = bnx.MakeValue(args, i, true);
|
||||||
|
|
||||||
if (i) {
|
if (i) {
|
||||||
if (jvp->Type != type) {
|
if (jvp && (jvp->Type != type)) {
|
||||||
PUSH_WARNING("Argument types mismatch");
|
PUSH_WARNING("Argument types mismatch");
|
||||||
goto fin;
|
goto fin;
|
||||||
} // endif type
|
} // endif type
|
||||||
@ -5722,14 +5722,14 @@ char *bbin_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
|||||||
if (!CheckMemory(g, initid, args, 2, false, false, true)) {
|
if (!CheckMemory(g, initid, args, 2, false, false, true)) {
|
||||||
JTYP type;
|
JTYP type;
|
||||||
BJNX bnx(g);
|
BJNX bnx(g);
|
||||||
PBVAL jvp, top = NULL;
|
PBVAL jvp = NULL, top = NULL;
|
||||||
PBVAL jsp[2] = {NULL, NULL};
|
PBVAL jsp[2] = {NULL, NULL};
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
if (i) {
|
if (i) {
|
||||||
jvp = bnx.MakeValue(args, i, true);
|
jvp = bnx.MakeValue(args, i, true);
|
||||||
|
|
||||||
if (jvp->Type != type) {
|
if (jvp && (jvp->Type != type)) {
|
||||||
PUSH_WARNING("Argument types mismatch");
|
PUSH_WARNING("Argument types mismatch");
|
||||||
goto fin;
|
goto fin;
|
||||||
} // endif type
|
} // endif type
|
||||||
|
@ -244,7 +244,7 @@ PQRYRES DBFColumns(PGLOBAL g, PCSZ dp, PCSZ fn, PTOS topt, bool info)
|
|||||||
int rc, type, len, field, fields;
|
int rc, type, len, field, fields;
|
||||||
bool bad, mul;
|
bool bad, mul;
|
||||||
PCSZ target, pwd;
|
PCSZ target, pwd;
|
||||||
DBFHEADER mainhead, *hp;
|
DBFHEADER mainhead, *hp = NULL;
|
||||||
DESCRIPTOR thisfield, *tfp;
|
DESCRIPTOR thisfield, *tfp;
|
||||||
FILE *infile = NULL;
|
FILE *infile = NULL;
|
||||||
UNZIPUTL *zutp = NULL;
|
UNZIPUTL *zutp = NULL;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
SET(FEDERATEDX_PLUGIN_STATIC "federatedx")
|
SET(FEDERATEDX_PLUGIN_STATIC "federatedx")
|
||||||
SET(FEDERATEDX_PLUGIN_DYNAMIC "ha_federatedx")
|
SET(FEDERATEDX_PLUGIN_DYNAMIC "ha_federatedx")
|
||||||
SET(FEDERATEDX_SOURCES ha_federatedx.cc federatedx_txn.cc federatedx_io.cc federatedx_io_null.cc federatedx_io_mysql.cc)
|
SET(FEDERATEDX_SOURCES ha_federatedx.cc federatedx_txn.cc federatedx_io.cc federatedx_io_null.cc federatedx_io_mysql.cc)
|
||||||
MYSQL_ADD_PLUGIN(federatedx ${FEDERATEDX_SOURCES} STORAGE_ENGINE)
|
MYSQL_ADD_PLUGIN(federatedx ${FEDERATEDX_SOURCES} STORAGE_ENGINE
|
||||||
|
RECOMPILE_FOR_EMBEDDED)
|
||||||
|
@ -31,6 +31,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include "sql_priv.h"
|
#include "sql_priv.h"
|
||||||
#include <mysqld_error.h>
|
#include <mysqld_error.h>
|
||||||
|
#include <mysql.h>
|
||||||
|
|
||||||
#include "ha_federatedx.h"
|
#include "ha_federatedx.h"
|
||||||
|
|
||||||
|
@ -314,6 +314,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define MYSQL_SERVER 1
|
#define MYSQL_SERVER 1
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <mysql/plugin.h>
|
#include <mysql/plugin.h>
|
||||||
|
#include <mysql.h>
|
||||||
#include "ha_federatedx.h"
|
#include "ha_federatedx.h"
|
||||||
#include "sql_servers.h"
|
#include "sql_servers.h"
|
||||||
#include "sql_analyse.h" // append_escaped()
|
#include "sql_analyse.h" // append_escaped()
|
||||||
|
@ -188,7 +188,7 @@ ADD_DEPENDENCIES(rocksdb_aux_lib GenError)
|
|||||||
|
|
||||||
# MARIAROCKS-TODO: how to properly depend on -lrt ?
|
# MARIAROCKS-TODO: how to properly depend on -lrt ?
|
||||||
TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY})
|
TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY})
|
||||||
if (UNIX AND NOT APPLE)
|
if (UNIX AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
|
||||||
TARGET_LINK_LIBRARIES(rocksdb_aux_lib -lrt)
|
TARGET_LINK_LIBRARIES(rocksdb_aux_lib -lrt)
|
||||||
endif()
|
endif()
|
||||||
TARGET_LINK_LIBRARIES(rocksdb_aux_lib ${ATOMIC_EXTRA_LIBS})
|
TARGET_LINK_LIBRARIES(rocksdb_aux_lib ${ATOMIC_EXTRA_LIBS})
|
||||||
@ -239,7 +239,7 @@ ENDIF()
|
|||||||
# ADD_SUBDIRECTORY(unittest)
|
# ADD_SUBDIRECTORY(unittest)
|
||||||
#ENDIF()
|
#ENDIF()
|
||||||
|
|
||||||
if (UNIX AND NOT APPLE)
|
if (UNIX AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
|
||||||
SET(rocksdb_static_libs ${rocksdb_static_libs} "-lrt")
|
SET(rocksdb_static_libs ${rocksdb_static_libs} "-lrt")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -260,7 +260,7 @@ Rdb_cf_manager cf_manager;
|
|||||||
Rdb_ddl_manager ddl_manager;
|
Rdb_ddl_manager ddl_manager;
|
||||||
Rdb_binlog_manager binlog_manager;
|
Rdb_binlog_manager binlog_manager;
|
||||||
|
|
||||||
#if !defined(_WIN32) && !defined(__APPLE__)
|
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__OpenBSD__)
|
||||||
Rdb_io_watchdog *io_watchdog = nullptr;
|
Rdb_io_watchdog *io_watchdog = nullptr;
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
@ -844,7 +844,7 @@ static void rocksdb_set_io_write_timeout(
|
|||||||
void *const var_ptr MY_ATTRIBUTE((__unused__)), const void *const save) {
|
void *const var_ptr MY_ATTRIBUTE((__unused__)), const void *const save) {
|
||||||
DBUG_ASSERT(save != nullptr);
|
DBUG_ASSERT(save != nullptr);
|
||||||
DBUG_ASSERT(rdb != nullptr);
|
DBUG_ASSERT(rdb != nullptr);
|
||||||
#if !defined(_WIN32) && !defined(__APPLE__)
|
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__OpenBSD__)
|
||||||
DBUG_ASSERT(io_watchdog != nullptr);
|
DBUG_ASSERT(io_watchdog != nullptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -853,7 +853,7 @@ static void rocksdb_set_io_write_timeout(
|
|||||||
const uint32_t new_val = *static_cast<const uint32_t *>(save);
|
const uint32_t new_val = *static_cast<const uint32_t *>(save);
|
||||||
|
|
||||||
rocksdb_io_write_timeout_secs = new_val;
|
rocksdb_io_write_timeout_secs = new_val;
|
||||||
#if !defined(_WIN32) && !defined(__APPLE__)
|
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__OpenBSD__)
|
||||||
io_watchdog->reset_timeout(rocksdb_io_write_timeout_secs);
|
io_watchdog->reset_timeout(rocksdb_io_write_timeout_secs);
|
||||||
#endif
|
#endif
|
||||||
RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex);
|
RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex);
|
||||||
@ -5768,7 +5768,7 @@ static int rocksdb_init_func(void *const p) {
|
|||||||
directories.push_back(myrocks::rocksdb_wal_dir);
|
directories.push_back(myrocks::rocksdb_wal_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(_WIN32) && !defined(__APPLE__)
|
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__OpenBSD__)
|
||||||
io_watchdog = new Rdb_io_watchdog(std::move(directories));
|
io_watchdog = new Rdb_io_watchdog(std::move(directories));
|
||||||
io_watchdog->reset_timeout(rocksdb_io_write_timeout_secs);
|
io_watchdog->reset_timeout(rocksdb_io_write_timeout_secs);
|
||||||
#endif
|
#endif
|
||||||
@ -5875,7 +5875,7 @@ static int rocksdb_done_func(void *const p) {
|
|||||||
delete commit_latency_stats;
|
delete commit_latency_stats;
|
||||||
commit_latency_stats = nullptr;
|
commit_latency_stats = nullptr;
|
||||||
|
|
||||||
#if !defined(_WIN32) && !defined(__APPLE__)
|
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__OpenBSD__)
|
||||||
delete io_watchdog;
|
delete io_watchdog;
|
||||||
io_watchdog = nullptr;
|
io_watchdog = nullptr;
|
||||||
#endif
|
#endif
|
||||||
|
@ -19,4 +19,4 @@ IF(MSVC)
|
|||||||
ENDIF(MSVC)
|
ENDIF(MSVC)
|
||||||
|
|
||||||
SET(SPHINX_SOURCES ha_sphinx.cc snippets_udf.cc)
|
SET(SPHINX_SOURCES ha_sphinx.cc snippets_udf.cc)
|
||||||
MYSQL_ADD_PLUGIN(sphinx ${SPHINX_SOURCES} STORAGE_ENGINE)
|
MYSQL_ADD_PLUGIN(sphinx ${SPHINX_SOURCES} STORAGE_ENGINE RECOMPILE_FOR_EMBEDDED)
|
||||||
|
@ -97,7 +97,7 @@ sslGetErrString(enum enum_ssl_init_error e)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
vio_set_cert_stuff(SSL_CTX *ctx, const char *cert_file, const char *key_file,
|
vio_set_cert_stuff(SSL_CTX *ctx, const char *cert_file, const char *key_file,
|
||||||
enum enum_ssl_init_error* error)
|
my_bool is_client, enum enum_ssl_init_error* error)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("vio_set_cert_stuff");
|
DBUG_ENTER("vio_set_cert_stuff");
|
||||||
DBUG_PRINT("enter", ("ctx: %p cert_file: %s key_file: %s",
|
DBUG_PRINT("enter", ("ctx: %p cert_file: %s key_file: %s",
|
||||||
@ -134,10 +134,10 @@ vio_set_cert_stuff(SSL_CTX *ctx, const char *cert_file, const char *key_file,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If we are using DSA, we can copy the parameters from the private key
|
If certificate is used check if private key matches.
|
||||||
Now we know that a key and cert have been set against the SSL context
|
Note, that server side has to use certificate.
|
||||||
*/
|
*/
|
||||||
if (cert_file && !SSL_CTX_check_private_key(ctx))
|
if ((cert_file != NULL || !is_client) && !SSL_CTX_check_private_key(ctx))
|
||||||
{
|
{
|
||||||
*error= SSL_INITERR_NOMATCH;
|
*error= SSL_INITERR_NOMATCH;
|
||||||
DBUG_PRINT("error", ("%s",sslGetErrString(*error)));
|
DBUG_PRINT("error", ("%s",sslGetErrString(*error)));
|
||||||
@ -352,7 +352,8 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vio_set_cert_stuff(ssl_fd->ssl_context, cert_file, key_file, error))
|
if (vio_set_cert_stuff(ssl_fd->ssl_context, cert_file, key_file,
|
||||||
|
is_client_method, error))
|
||||||
{
|
{
|
||||||
DBUG_PRINT("error", ("vio_set_cert_stuff failed"));
|
DBUG_PRINT("error", ("vio_set_cert_stuff failed"));
|
||||||
goto err2;
|
goto err2;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user