diff options
author | unknown <jimw@mysql.com> | 2006-04-30 09:43:26 -0700 |
---|---|---|
committer | unknown <jimw@mysql.com> | 2006-04-30 09:43:26 -0700 |
commit | 9f7548ae36faeed152160751ef9e8cc93abea5de (patch) | |
tree | bf3b1f1d96ac8393acffa8ef611566267ddaab3d | |
parent | 472f4a84d258624df901aa3096a733cf73c45c3b (diff) | |
parent | 96f58e1b268fdcf0c495efacd05268f1ad6f23ad (diff) | |
download | mariadb-git-9f7548ae36faeed152160751ef9e8cc93abea5de.tar.gz |
Merge mysql.com:/home/jimw/my/tmp_merge
into mysql.com:/home/jimw/my/mysql-5.1-clean
mysql-test/r/user_var.result:
Auto merged
mysql-test/r/variables.result:
Auto merged
mysql-test/t/variables.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/mysql-test-run.pl:
Resolve conflict
mysql-test/ndb/ndbcluster.sh:
Resolve conflict
sql/set_var.cc:
Resolve conflict
sql/share/errmsg.txt:
Resolve conflict
-rwxr-xr-x | mysql-test/mysql-test-run.pl | 136 | ||||
-rw-r--r-- | mysql-test/ndb/ndbcluster.sh | 2 | ||||
-rw-r--r-- | mysql-test/r/having.result | 13 | ||||
-rw-r--r-- | mysql-test/r/user_var.result | 3 | ||||
-rw-r--r-- | mysql-test/r/variables.result | 31 | ||||
-rw-r--r-- | mysql-test/t/having.test | 13 | ||||
-rw-r--r-- | mysql-test/t/user_var.test | 2 | ||||
-rw-r--r-- | mysql-test/t/variables.test | 40 | ||||
-rw-r--r-- | sql/item.cc | 18 | ||||
-rw-r--r-- | sql/item_func.cc | 6 | ||||
-rw-r--r-- | sql/set_var.cc | 26 | ||||
-rw-r--r-- | sql/share/errmsg.txt | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 4 |
13 files changed, 212 insertions, 84 deletions
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index c8d50990c14..4945b87408d 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -343,6 +343,7 @@ our @data_dir_lst; sub main (); sub initial_setup (); sub command_line_setup (); +sub snapshot_setup (); sub executable_setup (); sub environment_setup (); sub kill_running_server (); @@ -357,7 +358,7 @@ sub ndbcluster_install_slave (); sub ndbcluster_start_slave ($); sub ndbcluster_stop_slave (); sub run_benchmarks ($); -sub run_tests (); +sub initialize_servers (); sub mysql_install_db (); sub install_db ($$); sub run_testcase ($); @@ -388,7 +389,7 @@ sub main () { command_line_setup(); executable_setup(); - check_ndbcluster_support(); + check_ndbcluster_support(); # We check whether to actually use it later check_ssl_support(); environment_setup(); @@ -404,49 +405,37 @@ sub main () { gprof_prepare(); } - if ( ! $glob_use_running_server ) - { - if ( $opt_start_dirty ) - { - kill_running_server(); - } - else - { - kill_and_cleanup(); - mysql_install_db(); - if ( $opt_force ) - { - save_installed_db(); - } - } - } - - if ( $opt_start_dirty ) - { - if ( ndbcluster_start($opt_with_ndbcluster) ) - { - mtr_error("Can't start ndbcluster"); - } - if ( mysqld_start('master',0,[],[],$using_ndbcluster_master) ) - { - mtr_report("Servers started, exiting"); - } - else - { - mtr_error("Can't start the mysqld server"); - } - } - elsif ( $opt_bench ) + if ( $opt_bench ) { + initialize_servers(); run_benchmarks(shift); # Shift what? Extra arguments?! } elsif ( $opt_stress ) { + initialize_servers(); run_stress_test() } else { - run_tests(); + # Figure out which tests we are going to run + my $tests= collect_test_cases($opt_suite); + + # Turn off NDB and other similar options if no tests use it + my ($need_ndbcluster,$need_im,$need_slave); + foreach my $test (@$tests) + { + $need_ndbcluster||= $test->{ndb_test}; + $need_im||= $test->{component_id} eq 'im'; + $need_slave||= $test->{slave_num}; + } + $opt_with_ndbcluster= 0 unless $need_ndbcluster; + $opt_skip_im= 1 unless $need_im; + $opt_skip_rpl= 1 unless $need_slave; + + snapshot_setup(); + initialize_servers(); + + run_suite($opt_suite, $tests); } mtr_exit(0); @@ -996,20 +985,29 @@ sub command_line_setup () { $path_mysqltest_log= "$opt_vardir/log/mysqltest.log"; $path_snapshot= "$opt_tmpdir/snapshot_$opt_master_myport/"; +} + +sub snapshot_setup () { # Make a list of all data_dirs @data_dir_lst = ( $master->[0]->{'path_myddir'}, - $master->[1]->{'path_myddir'}, - $slave->[0]->{'path_myddir'}, - $slave->[1]->{'path_myddir'}, - $slave->[2]->{'path_myddir'}); + $master->[1]->{'path_myddir'}); - foreach my $instance (@{$instance_manager->{'instances'}}) + unless ($opt_skip_rpl) { - push(@data_dir_lst, $instance->{'path_datadir'}); + push @data_dir_lst, ($slave->[0]->{'path_myddir'}, + $slave->[1]->{'path_myddir'}, + $slave->[2]->{'path_myddir'}); } + unless ($opt_skip_im) + { + foreach my $instance (@{$instance_manager->{'instances'}}) + { + push(@data_dir_lst, $instance->{'path_datadir'}); + } + } } @@ -1440,7 +1438,7 @@ sub check_ndbcluster_support () { return; } - mtr_report("Using ndbcluster, mysqld supports it"); + mtr_report("Using ndbcluster if necessary, mysqld supports it"); $opt_with_ndbcluster= 1; if ( $opt_ndbconnectstring ) { @@ -1728,12 +1726,9 @@ sub run_benchmarks ($) { # FIXME how to specify several suites to run? Comma separated list? -sub run_tests () { - run_suite($opt_suite); -} sub run_suite () { - my $suite= shift; + my ($suite, $tests)= @_; mtr_print_thick_line(); @@ -1741,8 +1736,6 @@ sub run_suite () { mtr_timer_start($glob_timers,"suite", 60 * $opt_suite_timeout); - my $tests= collect_test_cases($suite); - mtr_report("Starting Tests in the '$suite' suite"); mtr_print_header(); @@ -1784,14 +1777,37 @@ sub run_suite () { # ############################################################################## +sub initialize_servers () { + if ( ! $glob_use_running_server ) + { + if ( $opt_start_dirty ) + { + kill_running_server(); + } + else + { + kill_and_cleanup(); + mysql_install_db(); + if ( $opt_force ) + { + save_installed_db(); + } + } + } +} + sub mysql_install_db () { # FIXME not exactly true I think, needs improvements install_db('master', $master->[0]->{'path_myddir'}); install_db('master', $master->[1]->{'path_myddir'}); - install_db('slave', $slave->[0]->{'path_myddir'}); - install_db('slave', $slave->[1]->{'path_myddir'}); - install_db('slave', $slave->[2]->{'path_myddir'}); + + if ( ! $opt_skip_rpl ) + { + install_db('slave', $slave->[0]->{'path_myddir'}); + install_db('slave', $slave->[1]->{'path_myddir'}); + install_db('slave', $slave->[2]->{'path_myddir'}); + } if ( ! $opt_skip_im ) { @@ -2243,10 +2259,11 @@ sub run_testcase ($) { } # ---------------------------------------------------------------------- - # If --start-and-exit given, stop here to let user manually run tests + # If --start-and-exit or --start-dirty given, stop here to let user manually + # run tests # ---------------------------------------------------------------------- - if ( $opt_start_and_exit ) + if ( $opt_start_and_exit or $opt_start_dirty ) { mtr_report("\nServers started, exiting"); exit(0); @@ -3700,11 +3717,12 @@ Misc options comment=STR Write STR to the output notimer Don't show test case execution time script-debug Debug this script itself - start-and-exit Only initiate and start the "mysqld" servers, use - the startup settings for the specified test case if any - start-dirty Only start the "mysqld" servers without initiation - fast Don't try to cleanup from earlier runs - reorder Reorder tests to get less server restarts + start-and-exit Only initialize and start the servers, using the + startup settings for the specified test case (if any) + start-dirty Only start the servers (without initialization) for + the specified test case (if any) + fast Don't try to clean up from earlier runs + reorder Reorder tests to get fewer server restarts help Get this help text unified-diff | udiff When presenting differences, use unified diff diff --git a/mysql-test/ndb/ndbcluster.sh b/mysql-test/ndb/ndbcluster.sh index d55b53da2ae..74f21fdef92 100644 --- a/mysql-test/ndb/ndbcluster.sh +++ b/mysql-test/ndb/ndbcluster.sh @@ -264,7 +264,7 @@ done # test if Ndb Cluster starts properly if [ `expr $VERBOSE \> 1` = 1 ] ; then - echo "Waiting for started..." + echo "Waiting for NDB data nodes to start..." fi if ( $exec_waiter ) | grep "NDBT_ProgramExit: 0 - OK" > /dev/null 2>&1 ; then :; else if [ `expr $VERBOSE \> 0` = 1 ] ; then diff --git a/mysql-test/r/having.result b/mysql-test/r/having.result index fe918e4c3ff..a37f260ff31 100644 --- a/mysql-test/r/having.result +++ b/mysql-test/r/having.result @@ -392,3 +392,16 @@ HAVING HU.PROJ.CITY = HU.STAFF.CITY); EMPNUM GRADE*1000 E3 13000 DROP SCHEMA HU; +USE test; +create table t1(f1 int); +select f1 from t1 having max(f1)=f1; +f1 +select f1 from t1 group by f1 having max(f1)=f1; +f1 +set session sql_mode='ONLY_FULL_GROUP_BY'; +select f1 from t1 having max(f1)=f1; +ERROR 42000: non-grouping field 'f1' is used in HAVING clause +select f1 from t1 group by f1 having max(f1)=f1; +f1 +set session sql_mode=''; +drop table t1; diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result index 8f2b89c18fd..9c3fdf0d8d2 100644 --- a/mysql-test/r/user_var.result +++ b/mysql-test/r/user_var.result @@ -215,9 +215,6 @@ select @@version; select @@global.version; @@global.version # -select @@session.VERSION; -@@session.VERSION -# set @first_var= NULL; create table t1 select @first_var; show create table t1; diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result index ec8a715de1b..43b32782c63 100644 --- a/mysql-test/r/variables.result +++ b/mysql-test/r/variables.result @@ -275,7 +275,7 @@ ERROR HY000: Variable 'autocommit' is a SESSION variable and can't be used with select @@global.timestamp; ERROR HY000: Variable 'timestamp' is a SESSION variable set @@version=''; -ERROR HY000: Unknown system variable 'version' +ERROR HY000: Variable 'version' is a read only variable set @@concurrent_insert=1; ERROR HY000: Variable 'concurrent_insert' is a GLOBAL variable and should be set with SET GLOBAL set @@global.sql_auto_is_null=1; @@ -384,6 +384,7 @@ select @@sql_max_join_size,@@max_join_size; set sql_quote_show_create=1; set sql_safe_updates=1; set sql_select_limit=1; +set sql_select_limit=default; set sql_warnings=1; set global table_open_cache=100; set storage_engine=myisam; @@ -584,3 +585,31 @@ set @@global.character_set_filesystem=default; select @@global.character_set_filesystem; @@global.character_set_filesystem binary +set @old_sql_big_selects = @@sql_big_selects; +set @@sql_big_selects = 1; +show variables like 'sql_big_selects'; +Variable_name Value +sql_big_selects ON +set @@sql_big_selects = @old_sql_big_selects; +set @@sql_notes = 0, @@sql_warnings = 0; +show variables like 'sql_notes'; +Variable_name Value +sql_notes OFF +show variables like 'sql_warnings'; +Variable_name Value +sql_warnings OFF +set @@sql_notes = 1, @@sql_warnings = 1; +show variables like 'sql_notes'; +Variable_name Value +sql_notes ON +show variables like 'sql_warnings'; +Variable_name Value +sql_warnings ON +select @@system_time_zone; +@@system_time_zone +# +select @@version, @@version_comment, @@version_compile_machine, +@@version_compile_os; +@@version @@version_comment @@version_compile_machine @@version_compile_os +# # # # +End of 5.0 tests diff --git a/mysql-test/t/having.test b/mysql-test/t/having.test index 9b21e544657..9bea78a7bca 100644 --- a/mysql-test/t/having.test +++ b/mysql-test/t/having.test @@ -393,3 +393,16 @@ SELECT EMPNUM, GRADE*1000 HAVING HU.PROJ.CITY = HU.STAFF.CITY); DROP SCHEMA HU; +USE test; +# +# Bug#18739: non-standard HAVING extension was allowed in strict ANSI sql mode. +# +create table t1(f1 int); +select f1 from t1 having max(f1)=f1; +select f1 from t1 group by f1 having max(f1)=f1; +set session sql_mode='ONLY_FULL_GROUP_BY'; +--error 1463 +select f1 from t1 having max(f1)=f1; +select f1 from t1 group by f1 having max(f1)=f1; +set session sql_mode=''; +drop table t1; diff --git a/mysql-test/t/user_var.test b/mysql-test/t/user_var.test index 61861c26ea8..e1b23a1782f 100644 --- a/mysql-test/t/user_var.test +++ b/mysql-test/t/user_var.test @@ -143,8 +143,6 @@ select @@Max_Allowed_Packet; select @@version; --replace_column 1 # select @@global.version; ---replace_column 1 # -select @@session.VERSION; # End of 4.1 tests diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 649265dcc5e..018337f2631 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -169,7 +169,7 @@ set collation_connection=NULL; set global autocommit=1; --error 1238 select @@global.timestamp; ---error 1193 +--error 1238 set @@version=''; --error 1229 set @@concurrent_insert=1; @@ -258,6 +258,8 @@ select @@sql_max_join_size,@@max_join_size; set sql_quote_show_create=1; set sql_safe_updates=1; set sql_select_limit=1; +# reset it, so later tests don't get confused +set sql_select_limit=default; set sql_warnings=1; set global table_open_cache=100; set storage_engine=myisam; @@ -472,4 +474,38 @@ select @@character_set_filesystem; set @@global.character_set_filesystem=default; select @@global.character_set_filesystem; -# End of 5.0 tests +# +# Bug #17849: Show sql_big_selects in SHOW VARIABLES +# +set @old_sql_big_selects = @@sql_big_selects; +set @@sql_big_selects = 1; +show variables like 'sql_big_selects'; +set @@sql_big_selects = @old_sql_big_selects; + +# +# Bug #16195: SHOW VARIABLES doesn't report correctly sql_warnings and +# sql_notes values +# +set @@sql_notes = 0, @@sql_warnings = 0; +show variables like 'sql_notes'; +show variables like 'sql_warnings'; +set @@sql_notes = 1, @@sql_warnings = 1; +show variables like 'sql_notes'; +show variables like 'sql_warnings'; + +# +# Bug #12792: @@system_time_zone is not SELECTable. +# +# Don't actually output, since it depends on the system +--replace_column 1 # +select @@system_time_zone; + +# +# Bug #15684: system variables cannot be SELECTed (e.g. @@version_comment) +# +# Don't actually output, since it depends on the system +--replace_column 1 # 2 # 3 # 4 # +select @@version, @@version_comment, @@version_compile_machine, + @@version_compile_os; + +--echo End of 5.0 tests diff --git a/sql/item.cc b/sql/item.cc index 4081aa1e1af..ddb7b1e9a78 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -3154,7 +3154,8 @@ static Item** find_field_in_group_list(Item *find_item, ORDER *group_list) both clauses contain different fields with the same names, a warning is issued that name of 'ref' is ambiguous. We extend ANSI SQL in that when no GROUP BY column is found, then a HAVING name is resolved as a possibly - derived SELECT column. + derived SELECT column. This extension is allowed only if the + MODE_ONLY_FULL_GROUP_BY sql mode isn't enabled. NOTES The resolution procedure is: @@ -3164,7 +3165,9 @@ static Item** find_field_in_group_list(Item *find_item, ORDER *group_list) in the GROUP BY clause of Q. - If found different columns with the same name in GROUP BY and SELECT - issue a warning and return the GROUP BY column, - - otherwise return the found SELECT column. + - otherwise + - if the MODE_ONLY_FULL_GROUP_BY mode is enabled return error + - else return the found SELECT column. RETURN @@ -3209,6 +3212,17 @@ resolve_ref_in_select_and_group(THD *thd, Item_ident *ref, SELECT_LEX *select) } } + if (thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY && + select_ref != not_found_item && !group_by_ref) + { + /* + Report the error if fields was found only in the SELECT item list and + the strict mode is enabled. + */ + my_error(ER_NON_GROUPING_FIELD_USED, MYF(0), + ref->name, "HAVING"); + return NULL; + } if (select_ref != not_found_item || group_by_ref) { if (select_ref != not_found_item && !ambiguous_fields) diff --git a/sql/item_func.cc b/sql/item_func.cc index 2e4d469d2d2..9281a8a1ddf 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -4559,12 +4559,6 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name, sys_var *var; LEX_STRING *base_name, *component_name; - if (component.str == 0 && - !my_strcasecmp(system_charset_info, name.str, "VERSION")) - return new Item_string(NULL, server_version, - (uint) strlen(server_version), - system_charset_info, DERIVATION_SYSCONST); - if (component.str) { base_name= &component; diff --git a/sql/set_var.cc b/sql/set_var.cc index 16a0c752639..a0cec361599 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -438,6 +438,8 @@ sys_var_thd_storage_engine sys_storage_engine("storage_engine", sys_var_sync_binlog_period sys_sync_binlog_period("sync_binlog", &sync_binlog_period); #endif sys_var_bool_ptr sys_sync_frm("sync_frm", &opt_sync_frm); +sys_var_const_str sys_system_time_zone("system_time_zone", + system_time_zone); sys_var_long_ptr sys_table_def_size("table_definition_cache", &table_def_size); sys_var_long_ptr sys_table_cache_size("table_open_cache", @@ -455,6 +457,13 @@ sys_var_thd_ulong sys_tmp_table_size("tmp_table_size", &SV::tmp_table_size); sys_var_bool_ptr sys_timed_mutexes("timed_mutexes", &timed_mutexes); +sys_var_const_str sys_version("version", server_version); +sys_var_const_str sys_version_comment("version_comment", + MYSQL_COMPILATION_COMMENT); +sys_var_const_str sys_version_compile_machine("version_compile_machine", + MACHINE_TYPE); +sys_var_const_str sys_version_compile_os("version_compile_os", + SYSTEM_TYPE); sys_var_thd_ulong sys_net_wait_timeout("wait_timeout", &SV::net_wait_timeout); @@ -622,7 +631,6 @@ sys_var_thd_time_zone sys_time_zone("time_zone"); /* Read only variables */ -sys_var_const_str sys_os("version_compile_os", SYSTEM_TYPE); sys_var_have_variable sys_have_archive_db("have_archive", &have_archive_db); sys_var_have_variable sys_have_berkeley_db("have_bdb", &have_berkeley_db); sys_var_have_variable sys_have_blackhole_db("have_blackhole_engine", @@ -949,10 +957,11 @@ SHOW_VAR init_vars[]= { #ifdef HAVE_SYS_UN_H {"socket", (char*) &mysqld_unix_port, SHOW_CHAR_PTR}, #endif - {sys_sort_buffer.name, (char*) &sys_sort_buffer, SHOW_SYS}, + {sys_sort_buffer.name, (char*) &sys_sort_buffer, SHOW_SYS}, + {sys_big_selects.name, (char*) &sys_big_selects, SHOW_SYS}, {sys_sql_mode.name, (char*) &sys_sql_mode, SHOW_SYS}, - {"sql_notes", (char*) &sys_sql_notes, SHOW_BOOL}, - {"sql_warnings", (char*) &sys_sql_warnings, SHOW_BOOL}, + {"sql_notes", (char*) &sys_sql_notes, SHOW_SYS}, + {"sql_warnings", (char*) &sys_sql_warnings, SHOW_SYS}, {sys_storage_engine.name, (char*) &sys_storage_engine, SHOW_SYS}, #ifdef HAVE_REPLICATION {sys_sync_binlog_period.name,(char*) &sys_sync_binlog_period, SHOW_SYS}, @@ -981,10 +990,11 @@ SHOW_VAR init_vars[]= { {sys_tx_isolation.name, (char*) &sys_tx_isolation, SHOW_SYS}, {sys_updatable_views_with_limit.name, (char*) &sys_updatable_views_with_limit,SHOW_SYS}, - {"version", server_version, SHOW_CHAR}, - {"version_comment", (char*) MYSQL_COMPILATION_COMMENT, SHOW_CHAR}, - {"version_compile_machine", (char*) MACHINE_TYPE, SHOW_CHAR}, - {sys_os.name, (char*) &sys_os, SHOW_SYS}, + {sys_version.name, (char*) &sys_version, SHOW_SYS}, + {sys_version_comment.name, (char*) &sys_version_comment, SHOW_SYS}, + {sys_version_compile_machine.name, (char*) &sys_version_compile_machine, + SHOW_SYS}, + {sys_version_compile_os.name, (char*) &sys_version_compile_os, SHOW_SYS}, {sys_net_wait_timeout.name, (char*) &sys_net_wait_timeout, SHOW_SYS}, {NullS, NullS, SHOW_LONG} }; diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index 4816f37bd32..01e66b35c0f 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5822,6 +5822,8 @@ ER_MAX_PREPARED_STMT_COUNT_REACHED 42000 eng "Can't create more than max_prepared_stmt_count statements (current value: %lu)" ER_VIEW_RECURSIVE eng "`%-.64s`.`%-.64s` contains view recursion" +ER_NON_GROUPING_FIELD_USED 42000 + eng "non-grouping field '%-.64s' is used in %-.64s clause" ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR eng "Cannot switch out of the row-based binary log format when the session has open temporary tables" ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT diff --git a/sql/sql_select.cc b/sql/sql_select.cc index aab126408f0..79b1c3836dc 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -12690,6 +12690,10 @@ setup_group(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables, if (item->type() != Item::SUM_FUNC_ITEM && !item->marker && !item->const_item()) { + /* + TODO: change ER_WRONG_FIELD_WITH_GROUP to more detailed + ER_NON_GROUPING_FIELD_USED + */ my_error(ER_WRONG_FIELD_WITH_GROUP, MYF(0), item->full_name()); return 1; } |