mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge
This commit is contained in:
@@ -843,6 +843,8 @@ extern void *memdup_root(MEM_ROOT *root,const void *str, size_t len);
|
|||||||
extern int get_defaults_options(int argc, char **argv,
|
extern int get_defaults_options(int argc, char **argv,
|
||||||
char **defaults, char **extra_defaults,
|
char **defaults, char **extra_defaults,
|
||||||
char **group_suffix);
|
char **group_suffix);
|
||||||
|
extern int my_load_defaults(const char *conf_file, const char **groups,
|
||||||
|
int *argc, char ***argv, const char ***);
|
||||||
extern int load_defaults(const char *conf_file, const char **groups,
|
extern int load_defaults(const char *conf_file, const char **groups,
|
||||||
int *argc, char ***argv);
|
int *argc, char ***argv);
|
||||||
extern int modify_defaults_file(const char *file_location, const char *option,
|
extern int modify_defaults_file(const char *file_location, const char *option,
|
||||||
@@ -850,7 +852,8 @@ extern int modify_defaults_file(const char *file_location, const char *option,
|
|||||||
const char *section_name, int remove_option);
|
const char *section_name, int remove_option);
|
||||||
extern int my_search_option_files(const char *conf_file, int *argc,
|
extern int my_search_option_files(const char *conf_file, int *argc,
|
||||||
char ***argv, uint *args_used,
|
char ***argv, uint *args_used,
|
||||||
Process_option_func func, void *func_ctx);
|
Process_option_func func, void *func_ctx,
|
||||||
|
const char **default_directories);
|
||||||
extern void free_defaults(char **argv);
|
extern void free_defaults(char **argv);
|
||||||
extern void my_print_default_files(const char *conf_file);
|
extern void my_print_default_files(const char *conf_file);
|
||||||
extern void print_defaults(const char *conf_file, const char **groups);
|
extern void print_defaults(const char *conf_file, const char **groups);
|
||||||
|
@@ -3,27 +3,44 @@
|
|||||||
# in test cases and can be reused. #
|
# in test cases and can be reused. #
|
||||||
######################################################
|
######################################################
|
||||||
|
|
||||||
# Bug#41307: Tests using include/ndb_backup.inc won't work on Windows due to
|
|
||||||
# 'grep' call
|
|
||||||
# This test is disabled on Windows via the next line until the above bug is
|
|
||||||
# resolved
|
|
||||||
--source include/not_windows.inc
|
|
||||||
|
|
||||||
--exec $NDB_MGM --no-defaults --ndb-connectstring="$NDB_CONNECTSTRING" -e "start backup" >> $NDB_TOOLS_OUTPUT
|
--exec $NDB_MGM --no-defaults --ndb-connectstring="$NDB_CONNECTSTRING" -e "start backup" >> $NDB_TOOLS_OUTPUT
|
||||||
|
|
||||||
# there is no neat way to find the backupid, this is a hack to find it...
|
# To find the backupid, we must dump this data to a table, and SELECT
|
||||||
let $dump_file= $MYSQLTEST_VARDIR/tmp/tmp.dat;
|
# what we want into an outfile. This could be accomplished with grep, but
|
||||||
--exec $NDB_TOOLS_DIR/ndb_select_all --ndb-connectstring="$NDB_CONNECTSTRING" -d sys --delimiter=',' SYSTAB_0 | grep 520093696 > $dump_file
|
# grep isn't Windows-portable
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
--disable_query_log
|
||||||
|
# create a table to help us out
|
||||||
|
--disable_warnings # leave this on until done with the entire process
|
||||||
|
# cleanup
|
||||||
|
DROP TABLE IF EXISTS helper1;
|
||||||
|
CREATE TABLE helper1(c1 VARCHAR(20));
|
||||||
|
# dump raw data to file
|
||||||
|
let $ndb_backup_file1= $MYSQLTEST_VARDIR/ndb_backup_tmp.dat;
|
||||||
|
let $ndb_backup_file2= $MYSQLTEST_VARDIR/tmp.dat;
|
||||||
|
--error 0,1
|
||||||
|
--remove_file $ndb_backup_file1
|
||||||
|
--exec $NDB_TOOLS_DIR/ndb_select_all --ndb-connectstring="$NDB_CONNECTSTRING" -d sys --delimiter=',' SYSTAB_0 > $ndb_backup_file1
|
||||||
|
# load the table from the raw data file
|
||||||
|
eval LOAD DATA INFILE '$ndb_backup_file1' INTO TABLE helper1;
|
||||||
|
--remove_file $ndb_backup_file1
|
||||||
|
# output what we need
|
||||||
|
eval SELECT * FROM helper1 WHERE c1 LIKE '%520093696%'
|
||||||
|
INTO OUTFILE '$ndb_backup_file2';
|
||||||
|
# cleanup
|
||||||
|
DROP TABLE helper1;
|
||||||
|
--enable_warnings
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
--replace_result $dump_file DUMP_FILE
|
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||||
eval LOAD DATA INFILE '$dump_file' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
|
||||||
|
eval LOAD DATA INFILE '$ndb_backup_file2' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||||
|
--remove_file $ndb_backup_file2
|
||||||
|
|
||||||
# Load backup id into environment variable
|
# Load backup id into environment variable
|
||||||
let the_backup_id=`SELECT backup_id from test.backup_info`;
|
let the_backup_id=`SELECT backup_id from test.backup_info`;
|
||||||
|
|
||||||
DROP TABLE test.backup_info;
|
DROP TABLE test.backup_info;
|
||||||
|
|
||||||
remove_file $dump_file;
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -4416,4 +4416,32 @@ date_nokey
|
|||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Incorrect date value: '10:41:7' for column 'date_nokey' at row 1
|
Warning 1292 Incorrect date value: '10:41:7' for column 'date_nokey' at row 1
|
||||||
DROP TABLE A,C;
|
DROP TABLE A,C;
|
||||||
|
CREATE TABLE t1 (a INT NOT NULL, b INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 1);
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND a=a) OR b > 2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t1 system NULL NULL NULL NULL 1 100.00
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select '1' AS `a`,'1' AS `b` from `test`.`t1` where 1
|
||||||
|
SELECT * FROM t1 WHERE (a=a AND a=a) OR b > 2;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, c INT NOT NULL);
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND b=b AND c=c) OR b > 20;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select '0' AS `a`,'0' AS `b`,'0' AS `c` from `test`.`t1` where 1
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND a=a AND b=b) OR b > 20;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select '0' AS `a`,'0' AS `b`,'0' AS `c` from `test`.`t1` where 1
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND b=b AND a=a) OR b > 20;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select '0' AS `a`,'0' AS `b`,'0' AS `c` from `test`.`t1` where 1
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@@ -131,8 +131,9 @@ create table t9 engine=myisam as select * from t9_c;
|
|||||||
create table t10 engine=myisam as select * from t10_c;
|
create table t10 engine=myisam as select * from t10_c;
|
||||||
ForceVarPart: 0
|
ForceVarPart: 0
|
||||||
ForceVarPart: 1
|
ForceVarPart: 1
|
||||||
CREATE TEMPORARY TABLE test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||||
LOAD DATA INFILE 'DUMP_FILE' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||||
|
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||||
DROP TABLE test.backup_info;
|
DROP TABLE test.backup_info;
|
||||||
drop table t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c,t10_c;
|
drop table t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c,t10_c;
|
||||||
ForceVarPart: 0
|
ForceVarPart: 0
|
||||||
@@ -286,8 +287,9 @@ auto_increment
|
|||||||
10001
|
10001
|
||||||
ALTER TABLE t7_c
|
ALTER TABLE t7_c
|
||||||
PARTITION BY LINEAR KEY (`dardtestard`);
|
PARTITION BY LINEAR KEY (`dardtestard`);
|
||||||
CREATE TEMPORARY TABLE test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||||
LOAD DATA INFILE 'DUMP_FILE' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||||
|
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||||
DROP TABLE test.backup_info;
|
DROP TABLE test.backup_info;
|
||||||
drop table t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c,t10_c;
|
drop table t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c,t10_c;
|
||||||
select count(*) from t1;
|
select count(*) from t1;
|
||||||
@@ -490,8 +492,9 @@ select * from t9_c) a;
|
|||||||
count(*)
|
count(*)
|
||||||
3
|
3
|
||||||
drop table t1_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c,t10_c;
|
drop table t1_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c,t10_c;
|
||||||
CREATE TEMPORARY TABLE test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||||
LOAD DATA INFILE 'DUMP_FILE' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||||
|
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||||
DROP TABLE test.backup_info;
|
DROP TABLE test.backup_info;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
|
||||||
drop table if exists t2_c;
|
drop table if exists t2_c;
|
||||||
|
@@ -227,8 +227,9 @@ hex(h3) NULL
|
|||||||
hex(i1) NULL
|
hex(i1) NULL
|
||||||
hex(i2) NULL
|
hex(i2) NULL
|
||||||
hex(i3) NULL
|
hex(i3) NULL
|
||||||
CREATE TEMPORARY TABLE test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||||
LOAD DATA INFILE 'DUMP_FILE' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||||
|
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||||
DROP TABLE test.backup_info;
|
DROP TABLE test.backup_info;
|
||||||
1;0x1;0x17;0x789A;0x789ABCDE;0xFEDC0001;127;255;32767;65535;2147483647;4294967295;9223372036854775807;18446744073709551615;1;12345678901234567890123456789012;123456789;1;12345678901234567890123456789012;123456789;0x12;0x123456789ABCDEF0;0x012345;0x12;0x123456789ABCDEF0;0x00123450
|
1;0x1;0x17;0x789A;0x789ABCDE;0xFEDC0001;127;255;32767;65535;2147483647;4294967295;9223372036854775807;18446744073709551615;1;12345678901234567890123456789012;123456789;1;12345678901234567890123456789012;123456789;0x12;0x123456789ABCDEF0;0x012345;0x12;0x123456789ABCDEF0;0x00123450
|
||||||
2;0x0;0x0;0x0;0x0;0x0;-128;0;-32768;0;-2147483648;0;-9223372036854775808;0;;;;;;;0x0;0x0;0x0;0x0;0x0;0x0
|
2;0x0;0x0;0x0;0x0;0x0;-128;0;-32768;0;-2147483648;0;-9223372036854775808;0;;;;;;;0x0;0x0;0x0;0x0;0x0;0x0
|
||||||
@@ -257,8 +258,9 @@ create table t4 (pk int key, a int) engine ndb;
|
|||||||
insert into t2 values (1,11),(2,12),(3,13),(4,14),(5,15);
|
insert into t2 values (1,11),(2,12),(3,13),(4,14),(5,15);
|
||||||
insert into t3 values (1,21),(2,22),(3,23),(4,24),(5,25);
|
insert into t3 values (1,21),(2,22),(3,23),(4,24),(5,25);
|
||||||
insert into t4 values (1,31),(2,32),(3,33),(4,34),(5,35);
|
insert into t4 values (1,31),(2,32),(3,33),(4,34),(5,35);
|
||||||
CREATE TEMPORARY TABLE test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||||
LOAD DATA INFILE 'DUMP_FILE' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||||
|
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||||
DROP TABLE test.backup_info;
|
DROP TABLE test.backup_info;
|
||||||
'1' '1' '12345678901234567890123456789012' '123456789' '1' '12345678901234567890123456789012' '123456789' '0x20' '0x123456789ABCDEF020' '0x012345000020' '0x1200000020' '0x123456789ABCDEF000000020' '0x00123450000020'
|
'1' '1' '12345678901234567890123456789012' '123456789' '1' '12345678901234567890123456789012' '123456789' '0x20' '0x123456789ABCDEF020' '0x012345000020' '0x1200000020' '0x123456789ABCDEF000000020' '0x00123450000020'
|
||||||
|
|
||||||
@@ -297,8 +299,9 @@ create table t1
|
|||||||
insert into t1 values(1, 8388607, 16777215);
|
insert into t1 values(1, 8388607, 16777215);
|
||||||
insert into t1 values(2, -8388608, 0);
|
insert into t1 values(2, -8388608, 0);
|
||||||
insert into t1 values(3, -1, 1);
|
insert into t1 values(3, -1, 1);
|
||||||
CREATE TEMPORARY TABLE test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||||
LOAD DATA INFILE 'DUMP_FILE' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||||
|
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||||
DROP TABLE test.backup_info;
|
DROP TABLE test.backup_info;
|
||||||
1;8388607;16777215
|
1;8388607;16777215
|
||||||
2;-8388608;0
|
2;-8388608;0
|
||||||
|
@@ -3769,4 +3769,20 @@ SELECT date_nokey FROM C
|
|||||||
|
|
||||||
DROP TABLE A,C;
|
DROP TABLE A,C;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #42957: no results from
|
||||||
|
# select where .. (col=col and col=col) or ... (false expression)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT NOT NULL, b INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 1);
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND a=a) OR b > 2;
|
||||||
|
SELECT * FROM t1 WHERE (a=a AND a=a) OR b > 2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, c INT NOT NULL);
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND b=b AND c=c) OR b > 20;
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND a=a AND b=b) OR b > 20;
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND b=b AND a=a) OR b > 20;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@@ -152,7 +152,7 @@ static char *remove_end_comment(char *ptr);
|
|||||||
|
|
||||||
int my_search_option_files(const char *conf_file, int *argc, char ***argv,
|
int my_search_option_files(const char *conf_file, int *argc, char ***argv,
|
||||||
uint *args_used, Process_option_func func,
|
uint *args_used, Process_option_func func,
|
||||||
void *func_ctx)
|
void *func_ctx, const char **default_directories)
|
||||||
{
|
{
|
||||||
const char **dirs, *forced_default_file, *forced_extra_defaults;
|
const char **dirs, *forced_default_file, *forced_extra_defaults;
|
||||||
int error= 0;
|
int error= 0;
|
||||||
@@ -359,9 +359,8 @@ int get_defaults_options(int argc, char **argv,
|
|||||||
return org_argc - argc;
|
return org_argc - argc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read options from configurations files
|
Wrapper around my_load_defaults() for interface compatibility.
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
load_defaults()
|
load_defaults()
|
||||||
@@ -372,6 +371,35 @@ int get_defaults_options(int argc, char **argv,
|
|||||||
argc Pointer to argc of original program
|
argc Pointer to argc of original program
|
||||||
argv Pointer to argv of original program
|
argv Pointer to argv of original program
|
||||||
|
|
||||||
|
NOTES
|
||||||
|
|
||||||
|
This function is NOT thread-safe as it uses a global pointer internally.
|
||||||
|
See also notes for my_load_defaults().
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
0 ok
|
||||||
|
1 The given conf_file didn't exists
|
||||||
|
*/
|
||||||
|
int load_defaults(const char *conf_file, const char **groups,
|
||||||
|
int *argc, char ***argv)
|
||||||
|
{
|
||||||
|
return my_load_defaults(conf_file, groups, argc, argv, &default_directories);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Read options from configurations files
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
my_load_defaults()
|
||||||
|
conf_file Basename for configuration file to search for.
|
||||||
|
If this is a path, then only this file is read.
|
||||||
|
groups Which [group] entrys to read.
|
||||||
|
Points to an null terminated array of pointers
|
||||||
|
argc Pointer to argc of original program
|
||||||
|
argv Pointer to argv of original program
|
||||||
|
default_directories Pointer to a location where a pointer to the list
|
||||||
|
of default directories will be stored
|
||||||
|
|
||||||
IMPLEMENTATION
|
IMPLEMENTATION
|
||||||
|
|
||||||
Read options from configuration files and put them BEFORE the arguments
|
Read options from configuration files and put them BEFORE the arguments
|
||||||
@@ -386,13 +414,18 @@ int get_defaults_options(int argc, char **argv,
|
|||||||
that was put in *argv
|
that was put in *argv
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
0 ok
|
- If successful, 0 is returned. If 'default_directories' is not NULL,
|
||||||
1 The given conf_file didn't exists
|
a pointer to the array of default directory paths is stored to a location
|
||||||
|
it points to. That stored value must be passed to my_search_option_files()
|
||||||
|
later.
|
||||||
|
|
||||||
|
- 1 is returned if the given conf_file didn't exist. In this case, the
|
||||||
|
value pointed to by default_directories is undefined.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
int load_defaults(const char *conf_file, const char **groups,
|
int my_load_defaults(const char *conf_file, const char **groups,
|
||||||
int *argc, char ***argv)
|
int *argc, char ***argv, const char ***default_directories)
|
||||||
{
|
{
|
||||||
DYNAMIC_ARRAY args;
|
DYNAMIC_ARRAY args;
|
||||||
TYPELIB group;
|
TYPELIB group;
|
||||||
@@ -402,10 +435,11 @@ int load_defaults(const char *conf_file, const char **groups,
|
|||||||
MEM_ROOT alloc;
|
MEM_ROOT alloc;
|
||||||
char *ptr,**res;
|
char *ptr,**res;
|
||||||
struct handle_option_ctx ctx;
|
struct handle_option_ctx ctx;
|
||||||
|
const char **dirs;
|
||||||
DBUG_ENTER("load_defaults");
|
DBUG_ENTER("load_defaults");
|
||||||
|
|
||||||
init_alloc_root(&alloc,512,0);
|
init_alloc_root(&alloc,512,0);
|
||||||
if ((default_directories= init_default_directories(&alloc)) == NULL)
|
if ((dirs= init_default_directories(&alloc)) == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
/*
|
/*
|
||||||
Check if the user doesn't want any default option processing
|
Check if the user doesn't want any default option processing
|
||||||
@@ -426,6 +460,8 @@ int load_defaults(const char *conf_file, const char **groups,
|
|||||||
(*argc)--;
|
(*argc)--;
|
||||||
*argv=res;
|
*argv=res;
|
||||||
*(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
|
*(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
|
||||||
|
if (default_directories)
|
||||||
|
*default_directories= dirs;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -444,7 +480,8 @@ int load_defaults(const char *conf_file, const char **groups,
|
|||||||
ctx.group= &group;
|
ctx.group= &group;
|
||||||
|
|
||||||
error= my_search_option_files(conf_file, argc, argv, &args_used,
|
error= my_search_option_files(conf_file, argc, argv, &args_used,
|
||||||
handle_default_option, (void *) &ctx);
|
handle_default_option, (void *) &ctx,
|
||||||
|
dirs);
|
||||||
/*
|
/*
|
||||||
Here error contains <> 0 only if we have a fully specified conf_file
|
Here error contains <> 0 only if we have a fully specified conf_file
|
||||||
or a forced default file
|
or a forced default file
|
||||||
@@ -490,6 +527,10 @@ int load_defaults(const char *conf_file, const char **groups,
|
|||||||
puts("");
|
puts("");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (error == 0 && default_directories)
|
||||||
|
*default_directories= dirs;
|
||||||
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
|
|
||||||
err:
|
err:
|
||||||
@@ -895,15 +936,11 @@ void my_print_default_files(const char *conf_file)
|
|||||||
fputs(conf_file,stdout);
|
fputs(conf_file,stdout);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
const char **dirs;
|
||||||
If default_directories is already initialized, use it. Otherwise,
|
|
||||||
use a private MEM_ROOT.
|
|
||||||
*/
|
|
||||||
const char **dirs = default_directories;
|
|
||||||
MEM_ROOT alloc;
|
MEM_ROOT alloc;
|
||||||
init_alloc_root(&alloc,512,0);
|
init_alloc_root(&alloc,512,0);
|
||||||
|
|
||||||
if (!dirs && (dirs= init_default_directories(&alloc)) == NULL)
|
if ((dirs= init_default_directories(&alloc)) == NULL)
|
||||||
{
|
{
|
||||||
fputs("Internal error initializing default directories list", stdout);
|
fputs("Internal error initializing default directories list", stdout);
|
||||||
}
|
}
|
||||||
|
@@ -536,7 +536,8 @@ int Instance_map::load()
|
|||||||
*/
|
*/
|
||||||
if (my_search_option_files(Options::Main::config_file, &argc,
|
if (my_search_option_files(Options::Main::config_file, &argc,
|
||||||
(char ***) &argv, &args_used,
|
(char ***) &argv, &args_used,
|
||||||
process_option, (void*) this))
|
process_option, (void*) this,
|
||||||
|
Options::default_directories))
|
||||||
log_info("Falling back to compiled-in defaults.");
|
log_info("Falling back to compiled-in defaults.");
|
||||||
|
|
||||||
return complete_initialization();
|
return complete_initialization();
|
||||||
|
@@ -86,6 +86,7 @@ const char *Options::Main::bind_address= NULL; /* No default value */
|
|||||||
uint Options::Main::monitoring_interval= DEFAULT_MONITORING_INTERVAL;
|
uint Options::Main::monitoring_interval= DEFAULT_MONITORING_INTERVAL;
|
||||||
uint Options::Main::port_number= DEFAULT_PORT;
|
uint Options::Main::port_number= DEFAULT_PORT;
|
||||||
my_bool Options::Main::mysqld_safe_compatible= FALSE;
|
my_bool Options::Main::mysqld_safe_compatible= FALSE;
|
||||||
|
const char **Options::default_directories= NULL;
|
||||||
|
|
||||||
/* Options::User_management */
|
/* Options::User_management */
|
||||||
|
|
||||||
@@ -439,7 +440,8 @@ int Options::load(int argc, char **argv)
|
|||||||
log_info("Loading config file '%s'...",
|
log_info("Loading config file '%s'...",
|
||||||
(const char *) Main::config_file);
|
(const char *) Main::config_file);
|
||||||
|
|
||||||
load_defaults(Main::config_file, default_groups, &argc, &saved_argv);
|
my_load_defaults(Main::config_file, default_groups, &argc,
|
||||||
|
&saved_argv, &default_directories);
|
||||||
|
|
||||||
if ((handle_options(&argc, &saved_argv, my_long_options, get_one_option)))
|
if ((handle_options(&argc, &saved_argv, my_long_options, get_one_option)))
|
||||||
return ERR_INVALID_USAGE;
|
return ERR_INVALID_USAGE;
|
||||||
|
@@ -91,6 +91,9 @@ struct Options
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/* Array of paths to be passed to my_search_option_files() later */
|
||||||
|
static const char **default_directories;
|
||||||
|
|
||||||
static int load(int argc, char **argv);
|
static int load(int argc, char **argv);
|
||||||
static void cleanup();
|
static void cleanup();
|
||||||
|
|
||||||
|
@@ -1021,7 +1021,7 @@ void mysql_read_default_options(struct st_mysql_options *options,
|
|||||||
argc=1; argv=argv_buff; argv_buff[0]= (char*) "client";
|
argc=1; argv=argv_buff; argv_buff[0]= (char*) "client";
|
||||||
groups[0]= (char*) "client"; groups[1]= (char*) group; groups[2]=0;
|
groups[0]= (char*) "client"; groups[1]= (char*) group; groups[2]=0;
|
||||||
|
|
||||||
load_defaults(filename, groups, &argc, &argv);
|
my_load_defaults(filename, groups, &argc, &argv, NULL);
|
||||||
if (argc != 1) /* If some default option */
|
if (argc != 1) /* If some default option */
|
||||||
{
|
{
|
||||||
char **option=argv;
|
char **option=argv;
|
||||||
|
@@ -1652,7 +1652,7 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
|
|||||||
pthread_mutex_lock(&LOCK_plugin);
|
pthread_mutex_lock(&LOCK_plugin);
|
||||||
rw_wrlock(&LOCK_system_variables_hash);
|
rw_wrlock(&LOCK_system_variables_hash);
|
||||||
|
|
||||||
load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv);
|
my_load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv, NULL);
|
||||||
error= plugin_add(thd->mem_root, name, dl, &argc, argv, REPORT_TO_USER);
|
error= plugin_add(thd->mem_root, name, dl, &argc, argv, REPORT_TO_USER);
|
||||||
if (argv)
|
if (argv)
|
||||||
free_defaults(argv);
|
free_defaults(argv);
|
||||||
|
@@ -7625,7 +7625,7 @@ static COND *build_equal_items_for_cond(THD *thd, COND *cond,
|
|||||||
if (and_level)
|
if (and_level)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Retrieve all conjucts of this level detecting the equality
|
Retrieve all conjuncts of this level detecting the equality
|
||||||
that are subject to substitution by multiple equality items and
|
that are subject to substitution by multiple equality items and
|
||||||
removing each such predicate from the conjunction after having
|
removing each such predicate from the conjunction after having
|
||||||
found/created a multiple equality whose inference the predicate is.
|
found/created a multiple equality whose inference the predicate is.
|
||||||
@@ -7641,6 +7641,13 @@ static COND *build_equal_items_for_cond(THD *thd, COND *cond,
|
|||||||
li.remove();
|
li.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Check if we eliminated all the predicates of the level, e.g.
|
||||||
|
(a=a AND b=b AND a=a)
|
||||||
|
*/
|
||||||
|
if (!(args->elements + cond_equal.current_level.elements + eq_list.elements))
|
||||||
|
return new Item_int((longlong) 1,1);
|
||||||
|
|
||||||
List_iterator_fast<Item_equal> it(cond_equal.current_level);
|
List_iterator_fast<Item_equal> it(cond_equal.current_level);
|
||||||
while ((item_equal= it++))
|
while ((item_equal= it++))
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user