diff options
author | unknown <lenz@mysql.com> | 2005-06-21 10:37:29 +0200 |
---|---|---|
committer | unknown <lenz@mysql.com> | 2005-06-21 10:37:29 +0200 |
commit | 4d8c332f889ff02e4814d28ac33b920c97f932c1 (patch) | |
tree | bf9ff395b21a9f89d53b7dd0023a136cd02c3efe | |
parent | dca7c50e519e2b5bb89164799df87158117560f0 (diff) | |
parent | e74d5313738d853dd7108aeab12db96bfc26b489 (diff) | |
download | mariadb-git-4d8c332f889ff02e4814d28ac33b920c97f932c1.tar.gz |
Merge lgrimmer@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/space/my/mysql-4.1
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | VC++Files/client/mysqlclient.dsp | 4 | ||||
-rw-r--r-- | VC++Files/libmysql/libmysql.dsp | 4 | ||||
-rw-r--r-- | client/mysql.cc | 3 | ||||
-rw-r--r-- | myisam/ft_boolean_search.c | 2 | ||||
-rw-r--r-- | mysql-test/lib/mtr_cases.pl | 75 | ||||
-rw-r--r-- | mysql-test/lib/mtr_misc.pl | 52 | ||||
-rw-r--r-- | mysql-test/lib/mtr_report.pl | 7 | ||||
-rwxr-xr-x | mysql-test/mysql-test-run.pl | 214 | ||||
-rw-r--r-- | mysql-test/r/fulltext.result | 2 | ||||
-rw-r--r-- | mysql-test/r/group_by.result | 19 | ||||
-rw-r--r-- | mysql-test/r/ps.result | 6 | ||||
-rw-r--r-- | mysql-test/t/fulltext.test | 4 | ||||
-rw-r--r-- | mysql-test/t/group_by.test | 28 | ||||
-rw-r--r-- | mysql-test/t/ps.test | 12 | ||||
-rw-r--r-- | sql/Makefile.am | 13 | ||||
-rw-r--r-- | sql/field.h | 2 | ||||
-rw-r--r-- | sql/sql_insert.cc | 13 | ||||
-rw-r--r-- | sql/sql_select.cc | 11 | ||||
-rw-r--r-- | vio/viosocket.c | 1 |
20 files changed, 290 insertions, 184 deletions
diff --git a/Makefile.am b/Makefile.am index 93f34986a1b..ffa27220611 100644 --- a/Makefile.am +++ b/Makefile.am @@ -100,4 +100,4 @@ tags: # Test installation test: - cd mysql-test; ./mysql-test-run && ./mysql-test-run --ps-protocol + cd mysql-test; perl mysql-test-run.pl && perl mysql-test-run.pl --ps-protocol diff --git a/VC++Files/client/mysqlclient.dsp b/VC++Files/client/mysqlclient.dsp index 599bad92d7f..9a6fd933041 100644 --- a/VC++Files/client/mysqlclient.dsp +++ b/VC++Files/client/mysqlclient.dsp @@ -322,6 +322,10 @@ SOURCE=..\mysys\mulalloc.c # End Source File # Begin Source File +SOURCE=..\mysys\my_access.c +# End Source File +# Begin Source File + SOURCE=..\mysys\my_alloc.c # End Source File # Begin Source File diff --git a/VC++Files/libmysql/libmysql.dsp b/VC++Files/libmysql/libmysql.dsp index 21e393f137d..9bc7dfb8a1d 100644 --- a/VC++Files/libmysql/libmysql.dsp +++ b/VC++Files/libmysql/libmysql.dsp @@ -295,6 +295,10 @@ SOURCE=..\mysys\mulalloc.c # End Source File # Begin Source File +SOURCE=..\mysys\my_access.c +# End Source File +# Begin Source File + SOURCE=..\mysys\my_alloc.c # End Source File # Begin Source File diff --git a/client/mysql.cc b/client/mysql.cc index b9b9b938da0..5454c76e720 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -989,7 +989,8 @@ static int read_lines(bool execute_commands) a nil, it still needs the space in the linebuffer for it. This is, naturally, undocumented. */ - } while (linebuffer[0] <= linebuffer[1] + 1); + } while ((unsigned char)linebuffer[0] <= + (unsigned char)linebuffer[1] + 1); line= buffer.c_ptr(); #endif /* __NETWARE__ */ #else diff --git a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c index 62c68322595..8045ddd4657 100644 --- a/myisam/ft_boolean_search.c +++ b/myisam/ft_boolean_search.c @@ -398,7 +398,7 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, Hack: instead of init_queue, we'll use reinit queue to be able to alloc queue with alloc_root() */ - res=ftb->queue.max_elements=1+query_len/(min(ft_min_word_len,2)+1); + res=ftb->queue.max_elements=1+query_len/2; if (!(ftb->queue.root= (byte **)alloc_root(&ftb->mem_root, (res+1)*sizeof(void*)))) goto err; diff --git a/mysql-test/lib/mtr_cases.pl b/mysql-test/lib/mtr_cases.pl index c07f10c3bf7..72cbe72bc0a 100644 --- a/mysql-test/lib/mtr_cases.pl +++ b/mysql-test/lib/mtr_cases.pl @@ -4,6 +4,7 @@ # and is part of the translation of the Bourne shell script with the # same name. +use File::Basename; use strict; sub collect_test_cases ($); @@ -39,6 +40,7 @@ sub collect_test_cases ($) { if ( @::opt_cases ) { foreach my $tname ( @::opt_cases ) { # Run in specified order, no sort + $tname= basename($tname, ".test"); my $elem= "$tname.test"; if ( ! -f "$testdir/$elem") { @@ -161,52 +163,73 @@ sub collect_one_test_case($$$$$) { my $slave_sh= "$testdir/$tname-slave.sh"; my $disabled= "$testdir/$tname.disabled"; - $tinfo->{'master_opt'}= ["--default-time-zone=+3:00"]; - $tinfo->{'slave_opt'}= ["--default-time-zone=+3:00"]; + $tinfo->{'master_opt'}= $::glob_win32 ? ["--default-time-zone=+3:00"] : []; + $tinfo->{'slave_opt'}= $::glob_win32 ? ["--default-time-zone=+3:00"] : []; $tinfo->{'slave_mi'}= []; if ( -f $master_opt_file ) { $tinfo->{'master_restart'}= 1; # We think so for now - # This is a dirty hack from old mysql-test-run, we use the opt file - # to flag other things as well, it is not a opt list at all - $tinfo->{'master_opt'}= mtr_get_opts_from_file($master_opt_file); - foreach my $opt (@{$tinfo->{'master_opt'}}) + MASTER_OPT: { - my $value; + my $master_opt= mtr_get_opts_from_file($master_opt_file); - $value= mtr_match_prefix($opt, "--timezone="); - - if ( defined $value ) + foreach my $opt ( @$master_opt ) { - $tinfo->{'timezone'}= $value; - $tinfo->{'master_opt'}= []; - $tinfo->{'master_restart'}= 0; - last; - } + my $value; - $value= mtr_match_prefix($opt, "--result-file="); + # This is a dirty hack from old mysql-test-run, we use the opt + # file to flag other things as well, it is not a opt list at + # all - if ( defined $value ) - { - $tinfo->{'result_file'}= "r/$value.result"; - if ( $::opt_result_ext and $::opt_record or - -f "$tinfo->{'result_file'}$::opt_result_ext") + $value= mtr_match_prefix($opt, "--timezone="); + if ( defined $value ) + { + $tinfo->{'timezone'}= $value; + $tinfo->{'skip'}= 1 if $::glob_win32; # FIXME server unsets TZ + last MASTER_OPT; + } + + $value= mtr_match_prefix($opt, "--result-file="); + if ( defined $value ) + { + $tinfo->{'result_file'}= "r/$value.result"; + if ( $::opt_result_ext and $::opt_record or + -f "$tinfo->{'result_file'}$::opt_result_ext") + { + $tinfo->{'result_file'}.= $::opt_result_ext; + } + $tinfo->{'master_restart'}= 0; + last MASTER_OPT; + } + + # If we set default time zone, remove the one we have + $value= mtr_match_prefix($opt, "--default-time-zone="); + if ( defined $value ) { - $tinfo->{'result_file'}.= $::opt_result_ext; + $tinfo->{'master_opt'}= []; } - $tinfo->{'master_opt'}= []; - $tinfo->{'master_restart'}= 0; - last; + } + + # Ok, this was a real option list, add it + push(@{$tinfo->{'master_opt'}}, @$master_opt); } } if ( -f $slave_opt_file ) { - $tinfo->{'slave_opt'}= mtr_get_opts_from_file($slave_opt_file); $tinfo->{'slave_restart'}= 1; + my $slave_opt= mtr_get_opts_from_file($slave_opt_file); + + foreach my $opt ( @$slave_opt ) + { + # If we set default time zone, remove the one we have + my $value= mtr_match_prefix($opt, "--default-time-zone="); + $tinfo->{'slave_opt'}= [] if defined $value; + } + push(@{$tinfo->{'slave_opt'}}, @$slave_opt); } if ( -f $slave_mi_file ) diff --git a/mysql-test/lib/mtr_misc.pl b/mysql-test/lib/mtr_misc.pl index efa1b3bec21..aba6f78c9de 100644 --- a/mysql-test/lib/mtr_misc.pl +++ b/mysql-test/lib/mtr_misc.pl @@ -9,6 +9,9 @@ use strict; sub mtr_full_hostname (); sub mtr_init_args ($); sub mtr_add_arg ($$); +sub mtr_path_exists(@); +sub mtr_script_exists(@); +sub mtr_exe_exists(@); ############################################################################## # @@ -47,4 +50,53 @@ sub mtr_add_arg ($$) { push(@$args, sprintf($format, @fargs)); } +############################################################################## + +sub mtr_path_exists (@) { + foreach my $path ( @_ ) + { + return $path if -e $path; + } + if ( @_ == 1 ) + { + mtr_error("Could not find $_[0]"); + } + else + { + mtr_error("Could not find any of " . join(" ", @_)); + } +} + +sub mtr_script_exists (@) { + foreach my $path ( @_ ) + { + return $path if -x $path; + } + if ( @_ == 1 ) + { + mtr_error("Could not find $_[0]"); + } + else + { + mtr_error("Could not find any of " . join(" ", @_)); + } +} + +sub mtr_exe_exists (@) { + foreach my $path ( @_ ) + { + $path.= ".exe" if $::opt_win32; + return $path if -x $path; + } + if ( @_ == 1 ) + { + mtr_error("Could not find $_[0]"); + } + else + { + mtr_error("Could not find any of " . join(" ", @_)); + } +} + + 1; diff --git a/mysql-test/lib/mtr_report.pl b/mysql-test/lib/mtr_report.pl index a258d139bb1..0af34d11a3f 100644 --- a/mysql-test/lib/mtr_report.pl +++ b/mysql-test/lib/mtr_report.pl @@ -38,6 +38,13 @@ sub mtr_show_failed_diff ($) { my $result_file= "r/$tname.result"; my $eval_file= "r/$tname.eval"; + if ( $::opt_suite ne "main" ) + { + $reject_file= "$::glob_mysql_test_dir/suite/$::opt_suite/$reject_file"; + $result_file= "$::glob_mysql_test_dir/suite/$::opt_suite/$result_file"; + $eval_file= "$::glob_mysql_test_dir/suite/$::opt_suite/$eval_file"; + } + if ( -f $eval_file ) { $result_file= $eval_file; diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 6151dd68160..0ecc7bc6c52 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -264,6 +264,7 @@ our $opt_warnings; our $opt_udiff; +our $opt_skip_ndbcluster; our $opt_with_ndbcluster; our $opt_with_openssl; @@ -463,6 +464,7 @@ sub command_line_setup () { # Control what test suites or cases to run 'force' => \$opt_force, 'with-ndbcluster' => \$opt_with_ndbcluster, + 'skip-ndbcluster|skip-ndb' => \$opt_skip_ndbcluster, 'do-test=s' => \$opt_do_test, 'suite=s' => \$opt_suite, 'skip-rpl' => \$opt_skip_rpl, @@ -662,6 +664,11 @@ sub command_line_setup () { $opt_ndbconnectstring= "host=localhost:$opt_ndbcluster_port"; } + if ( $opt_skip_ndbcluster ) + { + $opt_with_ndbcluster= 0; + } + # FIXME #if ( $opt_valgrind or $opt_valgrind_all ) @@ -763,146 +770,83 @@ sub executable_setup () { if ( $opt_source_dist ) { - if ( $glob_use_embedded_server ) + if ( $glob_win32 ) { - if ( -f "$glob_basedir/libmysqld/examples/mysqltest" ) - { - $exe_mysqltest= "$glob_basedir/libmysqld/examples/mysqltest"; - } - else - { - mtr_error("Can't find embedded server 'mysqltest'"); - } - $exe_mysql_client_test= - "$glob_basedir/libmysqld/examples/mysql_client_test_embedded"; + $path_client_bindir= mtr_path_exists("$glob_basedir/client_release"); + $exe_mysqld= mtr_exe_exists ("$path_client_bindir/mysqld-nt"); + $path_language= mtr_path_exists("$glob_basedir/share/english/"); + $path_charsetsdir= mtr_path_exists("$glob_basedir/share/charsets"); } else { - if ( -f "$glob_basedir/client/.libs/lt-mysqltest" ) - { - $exe_mysqltest= "$glob_basedir/client/.libs/lt-mysqltest"; - } - elsif ( -f "$glob_basedir/client/.libs/mysqltest" ) - { - $exe_mysqltest= "$glob_basedir/client/.libs/mysqltest"; - } - else - { - $exe_mysqltest= "$glob_basedir/client/mysqltest"; - } - $exe_mysql_client_test= - "$glob_basedir/tests/mysql_client_test"; + $path_client_bindir= mtr_path_exists("$glob_basedir/client"); + $exe_mysqld= mtr_exe_exists ("$glob_basedir/sql/mysqld"); + $path_language= mtr_path_exists("$glob_basedir/sql/share/english/"); + $path_charsetsdir= mtr_path_exists("$glob_basedir/sql/share/charsets"); } - if ( -f "$glob_basedir/client/.libs/mysqldump" ) - { - $exe_mysqldump= "$glob_basedir/client/.libs/mysqldump"; - } - else - { - $exe_mysqldump= "$glob_basedir/client/mysqldump"; - } - if ( -f "$glob_basedir/client/.libs/mysqlshow" ) - { - $exe_mysqlshow= "$glob_basedir/client/.libs/mysqlshow"; - } - else - { - $exe_mysqlshow= "$glob_basedir/client/mysqlshow"; - } - if ( -f "$glob_basedir/client/.libs/mysqlbinlog" ) + + if ( $glob_use_embedded_server ) { - $exe_mysqlbinlog= "$glob_basedir/client/.libs/mysqlbinlog"; + my $path_examples= "$glob_basedir/libmysqld/examples"; + $exe_mysqltest= mtr_exe_exists("$path_examples/mysqltest"); + $exe_mysql_client_test= + mtr_exe_exists("$path_examples/mysql_client_test_embedded"); } else { - $exe_mysqlbinlog= "$glob_basedir/client/mysqlbinlog"; + $exe_mysqltest= mtr_exe_exists("$glob_basedir/client/mysqltest"); + $exe_mysql_client_test= + mtr_exe_exists("$glob_basedir/tests/mysql_client_test"); } - - $path_client_bindir= "$glob_basedir/client"; - $exe_mysqld= "$glob_basedir/sql/mysqld"; - $exe_mysqladmin= "$path_client_bindir/mysqladmin"; - $exe_mysql= "$path_client_bindir/mysql"; - $exe_mysql_fix_system_tables= "$glob_basedir/scripts/mysql_fix_privilege_tables"; - $path_language= "$glob_basedir/sql/share/english/"; - $path_charsetsdir= "$glob_basedir/sql/share/charsets"; - - $path_ndb_tools_dir= "$glob_basedir/ndb/tools"; - $exe_ndb_mgm= "$glob_basedir/ndb/src/mgmclient/ndb_mgm"; + $exe_mysqldump= mtr_exe_exists("$path_client_bindir/mysqldump"); + $exe_mysqlshow= mtr_exe_exists("$path_client_bindir/mysqlshow"); + $exe_mysqlbinlog= mtr_exe_exists("$path_client_bindir/mysqlbinlog"); + $exe_mysqladmin= mtr_exe_exists("$path_client_bindir/mysqladmin"); + $exe_mysql= mtr_exe_exists("$path_client_bindir/mysql"); + $exe_mysql_fix_system_tables= + mtr_script_exists("$glob_basedir/scripts/mysql_fix_privilege_tables"); + $path_ndb_tools_dir= mtr_path_exists("$glob_basedir/ndb/tools"); + $exe_ndb_mgm= "$glob_basedir/ndb/src/mgmclient/ndb_mgm"; } else { - my $path_tests_bindir= "$glob_basedir/tests"; - - $path_client_bindir= "$glob_basedir/bin"; - $exe_mysqltest= "$path_client_bindir/mysqltest"; - $exe_mysqldump= "$path_client_bindir/mysqldump"; - $exe_mysqlshow= "$path_client_bindir/mysqlshow"; - $exe_mysqlbinlog= "$path_client_bindir/mysqlbinlog"; - $exe_mysqladmin= "$path_client_bindir/mysqladmin"; - $exe_mysql= "$path_client_bindir/mysql"; - $exe_mysql_fix_system_tables= "$path_client_bindir/mysql_fix_privilege_tables"; - - if ( -d "$glob_basedir/share/mysql/english" ) - { - $path_language ="$glob_basedir/share/mysql/english/"; - $path_charsetsdir ="$glob_basedir/share/mysql/charsets"; - } - else - { - $path_language ="$glob_basedir/share/english/"; - $path_charsetsdir ="$glob_basedir/share/charsets"; - } - - if ( -x "$glob_basedir/libexec/mysqld" ) - { - $exe_mysqld= "$glob_basedir/libexec/mysqld"; - } - else - { - $exe_mysqld= "$glob_basedir/bin/mysqld"; - } + $path_client_bindir= mtr_path_exists("$glob_basedir/bin"); + $exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest"); + $exe_mysqldump= mtr_exe_exists("$path_client_bindir/mysqldump"); + $exe_mysqlshow= mtr_exe_exists("$path_client_bindir/mysqlshow"); + $exe_mysqlbinlog= mtr_exe_exists("$path_client_bindir/mysqlbinlog"); + $exe_mysqladmin= mtr_exe_exists("$path_client_bindir/mysqladmin"); + $exe_mysql= mtr_exe_exists("$path_client_bindir/mysql"); + $exe_mysql_fix_system_tables= + mtr_script_exists("$path_client_bindir/mysql_fix_privilege_tables"); + + $path_language= mtr_path_exists("$glob_basedir/share/mysql/english/", + "$glob_basedir/share/english/"); + $path_charsetsdir= mtr_path_exists("$glob_basedir/share/mysql/charsets", + "$glob_basedir/share/charsets"); + $exe_mysqld= mtr_exe_exists ("$glob_basedir/libexec/mysqld", + "$glob_basedir/bin/mysqld"); if ( $glob_use_embedded_server ) { - if ( -f "$path_client_bindir/mysqltest_embedded" ) - { - # FIXME valgrind? - $exe_mysqltest="$path_client_bindir/mysqltest_embedded"; - } - else - { - mtr_error("Cannot find embedded server 'mysqltest_embedded'"); - } - if ( -d "$path_tests_bindir/mysql_client_test_embedded" ) - { - $exe_mysql_client_test= - "$path_tests_bindir/mysql_client_test_embedded"; - } - else - { - $exe_mysql_client_test= - "$path_client_bindir/mysql_client_test_embedded"; - } + $exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest_embedded"); + $exe_mysql_client_test= + mtr_exe_exists("$glob_basedir/tests/mysql_client_test_embedded", + "$path_client_bindir/mysql_client_test_embedded"); } else { - $exe_mysqltest="$path_client_bindir/mysqltest"; - $exe_mysql_client_test="$path_client_bindir/mysql_client_test"; + $exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest"); + $exe_mysql_client_test= + mtr_exe_exists("$path_client_bindir/mysql_client_test"); } $path_ndb_tools_dir= "$glob_basedir/bin"; $exe_ndb_mgm= "$glob_basedir/bin/ndb_mgm"; } - if ( ! $exe_master_mysqld ) - { - $exe_master_mysqld= $exe_mysqld; - } - - if ( ! $exe_slave_mysqld ) - { - $exe_slave_mysqld= $exe_mysqld; - } + $exe_master_mysqld= $exe_master_mysqld || $exe_mysqld; + $exe_slave_mysqld= $exe_slave_mysqld || $exe_mysqld; $path_ndb_backup_dir= "$opt_vardir/ndbcluster-$opt_ndbcluster_port"; @@ -921,15 +865,19 @@ sub executable_setup () { sub environment_setup () { # -------------------------------------------------------------------------- - # Set LD_LIBRARY_PATH if we are using shared libraries + # We might not use a standard installation directory, like /usr/lib. + # Set LD_LIBRARY_PATH to make sure we find our installed libraries. # -------------------------------------------------------------------------- - $ENV{'LD_LIBRARY_PATH'}= - "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . - ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : ""); - $ENV{'DYLD_LIBRARY_PATH'}= - "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . - ($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : ""); + unless ( $opt_source_dist ) + { + $ENV{'LD_LIBRARY_PATH'}= + "$glob_basedir/lib" . + ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : ""); + $ENV{'DYLD_LIBRARY_PATH'}= + "$glob_basedir/lib" . + ($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : ""); + } # -------------------------------------------------------------------------- # Also command lines in .opt files may contain env vars @@ -1020,11 +968,6 @@ sub kill_and_cleanup () { mtr_report("Removing Stale Files"); - if ( -l $opt_vardir and ! unlink($opt_vardir) ) - { - mtr_error("Can't remove soft link \"$opt_vardir\""); - } - rmtree("$opt_vardir/log"); rmtree("$opt_vardir/ndbcluster-$opt_ndbcluster_port"); rmtree("$opt_vardir/run"); @@ -1722,6 +1665,11 @@ sub mysqld_arguments ($$$$$) { mtr_add_arg($args, "%s--local-infile", $prefix); mtr_add_arg($args, "%s--datadir=%s", $prefix, $master->[$idx]->{'path_myddir'}); + + if ( $opt_skip_ndbcluster ) + { + mtr_add_arg($args, "%s--skip-ndbcluster", $prefix); + } } if ( $type eq 'slave' ) @@ -1862,19 +1810,11 @@ sub mysqld_arguments ($$$$$) { mtr_add_arg($args, "%s--rpl-recovery-rank=1", $prefix); mtr_add_arg($args, "%s--init-rpl-role=master", $prefix); } - else + elsif ( $type eq 'master' ) { mtr_add_arg($args, "%s--exit-info=256", $prefix); mtr_add_arg($args, "%s--open-files-limit=1024", $prefix); - - if ( $type eq 'master' ) - { - mtr_add_arg($args, "%s--log=%s", $prefix, $master->[0]->{'path_mylog'}); - } - if ( $type eq 'slave' ) - { - mtr_add_arg($args, "%s--log=%s", $prefix, $slave->[0]->{'path_mylog'}); - } + mtr_add_arg($args, "%s--log=%s", $prefix, $master->[0]->{'path_mylog'}); } return $args; diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result index dd5b0407eb3..7ac7e1ca72b 100644 --- a/mysql-test/r/fulltext.result +++ b/mysql-test/r/fulltext.result @@ -338,7 +338,7 @@ insert into t2 values (3, 1, 'xxbuz'); select * from t1 join t2 using(`t1_id`) where match (t1.name, t2.name) against('xxfoo' in boolean mode); t1_id name t2_id t1_id name 1 data1 1 1 xxfoo -select * from t2 where match name against ('a* b* c* d* e* f*' in boolean mode); +select * from t2 where match name against ('*a*b*c*d*e*f*' in boolean mode); t2_id t1_id name drop table t1,t2; create table t1 (a text, fulltext key (a)); diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 3e082fa04e3..e279fca2a9d 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -722,3 +722,22 @@ WHERE hostname LIKE '%aol%' GROUP BY hostname; hostname no cache-dtc-af05.proxy.aol.com 1 +DROP TABLE t1; +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 VALUES (1,2), (1,3); +SELECT a, b FROM t1 GROUP BY 'const'; +a b +1 2 +SELECT DISTINCT a, b FROM t1 GROUP BY 'const'; +a b +1 2 +DROP TABLE t1; +CREATE TABLE t1 (id INT, dt DATETIME); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +SELECT dt DIV 1 AS f, id FROM t1 GROUP BY f; +f id +20050501123000 1 +DROP TABLE t1; diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result index d66114fe44e..ca38f1c75cb 100644 --- a/mysql-test/r/ps.result +++ b/mysql-test/r/ps.result @@ -557,3 +557,9 @@ id 3 deallocate prepare stmt; drop table t1, t2; +create table t1 (id int); +prepare stmt from "insert into t1 (id) select id from t1 union select id from t1"; +execute stmt; +execute stmt; +deallocate prepare stmt; +drop table t1; diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test index 4809f6f0357..d5493daf63e 100644 --- a/mysql-test/t/fulltext.test +++ b/mysql-test/t/fulltext.test @@ -253,9 +253,9 @@ insert into t2 values (3, 1, 'xxbuz'); select * from t1 join t2 using(`t1_id`) where match (t1.name, t2.name) against('xxfoo' in boolean mode); # -# bug with many short (< ft_min_word_len) words in boolean search +# Bug #7858: bug with many short (< ft_min_word_len) words in boolean search # -select * from t2 where match name against ('a* b* c* d* e* f*' in boolean mode); +select * from t2 where match name against ('*a*b*c*d*e*f*' in boolean mode); drop table t1,t2; # diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test index 21d5abcc287..382580cbd4e 100644 --- a/mysql-test/t/group_by.test +++ b/mysql-test/t/group_by.test @@ -1,3 +1,4 @@ + # Initialise --disable_warnings drop table if exists t1,t2,t3; @@ -524,7 +525,7 @@ select min(b) from t1; drop table t1; # -# Test for bug #11088: GROUP BY a BLOB colimn with COUNT(DISTINCT column1) +# Test for bug #11088: GROUP BY a BLOB column with COUNT(DISTINCT column1) # CREATE TABLE t1 (id int PRIMARY KEY, user_id int, hostname longtext); @@ -539,3 +540,28 @@ SELECT hostname, COUNT(DISTINCT user_id) as no FROM t1 WHERE hostname LIKE '%aol%' GROUP BY hostname; +DROP TABLE t1; + +# +# Test for bug #8614: GROUP BY 'const' with DISTINCT +# + +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 VALUES (1,2), (1,3); +SELECT a, b FROM t1 GROUP BY 'const'; +SELECT DISTINCT a, b FROM t1 GROUP BY 'const'; + +DROP TABLE t1; + +# +# Test for bug #11385: GROUP BY for datetime converted to decimals +# + +CREATE TABLE t1 (id INT, dt DATETIME); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' ); +SELECT dt DIV 1 AS f, id FROM t1 GROUP BY f; + +DROP TABLE t1; diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test index 96b83a09497..bb1052c7337 100644 --- a/mysql-test/t/ps.test +++ b/mysql-test/t/ps.test @@ -569,3 +569,15 @@ select t2.id from t2, t1 where (t1.id=1 and t2.t1_id=t1.id); deallocate prepare stmt; drop table t1, t2; + +# +# Bug#11060 "Server crashes on calling stored procedure with INSERT SELECT +# UNION SELECT" aka "Server crashes on re-execution of prepared INSERT ... +# SELECT with UNION". +# +create table t1 (id int); +prepare stmt from "insert into t1 (id) select id from t1 union select id from t1"; +execute stmt; +execute stmt; +deallocate prepare stmt; +drop table t1; diff --git a/sql/Makefile.am b/sql/Makefile.am index f812bbe72af..a76adbd0d57 100644 --- a/sql/Makefile.am +++ b/sql/Makefile.am @@ -104,8 +104,8 @@ DEFS = -DMYSQL_SERVER \ -DDATADIR="\"$(MYSQLDATAdir)\"" \ -DSHAREDIR="\"$(MYSQLSHAREdir)\"" \ @DEFS@ -# Don't put lex_hash.h in BUILT_SOURCES as this will give infinite recursion -BUILT_SOURCES = sql_yacc.cc sql_yacc.h + +BUILT_SOURCES = sql_yacc.cc sql_yacc.h lex_hash.h EXTRA_DIST = udf_example.cc $(BUILT_SOURCES) AM_YFLAGS = -d @@ -123,9 +123,6 @@ link_sources: mysql_tzinfo_to_sql.cc rm -f my_time.c @LN_CP_F@ ../sql-common/my_time.c my_time.c -gen_lex_hash.o: gen_lex_hash.cc lex.h - $(CXXCOMPILE) -c $(INCLUDES) $< - mysql_tzinfo_to_sql.o: $(mysql_tzinfo_to_sql_SOURCES) $(CXXCOMPILE) -c $(INCLUDES) -DTZINFO2SQL $< @@ -140,13 +137,9 @@ sql_yacc.o: sql_yacc.cc sql_yacc.h $(HEADERS) @echo "If it fails, re-run configure with --with-low-memory" $(CXXCOMPILE) $(LM_CFLAGS) -c $< -lex_hash.h: lex.h gen_lex_hash.cc sql_yacc.h - $(MAKE) gen_lex_hash$(EXEEXT) +lex_hash.h: gen_lex_hash$(EXEEXT) ./gen_lex_hash$(EXEEXT) > $@ -# Hack to ensure that lex_hash.h is built early -sql_lex.o: lex_hash.h - # For testing of udf_example.so; Works on platforms with gcc # (This is not part of our build process but only provided as an example) udf_example.so: udf_example.cc diff --git a/sql/field.h b/sql/field.h index 1d7669d540d..ba963418c7a 100644 --- a/sql/field.h +++ b/sql/field.h @@ -25,6 +25,7 @@ #endif #define NOT_FIXED_DEC 31 +#define DATETIME_DEC 6 class Send_field; class Protocol; @@ -861,6 +862,7 @@ public: enum ha_base_keytype key_type() const { return HA_KEYTYPE_ULONGLONG; } #endif enum Item_result cmp_type () const { return INT_RESULT; } + uint decimals() const { return DATETIME_DEC; } int store(const char *to,uint length,CHARSET_INFO *charset); int store(double nr); int store(longlong nr); diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 718e6b00ddc..b90de7e93cc 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1578,10 +1578,21 @@ bool delayed_insert::handle_inserts(void) int select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u) { + int res; + LEX *lex= thd->lex; + SELECT_LEX *lex_current_select_save= lex->current_select; DBUG_ENTER("select_insert::prepare"); unit= u; - if (check_insert_fields(thd, table, *fields, values)) + /* + Since table in which we are going to insert is added to the first + select, LEX::current_select should point to the first select while + we are fixing fields from insert list. + */ + lex->current_select= &lex->select_lex; + res= check_insert_fields(thd, table, *fields, values); + lex->current_select= lex_current_select_save; + if (res) DBUG_RETURN(1); restore_record(table,default_values); // Get empty record diff --git a/sql/sql_select.cc b/sql/sql_select.cc index afb221b03ba..5bafe1a7df4 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -678,9 +678,14 @@ JOIN::optimize() DBUG_RETURN(1); } simple_group= 0; - group_list= remove_const(this, group_list, conds, - rollup.state == ROLLUP::STATE_NONE, - &simple_group); + { + ORDER *old_group_list; + group_list= remove_const(this, (old_group_list= group_list), conds, + rollup.state == ROLLUP::STATE_NONE, + &simple_group); + if (old_group_list && !group_list) + select_distinct= 0; + } if (!group_list && group) { order=0; // The output has only one row diff --git a/vio/viosocket.c b/vio/viosocket.c index 172d9127dc2..904b75583a9 100644 --- a/vio/viosocket.c +++ b/vio/viosocket.c @@ -379,6 +379,7 @@ int vio_close_pipe(Vio * vio) void vio_ignore_timeout(Vio *vio __attribute__((unused)), + uint which __attribute__((unused)), uint timeout __attribute__((unused))) { } |