mirror of
https://github.com/MariaDB/server.git
synced 2025-07-05 12:42:17 +03:00
wl#2936 - fixing problems
This commit is contained in:
@ -632,8 +632,8 @@ struct st_mysql_value
|
|||||||
{
|
{
|
||||||
int (*value_type)(struct st_mysql_value *);
|
int (*value_type)(struct st_mysql_value *);
|
||||||
const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
|
const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
|
||||||
int (*val_real)(struct st_mysql_value *, void *realbuf, int realsize);
|
int (*val_real)(struct st_mysql_value *, double *realbuf);
|
||||||
int (*val_int)(struct st_mysql_value *, void *intbuf, int intsize);
|
int (*val_int)(struct st_mysql_value *, long long *intbuf);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -651,8 +651,8 @@ long long thd_test_options(const MYSQL_THD thd, long long test_options);
|
|||||||
int thd_sql_command(const MYSQL_THD thd);
|
int thd_sql_command(const MYSQL_THD thd);
|
||||||
const char *thd_proc_info(MYSQL_THD thd, const char *info);
|
const char *thd_proc_info(MYSQL_THD thd, const char *info);
|
||||||
void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton);
|
void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton);
|
||||||
char *thd_security_context(MYSQL_THD thd, char *buffer, int length,
|
char *thd_security_context(MYSQL_THD thd, char *buffer, unsigned int length,
|
||||||
int max_query_len);
|
unsigned int max_query_len);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -2930,8 +2930,8 @@ sub install_db ($$) {
|
|||||||
mtr_add_arg($args, "--skip-grant-tables");
|
mtr_add_arg($args, "--skip-grant-tables");
|
||||||
mtr_add_arg($args, "--basedir=%s", $path_my_basedir);
|
mtr_add_arg($args, "--basedir=%s", $path_my_basedir);
|
||||||
mtr_add_arg($args, "--datadir=%s", $data_dir);
|
mtr_add_arg($args, "--datadir=%s", $data_dir);
|
||||||
mtr_add_arg($args, "--skip-innodb");
|
mtr_add_arg($args, "--loose-skip-innodb");
|
||||||
mtr_add_arg($args, "--skip-ndbcluster");
|
mtr_add_arg($args, "--loose-skip-ndbcluster");
|
||||||
mtr_add_arg($args, "--tmpdir=.");
|
mtr_add_arg($args, "--tmpdir=.");
|
||||||
mtr_add_arg($args, "--core-file");
|
mtr_add_arg($args, "--core-file");
|
||||||
|
|
||||||
@ -3037,8 +3037,8 @@ character-sets-dir = $path_charsetsdir
|
|||||||
basedir = $path_my_basedir
|
basedir = $path_my_basedir
|
||||||
server_id = $server_id
|
server_id = $server_id
|
||||||
skip-stack-trace
|
skip-stack-trace
|
||||||
skip-innodb
|
loose-skip-innodb
|
||||||
skip-ndbcluster
|
loose-skip-ndbcluster
|
||||||
EOF
|
EOF
|
||||||
;
|
;
|
||||||
if ( $mysql_version_id < 50100 )
|
if ( $mysql_version_id < 50100 )
|
||||||
@ -3676,7 +3676,7 @@ sub mysqld_arguments ($$$$$) {
|
|||||||
if ( $opt_skip_ndbcluster ||
|
if ( $opt_skip_ndbcluster ||
|
||||||
!$cluster->{'pid'})
|
!$cluster->{'pid'})
|
||||||
{
|
{
|
||||||
mtr_add_arg($args, "%s--skip-ndbcluster", $prefix);
|
mtr_add_arg($args, "%s--loose-skip-ndbcluster", $prefix);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3731,7 +3731,7 @@ sub mysqld_arguments ($$$$$) {
|
|||||||
$slave->[$idx]->{'port'});
|
$slave->[$idx]->{'port'});
|
||||||
mtr_add_arg($args, "%s--report-user=root", $prefix);
|
mtr_add_arg($args, "%s--report-user=root", $prefix);
|
||||||
mtr_add_arg($args, "%s--skip-innodb", $prefix);
|
mtr_add_arg($args, "%s--skip-innodb", $prefix);
|
||||||
mtr_add_arg($args, "%s--skip-ndbcluster", $prefix);
|
mtr_add_arg($args, "%s--loose-skip-ndbcluster", $prefix);
|
||||||
mtr_add_arg($args, "%s--skip-slave-start", $prefix);
|
mtr_add_arg($args, "%s--skip-slave-start", $prefix);
|
||||||
|
|
||||||
# Directory where slaves find the dumps generated by "load data"
|
# Directory where slaves find the dumps generated by "load data"
|
||||||
@ -3767,7 +3767,7 @@ sub mysqld_arguments ($$$$$) {
|
|||||||
$slave->[$idx]->{'cluster'} == -1 ||
|
$slave->[$idx]->{'cluster'} == -1 ||
|
||||||
!$clusters->[$slave->[$idx]->{'cluster'}]->{'pid'} )
|
!$clusters->[$slave->[$idx]->{'cluster'}]->{'pid'} )
|
||||||
{
|
{
|
||||||
mtr_add_arg($args, "%s--skip-ndbcluster", $prefix);
|
mtr_add_arg($args, "%s--loose-skip-ndbcluster", $prefix);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -5,6 +5,7 @@ Variable_name Value
|
|||||||
log ON
|
log ON
|
||||||
log_bin OFF
|
log_bin OFF
|
||||||
log_bin_trust_function_creators ON
|
log_bin_trust_function_creators ON
|
||||||
|
log_bin_trust_routine_creators ON
|
||||||
log_error
|
log_error
|
||||||
log_output TABLE
|
log_output TABLE
|
||||||
log_queries_not_using_indexes OFF
|
log_queries_not_using_indexes OFF
|
||||||
@ -17,6 +18,7 @@ Variable_name Value
|
|||||||
log ON
|
log ON
|
||||||
log_bin OFF
|
log_bin OFF
|
||||||
log_bin_trust_function_creators ON
|
log_bin_trust_function_creators ON
|
||||||
|
log_bin_trust_routine_creators ON
|
||||||
log_error
|
log_error
|
||||||
log_output TABLE
|
log_output TABLE
|
||||||
log_queries_not_using_indexes OFF
|
log_queries_not_using_indexes OFF
|
||||||
|
@ -20,8 +20,8 @@ character-sets-dir VALUE
|
|||||||
basedir VALUE
|
basedir VALUE
|
||||||
server_id VALUE
|
server_id VALUE
|
||||||
skip-stack-trace VALUE
|
skip-stack-trace VALUE
|
||||||
skip-plugin-innodb VALUE
|
loose-skip-innodb VALUE
|
||||||
skip-plugin-ndbcluster VALUE
|
loose-skip-ndbcluster VALUE
|
||||||
log-output VALUE
|
log-output VALUE
|
||||||
SHOW INSTANCE OPTIONS mysqld2;
|
SHOW INSTANCE OPTIONS mysqld2;
|
||||||
option_name value
|
option_name value
|
||||||
@ -38,8 +38,8 @@ character-sets-dir VALUE
|
|||||||
basedir VALUE
|
basedir VALUE
|
||||||
server_id VALUE
|
server_id VALUE
|
||||||
skip-stack-trace VALUE
|
skip-stack-trace VALUE
|
||||||
skip-plugin-innodb VALUE
|
loose-skip-innodb VALUE
|
||||||
skip-plugin-ndbcluster VALUE
|
loose-skip-ndbcluster VALUE
|
||||||
nonguarded VALUE
|
nonguarded VALUE
|
||||||
log-output VALUE
|
log-output VALUE
|
||||||
START INSTANCE mysqld2;
|
START INSTANCE mysqld2;
|
||||||
|
@ -97,18 +97,18 @@ void my_getopt_register_get_addr(gptr* (*func_addr)(const char *, uint,
|
|||||||
getopt_get_addr= func_addr;
|
getopt_get_addr= func_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int handle_options(int *argc, char ***argv,
|
int handle_options(int *argc, char ***argv,
|
||||||
const struct my_option *longopts,
|
const struct my_option *longopts,
|
||||||
my_get_one_option get_one_option)
|
my_get_one_option get_one_option)
|
||||||
{
|
{
|
||||||
uint opt_found, argvpos= 0, length, i;
|
uint opt_found, argvpos= 0, length;
|
||||||
my_bool end_of_options= 0, must_be_var, set_maximum_value,
|
my_bool end_of_options= 0, must_be_var, set_maximum_value,
|
||||||
option_is_loose;
|
option_is_loose;
|
||||||
char **pos, **pos_end, *optend, *prev_found,
|
char **pos, **pos_end, *optend, *prev_found,
|
||||||
*opt_str, key_name[FN_REFLEN];
|
*opt_str, key_name[FN_REFLEN];
|
||||||
const struct my_option *optp;
|
const struct my_option *optp;
|
||||||
gptr *value;
|
gptr *value;
|
||||||
int error;
|
int error, i;
|
||||||
|
|
||||||
LINT_INIT(opt_found);
|
LINT_INIT(opt_found);
|
||||||
(*argc)--; /* Skip the program name */
|
(*argc)--; /* Skip the program name */
|
||||||
@ -224,12 +224,11 @@ int handle_options(int *argc, char ***argv,
|
|||||||
/*
|
/*
|
||||||
We were called with a special prefix, we can reuse opt_found
|
We were called with a special prefix, we can reuse opt_found
|
||||||
*/
|
*/
|
||||||
opt_str+= (special_opt_prefix_lengths[i] + 1);
|
opt_str+= special_opt_prefix_lengths[i] + 1;
|
||||||
|
length-= special_opt_prefix_lengths[i] + 1;
|
||||||
if (i == OPT_LOOSE)
|
if (i == OPT_LOOSE)
|
||||||
option_is_loose= 1;
|
option_is_loose= 1;
|
||||||
if ((opt_found= findopt(opt_str, length -
|
if ((opt_found= findopt(opt_str, length, &optp, &prev_found)))
|
||||||
(special_opt_prefix_lengths[i] + 1),
|
|
||||||
&optp, &prev_found)))
|
|
||||||
{
|
{
|
||||||
if (opt_found > 1)
|
if (opt_found > 1)
|
||||||
{
|
{
|
||||||
@ -253,7 +252,7 @@ int handle_options(int *argc, char ***argv,
|
|||||||
break;
|
break;
|
||||||
case OPT_ENABLE:
|
case OPT_ENABLE:
|
||||||
optend= (optend && *optend == '0' && !(*(optend + 1))) ?
|
optend= (optend && *optend == '0' && !(*(optend + 1))) ?
|
||||||
disabled_my_option : (char*) "1";
|
disabled_my_option : (char*) "1";
|
||||||
break;
|
break;
|
||||||
case OPT_MAXIMUM:
|
case OPT_MAXIMUM:
|
||||||
set_maximum_value= 1;
|
set_maximum_value= 1;
|
||||||
@ -262,6 +261,7 @@ int handle_options(int *argc, char ***argv,
|
|||||||
}
|
}
|
||||||
break; /* break from the inner loop, main loop continues */
|
break; /* break from the inner loop, main loop continues */
|
||||||
}
|
}
|
||||||
|
i= -1; /* restart the loop */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ event_queue_element_compare_q(void *vptr, byte* a, byte *b)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Event_queue::Event_queue()
|
Event_queue::Event_queue()
|
||||||
:mutex_last_unlocked_at_line(0), mutex_last_locked_at_line(0),
|
:mutex_last_locked_at_line(0), mutex_last_unlocked_at_line(0),
|
||||||
mutex_last_attempted_lock_at_line(0),
|
mutex_last_attempted_lock_at_line(0),
|
||||||
mutex_queue_data_locked(FALSE), mutex_queue_data_attempting_lock(FALSE)
|
mutex_queue_data_locked(FALSE), mutex_queue_data_attempting_lock(FALSE)
|
||||||
{
|
{
|
||||||
|
@ -1508,6 +1508,7 @@ void **handler::ha_data(void) const
|
|||||||
|
|
||||||
THD *handler::ha_thd(void) const
|
THD *handler::ha_thd(void) const
|
||||||
{
|
{
|
||||||
|
DBUG_ASSERT(!table || !table->in_use || table->in_use == current_thd);
|
||||||
return (table && table->in_use) ? table->in_use : current_thd;
|
return (table && table->in_use) ? table->in_use : current_thd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1516,6 +1516,10 @@ public:
|
|||||||
|
|
||||||
/* lock_count() can be more than one if the table is a MERGE */
|
/* lock_count() can be more than one if the table is a MERGE */
|
||||||
virtual uint lock_count(void) const { return 1; }
|
virtual uint lock_count(void) const { return 1; }
|
||||||
|
/*
|
||||||
|
NOTE that one can NOT rely on table->in_use in store_lock(). It may
|
||||||
|
refer to a different thread if called from mysql_lock_abort_for_thread().
|
||||||
|
*/
|
||||||
virtual THR_LOCK_DATA **store_lock(THD *thd,
|
virtual THR_LOCK_DATA **store_lock(THD *thd,
|
||||||
THR_LOCK_DATA **to,
|
THR_LOCK_DATA **to,
|
||||||
enum thr_lock_type lock_type)=0;
|
enum thr_lock_type lock_type)=0;
|
||||||
|
@ -4684,197 +4684,197 @@ struct Native_func_registry
|
|||||||
|
|
||||||
static Native_func_registry func_array[] =
|
static Native_func_registry func_array[] =
|
||||||
{
|
{
|
||||||
{ C_STRING_WITH_LEN("ABS"), BUILDER(Create_func_abs)},
|
{ { STRING_WITH_LEN("ABS") }, BUILDER(Create_func_abs)},
|
||||||
{ C_STRING_WITH_LEN("ACOS"), BUILDER(Create_func_acos)},
|
{ { STRING_WITH_LEN("ACOS") }, BUILDER(Create_func_acos)},
|
||||||
{ C_STRING_WITH_LEN("ADDTIME"), BUILDER(Create_func_addtime)},
|
{ { STRING_WITH_LEN("ADDTIME") }, BUILDER(Create_func_addtime)},
|
||||||
{ C_STRING_WITH_LEN("AES_DECRYPT"), BUILDER(Create_func_aes_decrypt)},
|
{ { STRING_WITH_LEN("AES_DECRYPT") }, BUILDER(Create_func_aes_decrypt)},
|
||||||
{ C_STRING_WITH_LEN("AES_ENCRYPT"), BUILDER(Create_func_aes_encrypt)},
|
{ { STRING_WITH_LEN("AES_ENCRYPT") }, BUILDER(Create_func_aes_encrypt)},
|
||||||
{ C_STRING_WITH_LEN("AREA"), GEOM_BUILDER(Create_func_area)},
|
{ { STRING_WITH_LEN("AREA") }, GEOM_BUILDER(Create_func_area)},
|
||||||
{ C_STRING_WITH_LEN("ASBINARY"), GEOM_BUILDER(Create_func_as_wkb)},
|
{ { STRING_WITH_LEN("ASBINARY") }, GEOM_BUILDER(Create_func_as_wkb)},
|
||||||
{ C_STRING_WITH_LEN("ASIN"), BUILDER(Create_func_asin)},
|
{ { STRING_WITH_LEN("ASIN") }, BUILDER(Create_func_asin)},
|
||||||
{ C_STRING_WITH_LEN("ASTEXT"), GEOM_BUILDER(Create_func_as_wkt)},
|
{ { STRING_WITH_LEN("ASTEXT") }, GEOM_BUILDER(Create_func_as_wkt)},
|
||||||
{ C_STRING_WITH_LEN("ASWKB"), GEOM_BUILDER(Create_func_as_wkb)},
|
{ { STRING_WITH_LEN("ASWKB") }, GEOM_BUILDER(Create_func_as_wkb)},
|
||||||
{ C_STRING_WITH_LEN("ASWKT"), GEOM_BUILDER(Create_func_as_wkt)},
|
{ { STRING_WITH_LEN("ASWKT") }, GEOM_BUILDER(Create_func_as_wkt)},
|
||||||
{ C_STRING_WITH_LEN("ATAN"), BUILDER(Create_func_atan)},
|
{ { STRING_WITH_LEN("ATAN") }, BUILDER(Create_func_atan)},
|
||||||
{ C_STRING_WITH_LEN("ATAN2"), BUILDER(Create_func_atan)},
|
{ { STRING_WITH_LEN("ATAN2") }, BUILDER(Create_func_atan)},
|
||||||
{ C_STRING_WITH_LEN("BENCHMARK"), BUILDER(Create_func_benchmark)},
|
{ { STRING_WITH_LEN("BENCHMARK") }, BUILDER(Create_func_benchmark)},
|
||||||
{ C_STRING_WITH_LEN("BIN"), BUILDER(Create_func_bin)},
|
{ { STRING_WITH_LEN("BIN") }, BUILDER(Create_func_bin)},
|
||||||
{ C_STRING_WITH_LEN("BIT_COUNT"), BUILDER(Create_func_bit_count)},
|
{ { STRING_WITH_LEN("BIT_COUNT") }, BUILDER(Create_func_bit_count)},
|
||||||
{ C_STRING_WITH_LEN("BIT_LENGTH"), BUILDER(Create_func_bit_length)},
|
{ { STRING_WITH_LEN("BIT_LENGTH") }, BUILDER(Create_func_bit_length)},
|
||||||
{ C_STRING_WITH_LEN("CEIL"), BUILDER(Create_func_ceiling)},
|
{ { STRING_WITH_LEN("CEIL") }, BUILDER(Create_func_ceiling)},
|
||||||
{ C_STRING_WITH_LEN("CEILING"), BUILDER(Create_func_ceiling)},
|
{ { STRING_WITH_LEN("CEILING") }, BUILDER(Create_func_ceiling)},
|
||||||
{ C_STRING_WITH_LEN("CENTROID"), GEOM_BUILDER(Create_func_centroid)},
|
{ { STRING_WITH_LEN("CENTROID") }, GEOM_BUILDER(Create_func_centroid)},
|
||||||
{ C_STRING_WITH_LEN("CHARACTER_LENGTH"), BUILDER(Create_func_char_length)},
|
{ { STRING_WITH_LEN("CHARACTER_LENGTH") }, BUILDER(Create_func_char_length)},
|
||||||
{ C_STRING_WITH_LEN("CHAR_LENGTH"), BUILDER(Create_func_char_length)},
|
{ { STRING_WITH_LEN("CHAR_LENGTH") }, BUILDER(Create_func_char_length)},
|
||||||
{ C_STRING_WITH_LEN("COERCIBILITY"), BUILDER(Create_func_coercibility)},
|
{ { STRING_WITH_LEN("COERCIBILITY") }, BUILDER(Create_func_coercibility)},
|
||||||
{ C_STRING_WITH_LEN("COMPRESS"), BUILDER(Create_func_compress)},
|
{ { STRING_WITH_LEN("COMPRESS") }, BUILDER(Create_func_compress)},
|
||||||
{ C_STRING_WITH_LEN("CONCAT"), BUILDER(Create_func_concat)},
|
{ { STRING_WITH_LEN("CONCAT") }, BUILDER(Create_func_concat)},
|
||||||
{ C_STRING_WITH_LEN("CONCAT_WS"), BUILDER(Create_func_concat_ws)},
|
{ { STRING_WITH_LEN("CONCAT_WS") }, BUILDER(Create_func_concat_ws)},
|
||||||
{ C_STRING_WITH_LEN("CONNECTION_ID"), BUILDER(Create_func_connection_id)},
|
{ { STRING_WITH_LEN("CONNECTION_ID") }, BUILDER(Create_func_connection_id)},
|
||||||
{ C_STRING_WITH_LEN("CONV"), BUILDER(Create_func_conv)},
|
{ { STRING_WITH_LEN("CONV") }, BUILDER(Create_func_conv)},
|
||||||
{ C_STRING_WITH_LEN("CONVERT_TZ"), BUILDER(Create_func_convert_tz)},
|
{ { STRING_WITH_LEN("CONVERT_TZ") }, BUILDER(Create_func_convert_tz)},
|
||||||
{ C_STRING_WITH_LEN("COS"), BUILDER(Create_func_cos)},
|
{ { STRING_WITH_LEN("COS") }, BUILDER(Create_func_cos)},
|
||||||
{ C_STRING_WITH_LEN("COT"), BUILDER(Create_func_cot)},
|
{ { STRING_WITH_LEN("COT") }, BUILDER(Create_func_cot)},
|
||||||
{ C_STRING_WITH_LEN("CRC32"), BUILDER(Create_func_crc32)},
|
{ { STRING_WITH_LEN("CRC32") }, BUILDER(Create_func_crc32)},
|
||||||
{ C_STRING_WITH_LEN("CROSSES"), GEOM_BUILDER(Create_func_crosses)},
|
{ { STRING_WITH_LEN("CROSSES") }, GEOM_BUILDER(Create_func_crosses)},
|
||||||
{ C_STRING_WITH_LEN("DATEDIFF"), BUILDER(Create_func_datediff)},
|
{ { STRING_WITH_LEN("DATEDIFF") }, BUILDER(Create_func_datediff)},
|
||||||
{ C_STRING_WITH_LEN("DATE_FORMAT"), BUILDER(Create_func_date_format)},
|
{ { STRING_WITH_LEN("DATE_FORMAT") }, BUILDER(Create_func_date_format)},
|
||||||
{ C_STRING_WITH_LEN("DAYNAME"), BUILDER(Create_func_dayname)},
|
{ { STRING_WITH_LEN("DAYNAME") }, BUILDER(Create_func_dayname)},
|
||||||
{ C_STRING_WITH_LEN("DAYOFMONTH"), BUILDER(Create_func_dayofmonth)},
|
{ { STRING_WITH_LEN("DAYOFMONTH") }, BUILDER(Create_func_dayofmonth)},
|
||||||
{ C_STRING_WITH_LEN("DAYOFWEEK"), BUILDER(Create_func_dayofweek)},
|
{ { STRING_WITH_LEN("DAYOFWEEK") }, BUILDER(Create_func_dayofweek)},
|
||||||
{ C_STRING_WITH_LEN("DAYOFYEAR"), BUILDER(Create_func_dayofyear)},
|
{ { STRING_WITH_LEN("DAYOFYEAR") }, BUILDER(Create_func_dayofyear)},
|
||||||
{ C_STRING_WITH_LEN("DECODE"), BUILDER(Create_func_decode)},
|
{ { STRING_WITH_LEN("DECODE") }, BUILDER(Create_func_decode)},
|
||||||
{ C_STRING_WITH_LEN("DEGREES"), BUILDER(Create_func_degrees)},
|
{ { STRING_WITH_LEN("DEGREES") }, BUILDER(Create_func_degrees)},
|
||||||
{ C_STRING_WITH_LEN("DES_DECRYPT"), BUILDER(Create_func_des_decrypt)},
|
{ { STRING_WITH_LEN("DES_DECRYPT") }, BUILDER(Create_func_des_decrypt)},
|
||||||
{ C_STRING_WITH_LEN("DES_ENCRYPT"), BUILDER(Create_func_des_encrypt)},
|
{ { STRING_WITH_LEN("DES_ENCRYPT") }, BUILDER(Create_func_des_encrypt)},
|
||||||
{ C_STRING_WITH_LEN("DIMENSION"), GEOM_BUILDER(Create_func_dimension)},
|
{ { STRING_WITH_LEN("DIMENSION") }, GEOM_BUILDER(Create_func_dimension)},
|
||||||
{ C_STRING_WITH_LEN("DISJOINT"), GEOM_BUILDER(Create_func_disjoint)},
|
{ { STRING_WITH_LEN("DISJOINT") }, GEOM_BUILDER(Create_func_disjoint)},
|
||||||
{ C_STRING_WITH_LEN("ELT"), BUILDER(Create_func_elt)},
|
{ { STRING_WITH_LEN("ELT") }, BUILDER(Create_func_elt)},
|
||||||
{ C_STRING_WITH_LEN("ENCODE"), BUILDER(Create_func_encode)},
|
{ { STRING_WITH_LEN("ENCODE") }, BUILDER(Create_func_encode)},
|
||||||
{ C_STRING_WITH_LEN("ENCRYPT"), BUILDER(Create_func_encrypt)},
|
{ { STRING_WITH_LEN("ENCRYPT") }, BUILDER(Create_func_encrypt)},
|
||||||
{ C_STRING_WITH_LEN("ENDPOINT"), GEOM_BUILDER(Create_func_endpoint)},
|
{ { STRING_WITH_LEN("ENDPOINT") }, GEOM_BUILDER(Create_func_endpoint)},
|
||||||
{ C_STRING_WITH_LEN("ENVELOPE"), GEOM_BUILDER(Create_func_envelope)},
|
{ { STRING_WITH_LEN("ENVELOPE") }, GEOM_BUILDER(Create_func_envelope)},
|
||||||
{ C_STRING_WITH_LEN("EQUALS"), GEOM_BUILDER(Create_func_equals)},
|
{ { STRING_WITH_LEN("EQUALS") }, GEOM_BUILDER(Create_func_equals)},
|
||||||
{ C_STRING_WITH_LEN("EXP"), BUILDER(Create_func_exp)},
|
{ { STRING_WITH_LEN("EXP") }, BUILDER(Create_func_exp)},
|
||||||
{ C_STRING_WITH_LEN("EXPORT_SET"), BUILDER(Create_func_export_set)},
|
{ { STRING_WITH_LEN("EXPORT_SET") }, BUILDER(Create_func_export_set)},
|
||||||
{ C_STRING_WITH_LEN("EXTERIORRING"), GEOM_BUILDER(Create_func_exteriorring)},
|
{ { STRING_WITH_LEN("EXTERIORRING") }, GEOM_BUILDER(Create_func_exteriorring)},
|
||||||
{ C_STRING_WITH_LEN("EXTRACTVALUE"), BUILDER(Create_func_xml_extractvalue)},
|
{ { STRING_WITH_LEN("EXTRACTVALUE") }, BUILDER(Create_func_xml_extractvalue)},
|
||||||
{ C_STRING_WITH_LEN("FIELD"), BUILDER(Create_func_field)},
|
{ { STRING_WITH_LEN("FIELD") }, BUILDER(Create_func_field)},
|
||||||
{ C_STRING_WITH_LEN("FIND_IN_SET"), BUILDER(Create_func_find_in_set)},
|
{ { STRING_WITH_LEN("FIND_IN_SET") }, BUILDER(Create_func_find_in_set)},
|
||||||
{ C_STRING_WITH_LEN("FLOOR"), BUILDER(Create_func_floor)},
|
{ { STRING_WITH_LEN("FLOOR") }, BUILDER(Create_func_floor)},
|
||||||
{ C_STRING_WITH_LEN("FORMAT"), BUILDER(Create_func_format)},
|
{ { STRING_WITH_LEN("FORMAT") }, BUILDER(Create_func_format)},
|
||||||
{ C_STRING_WITH_LEN("FOUND_ROWS"), BUILDER(Create_func_found_rows)},
|
{ { STRING_WITH_LEN("FOUND_ROWS") }, BUILDER(Create_func_found_rows)},
|
||||||
{ C_STRING_WITH_LEN("FROM_DAYS"), BUILDER(Create_func_from_days)},
|
{ { STRING_WITH_LEN("FROM_DAYS") }, BUILDER(Create_func_from_days)},
|
||||||
{ C_STRING_WITH_LEN("FROM_UNIXTIME"), BUILDER(Create_func_from_unixtime)},
|
{ { STRING_WITH_LEN("FROM_UNIXTIME") }, BUILDER(Create_func_from_unixtime)},
|
||||||
{ C_STRING_WITH_LEN("GEOMCOLLFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("GEOMCOLLFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("GEOMCOLLFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("GEOMCOLLFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("GEOMETRYCOLLECTIONFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("GEOMETRYCOLLECTIONFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("GEOMETRYCOLLECTIONFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("GEOMETRYCOLLECTIONFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("GEOMETRYFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("GEOMETRYFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("GEOMETRYFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("GEOMETRYFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("GEOMETRYN"), GEOM_BUILDER(Create_func_geometryn)},
|
{ { STRING_WITH_LEN("GEOMETRYN") }, GEOM_BUILDER(Create_func_geometryn)},
|
||||||
{ C_STRING_WITH_LEN("GEOMETRYTYPE"), GEOM_BUILDER(Create_func_geometry_type)},
|
{ { STRING_WITH_LEN("GEOMETRYTYPE") }, GEOM_BUILDER(Create_func_geometry_type)},
|
||||||
{ C_STRING_WITH_LEN("GEOMFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("GEOMFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("GEOMFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("GEOMFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("GET_LOCK"), BUILDER(Create_func_get_lock)},
|
{ { STRING_WITH_LEN("GET_LOCK") }, BUILDER(Create_func_get_lock)},
|
||||||
{ C_STRING_WITH_LEN("GLENGTH"), GEOM_BUILDER(Create_func_glength)},
|
{ { STRING_WITH_LEN("GLENGTH") }, GEOM_BUILDER(Create_func_glength)},
|
||||||
{ C_STRING_WITH_LEN("GREATEST"), BUILDER(Create_func_greatest)},
|
{ { STRING_WITH_LEN("GREATEST") }, BUILDER(Create_func_greatest)},
|
||||||
{ C_STRING_WITH_LEN("HEX"), BUILDER(Create_func_hex)},
|
{ { STRING_WITH_LEN("HEX") }, BUILDER(Create_func_hex)},
|
||||||
{ C_STRING_WITH_LEN("IFNULL"), BUILDER(Create_func_ifnull)},
|
{ { STRING_WITH_LEN("IFNULL") }, BUILDER(Create_func_ifnull)},
|
||||||
{ C_STRING_WITH_LEN("INET_ATON"), BUILDER(Create_func_inet_aton)},
|
{ { STRING_WITH_LEN("INET_ATON") }, BUILDER(Create_func_inet_aton)},
|
||||||
{ C_STRING_WITH_LEN("INET_NTOA"), BUILDER(Create_func_inet_ntoa)},
|
{ { STRING_WITH_LEN("INET_NTOA") }, BUILDER(Create_func_inet_ntoa)},
|
||||||
{ C_STRING_WITH_LEN("INSTR"), BUILDER(Create_func_instr)},
|
{ { STRING_WITH_LEN("INSTR") }, BUILDER(Create_func_instr)},
|
||||||
{ C_STRING_WITH_LEN("INTERIORRINGN"), GEOM_BUILDER(Create_func_interiorringn)},
|
{ { STRING_WITH_LEN("INTERIORRINGN") }, GEOM_BUILDER(Create_func_interiorringn)},
|
||||||
{ C_STRING_WITH_LEN("INTERSECTS"), GEOM_BUILDER(Create_func_intersects)},
|
{ { STRING_WITH_LEN("INTERSECTS") }, GEOM_BUILDER(Create_func_intersects)},
|
||||||
{ C_STRING_WITH_LEN("ISCLOSED"), GEOM_BUILDER(Create_func_isclosed)},
|
{ { STRING_WITH_LEN("ISCLOSED") }, GEOM_BUILDER(Create_func_isclosed)},
|
||||||
{ C_STRING_WITH_LEN("ISEMPTY"), GEOM_BUILDER(Create_func_isempty)},
|
{ { STRING_WITH_LEN("ISEMPTY") }, GEOM_BUILDER(Create_func_isempty)},
|
||||||
{ C_STRING_WITH_LEN("ISNULL"), BUILDER(Create_func_isnull)},
|
{ { STRING_WITH_LEN("ISNULL") }, BUILDER(Create_func_isnull)},
|
||||||
{ C_STRING_WITH_LEN("ISSIMPLE"), GEOM_BUILDER(Create_func_issimple)},
|
{ { STRING_WITH_LEN("ISSIMPLE") }, GEOM_BUILDER(Create_func_issimple)},
|
||||||
{ C_STRING_WITH_LEN("IS_FREE_LOCK"), BUILDER(Create_func_is_free_lock)},
|
{ { STRING_WITH_LEN("IS_FREE_LOCK") }, BUILDER(Create_func_is_free_lock)},
|
||||||
{ C_STRING_WITH_LEN("IS_USED_LOCK"), BUILDER(Create_func_is_used_lock)},
|
{ { STRING_WITH_LEN("IS_USED_LOCK") }, BUILDER(Create_func_is_used_lock)},
|
||||||
{ C_STRING_WITH_LEN("LAST_DAY"), BUILDER(Create_func_last_day)},
|
{ { STRING_WITH_LEN("LAST_DAY") }, BUILDER(Create_func_last_day)},
|
||||||
{ C_STRING_WITH_LEN("LAST_INSERT_ID"), BUILDER(Create_func_last_insert_id)},
|
{ { STRING_WITH_LEN("LAST_INSERT_ID") }, BUILDER(Create_func_last_insert_id)},
|
||||||
{ C_STRING_WITH_LEN("LCASE"), BUILDER(Create_func_lcase)},
|
{ { STRING_WITH_LEN("LCASE") }, BUILDER(Create_func_lcase)},
|
||||||
{ C_STRING_WITH_LEN("LEAST"), BUILDER(Create_func_least)},
|
{ { STRING_WITH_LEN("LEAST") }, BUILDER(Create_func_least)},
|
||||||
{ C_STRING_WITH_LEN("LENGTH"), BUILDER(Create_func_length)},
|
{ { STRING_WITH_LEN("LENGTH") }, BUILDER(Create_func_length)},
|
||||||
{ C_STRING_WITH_LEN("LINEFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("LINEFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("LINEFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("LINEFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("LINESTRINGFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("LINESTRINGFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("LINESTRINGFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("LINESTRINGFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("LN"), BUILDER(Create_func_ln)},
|
{ { STRING_WITH_LEN("LN") }, BUILDER(Create_func_ln)},
|
||||||
{ C_STRING_WITH_LEN("LOAD_FILE"), BUILDER(Create_func_load_file)},
|
{ { STRING_WITH_LEN("LOAD_FILE") }, BUILDER(Create_func_load_file)},
|
||||||
{ C_STRING_WITH_LEN("LOCATE"), BUILDER(Create_func_locate)},
|
{ { STRING_WITH_LEN("LOCATE") }, BUILDER(Create_func_locate)},
|
||||||
{ C_STRING_WITH_LEN("LOG"), BUILDER(Create_func_log)},
|
{ { STRING_WITH_LEN("LOG") }, BUILDER(Create_func_log)},
|
||||||
{ C_STRING_WITH_LEN("LOG10"), BUILDER(Create_func_log10)},
|
{ { STRING_WITH_LEN("LOG10") }, BUILDER(Create_func_log10)},
|
||||||
{ C_STRING_WITH_LEN("LOG2"), BUILDER(Create_func_log2)},
|
{ { STRING_WITH_LEN("LOG2") }, BUILDER(Create_func_log2)},
|
||||||
{ C_STRING_WITH_LEN("LOWER"), BUILDER(Create_func_lcase)},
|
{ { STRING_WITH_LEN("LOWER") }, BUILDER(Create_func_lcase)},
|
||||||
{ C_STRING_WITH_LEN("LPAD"), BUILDER(Create_func_lpad)},
|
{ { STRING_WITH_LEN("LPAD") }, BUILDER(Create_func_lpad)},
|
||||||
{ C_STRING_WITH_LEN("LTRIM"), BUILDER(Create_func_ltrim)},
|
{ { STRING_WITH_LEN("LTRIM") }, BUILDER(Create_func_ltrim)},
|
||||||
{ C_STRING_WITH_LEN("MAKEDATE"), BUILDER(Create_func_makedate)},
|
{ { STRING_WITH_LEN("MAKEDATE") }, BUILDER(Create_func_makedate)},
|
||||||
{ C_STRING_WITH_LEN("MAKETIME"), BUILDER(Create_func_maketime)},
|
{ { STRING_WITH_LEN("MAKETIME") }, BUILDER(Create_func_maketime)},
|
||||||
{ C_STRING_WITH_LEN("MAKE_SET"), BUILDER(Create_func_make_set)},
|
{ { STRING_WITH_LEN("MAKE_SET") }, BUILDER(Create_func_make_set)},
|
||||||
{ C_STRING_WITH_LEN("MASTER_POS_WAIT"), BUILDER(Create_func_master_pos_wait)},
|
{ { STRING_WITH_LEN("MASTER_POS_WAIT") }, BUILDER(Create_func_master_pos_wait)},
|
||||||
{ C_STRING_WITH_LEN("MBRCONTAINS"), GEOM_BUILDER(Create_func_contains)},
|
{ { STRING_WITH_LEN("MBRCONTAINS") }, GEOM_BUILDER(Create_func_contains)},
|
||||||
{ C_STRING_WITH_LEN("MD5"), BUILDER(Create_func_md5)},
|
{ { STRING_WITH_LEN("MD5") }, BUILDER(Create_func_md5)},
|
||||||
{ C_STRING_WITH_LEN("MLINEFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("MLINEFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("MLINEFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("MLINEFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("MONTHNAME"), BUILDER(Create_func_monthname)},
|
{ { STRING_WITH_LEN("MONTHNAME") }, BUILDER(Create_func_monthname)},
|
||||||
{ C_STRING_WITH_LEN("MPOINTFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("MPOINTFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("MPOINTFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("MPOINTFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("MPOLYFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("MPOLYFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("MPOLYFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("MPOLYFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("MULTILINESTRINGFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("MULTILINESTRINGFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("MULTILINESTRINGFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("MULTILINESTRINGFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("MULTIPOINTFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("MULTIPOINTFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("MULTIPOINTFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("MULTIPOINTFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("MULTIPOLYGONFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("MULTIPOLYGONFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("MULTIPOLYGONFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("MULTIPOLYGONFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("NAME_CONST"), BUILDER(Create_func_name_const)},
|
{ { STRING_WITH_LEN("NAME_CONST") }, BUILDER(Create_func_name_const)},
|
||||||
{ C_STRING_WITH_LEN("NULLIF"), BUILDER(Create_func_nullif)},
|
{ { STRING_WITH_LEN("NULLIF") }, BUILDER(Create_func_nullif)},
|
||||||
{ C_STRING_WITH_LEN("NUMGEOMETRIES"), GEOM_BUILDER(Create_func_numgeometries)},
|
{ { STRING_WITH_LEN("NUMGEOMETRIES") }, GEOM_BUILDER(Create_func_numgeometries)},
|
||||||
{ C_STRING_WITH_LEN("NUMINTERIORRINGS"), GEOM_BUILDER(Create_func_numinteriorring)},
|
{ { STRING_WITH_LEN("NUMINTERIORRINGS") }, GEOM_BUILDER(Create_func_numinteriorring)},
|
||||||
{ C_STRING_WITH_LEN("NUMPOINTS"), GEOM_BUILDER(Create_func_numpoints)},
|
{ { STRING_WITH_LEN("NUMPOINTS") }, GEOM_BUILDER(Create_func_numpoints)},
|
||||||
{ C_STRING_WITH_LEN("OCT"), BUILDER(Create_func_oct)},
|
{ { STRING_WITH_LEN("OCT") }, BUILDER(Create_func_oct)},
|
||||||
{ C_STRING_WITH_LEN("OCTET_LENGTH"), BUILDER(Create_func_length)},
|
{ { STRING_WITH_LEN("OCTET_LENGTH") }, BUILDER(Create_func_length)},
|
||||||
{ C_STRING_WITH_LEN("ORD"), BUILDER(Create_func_ord)},
|
{ { STRING_WITH_LEN("ORD") }, BUILDER(Create_func_ord)},
|
||||||
{ C_STRING_WITH_LEN("OVERLAPS"), GEOM_BUILDER(Create_func_overlaps)},
|
{ { STRING_WITH_LEN("OVERLAPS") }, GEOM_BUILDER(Create_func_overlaps)},
|
||||||
{ C_STRING_WITH_LEN("PERIOD_ADD"), BUILDER(Create_func_period_add)},
|
{ { STRING_WITH_LEN("PERIOD_ADD") }, BUILDER(Create_func_period_add)},
|
||||||
{ C_STRING_WITH_LEN("PERIOD_DIFF"), BUILDER(Create_func_period_diff)},
|
{ { STRING_WITH_LEN("PERIOD_DIFF") }, BUILDER(Create_func_period_diff)},
|
||||||
{ C_STRING_WITH_LEN("PI"), BUILDER(Create_func_pi)},
|
{ { STRING_WITH_LEN("PI") }, BUILDER(Create_func_pi)},
|
||||||
{ C_STRING_WITH_LEN("POINTFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("POINTFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("POINTFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("POINTFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("POINTN"), GEOM_BUILDER(Create_func_pointn)},
|
{ { STRING_WITH_LEN("POINTN") }, GEOM_BUILDER(Create_func_pointn)},
|
||||||
{ C_STRING_WITH_LEN("POLYFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("POLYFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("POLYFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("POLYFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("POLYGONFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
|
{ { STRING_WITH_LEN("POLYGONFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||||
{ C_STRING_WITH_LEN("POLYGONFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
{ { STRING_WITH_LEN("POLYGONFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||||
{ C_STRING_WITH_LEN("POW"), BUILDER(Create_func_pow)},
|
{ { STRING_WITH_LEN("POW") }, BUILDER(Create_func_pow)},
|
||||||
{ C_STRING_WITH_LEN("POWER"), BUILDER(Create_func_pow)},
|
{ { STRING_WITH_LEN("POWER") }, BUILDER(Create_func_pow)},
|
||||||
{ C_STRING_WITH_LEN("QUOTE"), BUILDER(Create_func_quote)},
|
{ { STRING_WITH_LEN("QUOTE") }, BUILDER(Create_func_quote)},
|
||||||
{ C_STRING_WITH_LEN("RADIANS"), BUILDER(Create_func_radians)},
|
{ { STRING_WITH_LEN("RADIANS") }, BUILDER(Create_func_radians)},
|
||||||
{ C_STRING_WITH_LEN("RAND"), BUILDER(Create_func_rand)},
|
{ { STRING_WITH_LEN("RAND") }, BUILDER(Create_func_rand)},
|
||||||
{ C_STRING_WITH_LEN("RELEASE_LOCK"), BUILDER(Create_func_release_lock)},
|
{ { STRING_WITH_LEN("RELEASE_LOCK") }, BUILDER(Create_func_release_lock)},
|
||||||
{ C_STRING_WITH_LEN("REVERSE"), BUILDER(Create_func_reverse)},
|
{ { STRING_WITH_LEN("REVERSE") }, BUILDER(Create_func_reverse)},
|
||||||
{ C_STRING_WITH_LEN("ROUND"), BUILDER(Create_func_round)},
|
{ { STRING_WITH_LEN("ROUND") }, BUILDER(Create_func_round)},
|
||||||
{ C_STRING_WITH_LEN("ROW_COUNT"), BUILDER(Create_func_row_count)},
|
{ { STRING_WITH_LEN("ROW_COUNT") }, BUILDER(Create_func_row_count)},
|
||||||
{ C_STRING_WITH_LEN("RPAD"), BUILDER(Create_func_rpad)},
|
{ { STRING_WITH_LEN("RPAD") }, BUILDER(Create_func_rpad)},
|
||||||
{ C_STRING_WITH_LEN("RTRIM"), BUILDER(Create_func_rtrim)},
|
{ { STRING_WITH_LEN("RTRIM") }, BUILDER(Create_func_rtrim)},
|
||||||
{ C_STRING_WITH_LEN("SEC_TO_TIME"), BUILDER(Create_func_sec_to_time)},
|
{ { STRING_WITH_LEN("SEC_TO_TIME") }, BUILDER(Create_func_sec_to_time)},
|
||||||
{ C_STRING_WITH_LEN("SHA"), BUILDER(Create_func_sha)},
|
{ { STRING_WITH_LEN("SHA") }, BUILDER(Create_func_sha)},
|
||||||
{ C_STRING_WITH_LEN("SHA1"), BUILDER(Create_func_sha)},
|
{ { STRING_WITH_LEN("SHA1") }, BUILDER(Create_func_sha)},
|
||||||
{ C_STRING_WITH_LEN("SIGN"), BUILDER(Create_func_sign)},
|
{ { STRING_WITH_LEN("SIGN") }, BUILDER(Create_func_sign)},
|
||||||
{ C_STRING_WITH_LEN("SIN"), BUILDER(Create_func_sin)},
|
{ { STRING_WITH_LEN("SIN") }, BUILDER(Create_func_sin)},
|
||||||
{ C_STRING_WITH_LEN("SLEEP"), BUILDER(Create_func_sleep)},
|
{ { STRING_WITH_LEN("SLEEP") }, BUILDER(Create_func_sleep)},
|
||||||
{ C_STRING_WITH_LEN("SOUNDEX"), BUILDER(Create_func_soundex)},
|
{ { STRING_WITH_LEN("SOUNDEX") }, BUILDER(Create_func_soundex)},
|
||||||
{ C_STRING_WITH_LEN("SPACE"), BUILDER(Create_func_space)},
|
{ { STRING_WITH_LEN("SPACE") }, BUILDER(Create_func_space)},
|
||||||
{ C_STRING_WITH_LEN("SQRT"), BUILDER(Create_func_sqrt)},
|
{ { STRING_WITH_LEN("SQRT") }, BUILDER(Create_func_sqrt)},
|
||||||
{ C_STRING_WITH_LEN("SRID"), GEOM_BUILDER(Create_func_srid)},
|
{ { STRING_WITH_LEN("SRID") }, GEOM_BUILDER(Create_func_srid)},
|
||||||
{ C_STRING_WITH_LEN("STARTPOINT"), GEOM_BUILDER(Create_func_startpoint)},
|
{ { STRING_WITH_LEN("STARTPOINT") }, GEOM_BUILDER(Create_func_startpoint)},
|
||||||
{ C_STRING_WITH_LEN("STRCMP"), BUILDER(Create_func_strcmp)},
|
{ { STRING_WITH_LEN("STRCMP") }, BUILDER(Create_func_strcmp)},
|
||||||
{ C_STRING_WITH_LEN("STR_TO_DATE"), BUILDER(Create_func_str_to_date)},
|
{ { STRING_WITH_LEN("STR_TO_DATE") }, BUILDER(Create_func_str_to_date)},
|
||||||
{ C_STRING_WITH_LEN("SUBSTRING_INDEX"), BUILDER(Create_func_substr_index)},
|
{ { STRING_WITH_LEN("SUBSTRING_INDEX") }, BUILDER(Create_func_substr_index)},
|
||||||
{ C_STRING_WITH_LEN("SUBTIME"), BUILDER(Create_func_subtime)},
|
{ { STRING_WITH_LEN("SUBTIME") }, BUILDER(Create_func_subtime)},
|
||||||
{ C_STRING_WITH_LEN("TAN"), BUILDER(Create_func_tan)},
|
{ { STRING_WITH_LEN("TAN") }, BUILDER(Create_func_tan)},
|
||||||
{ C_STRING_WITH_LEN("TIMEDIFF"), BUILDER(Create_func_timediff)},
|
{ { STRING_WITH_LEN("TIMEDIFF") }, BUILDER(Create_func_timediff)},
|
||||||
{ C_STRING_WITH_LEN("TIME_FORMAT"), BUILDER(Create_func_time_format)},
|
{ { STRING_WITH_LEN("TIME_FORMAT") }, BUILDER(Create_func_time_format)},
|
||||||
{ C_STRING_WITH_LEN("TIME_TO_SEC"), BUILDER(Create_func_time_to_sec)},
|
{ { STRING_WITH_LEN("TIME_TO_SEC") }, BUILDER(Create_func_time_to_sec)},
|
||||||
{ C_STRING_WITH_LEN("TOUCHES"), GEOM_BUILDER(Create_func_touches)},
|
{ { STRING_WITH_LEN("TOUCHES") }, GEOM_BUILDER(Create_func_touches)},
|
||||||
{ C_STRING_WITH_LEN("TO_DAYS"), BUILDER(Create_func_to_days)},
|
{ { STRING_WITH_LEN("TO_DAYS") }, BUILDER(Create_func_to_days)},
|
||||||
{ C_STRING_WITH_LEN("UCASE"), BUILDER(Create_func_ucase)},
|
{ { STRING_WITH_LEN("UCASE") }, BUILDER(Create_func_ucase)},
|
||||||
{ C_STRING_WITH_LEN("UNCOMPRESS"), BUILDER(Create_func_uncompress)},
|
{ { STRING_WITH_LEN("UNCOMPRESS") }, BUILDER(Create_func_uncompress)},
|
||||||
{ C_STRING_WITH_LEN("UNCOMPRESSED_LENGTH"), BUILDER(Create_func_uncompressed_length)},
|
{ { STRING_WITH_LEN("UNCOMPRESSED_LENGTH") }, BUILDER(Create_func_uncompressed_length)},
|
||||||
{ C_STRING_WITH_LEN("UNHEX"), BUILDER(Create_func_unhex)},
|
{ { STRING_WITH_LEN("UNHEX") }, BUILDER(Create_func_unhex)},
|
||||||
{ C_STRING_WITH_LEN("UNIX_TIMESTAMP"), BUILDER(Create_func_unix_timestamp)},
|
{ { STRING_WITH_LEN("UNIX_TIMESTAMP") }, BUILDER(Create_func_unix_timestamp)},
|
||||||
{ C_STRING_WITH_LEN("UPDATEXML"), BUILDER(Create_func_xml_update)},
|
{ { STRING_WITH_LEN("UPDATEXML") }, BUILDER(Create_func_xml_update)},
|
||||||
{ C_STRING_WITH_LEN("UPPER"), BUILDER(Create_func_ucase)},
|
{ { STRING_WITH_LEN("UPPER") }, BUILDER(Create_func_ucase)},
|
||||||
{ C_STRING_WITH_LEN("UUID"), BUILDER(Create_func_uuid)},
|
{ { STRING_WITH_LEN("UUID") }, BUILDER(Create_func_uuid)},
|
||||||
{ C_STRING_WITH_LEN("VERSION"), BUILDER(Create_func_version)},
|
{ { STRING_WITH_LEN("VERSION") }, BUILDER(Create_func_version)},
|
||||||
{ C_STRING_WITH_LEN("WEEKDAY"), BUILDER(Create_func_weekday)},
|
{ { STRING_WITH_LEN("WEEKDAY") }, BUILDER(Create_func_weekday)},
|
||||||
{ C_STRING_WITH_LEN("WEEKOFYEAR"), BUILDER(Create_func_weekofyear)},
|
{ { STRING_WITH_LEN("WEEKOFYEAR") }, BUILDER(Create_func_weekofyear)},
|
||||||
{ C_STRING_WITH_LEN("WITHIN"), GEOM_BUILDER(Create_func_within)},
|
{ { STRING_WITH_LEN("WITHIN") }, GEOM_BUILDER(Create_func_within)},
|
||||||
{ C_STRING_WITH_LEN("X"), GEOM_BUILDER(Create_func_x)},
|
{ { STRING_WITH_LEN("X") }, GEOM_BUILDER(Create_func_x)},
|
||||||
{ C_STRING_WITH_LEN("Y"), GEOM_BUILDER(Create_func_y)},
|
{ { STRING_WITH_LEN("Y") }, GEOM_BUILDER(Create_func_y)},
|
||||||
{ C_STRING_WITH_LEN("YEARWEEK"), BUILDER(Create_func_year_week)},
|
{ { STRING_WITH_LEN("YEARWEEK") }, BUILDER(Create_func_year_week)},
|
||||||
|
|
||||||
{ {0, 0}, NULL}
|
{ {0, 0}, NULL}
|
||||||
};
|
};
|
||||||
|
@ -1914,8 +1914,8 @@ shutdown the MySQL server and restart it.", name, errno);
|
|||||||
}
|
}
|
||||||
|
|
||||||
MYSQL_LOG::MYSQL_LOG()
|
MYSQL_LOG::MYSQL_LOG()
|
||||||
: name(0), log_type(LOG_UNKNOWN), log_state(LOG_CLOSED), write_error(FALSE),
|
: name(0), write_error(FALSE), inited(FALSE), log_type(LOG_UNKNOWN),
|
||||||
inited(FALSE)
|
log_state(LOG_CLOSED)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
We don't want to initialize LOCK_Log here as such initialization depends on
|
We don't want to initialize LOCK_Log here as such initialization depends on
|
||||||
|
@ -2651,7 +2651,7 @@ static bool init_global_datetime_format(timestamp_type format_type,
|
|||||||
static int init_common_variables(const char *conf_file_name, int argc,
|
static int init_common_variables(const char *conf_file_name, int argc,
|
||||||
char **argv, const char **groups)
|
char **argv, const char **groups)
|
||||||
{
|
{
|
||||||
char buff[FN_REFLEN];
|
char buff[FN_REFLEN], *s;
|
||||||
umask(((~my_umask) & 0666));
|
umask(((~my_umask) & 0666));
|
||||||
my_decimal_set_zero(&decimal_zero); // set decimal_zero constant;
|
my_decimal_set_zero(&decimal_zero); // set decimal_zero constant;
|
||||||
tzset(); // Set tzname
|
tzset(); // Set tzname
|
||||||
@ -2857,15 +2857,13 @@ static int init_common_variables(const char *conf_file_name, int argc,
|
|||||||
"--log-slow-queries option, log tables are used. "
|
"--log-slow-queries option, log tables are used. "
|
||||||
"To enable logging to files use the --log-output option.");
|
"To enable logging to files use the --log-output option.");
|
||||||
|
|
||||||
if (!opt_logname)
|
s= opt_logname ? opt_logname : make_default_log_name(buff, ".log");
|
||||||
opt_logname= make_default_log_name(buff, ".log");
|
sys_var_general_log_path.value= my_strdup(s, MYF(0));
|
||||||
sys_var_general_log_path.value= my_strdup(opt_logname, MYF(0));
|
sys_var_general_log_path.value_length= strlen(s);
|
||||||
sys_var_general_log_path.value_length= strlen(opt_logname);
|
|
||||||
|
|
||||||
if (!opt_slow_logname)
|
s= opt_slow_logname ? opt_slow_logname : make_default_log_name(buff, "-slow.log");
|
||||||
opt_slow_logname= make_default_log_name(buff, "-slow.log");
|
sys_var_slow_log_path.value= my_strdup(s, MYF(0));
|
||||||
sys_var_slow_log_path.value= my_strdup(opt_slow_logname, MYF(0));
|
sys_var_slow_log_path.value_length= strlen(s);
|
||||||
sys_var_slow_log_path.value_length= strlen(opt_slow_logname);
|
|
||||||
|
|
||||||
if (use_temp_pool && bitmap_init(&temp_pool,0,1024,1))
|
if (use_temp_pool && bitmap_init(&temp_pool,0,1024,1))
|
||||||
return 1;
|
return 1;
|
||||||
@ -3280,7 +3278,7 @@ server.");
|
|||||||
using_update_log=1;
|
using_update_log=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin_init(&defaults_argc, defaults_argv,
|
if (plugin_init(&defaults_argc, defaults_argv,
|
||||||
(opt_noacl ? PLUGIN_INIT_SKIP_PLUGIN_TABLE : 0) |
|
(opt_noacl ? PLUGIN_INIT_SKIP_PLUGIN_TABLE : 0) |
|
||||||
(opt_help ? PLUGIN_INIT_SKIP_INITIALIZATION : 0)))
|
(opt_help ? PLUGIN_INIT_SKIP_INITIALIZATION : 0)))
|
||||||
{
|
{
|
||||||
@ -3295,25 +3293,28 @@ server.");
|
|||||||
if (defaults_argc > 1)
|
if (defaults_argc > 1)
|
||||||
{
|
{
|
||||||
int ho_error;
|
int ho_error;
|
||||||
struct my_option no_opts[] =
|
char **tmp_argv= defaults_argv;
|
||||||
|
struct my_option no_opts[]=
|
||||||
{
|
{
|
||||||
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
We need to eat any 'loose' arguments first before we conclude
|
We need to eat any 'loose' arguments first before we conclude
|
||||||
that there are unprocessed options
|
that there are unprocessed options.
|
||||||
|
But we need to preserve defaults_argv pointer intact for
|
||||||
|
free_defaults() to work. Thus we use a copy here.
|
||||||
*/
|
*/
|
||||||
my_getopt_skip_unknown= 0;
|
my_getopt_skip_unknown= 0;
|
||||||
|
|
||||||
if ((ho_error= handle_options(&defaults_argc, &defaults_argv, no_opts,
|
if ((ho_error= handle_options(&defaults_argc, &tmp_argv, no_opts,
|
||||||
get_one_option)))
|
get_one_option)))
|
||||||
unireg_abort(ho_error);
|
unireg_abort(ho_error);
|
||||||
|
|
||||||
if (defaults_argc)
|
if (defaults_argc)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: Too many arguments (first extra is '%s').\n"
|
fprintf(stderr, "%s: Too many arguments (first extra is '%s').\n"
|
||||||
"Use --verbose --help to get a list of available options\n",
|
"Use --verbose --help to get a list of available options\n",
|
||||||
my_progname, *defaults_argv);
|
my_progname, *tmp_argv);
|
||||||
unireg_abort(1);
|
unireg_abort(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,9 +84,9 @@ public:
|
|||||||
partition_element(partition_element *part_elem)
|
partition_element(partition_element *part_elem)
|
||||||
: part_max_rows(part_elem->part_max_rows),
|
: part_max_rows(part_elem->part_max_rows),
|
||||||
part_min_rows(part_elem->part_min_rows),
|
part_min_rows(part_elem->part_min_rows),
|
||||||
partition_name(NULL),
|
range_value(0), partition_name(NULL),
|
||||||
tablespace_name(part_elem->tablespace_name),
|
tablespace_name(part_elem->tablespace_name),
|
||||||
range_value(0), part_comment(part_elem->part_comment),
|
part_comment(part_elem->part_comment),
|
||||||
data_file_name(part_elem->data_file_name),
|
data_file_name(part_elem->data_file_name),
|
||||||
index_file_name(part_elem->index_file_name),
|
index_file_name(part_elem->index_file_name),
|
||||||
engine_type(part_elem->engine_type),
|
engine_type(part_elem->engine_type),
|
||||||
|
@ -64,7 +64,7 @@ public:
|
|||||||
size Number of elements in array 'types'
|
size Number of elements in array 'types'
|
||||||
*/
|
*/
|
||||||
table_def(field_type *types, my_size_t size)
|
table_def(field_type *types, my_size_t size)
|
||||||
: m_type(types), m_size(size)
|
: m_size(size), m_type(types)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,8 +27,6 @@
|
|||||||
of it in the my_option structure list in mysqld.cc
|
of it in the my_option structure list in mysqld.cc
|
||||||
- Don't forget to initialize new fields in global_system_variables and
|
- Don't forget to initialize new fields in global_system_variables and
|
||||||
max_system_variables!
|
max_system_variables!
|
||||||
- If the variable should show up in 'show variables' add it to the
|
|
||||||
init_vars[] struct in this file
|
|
||||||
|
|
||||||
NOTES:
|
NOTES:
|
||||||
- Be careful with var->save_result: sys_var::check() only updates
|
- Be careful with var->save_result: sys_var::check() only updates
|
||||||
|
@ -641,12 +641,12 @@ public:
|
|||||||
|
|
||||||
class sys_var_character_set_sv :public sys_var_character_set
|
class sys_var_character_set_sv :public sys_var_character_set
|
||||||
{
|
{
|
||||||
CHARSET_INFO **global_default;
|
|
||||||
CHARSET_INFO *SV::*offset;
|
CHARSET_INFO *SV::*offset;
|
||||||
|
CHARSET_INFO **global_default;
|
||||||
public:
|
public:
|
||||||
sys_var_character_set_sv(sys_var_chain *chain, const char *name_arg,
|
sys_var_character_set_sv(sys_var_chain *chain, const char *name_arg,
|
||||||
CHARSET_INFO *SV::*offset_arg,
|
CHARSET_INFO *SV::*offset_arg,
|
||||||
CHARSET_INFO **global_default_arg,
|
CHARSET_INFO **global_default_arg,
|
||||||
bool is_nullable= 0)
|
bool is_nullable= 0)
|
||||||
: sys_var_character_set(name_arg, is_nullable),
|
: sys_var_character_set(name_arg, is_nullable),
|
||||||
offset(offset_arg), global_default(global_default_arg)
|
offset(offset_arg), global_default(global_default_arg)
|
||||||
@ -668,8 +668,8 @@ public:
|
|||||||
|
|
||||||
class sys_var_collation_sv :public sys_var_collation
|
class sys_var_collation_sv :public sys_var_collation
|
||||||
{
|
{
|
||||||
CHARSET_INFO **global_default;
|
|
||||||
CHARSET_INFO *SV::*offset;
|
CHARSET_INFO *SV::*offset;
|
||||||
|
CHARSET_INFO **global_default;
|
||||||
public:
|
public:
|
||||||
sys_var_collation_sv(sys_var_chain *chain, const char *name_arg,
|
sys_var_collation_sv(sys_var_chain *chain, const char *name_arg,
|
||||||
CHARSET_INFO *SV::*offset_arg,
|
CHARSET_INFO *SV::*offset_arg,
|
||||||
|
@ -227,8 +227,8 @@ int thd_sql_command(const THD *thd)
|
|||||||
pointer to string
|
pointer to string
|
||||||
*/
|
*/
|
||||||
extern "C"
|
extern "C"
|
||||||
char *thd_security_context(THD *thd, char *buffer, int length,
|
char *thd_security_context(THD *thd, char *buffer, unsigned int length,
|
||||||
int max_query_len)
|
unsigned int max_query_len)
|
||||||
{
|
{
|
||||||
String str(buffer, length, &my_charset_latin1);
|
String str(buffer, length, &my_charset_latin1);
|
||||||
const Security_context *sctx= &thd->main_security_ctx;
|
const Security_context *sctx= &thd->main_security_ctx;
|
||||||
@ -293,13 +293,16 @@ THD::THD()
|
|||||||
user_time(0), in_sub_stmt(0),
|
user_time(0), in_sub_stmt(0),
|
||||||
binlog_table_maps(0),
|
binlog_table_maps(0),
|
||||||
global_read_lock(0), is_fatal_error(0),
|
global_read_lock(0), is_fatal_error(0),
|
||||||
rand_used(0), time_zone_used(0),
|
|
||||||
arg_of_last_insert_id_function(FALSE),
|
arg_of_last_insert_id_function(FALSE),
|
||||||
first_successful_insert_id_in_prev_stmt(0),
|
first_successful_insert_id_in_prev_stmt(0),
|
||||||
first_successful_insert_id_in_prev_stmt_for_binlog(0),
|
first_successful_insert_id_in_prev_stmt_for_binlog(0),
|
||||||
first_successful_insert_id_in_cur_stmt(0),
|
first_successful_insert_id_in_cur_stmt(0),
|
||||||
in_lock_tables(0), bootstrap(0), derived_tables_processing(FALSE),
|
rand_used(0),
|
||||||
|
time_zone_used(0),
|
||||||
|
in_lock_tables(0),
|
||||||
stmt_depends_on_first_successful_insert_id_in_prev_stmt(FALSE),
|
stmt_depends_on_first_successful_insert_id_in_prev_stmt(FALSE),
|
||||||
|
bootstrap(0),
|
||||||
|
derived_tables_processing(FALSE),
|
||||||
spcont(NULL)
|
spcont(NULL)
|
||||||
{
|
{
|
||||||
ulong tmp;
|
ulong tmp;
|
||||||
@ -1765,15 +1768,16 @@ void Query_arena::cleanup_stmt()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Statement functions
|
Statement functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Statement::Statement(enum enum_state state_arg, ulong id_arg,
|
Statement::Statement(enum enum_state state_arg, ulong id_arg,
|
||||||
ulong alloc_block_size, ulong prealloc_size)
|
ulong alloc_block_size, ulong prealloc_size)
|
||||||
:Query_arena(&main_mem_root, state_arg),
|
:Query_arena(&main_mem_root, state_arg),
|
||||||
|
main_lex(),
|
||||||
id(id_arg),
|
id(id_arg),
|
||||||
mark_used_columns(MARK_COLUMNS_READ),
|
mark_used_columns(MARK_COLUMNS_READ),
|
||||||
main_lex(), lex(&main_lex),
|
lex(&main_lex),
|
||||||
query(0),
|
query(0),
|
||||||
query_length(0),
|
query_length(0),
|
||||||
cursor(0)
|
cursor(0)
|
||||||
|
@ -43,37 +43,37 @@ static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables);
|
|||||||
const char *any_db="*any*"; // Special symbol for check_access
|
const char *any_db="*any*"; // Special symbol for check_access
|
||||||
|
|
||||||
const LEX_STRING command_name[]={
|
const LEX_STRING command_name[]={
|
||||||
C_STRING_WITH_LEN("Sleep"),
|
{ STRING_WITH_LEN("Sleep") },
|
||||||
C_STRING_WITH_LEN("Quit"),
|
{ STRING_WITH_LEN("Quit") },
|
||||||
C_STRING_WITH_LEN("Init DB"),
|
{ STRING_WITH_LEN("Init DB") },
|
||||||
C_STRING_WITH_LEN("Query"),
|
{ STRING_WITH_LEN("Query") },
|
||||||
C_STRING_WITH_LEN("Field List"),
|
{ STRING_WITH_LEN("Field List") },
|
||||||
C_STRING_WITH_LEN("Create DB"),
|
{ STRING_WITH_LEN("Create DB") },
|
||||||
C_STRING_WITH_LEN("Drop DB"),
|
{ STRING_WITH_LEN("Drop DB") },
|
||||||
C_STRING_WITH_LEN("Refresh"),
|
{ STRING_WITH_LEN("Refresh") },
|
||||||
C_STRING_WITH_LEN("Shutdown"),
|
{ STRING_WITH_LEN("Shutdown") },
|
||||||
C_STRING_WITH_LEN("Statistics"),
|
{ STRING_WITH_LEN("Statistics") },
|
||||||
C_STRING_WITH_LEN("Processlist"),
|
{ STRING_WITH_LEN("Processlist") },
|
||||||
C_STRING_WITH_LEN("Connect"),
|
{ STRING_WITH_LEN("Connect") },
|
||||||
C_STRING_WITH_LEN("Kill"),
|
{ STRING_WITH_LEN("Kill") },
|
||||||
C_STRING_WITH_LEN("Debug"),
|
{ STRING_WITH_LEN("Debug") },
|
||||||
C_STRING_WITH_LEN("Ping"),
|
{ STRING_WITH_LEN("Ping") },
|
||||||
C_STRING_WITH_LEN("Time"),
|
{ STRING_WITH_LEN("Time") },
|
||||||
C_STRING_WITH_LEN("Delayed insert"),
|
{ STRING_WITH_LEN("Delayed insert") },
|
||||||
C_STRING_WITH_LEN("Change user"),
|
{ STRING_WITH_LEN("Change user") },
|
||||||
C_STRING_WITH_LEN("Binlog Dump"),
|
{ STRING_WITH_LEN("Binlog Dump") },
|
||||||
C_STRING_WITH_LEN("Table Dump"),
|
{ STRING_WITH_LEN("Table Dump") },
|
||||||
C_STRING_WITH_LEN("Connect Out"),
|
{ STRING_WITH_LEN("Connect Out") },
|
||||||
C_STRING_WITH_LEN("Register Slave"),
|
{ STRING_WITH_LEN("Register Slave") },
|
||||||
C_STRING_WITH_LEN("Prepare"),
|
{ STRING_WITH_LEN("Prepare") },
|
||||||
C_STRING_WITH_LEN("Execute"),
|
{ STRING_WITH_LEN("Execute") },
|
||||||
C_STRING_WITH_LEN("Long Data"),
|
{ STRING_WITH_LEN("Long Data") },
|
||||||
C_STRING_WITH_LEN("Close stmt"),
|
{ STRING_WITH_LEN("Close stmt") },
|
||||||
C_STRING_WITH_LEN("Reset stmt"),
|
{ STRING_WITH_LEN("Reset stmt") },
|
||||||
C_STRING_WITH_LEN("Set option"),
|
{ STRING_WITH_LEN("Set option") },
|
||||||
C_STRING_WITH_LEN("Fetch"),
|
{ STRING_WITH_LEN("Fetch") },
|
||||||
C_STRING_WITH_LEN("Daemon"),
|
{ STRING_WITH_LEN("Daemon") },
|
||||||
C_STRING_WITH_LEN("Error") // Last command number
|
{ STRING_WITH_LEN("Error") } // Last command number
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *xa_state_names[]={
|
const char *xa_state_names[]={
|
||||||
|
@ -138,7 +138,7 @@ struct st_bookmark
|
|||||||
uint name_len;
|
uint name_len;
|
||||||
int offset;
|
int offset;
|
||||||
uint version;
|
uint version;
|
||||||
char key[0];
|
char key[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -187,11 +187,10 @@ public:
|
|||||||
static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv);
|
static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv);
|
||||||
static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv,
|
static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv,
|
||||||
const char *list);
|
const char *list);
|
||||||
static int test_plugin_options(MEM_ROOT *tmp_root, struct st_plugin_int *tmp,
|
static int test_plugin_options(MEM_ROOT *, struct st_plugin_int *,
|
||||||
int *argc, char **argv, my_bool default_enabled);
|
int *, char **, my_bool);
|
||||||
static bool register_builtin(struct st_mysql_plugin *plugin,
|
static bool register_builtin(struct st_mysql_plugin *, struct st_plugin_int *,
|
||||||
struct st_plugin_int *tmp,
|
struct st_plugin_int **);
|
||||||
struct st_plugin_int **ptr);
|
|
||||||
static void unlock_variables(THD *thd, struct system_variables *vars);
|
static void unlock_variables(THD *thd, struct system_variables *vars);
|
||||||
static void cleanup_variables(THD *thd, struct system_variables *vars);
|
static void cleanup_variables(THD *thd, struct system_variables *vars);
|
||||||
static void plugin_opt_set_limits(struct my_option *options,
|
static void plugin_opt_set_limits(struct my_option *options,
|
||||||
@ -242,44 +241,20 @@ static const char *item_val_str(struct st_mysql_value *value,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int item_val_int(struct st_mysql_value *value, void *buf, int intsize)
|
static int item_val_int(struct st_mysql_value *value, long long *buf)
|
||||||
{
|
{
|
||||||
Item *item= ((st_item_value_holder*)value)->item;
|
Item *item= ((st_item_value_holder*)value)->item;
|
||||||
switch (intsize) {
|
*buf= item->val_int();
|
||||||
case 1:
|
|
||||||
*(char*)buf= item->val_int();
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
*(short*)buf= item->val_int();
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
*(int*)buf= item->val_int();
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
*(longlong*)buf= item->val_int();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (item->is_null())
|
if (item->is_null())
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int item_val_real(struct st_mysql_value *value, void *buf, int realsize)
|
static int item_val_real(struct st_mysql_value *value, double *buf)
|
||||||
{
|
{
|
||||||
Item *item= ((st_item_value_holder*)value)->item;
|
Item *item= ((st_item_value_holder*)value)->item;
|
||||||
switch (realsize) {
|
*buf= item->val_real();
|
||||||
case 8:
|
|
||||||
*(double*)buf= item->val_real();
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
*(float*)buf= item->val_real();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (item->is_null())
|
if (item->is_null())
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
@ -794,8 +769,7 @@ err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void plugin_deinitialize(struct st_plugin_int *plugin,
|
static void plugin_deinitialize(struct st_plugin_int *plugin, bool ref_check)
|
||||||
bool ref_check= TRUE)
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
we don't want to hold the LOCK_plugin mutex as it may cause
|
we don't want to hold the LOCK_plugin mutex as it may cause
|
||||||
@ -911,7 +885,7 @@ static void reap_plugins(void)
|
|||||||
|
|
||||||
list= reap;
|
list= reap;
|
||||||
while ((plugin= *(--list)))
|
while ((plugin= *(--list)))
|
||||||
plugin_deinitialize(plugin);
|
plugin_deinitialize(plugin, true);
|
||||||
|
|
||||||
pthread_mutex_lock(&LOCK_plugin);
|
pthread_mutex_lock(&LOCK_plugin);
|
||||||
|
|
||||||
@ -1149,6 +1123,8 @@ int plugin_init(int *argc, char **argv, int flags)
|
|||||||
my_strcasecmp(&my_charset_latin1, plugin->name, "NDBCLUSTER") != 0;
|
my_strcasecmp(&my_charset_latin1, plugin->name, "NDBCLUSTER") != 0;
|
||||||
bzero(&tmp, sizeof(tmp));
|
bzero(&tmp, sizeof(tmp));
|
||||||
tmp.plugin= plugin;
|
tmp.plugin= plugin;
|
||||||
|
tmp.name.str= (char *)plugin->name;
|
||||||
|
tmp.name.length= strlen(plugin->name);
|
||||||
|
|
||||||
free_root(&tmp_root, MYF(MY_MARK_BLOCKS_FREE));
|
free_root(&tmp_root, MYF(MY_MARK_BLOCKS_FREE));
|
||||||
if (test_plugin_options(&tmp_root, &tmp, argc, argv, def_enabled))
|
if (test_plugin_options(&tmp_root, &tmp, argc, argv, def_enabled))
|
||||||
@ -1226,7 +1202,7 @@ int plugin_init(int *argc, char **argv, int flags)
|
|||||||
while ((plugin_ptr= *(--reap)))
|
while ((plugin_ptr= *(--reap)))
|
||||||
{
|
{
|
||||||
pthread_mutex_unlock(&LOCK_plugin);
|
pthread_mutex_unlock(&LOCK_plugin);
|
||||||
plugin_deinitialize(plugin_ptr);
|
plugin_deinitialize(plugin_ptr, true);
|
||||||
pthread_mutex_lock(&LOCK_plugin);
|
pthread_mutex_lock(&LOCK_plugin);
|
||||||
plugin_del(plugin_ptr);
|
plugin_del(plugin_ptr);
|
||||||
}
|
}
|
||||||
@ -1252,9 +1228,6 @@ static bool register_builtin(struct st_mysql_plugin *plugin,
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("register_builtin");
|
DBUG_ENTER("register_builtin");
|
||||||
|
|
||||||
tmp->plugin= plugin;
|
|
||||||
tmp->name.str= (char *)plugin->name;
|
|
||||||
tmp->name.length= strlen(plugin->name);
|
|
||||||
tmp->state= PLUGIN_IS_UNINITIALIZED;
|
tmp->state= PLUGIN_IS_UNINITIALIZED;
|
||||||
tmp->ref_count= 0;
|
tmp->ref_count= 0;
|
||||||
tmp->plugin_dl= 0;
|
tmp->plugin_dl= 0;
|
||||||
@ -1294,6 +1267,8 @@ bool plugin_register_builtin(THD *thd, struct st_mysql_plugin *plugin)
|
|||||||
|
|
||||||
bzero(&tmp, sizeof(tmp));
|
bzero(&tmp, sizeof(tmp));
|
||||||
tmp.plugin= plugin;
|
tmp.plugin= plugin;
|
||||||
|
tmp.name.str= (char *)plugin->name;
|
||||||
|
tmp.name.length= strlen(plugin->name);
|
||||||
|
|
||||||
pthread_mutex_lock(&LOCK_plugin);
|
pthread_mutex_lock(&LOCK_plugin);
|
||||||
rw_wrlock(&LOCK_system_variables_hash);
|
rw_wrlock(&LOCK_system_variables_hash);
|
||||||
@ -1451,7 +1426,7 @@ error:
|
|||||||
|
|
||||||
void plugin_shutdown(void)
|
void plugin_shutdown(void)
|
||||||
{
|
{
|
||||||
uint i, count= plugin_array.elements;
|
uint i, count= plugin_array.elements, free_slots;
|
||||||
struct st_plugin_int **plugins, *plugin;
|
struct st_plugin_int **plugins, *plugin;
|
||||||
struct st_plugin_dl **dl;
|
struct st_plugin_dl **dl;
|
||||||
DBUG_ENTER("plugin_shutdown");
|
DBUG_ENTER("plugin_shutdown");
|
||||||
@ -1472,13 +1447,18 @@ void plugin_shutdown(void)
|
|||||||
while (reap_needed && (count= plugin_array.elements))
|
while (reap_needed && (count= plugin_array.elements))
|
||||||
{
|
{
|
||||||
reap_plugins();
|
reap_plugins();
|
||||||
for (i= 0; i < count; i++)
|
for (i= free_slots= 0; i < count; i++)
|
||||||
{
|
{
|
||||||
plugin= dynamic_element(&plugin_array, i, struct st_plugin_int *);
|
plugin= dynamic_element(&plugin_array, i, struct st_plugin_int *);
|
||||||
if (plugin->state == PLUGIN_IS_READY)
|
switch (plugin->state) {
|
||||||
{
|
case PLUGIN_IS_READY:
|
||||||
plugin->state= PLUGIN_IS_DELETED;
|
plugin->state= PLUGIN_IS_DELETED;
|
||||||
reap_needed= true;
|
reap_needed= true;
|
||||||
|
break;
|
||||||
|
case PLUGIN_IS_FREED:
|
||||||
|
case PLUGIN_IS_UNINITIALIZED:
|
||||||
|
free_slots++;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!reap_needed)
|
if (!reap_needed)
|
||||||
@ -1491,8 +1471,8 @@ void plugin_shutdown(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count > 0)
|
if (count > free_slots)
|
||||||
sql_print_warning("Forcing shutdown of %d plugins", count);
|
sql_print_warning("Forcing shutdown of %d plugins", count - free_slots);
|
||||||
|
|
||||||
plugins= (struct st_plugin_int **) my_alloca(sizeof(void*) * (count+1));
|
plugins= (struct st_plugin_int **) my_alloca(sizeof(void*) * (count+1));
|
||||||
|
|
||||||
@ -1523,26 +1503,30 @@ void plugin_shutdown(void)
|
|||||||
plugin_deinitialize(plugins[i], false);
|
plugin_deinitialize(plugins[i], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
It's perfectly safe not to lock LOCK_plugin, as there're no
|
||||||
|
concurrent threads anymore. But some functions called from here
|
||||||
|
use safe_mutex_assert_owner(), so we lock the mutex to satisfy it
|
||||||
|
*/
|
||||||
|
pthread_mutex_lock(&LOCK_plugin);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We defer checking ref_counts until after all plugins are deinitialized
|
We defer checking ref_counts until after all plugins are deinitialized
|
||||||
as some may have worker threads holding on to plugin references.
|
as some may have worker threads holding on to plugin references.
|
||||||
*/
|
*/
|
||||||
for (i= 0; i < count; i++)
|
for (i= 0; i < count; i++)
|
||||||
|
{
|
||||||
if (plugins[i]->ref_count)
|
if (plugins[i]->ref_count)
|
||||||
sql_print_error("Plugin '%s' has ref_count=%d after shutdown.",
|
sql_print_error("Plugin '%s' has ref_count=%d after shutdown.",
|
||||||
plugins[i]->name.str, plugins[i]->ref_count);
|
plugins[i]->name.str, plugins[i]->ref_count);
|
||||||
|
|
||||||
for (i= 0; i < count; i++)
|
|
||||||
if (plugins[i]->state & PLUGIN_IS_UNINITIALIZED)
|
if (plugins[i]->state & PLUGIN_IS_UNINITIALIZED)
|
||||||
plugin_del(plugins[i]);
|
plugin_del(plugins[i]);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Now we can deallocate all memory.
|
Now we can deallocate all memory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* neccessary to avoid safe_mutex_assert_owner() trap */
|
|
||||||
pthread_mutex_lock(&LOCK_plugin);
|
|
||||||
cleanup_variables(NULL, &global_system_variables);
|
cleanup_variables(NULL, &global_system_variables);
|
||||||
cleanup_variables(NULL, &max_system_variables);
|
cleanup_variables(NULL, &max_system_variables);
|
||||||
pthread_mutex_unlock(&LOCK_plugin);
|
pthread_mutex_unlock(&LOCK_plugin);
|
||||||
@ -1802,7 +1786,7 @@ static int check_func_bool(THD *thd, struct st_mysql_sys_var *var,
|
|||||||
char buff[STRING_BUFFER_USUAL_SIZE];
|
char buff[STRING_BUFFER_USUAL_SIZE];
|
||||||
const char *strvalue= "NULL", *str;
|
const char *strvalue= "NULL", *str;
|
||||||
int result, length;
|
int result, length;
|
||||||
ulonglong tmp;
|
long long tmp;
|
||||||
|
|
||||||
if (value->value_type(value) == MYSQL_VALUE_TYPE_STRING)
|
if (value->value_type(value) == MYSQL_VALUE_TYPE_STRING)
|
||||||
{
|
{
|
||||||
@ -1817,7 +1801,7 @@ static int check_func_bool(THD *thd, struct st_mysql_sys_var *var,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (value->val_int(value, &tmp, sizeof(tmp)) < 0)
|
if (value->val_int(value, &tmp) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
if (tmp > 1)
|
if (tmp > 1)
|
||||||
{
|
{
|
||||||
@ -1838,9 +1822,9 @@ err:
|
|||||||
static int check_func_int(THD *thd, struct st_mysql_sys_var *var,
|
static int check_func_int(THD *thd, struct st_mysql_sys_var *var,
|
||||||
void *save, st_mysql_value *value)
|
void *save, st_mysql_value *value)
|
||||||
{
|
{
|
||||||
ulonglong tmp;
|
long long tmp;
|
||||||
struct my_option options;
|
struct my_option options;
|
||||||
value->val_int(value, &tmp, sizeof(tmp));
|
value->val_int(value, &tmp);
|
||||||
plugin_opt_set_limits(&options, var);
|
plugin_opt_set_limits(&options, var);
|
||||||
*(int *)save= (int) getopt_ull_limit_value(tmp, &options);
|
*(int *)save= (int) getopt_ull_limit_value(tmp, &options);
|
||||||
return (thd->variables.sql_mode & MODE_STRICT_ALL_TABLES) &&
|
return (thd->variables.sql_mode & MODE_STRICT_ALL_TABLES) &&
|
||||||
@ -1851,9 +1835,9 @@ static int check_func_int(THD *thd, struct st_mysql_sys_var *var,
|
|||||||
static int check_func_long(THD *thd, struct st_mysql_sys_var *var,
|
static int check_func_long(THD *thd, struct st_mysql_sys_var *var,
|
||||||
void *save, st_mysql_value *value)
|
void *save, st_mysql_value *value)
|
||||||
{
|
{
|
||||||
ulonglong tmp;
|
long long tmp;
|
||||||
struct my_option options;
|
struct my_option options;
|
||||||
value->val_int(value, &tmp, sizeof(tmp));
|
value->val_int(value, &tmp);
|
||||||
plugin_opt_set_limits(&options, var);
|
plugin_opt_set_limits(&options, var);
|
||||||
*(long *)save= (long) getopt_ull_limit_value(tmp, &options);
|
*(long *)save= (long) getopt_ull_limit_value(tmp, &options);
|
||||||
return (thd->variables.sql_mode & MODE_STRICT_ALL_TABLES) &&
|
return (thd->variables.sql_mode & MODE_STRICT_ALL_TABLES) &&
|
||||||
@ -1864,13 +1848,13 @@ static int check_func_long(THD *thd, struct st_mysql_sys_var *var,
|
|||||||
static int check_func_longlong(THD *thd, struct st_mysql_sys_var *var,
|
static int check_func_longlong(THD *thd, struct st_mysql_sys_var *var,
|
||||||
void *save, st_mysql_value *value)
|
void *save, st_mysql_value *value)
|
||||||
{
|
{
|
||||||
ulonglong tmp;
|
long long tmp;
|
||||||
struct my_option options;
|
struct my_option options;
|
||||||
value->val_int(value, &tmp, sizeof(tmp));
|
value->val_int(value, &tmp);
|
||||||
plugin_opt_set_limits(&options, var);
|
plugin_opt_set_limits(&options, var);
|
||||||
*(ulonglong *)save= getopt_ull_limit_value(tmp, &options);
|
*(ulonglong *)save= getopt_ull_limit_value(tmp, &options);
|
||||||
return (thd->variables.sql_mode & MODE_STRICT_ALL_TABLES) &&
|
return (thd->variables.sql_mode & MODE_STRICT_ALL_TABLES) &&
|
||||||
(*(ulonglong *)save != tmp);
|
(*(long long *)save != tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_func_str(THD *thd, struct st_mysql_sys_var *var,
|
static int check_func_str(THD *thd, struct st_mysql_sys_var *var,
|
||||||
@ -1894,7 +1878,7 @@ static int check_func_enum(THD *thd, struct st_mysql_sys_var *var,
|
|||||||
char buff[STRING_BUFFER_USUAL_SIZE];
|
char buff[STRING_BUFFER_USUAL_SIZE];
|
||||||
const char *strvalue= "NULL", *str;
|
const char *strvalue= "NULL", *str;
|
||||||
TYPELIB *typelib;
|
TYPELIB *typelib;
|
||||||
ulonglong tmp;
|
long long tmp;
|
||||||
long result;
|
long result;
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
@ -1916,7 +1900,7 @@ static int check_func_enum(THD *thd, struct st_mysql_sys_var *var,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (value->val_int(value, &tmp, sizeof(tmp)))
|
if (value->val_int(value, &tmp))
|
||||||
goto err;
|
goto err;
|
||||||
if (tmp >= typelib->count)
|
if (tmp >= typelib->count)
|
||||||
{
|
{
|
||||||
@ -1967,7 +1951,7 @@ static int check_func_set(THD *thd, struct st_mysql_sys_var *var,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (value->val_int(value, &tmp, sizeof(tmp)))
|
if (value->val_int(value, (long long *)&tmp))
|
||||||
goto err;
|
goto err;
|
||||||
if (unlikely((tmp >= (ULL(1) << typelib->count)) &&
|
if (unlikely((tmp >= (ULL(1) << typelib->count)) &&
|
||||||
(typelib->count < sizeof(long)*8)))
|
(typelib->count < sizeof(long)*8)))
|
||||||
@ -2156,7 +2140,7 @@ static st_bookmark *register_var(const char *plugin, const char *name,
|
|||||||
if (!(result= find_bookmark(NULL, varname + 1, flags)))
|
if (!(result= find_bookmark(NULL, varname + 1, flags)))
|
||||||
{
|
{
|
||||||
result= (st_bookmark*) alloc_root(&plugin_mem_root,
|
result= (st_bookmark*) alloc_root(&plugin_mem_root,
|
||||||
sizeof(struct st_bookmark) + length);
|
sizeof(struct st_bookmark) + length-1);
|
||||||
varname[0]= flags & PLUGIN_VAR_TYPEMASK;
|
varname[0]= flags & PLUGIN_VAR_TYPEMASK;
|
||||||
memcpy(result->key, varname, length);
|
memcpy(result->key, varname, length);
|
||||||
result->name_len= length - 2;
|
result->name_len= length - 2;
|
||||||
@ -2349,6 +2333,8 @@ static void cleanup_variables(THD *thd, struct system_variables *vars)
|
|||||||
}
|
}
|
||||||
rw_unlock(&LOCK_system_variables_hash);
|
rw_unlock(&LOCK_system_variables_hash);
|
||||||
|
|
||||||
|
DBUG_ASSERT(vars->table_plugin == NULL);
|
||||||
|
|
||||||
my_free(vars->dynamic_variables_ptr, MYF(MY_ALLOW_ZERO_PTR));
|
my_free(vars->dynamic_variables_ptr, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
vars->dynamic_variables_ptr= NULL;
|
vars->dynamic_variables_ptr= NULL;
|
||||||
vars->dynamic_variables_size= 0;
|
vars->dynamic_variables_size= 0;
|
||||||
@ -2680,10 +2666,9 @@ static my_bool get_one_option(int optid __attribute__((unused)),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int construct_options(MEM_ROOT *mem_root,
|
static int construct_options(MEM_ROOT *mem_root, struct st_plugin_int *tmp,
|
||||||
struct st_plugin_int *tmp,
|
my_option *options, my_bool **enabled,
|
||||||
my_option *options,
|
bool can_disable)
|
||||||
my_bool **enabled, bool can_disable)
|
|
||||||
{
|
{
|
||||||
const char *plugin_name= tmp->plugin->name;
|
const char *plugin_name= tmp->plugin->name;
|
||||||
uint namelen= strlen(plugin_name), optnamelen;
|
uint namelen= strlen(plugin_name), optnamelen;
|
||||||
@ -2707,7 +2692,7 @@ static int construct_options(MEM_ROOT *mem_root,
|
|||||||
if (can_disable)
|
if (can_disable)
|
||||||
{
|
{
|
||||||
strxmov(name + namelen*2 + 10, "Enable ", plugin_name, " plugin. "
|
strxmov(name + namelen*2 + 10, "Enable ", plugin_name, " plugin. "
|
||||||
"Disable with --skip-plugin-", name," (will save memory).", NullS);
|
"Disable with --skip-", name," (will save memory).", NullS);
|
||||||
|
|
||||||
options[0].comment= name + namelen*2 + 10;
|
options[0].comment= name + namelen*2 + 10;
|
||||||
}
|
}
|
||||||
@ -2868,7 +2853,7 @@ static int construct_options(MEM_ROOT *mem_root,
|
|||||||
|
|
||||||
options[1]= options[0];
|
options[1]= options[0];
|
||||||
options[1].name= p= (char*) alloc_root(mem_root, optnamelen + 8);
|
options[1].name= p= (char*) alloc_root(mem_root, optnamelen + 8);
|
||||||
options[1].comment= NULL; /* hide this option */
|
options[1].comment= 0; // hidden
|
||||||
strxmov(p, "plugin-", optname, NullS);
|
strxmov(p, "plugin-", optname, NullS);
|
||||||
|
|
||||||
options+= 2;
|
options+= 2;
|
||||||
@ -2883,19 +2868,23 @@ static my_option *construct_help_options(MEM_ROOT *mem_root,
|
|||||||
{
|
{
|
||||||
st_mysql_sys_var **opt;
|
st_mysql_sys_var **opt;
|
||||||
my_option *opts;
|
my_option *opts;
|
||||||
my_bool dummy;
|
my_bool dummy, can_disable;
|
||||||
my_bool *dummy2= &dummy;
|
my_bool *dummy2= &dummy;
|
||||||
uint count= EXTRA_OPTIONS;
|
uint count= EXTRA_OPTIONS;
|
||||||
DBUG_ENTER("construct_help_options");
|
DBUG_ENTER("construct_help_options");
|
||||||
|
|
||||||
for (opt= p->plugin->system_vars; opt && *opt; opt++, count++);
|
for (opt= p->plugin->system_vars; opt && *opt; opt++, count+= 2);
|
||||||
|
|
||||||
if (!(opts= (my_option*) alloc_root(mem_root, sizeof(my_option) * count)))
|
if (!(opts= (my_option*) alloc_root(mem_root, sizeof(my_option) * count)))
|
||||||
DBUG_RETURN(NULL);
|
DBUG_RETURN(NULL);
|
||||||
|
|
||||||
bzero(opts, sizeof(my_option) * count);
|
bzero(opts, sizeof(my_option) * count);
|
||||||
|
|
||||||
if (construct_options(mem_root, p, opts, &dummy2, FALSE))
|
can_disable=
|
||||||
|
my_strcasecmp(&my_charset_latin1, p->name.str, "MyISAM") &&
|
||||||
|
my_strcasecmp(&my_charset_latin1, p->name.str, "MEMORY");
|
||||||
|
|
||||||
|
if (construct_options(mem_root, p, opts, &dummy2, can_disable))
|
||||||
DBUG_RETURN(NULL);
|
DBUG_RETURN(NULL);
|
||||||
|
|
||||||
DBUG_RETURN(opts);
|
DBUG_RETURN(opts);
|
||||||
@ -2932,27 +2921,27 @@ static int test_plugin_options(MEM_ROOT *tmp_root, struct st_plugin_int *tmp,
|
|||||||
struct st_bookmark *var;
|
struct st_bookmark *var;
|
||||||
uint len, count= EXTRA_OPTIONS;
|
uint len, count= EXTRA_OPTIONS;
|
||||||
DBUG_ENTER("test_plugin_options");
|
DBUG_ENTER("test_plugin_options");
|
||||||
DBUG_ASSERT(tmp->plugin && tmp->plugin->name);
|
DBUG_ASSERT(tmp->plugin && tmp->name.str);
|
||||||
|
|
||||||
for (opt= tmp->plugin->system_vars; opt && *opt; opt++)
|
for (opt= tmp->plugin->system_vars; opt && *opt; opt++)
|
||||||
count+= 2; /* --{plugin}-{optname} and --plugin-{plugin}-{optname} */
|
count+= 2; /* --{plugin}-{optname} and --plugin-{plugin}-{optname} */
|
||||||
|
|
||||||
can_disable=
|
can_disable=
|
||||||
my_strcasecmp(&my_charset_latin1, tmp->plugin->name, "MyISAM") &&
|
my_strcasecmp(&my_charset_latin1, tmp->name.str, "MyISAM") &&
|
||||||
my_strcasecmp(&my_charset_latin1, tmp->plugin->name, "MEMORY");
|
my_strcasecmp(&my_charset_latin1, tmp->name.str, "MEMORY");
|
||||||
|
|
||||||
if (count > EXTRA_OPTIONS || (*argc > 1))
|
if (count > EXTRA_OPTIONS || (*argc > 1))
|
||||||
{
|
{
|
||||||
if (!(opts= (my_option*) alloc_root(tmp_root, sizeof(my_option) * count)))
|
if (!(opts= (my_option*) alloc_root(tmp_root, sizeof(my_option) * count)))
|
||||||
{
|
{
|
||||||
sql_print_error("Out of memory for plugin '%s'.", tmp->plugin->name);
|
sql_print_error("Out of memory for plugin '%s'.", tmp->name.str);
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
bzero(opts, sizeof(my_option) * count);
|
bzero(opts, sizeof(my_option) * count);
|
||||||
|
|
||||||
if (construct_options(tmp_root, tmp, opts, &enabled, can_disable))
|
if (construct_options(tmp_root, tmp, opts, &enabled, can_disable))
|
||||||
{
|
{
|
||||||
sql_print_error("Bad options for plugin '%s'.", tmp->plugin->name);
|
sql_print_error("Bad options for plugin '%s'.", tmp->name.str);
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2962,14 +2951,14 @@ static int test_plugin_options(MEM_ROOT *tmp_root, struct st_plugin_int *tmp,
|
|||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
sql_print_error("Parsing options for plugin '%s' failed.",
|
sql_print_error("Parsing options for plugin '%s' failed.",
|
||||||
tmp->plugin->name);
|
tmp->name.str);
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!*enabled && !can_disable)
|
if (!*enabled && !can_disable)
|
||||||
{
|
{
|
||||||
sql_print_warning("Plugin '%s' cannot be disabled", tmp->plugin->name);
|
sql_print_warning("Plugin '%s' cannot be disabled", tmp->name.str);
|
||||||
*enabled= TRUE;
|
*enabled= TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2980,13 +2969,13 @@ static int test_plugin_options(MEM_ROOT *tmp_root, struct st_plugin_int *tmp,
|
|||||||
if (((o= *opt)->flags & PLUGIN_VAR_NOSYSVAR))
|
if (((o= *opt)->flags & PLUGIN_VAR_NOSYSVAR))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ((var= find_bookmark(tmp->plugin->name, o->name, o->flags)))
|
if ((var= find_bookmark(tmp->name.str, o->name, o->flags)))
|
||||||
v= new (mem_root) sys_var_pluginvar(var->key + 1, o);
|
v= new (mem_root) sys_var_pluginvar(var->key + 1, o);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
len= strlen(tmp->plugin->name) + strlen(o->name) + 2;
|
len= tmp->name.length + strlen(o->name) + 2;
|
||||||
varname= (char*) alloc_root(mem_root, len);
|
varname= (char*) alloc_root(mem_root, len);
|
||||||
strxmov(varname, tmp->plugin->name, "-", o->name, NullS);
|
strxmov(varname, tmp->name.str, "-", o->name, NullS);
|
||||||
my_casedn_str(&my_charset_latin1, varname);
|
my_casedn_str(&my_charset_latin1, varname);
|
||||||
|
|
||||||
for (p= varname; *p; p++)
|
for (p= varname; *p; p++)
|
||||||
@ -3010,7 +2999,7 @@ static int test_plugin_options(MEM_ROOT *tmp_root, struct st_plugin_int *tmp,
|
|||||||
if (mysql_add_sys_var_chain(chain.first, NULL))
|
if (mysql_add_sys_var_chain(chain.first, NULL))
|
||||||
{
|
{
|
||||||
sql_print_error("Plugin '%s' has conflicting system variables",
|
sql_print_error("Plugin '%s' has conflicting system variables",
|
||||||
tmp->plugin->name);
|
tmp->name.str);
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
tmp->system_vars= chain.first;
|
tmp->system_vars= chain.first;
|
||||||
@ -3020,7 +3009,7 @@ static int test_plugin_options(MEM_ROOT *tmp_root, struct st_plugin_int *tmp,
|
|||||||
|
|
||||||
if (enabled_saved)
|
if (enabled_saved)
|
||||||
sql_print_information("Plugin '%s' disabled by command line option",
|
sql_print_information("Plugin '%s' disabled by command line option",
|
||||||
tmp->plugin->name);
|
tmp->name.str);
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -717,6 +717,11 @@ int ha_example::external_lock(THD *thd, int lock_type)
|
|||||||
|
|
||||||
Called from lock.cc by get_lock_data().
|
Called from lock.cc by get_lock_data().
|
||||||
|
|
||||||
|
@note
|
||||||
|
In this method one should NEVER rely on table->in_use, it may, in fact,
|
||||||
|
refer to a different thread! (this happens if get_lock_data() is called
|
||||||
|
from mysql_lock_abort_for_thread() function)
|
||||||
|
|
||||||
@see
|
@see
|
||||||
get_lock_data() in lock.cc
|
get_lock_data() in lock.cc
|
||||||
*/
|
*/
|
||||||
|
@ -6771,7 +6771,7 @@ ha_innobase::store_lock(
|
|||||||
ha_tx_isolation());
|
ha_tx_isolation());
|
||||||
}
|
}
|
||||||
|
|
||||||
DBUG_ASSERT(thd == ha_thd());
|
DBUG_ASSERT(thd == current_thd);
|
||||||
const bool in_lock_tables = thd_in_lock_tables(thd);
|
const bool in_lock_tables = thd_in_lock_tables(thd);
|
||||||
const uint sql_command = ha_sql_command();
|
const uint sql_command = ha_sql_command();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user