mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge neptunus.(none):/home/msvensson/mysql/bug20589/my50-bug20589
into neptunus.(none):/home/msvensson/mysql/mysql-5.0-maint
This commit is contained in:
@ -59,12 +59,14 @@ dist-hook:
|
||||
$(INSTALL_DATA) $(srcdir)/t/*.opt $(srcdir)/t/*.slave-mi $(distdir)/t
|
||||
$(INSTALL_SCRIPT) $(srcdir)/t/*.sh $(distdir)/t
|
||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include
|
||||
$(INSTALL_DATA) $(srcdir)/include/*.test $(distdir)/include
|
||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/Moscow_leap $(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.000001 $(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.frm $(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.MY* $(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/lib/init_db.sql $(distdir)/lib
|
||||
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
|
||||
@ -88,6 +90,7 @@ install-data-local:
|
||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(DESTDIR)$(testdir)/r
|
||||
$(INSTALL_DATA) $(srcdir)/r/*.require $(DESTDIR)$(testdir)/r
|
||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
||||
$(INSTALL_DATA) $(srcdir)/include/*.test $(DESTDIR)$(testdir)/include
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.*001 $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(DESTDIR)$(testdir)/std_data
|
||||
@ -95,6 +98,7 @@ install-data-local:
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/Moscow_leap $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.frm $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.MY* $(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/lib/init_db.sql $(DESTDIR)$(testdir)/lib
|
||||
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib
|
||||
|
@ -5,7 +5,7 @@ source ./include/master-slave.inc;
|
||||
# remote table creation
|
||||
|
||||
connection slave;
|
||||
--replicate-ignore-db=federated
|
||||
#--replicate-ignore-db=federated
|
||||
stop slave;
|
||||
|
||||
--disable_warnings
|
||||
|
@ -1,6 +1,6 @@
|
||||
delimiter |;
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
CREATE PROCEDURE sp_vars_check_dflt()
|
||||
BEGIN
|
||||
@ -40,7 +40,7 @@ BEGIN
|
||||
SELECT v17, v18, v19, v20;
|
||||
END|
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
CREATE PROCEDURE sp_vars_check_assignment()
|
||||
BEGIN
|
||||
@ -89,35 +89,35 @@ BEGIN
|
||||
SELECT d1, d2, d3;
|
||||
END|
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
CREATE FUNCTION sp_vars_check_ret1() RETURNS TINYINT
|
||||
BEGIN
|
||||
RETURN 1e200;
|
||||
END|
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
CREATE FUNCTION sp_vars_check_ret2() RETURNS TINYINT
|
||||
BEGIN
|
||||
RETURN 10 * 10 * 10;
|
||||
END|
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
CREATE FUNCTION sp_vars_check_ret3() RETURNS TINYINT
|
||||
BEGIN
|
||||
RETURN 'Hello, world';
|
||||
END|
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
CREATE FUNCTION sp_vars_check_ret4() RETURNS DECIMAL(64, 2)
|
||||
BEGIN
|
||||
RETURN 12 * 10 + 34 + 0.1234;
|
||||
END|
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
CREATE FUNCTION sp_vars_div_zero() RETURNS INTEGER
|
||||
BEGIN
|
||||
@ -126,6 +126,6 @@ BEGIN
|
||||
RETURN div_zero;
|
||||
END|
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
delimiter ;|
|
||||
|
@ -2,6 +2,10 @@
|
||||
# Test for strict-mode autoincrement
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
set @org_mode=@@sql_mode;
|
||||
eval create table t1
|
||||
(
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 1997-2002 MySQL AB
|
||||
# Copyright (C) 1997-2006 MySQL AB
|
||||
# For a more info consult the file COPYRIGHT distributed with this file
|
||||
|
||||
# This scripts creates the privilege tables db, host, user, tables_priv,
|
||||
@ -7,19 +7,26 @@
|
||||
|
||||
if [ x$1 = x"--bin" ]; then
|
||||
shift 1
|
||||
BINARY_DIST=1
|
||||
|
||||
bindir=../bin
|
||||
scriptdir=../bin
|
||||
libexecdir=../libexec
|
||||
|
||||
# Check if it's a binary distribution or a 'make install'
|
||||
if test -x ../libexec/mysqld
|
||||
then
|
||||
execdir=../libexec
|
||||
elif test -x ../../sbin/mysqld # RPM installation
|
||||
then
|
||||
execdir=../../sbin
|
||||
bindir=../../bin
|
||||
scriptdir=../../bin
|
||||
libexecdir=../../libexec
|
||||
else
|
||||
execdir=../bin
|
||||
fi
|
||||
bindir=../bin
|
||||
BINARY_DIST=1
|
||||
fix_bin=mysql-test
|
||||
scriptdir=../bin
|
||||
libexecdir=../libexec
|
||||
else
|
||||
execdir=../sql
|
||||
bindir=../client
|
||||
|
@ -13,6 +13,8 @@ sub mtr_tofile ($@);
|
||||
sub mtr_tonewfile($@);
|
||||
sub mtr_lastlinefromfile($);
|
||||
sub mtr_appendfile_to_file ($$);
|
||||
sub mtr_grab_file($);
|
||||
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
@ -128,6 +130,7 @@ sub unspace {
|
||||
return "$quote$string$quote";
|
||||
}
|
||||
|
||||
# Read a whole file, stripping leading and trailing whitespace.
|
||||
sub mtr_fromfile ($) {
|
||||
my $file= shift;
|
||||
|
||||
@ -181,5 +184,16 @@ sub mtr_appendfile_to_file ($$) {
|
||||
close TOFILE;
|
||||
}
|
||||
|
||||
# Read a whole file verbatim.
|
||||
sub mtr_grab_file($) {
|
||||
my $file= shift;
|
||||
open(FILE, '<', $file)
|
||||
or return undef;
|
||||
local $/= undef;
|
||||
my $data= scalar(<FILE>);
|
||||
close FILE;
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
@ -708,7 +708,7 @@ sub mtr_wait_blocking($) {
|
||||
}
|
||||
}
|
||||
|
||||
# Start "mysqladmin shutdown" for a specific mysqld
|
||||
# Start "mysqladmin <command>" for a specific mysqld
|
||||
sub mtr_mysqladmin_start($$$) {
|
||||
my $srv= shift;
|
||||
my $command= shift;
|
||||
@ -738,9 +738,8 @@ sub mtr_mysqladmin_start($$$) {
|
||||
# Shutdown time must be high as slave may be in reconnect
|
||||
mtr_add_arg($args, "--shutdown_timeout=$adm_shutdown_tmo");
|
||||
mtr_add_arg($args, "$command");
|
||||
my $path_mysqladmin_log= "$::opt_vardir/log/mysqladmin.log";
|
||||
my $pid= mtr_spawn($::exe_mysqladmin, $args,
|
||||
"", $path_mysqladmin_log, $path_mysqladmin_log, "",
|
||||
"", "", "", "",
|
||||
{ append_log_file => 1 });
|
||||
mtr_verbose("mtr_mysqladmin_start, pid: $pid");
|
||||
return $pid;
|
||||
|
@ -94,10 +94,14 @@ sub mtr_report_test_skipped ($) {
|
||||
{
|
||||
print "[ disabled ] $tinfo->{'comment'}\n";
|
||||
}
|
||||
else
|
||||
elsif ( $tinfo->{'comment'} )
|
||||
{
|
||||
print "[ skipped ] $tinfo->{'comment'}\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print "[ skipped ]\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub mtr_report_tests_not_skipped_though_disabled ($) {
|
||||
|
156
mysql-test/lib/mtr_unique.pl
Normal file
156
mysql-test/lib/mtr_unique.pl
Normal file
@ -0,0 +1,156 @@
|
||||
#
|
||||
# This file is used from mysql-test-run.pl when choosing
|
||||
# port numbers and directories to use for running mysqld.
|
||||
#
|
||||
|
||||
use strict;
|
||||
use Fcntl ':flock';
|
||||
|
||||
#
|
||||
# Requested IDs are stored in a hash and released upon END.
|
||||
#
|
||||
my %mtr_unique_assigned_ids = ();
|
||||
END {
|
||||
while(my ($id,$file) = each(%mtr_unique_assigned_ids)) {
|
||||
print "Autoreleasing $file:$id\n";
|
||||
mtr_release_unique_id($file, $id);
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Require a unique, numerical ID, given a file name (where all
|
||||
# requested IDs are stored), a minimum and a maximum value.
|
||||
#
|
||||
# We use flock to implement locking for the ID file and ignore
|
||||
# possible problems arising from lack of support for it on
|
||||
# some platforms (it should work on most, and the possible
|
||||
# race condition would occur rarely). The proper solution for
|
||||
# this is a daemon that manages IDs, of course.
|
||||
#
|
||||
# If no unique ID within the specified parameters can be
|
||||
# obtained, return undef.
|
||||
#
|
||||
sub mtr_require_unique_id($$$) {
|
||||
my $file = shift;
|
||||
my $min = shift;
|
||||
my $max = shift;
|
||||
my $ret = undef;
|
||||
my $changed = 0;
|
||||
|
||||
my $can_use_ps = `ps -e | grep '^[ ]*$$ '`;
|
||||
|
||||
if(eval("readlink '$file'") || eval("readlink '$file.sem'")) {
|
||||
die 'lock file is a symbolic link';
|
||||
}
|
||||
|
||||
chmod 0777, "$file.sem";
|
||||
open SEM, ">", "$file.sem" or die "can't write to $file.sem";
|
||||
flock SEM, LOCK_EX or die "can't lock $file.sem";
|
||||
if(! -e $file) {
|
||||
open FILE, ">", $file or die "can't create $file";
|
||||
close FILE;
|
||||
}
|
||||
|
||||
if(eval("readlink '$file'") || eval("readlink '$file.sem'")) {
|
||||
die 'lock file is a symbolic link';
|
||||
}
|
||||
|
||||
chmod 0777, $file;
|
||||
open FILE, "+<", $file or die "can't open $file";
|
||||
select undef,undef,undef,0.2;
|
||||
seek FILE, 0, 0;
|
||||
my %taken = ();
|
||||
while(<FILE>) {
|
||||
chomp;
|
||||
my ($id, $pid) = split / /;
|
||||
$taken{$id} = $pid;
|
||||
if($can_use_ps) {
|
||||
my $res = `ps -e | grep '^[ ]*$pid '`;
|
||||
if(!$res) {
|
||||
print "Ignoring slot $id used by missing process $pid.\n";
|
||||
delete $taken{$id};
|
||||
++$changed;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(my $i=$min; $i<=$max; ++$i) {
|
||||
if(! exists $taken{$i}) {
|
||||
$ret = $i;
|
||||
$taken{$i} = $$;
|
||||
++$changed;
|
||||
last;
|
||||
}
|
||||
}
|
||||
if($changed) {
|
||||
seek FILE, 0, 0;
|
||||
truncate FILE, 0 or die "can't truncate $file";
|
||||
for my $k (keys %taken) {
|
||||
print FILE $k . ' ' . $taken{$k} . "\n";
|
||||
}
|
||||
}
|
||||
close FILE;
|
||||
flock SEM, LOCK_UN or warn "can't unlock $file.sem";
|
||||
close SEM;
|
||||
$mtr_unique_assigned_ids{$ret} = $file if defined $ret;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
#
|
||||
# Require a unique ID like above, but sleep if no ID can be
|
||||
# obtained immediately.
|
||||
#
|
||||
sub mtr_require_unique_id_and_wait($$$) {
|
||||
my $ret = mtr_require_unique_id($_[0],$_[1],$_[2]);
|
||||
while(! defined $ret) {
|
||||
sleep 30;
|
||||
$ret = mtr_require_unique_id($_[0],$_[1],$_[2]);
|
||||
print "Waiting for unique id to become available...\n" unless $ret;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
#
|
||||
# Release a unique ID.
|
||||
#
|
||||
sub mtr_release_unique_id($$) {
|
||||
my $file = shift;
|
||||
my $myid = shift;
|
||||
|
||||
if(eval("readlink '$file'") || eval("readlink '$file.sem'")) {
|
||||
die 'lock file is a symbolic link';
|
||||
}
|
||||
|
||||
open SEM, ">", "$file.sem" or die "can't write to $file.sem";
|
||||
flock SEM, LOCK_EX or die "can't lock $file.sem";
|
||||
|
||||
if(eval("readlink '$file'") || eval("readlink '$file.sem'")) {
|
||||
die 'lock file is a symbolic link';
|
||||
}
|
||||
|
||||
if(! -e $file) {
|
||||
open FILE, ">", $file or die "can't create $file";
|
||||
close FILE;
|
||||
}
|
||||
open FILE, "+<", $file or die "can't open $file";
|
||||
select undef,undef,undef,0.2;
|
||||
seek FILE, 0, 0;
|
||||
my %taken = ();
|
||||
while(<FILE>) {
|
||||
chomp;
|
||||
my ($id, $pid) = split / /;
|
||||
$taken{$id} = $pid;
|
||||
}
|
||||
delete $taken{$myid};
|
||||
seek FILE, 0, 0;
|
||||
truncate FILE, 0 or die "can't truncate $file";
|
||||
for my $k (keys %taken) {
|
||||
print FILE $k . ' ' . $taken{$k} . "\n";
|
||||
}
|
||||
close FILE;
|
||||
flock SEM, LOCK_UN or warn "can't unlock $file.sem";
|
||||
close SEM;
|
||||
delete $mtr_unique_assigned_ids{$myid};
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -123,7 +123,7 @@ find_valgrind()
|
||||
fi
|
||||
# >=2.1.2 requires the --tool option, some versions write to stdout, some to stderr
|
||||
valgrind --help 2>&1 | grep "\-\-tool" > /dev/null && FIND_VALGRIND="$FIND_VALGRIND --tool=memcheck"
|
||||
FIND_VALGRIND="$FIND_VALGRIND --alignment=8 --leak-check=yes --num-callers=16 --suppressions=$CWD/valgrind.supp"
|
||||
FIND_VALGRIND="$FIND_VALGRIND --alignment=8 --leak-check=yes --num-callers=16 --suppressions=$MYSQL_TEST_DIR/valgrind.supp"
|
||||
}
|
||||
|
||||
# No paths below as we can't be sure where the program is!
|
||||
@ -174,18 +174,24 @@ fi
|
||||
# Misc. Definitions
|
||||
#--
|
||||
|
||||
if [ -d ../sql ] ; then
|
||||
# BASEDIR is always above mysql-test directory ...
|
||||
MYSQL_TEST_DIR=`pwd`
|
||||
cd ..
|
||||
|
||||
if [ -d ./sql ] ; then
|
||||
SOURCE_DIST=1
|
||||
else
|
||||
BINARY_DIST=1
|
||||
fi
|
||||
|
||||
#BASEDIR is always one above mysql-test directory
|
||||
CWD=`pwd`
|
||||
cd ..
|
||||
# ... one level for tar.gz, two levels for a RPM installation
|
||||
if [ ! -f ./bin/mysql_upgrade ] ; then
|
||||
# Has to be RPM installation
|
||||
cd ..
|
||||
fi
|
||||
fi
|
||||
BASEDIR=`pwd`
|
||||
cd $CWD
|
||||
MYSQL_TEST_DIR=$BASEDIR/mysql-test
|
||||
|
||||
cd $MYSQL_TEST_DIR
|
||||
MYSQL_TEST_WINDIR=$MYSQL_TEST_DIR
|
||||
MYSQLTEST_VARDIR=$MYSQL_TEST_DIR/var
|
||||
export MYSQL_TEST_DIR MYSQL_TEST_WINDIR MYSQLTEST_VARDIR
|
||||
@ -744,8 +750,15 @@ else
|
||||
if test -x "$BASEDIR/libexec/mysqld"
|
||||
then
|
||||
MYSQLD="$VALGRIND $BASEDIR/libexec/mysqld"
|
||||
else
|
||||
elif test -x "$BASEDIR/bin/mysqld"
|
||||
then
|
||||
MYSQLD="$VALGRIND $BASEDIR/bin/mysqld"
|
||||
elif test -x "$BASEDIR/sbin/mysqld"
|
||||
then
|
||||
MYSQLD="$VALGRIND $BASEDIR/sbin/mysqld"
|
||||
else
|
||||
$ECHO "Fatal error: Cannot find program mysqld in $BASEDIR/{libexec,bin,sbin}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
CLIENT_BINDIR="$BASEDIR/bin"
|
||||
if test -d "$BASEDIR/tests"
|
||||
@ -1390,7 +1403,7 @@ start_master()
|
||||
then
|
||||
$ECHO "set args $master_args" > $GDB_MASTER_INIT$1
|
||||
$ECHO "To start gdb for the master , type in another window:"
|
||||
$ECHO "cd $CWD ; gdb -x $GDB_MASTER_INIT$1 $MASTER_MYSQLD"
|
||||
$ECHO "cd $MYSQL_TEST_DIR ; gdb -x $GDB_MASTER_INIT$1 $MASTER_MYSQLD"
|
||||
wait_for_master=1500
|
||||
else
|
||||
( $ECHO set args $master_args;
|
||||
@ -1508,7 +1521,7 @@ start_slave()
|
||||
then
|
||||
$ECHO "set args $slave_args" > $GDB_SLAVE_INIT
|
||||
echo "To start gdb for the slave, type in another window:"
|
||||
echo "cd $CWD ; gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD"
|
||||
echo "cd $MYSQL_TEST_DIR ; gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD"
|
||||
wait_for_slave=1500
|
||||
else
|
||||
( $ECHO set args $slave_args;
|
||||
@ -2074,12 +2087,15 @@ then
|
||||
|
||||
# Remove files that can cause problems
|
||||
$RM -rf $MYSQL_TEST_DIR/var/ndbcluster
|
||||
$RM -f $MYSQL_TEST_DIR/var/run/* $MYSQL_TEST_DIR/var/tmp/*
|
||||
$RM -rf $MYSQL_TEST_DIR/var/run/* $MYSQL_TEST_DIR/var/tmp/*
|
||||
|
||||
# Remove old berkeley db log files that can confuse the server
|
||||
$RM -f $MASTER_MYDDIR/log.*
|
||||
$RM -f $MASTER_MYDDIR"1"/log.*
|
||||
|
||||
# Remove old log and reject files
|
||||
$RM -f r/*.reject r/*.progress r/*.log r/*.warnings
|
||||
|
||||
wait_for_master=$SLEEP_TIME_FOR_FIRST_MASTER
|
||||
wait_for_slave=$SLEEP_TIME_FOR_FIRST_SLAVE
|
||||
$ECHO "Installing Test Databases"
|
||||
|
@ -66,7 +66,6 @@ use IO::Socket::INET;
|
||||
use Data::Dumper;
|
||||
use strict;
|
||||
use warnings;
|
||||
use diagnostics;
|
||||
|
||||
select(STDOUT);
|
||||
$| = 1; # Automatically flush STDOUT
|
||||
@ -88,6 +87,7 @@ require "lib/mtr_diff.pl";
|
||||
require "lib/mtr_match.pl";
|
||||
require "lib/mtr_misc.pl";
|
||||
require "lib/mtr_stress.pl";
|
||||
require "lib/mtr_unique.pl";
|
||||
|
||||
$Devel::Trace::TRACE= 1;
|
||||
|
||||
@ -203,6 +203,7 @@ our $opt_client_ddd;
|
||||
our $opt_manual_gdb;
|
||||
our $opt_manual_ddd;
|
||||
our $opt_manual_debug;
|
||||
our $opt_mtr_build_thread=0;
|
||||
our $opt_debugger;
|
||||
our $opt_client_debugger;
|
||||
|
||||
@ -217,13 +218,18 @@ our $clusters;
|
||||
|
||||
our $instance_manager;
|
||||
|
||||
our $opt_master_myport;
|
||||
our $opt_slave_myport;
|
||||
our $im_port;
|
||||
our $im_mysqld1_port;
|
||||
our $im_mysqld2_port;
|
||||
our $opt_ndbcluster_port;
|
||||
our $opt_ndbconnectstring;
|
||||
our $opt_ndbcluster_port_slave;
|
||||
our $opt_ndbconnectstring_slave;
|
||||
|
||||
our $opt_record;
|
||||
our $opt_report_features;
|
||||
my $opt_report_features;
|
||||
our $opt_check_testcases;
|
||||
|
||||
our $opt_skip;
|
||||
@ -240,8 +246,6 @@ our $opt_suite_timeout;
|
||||
my $default_testcase_timeout= 15; # 15 min max
|
||||
my $default_suite_timeout= 180; # 3 hours max
|
||||
|
||||
our $opt_source_dist;
|
||||
|
||||
our $opt_start_and_exit;
|
||||
our $opt_start_dirty;
|
||||
our $opt_start_from;
|
||||
@ -301,6 +305,8 @@ our $glob_tot_real_time= 0;
|
||||
|
||||
our %mysqld_variables;
|
||||
|
||||
my $source_dist= 0;
|
||||
|
||||
|
||||
######################################################################
|
||||
#
|
||||
@ -311,11 +317,13 @@ our %mysqld_variables;
|
||||
sub main ();
|
||||
sub initial_setup ();
|
||||
sub command_line_setup ();
|
||||
sub datadir_setup ();
|
||||
sub set_mtr_build_thread_ports($);
|
||||
sub datadir_list_setup ();
|
||||
sub executable_setup ();
|
||||
sub environment_setup ();
|
||||
sub kill_running_servers ();
|
||||
sub cleanup_stale_files ();
|
||||
sub remove_stale_vardir ();
|
||||
sub setup_vardir ();
|
||||
sub check_ssl_support ($);
|
||||
sub check_running_as_root();
|
||||
sub check_ndbcluster_support ($);
|
||||
@ -439,7 +447,6 @@ sub main () {
|
||||
mtr_exit(0);
|
||||
}
|
||||
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Default settings
|
||||
@ -453,45 +460,26 @@ sub command_line_setup () {
|
||||
$opt_suite= "main"; # Special default suite
|
||||
my $opt_comment;
|
||||
|
||||
my $opt_master_myport= 9306;
|
||||
my $opt_slave_myport= 9308;
|
||||
$opt_master_myport= 9306;
|
||||
$opt_slave_myport= 9308;
|
||||
$opt_ndbcluster_port= 9310;
|
||||
$opt_ndbcluster_port_slave= 9311;
|
||||
my $im_port= 9312;
|
||||
my $im_mysqld1_port= 9313;
|
||||
my $im_mysqld2_port= 9314;
|
||||
|
||||
#
|
||||
# To make it easier for different devs to work on the same host,
|
||||
# an environment variable can be used to control all ports. A small
|
||||
# number is to be used, 0 - 16 or similar.
|
||||
#
|
||||
# Note the MASTER_MYPORT has to be set the same in all 4.x and 5.x
|
||||
# versions of this script, else a 4.0 test run might conflict with a
|
||||
# 5.1 test run, even if different MTR_BUILD_THREAD is used. This means
|
||||
# all port numbers might not be used in this version of the script.
|
||||
#
|
||||
# Also note the limiteation of ports we are allowed to hand out. This
|
||||
# differs between operating systems and configuration, see
|
||||
# http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html
|
||||
# But a fairly safe range seems to be 5001 - 32767
|
||||
if ( $ENV{'MTR_BUILD_THREAD'} )
|
||||
{
|
||||
# Up to two masters, up to three slaves
|
||||
$opt_master_myport= $ENV{'MTR_BUILD_THREAD'} * 10 + 10000; # and 1
|
||||
$opt_slave_myport= $opt_master_myport + 2; # and 3 4
|
||||
$opt_ndbcluster_port= $opt_master_myport + 5;
|
||||
$opt_ndbcluster_port_slave= $opt_master_myport + 6;
|
||||
$im_port= $opt_master_myport + 7;
|
||||
$im_mysqld1_port= $opt_master_myport + 8;
|
||||
$im_mysqld2_port= $opt_master_myport + 9;
|
||||
$im_port= 9312;
|
||||
$im_mysqld1_port= 9313;
|
||||
$im_mysqld2_port= 9314;
|
||||
|
||||
# If so requested, we try to avail ourselves of a unique build thread number.
|
||||
if ( $ENV{'MTR_BUILD_THREAD'} ) {
|
||||
if ( lc($ENV{'MTR_BUILD_THREAD'}) eq 'auto' ) {
|
||||
print "Requesting build thread... ";
|
||||
$ENV{'MTR_BUILD_THREAD'} = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
|
||||
print "got ".$ENV{'MTR_BUILD_THREAD'}."\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
|
||||
if ( $ENV{'MTR_BUILD_THREAD'} )
|
||||
{
|
||||
mtr_error("MTR_BUILD_THREAD number results in a port",
|
||||
"outside 5001 - 32767",
|
||||
"($opt_master_myport - $opt_master_myport + 10)");
|
||||
set_mtr_build_thread_ports($ENV{'MTR_BUILD_THREAD'});
|
||||
}
|
||||
|
||||
# This is needed for test log evaluation in "gen-build-status-page"
|
||||
@ -543,6 +531,7 @@ sub command_line_setup () {
|
||||
'im-port=i' => \$im_port, # Instance Manager port.
|
||||
'im-mysqld1-port=i' => \$im_mysqld1_port, # Port of mysqld, controlled by IM
|
||||
'im-mysqld2-port=i' => \$im_mysqld2_port, # Port of mysqld, controlled by IM
|
||||
'mtr-build-thread=i' => \$opt_mtr_build_thread,
|
||||
|
||||
# Test case authoring
|
||||
'record' => \$opt_record,
|
||||
@ -623,6 +612,15 @@ sub command_line_setup () {
|
||||
|
||||
$glob_scriptname= basename($0);
|
||||
|
||||
if ($opt_mtr_build_thread != 0)
|
||||
{
|
||||
set_mtr_build_thread_ports($opt_mtr_build_thread)
|
||||
}
|
||||
elsif ($ENV{'MTR_BUILD_THREAD'})
|
||||
{
|
||||
$opt_mtr_build_thread= $ENV{'MTR_BUILD_THREAD'};
|
||||
}
|
||||
|
||||
# We require that we are in the "mysql-test" directory
|
||||
# to run mysql-test-run
|
||||
if (! -f $glob_scriptname)
|
||||
@ -634,12 +632,12 @@ sub command_line_setup () {
|
||||
|
||||
if ( -d "../sql" )
|
||||
{
|
||||
$opt_source_dist= 1;
|
||||
$source_dist= 1;
|
||||
}
|
||||
|
||||
$glob_hostname= mtr_short_hostname();
|
||||
|
||||
# 'basedir' is always parent of "mysql-test" directory
|
||||
# Find the absolute path to the test directory
|
||||
$glob_mysql_test_dir= cwd();
|
||||
if ( $glob_cygwin_perl )
|
||||
{
|
||||
@ -647,14 +645,30 @@ sub command_line_setup () {
|
||||
$glob_mysql_test_dir= `cygpath -m "$glob_mysql_test_dir"`;
|
||||
chomp($glob_mysql_test_dir);
|
||||
}
|
||||
$glob_basedir= dirname($glob_mysql_test_dir);
|
||||
|
||||
# In most cases, the base directory we find everything relative to,
|
||||
# is the parent directory of the "mysql-test" directory. For source
|
||||
# distributions, TAR binary distributions and some other packages.
|
||||
$glob_basedir= dirname($glob_mysql_test_dir);
|
||||
|
||||
# In the RPM case, binaries and libraries are installed in the
|
||||
# default system locations, instead of having our own private base
|
||||
# directory. And we install "/usr/share/mysql-test". Moving up one
|
||||
# more directory relative to "mysql-test" gives us a usable base
|
||||
# directory for RPM installs.
|
||||
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
|
||||
{
|
||||
$glob_basedir= dirname($glob_basedir);
|
||||
}
|
||||
|
||||
# Expect mysql-bench to be located adjacent to the source tree, by default
|
||||
$glob_mysql_bench_dir= "$glob_basedir/../mysql-bench"
|
||||
unless defined $glob_mysql_bench_dir;
|
||||
$glob_mysql_bench_dir= undef
|
||||
unless -d $glob_mysql_bench_dir;
|
||||
|
||||
$path_my_basedir=
|
||||
$opt_source_dist ? $glob_mysql_test_dir : $glob_basedir;
|
||||
$source_dist ? $glob_mysql_test_dir : $glob_basedir;
|
||||
|
||||
$glob_timers= mtr_init_timers();
|
||||
|
||||
@ -663,7 +677,7 @@ sub command_line_setup () {
|
||||
# number as early as possible
|
||||
#
|
||||
|
||||
# Look for the client binaries
|
||||
# Look for the client binaries directory
|
||||
$path_client_bindir= mtr_path_exists("$glob_basedir/client_release",
|
||||
"$glob_basedir/client_debug",
|
||||
vs_config_dirs('client', ''),
|
||||
@ -679,7 +693,8 @@ sub command_line_setup () {
|
||||
"$path_client_bindir/mysqld-debug",
|
||||
"$path_client_bindir/mysqld-max",
|
||||
"$glob_basedir/libexec/mysqld",
|
||||
"$glob_basedir/bin/mysqld");
|
||||
"$glob_basedir/bin/mysqld",
|
||||
"$glob_basedir/sbin/mysqld");
|
||||
|
||||
# Use the mysqld found above to find out what features are available
|
||||
collect_mysqld_features();
|
||||
@ -754,7 +769,7 @@ sub command_line_setup () {
|
||||
{
|
||||
mtr_report("Using tmpfs in $fs");
|
||||
$opt_mem= "$fs/var";
|
||||
$opt_mem .= $ENV{'MTR_BUILD_THREAD'} if $ENV{'MTR_BUILD_THREAD'};
|
||||
$opt_mem .= $opt_mtr_build_thread if $opt_mtr_build_thread;
|
||||
last;
|
||||
}
|
||||
}
|
||||
@ -909,7 +924,7 @@ sub command_line_setup () {
|
||||
# --------------------------------------------------------------------------
|
||||
# Gcov flag
|
||||
# --------------------------------------------------------------------------
|
||||
if ( $opt_gcov and ! $opt_source_dist )
|
||||
if ( $opt_gcov and ! $source_dist )
|
||||
{
|
||||
mtr_error("Coverage test needs the source - please use source dist");
|
||||
}
|
||||
@ -1177,6 +1192,7 @@ sub command_line_setup () {
|
||||
|
||||
# Setup master->[0] with the settings for the extern server
|
||||
$master->[0]->{'path_sock'}= $opt_socket if $opt_socket;
|
||||
mtr_report("Using extern server at '$master->[0]->{path_sock}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1192,7 +1208,44 @@ sub command_line_setup () {
|
||||
$path_snapshot= "$opt_tmpdir/snapshot_$opt_master_myport/";
|
||||
}
|
||||
|
||||
sub datadir_setup () {
|
||||
#
|
||||
# To make it easier for different devs to work on the same host,
|
||||
# an environment variable can be used to control all ports. A small
|
||||
# number is to be used, 0 - 16 or similar.
|
||||
#
|
||||
# Note the MASTER_MYPORT has to be set the same in all 4.x and 5.x
|
||||
# versions of this script, else a 4.0 test run might conflict with a
|
||||
# 5.1 test run, even if different MTR_BUILD_THREAD is used. This means
|
||||
# all port numbers might not be used in this version of the script.
|
||||
#
|
||||
# Also note the limitation of ports we are allowed to hand out. This
|
||||
# differs between operating systems and configuration, see
|
||||
# http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html
|
||||
# But a fairly safe range seems to be 5001 - 32767
|
||||
#
|
||||
|
||||
sub set_mtr_build_thread_ports($) {
|
||||
my $mtr_build_thread= shift;
|
||||
|
||||
# Up to two masters, up to three slaves
|
||||
$opt_master_myport= $mtr_build_thread * 10 + 10000; # and 1
|
||||
$opt_slave_myport= $opt_master_myport + 2; # and 3 4
|
||||
$opt_ndbcluster_port= $opt_master_myport + 5;
|
||||
$opt_ndbcluster_port_slave= $opt_master_myport + 6;
|
||||
$im_port= $opt_master_myport + 7;
|
||||
$im_mysqld1_port= $opt_master_myport + 8;
|
||||
$im_mysqld2_port= $opt_master_myport + 9;
|
||||
|
||||
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
|
||||
{
|
||||
mtr_error("MTR_BUILD_THREAD number results in a port",
|
||||
"outside 5001 - 32767",
|
||||
"($opt_master_myport - $opt_master_myport + 10)");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub datadir_list_setup () {
|
||||
|
||||
# Make a list of all data_dirs
|
||||
@data_dir_lst = (
|
||||
@ -1222,26 +1275,15 @@ sub datadir_setup () {
|
||||
|
||||
|
||||
sub collect_mysqld_features () {
|
||||
#
|
||||
# Execute "mysqld --no-defaults --help --verbose", that will
|
||||
# print out version and a list of all features and settings
|
||||
#
|
||||
my $found_variable_list_start= 0;
|
||||
my $spec_file= "$glob_mysql_test_dir/mysqld.spec.$$";
|
||||
if ( mtr_run($exe_mysqld,
|
||||
["--no-defaults",
|
||||
"--verbose",
|
||||
"--help"],
|
||||
"", "$spec_file", "$spec_file", "") != 0 )
|
||||
{
|
||||
mtr_error("Failed to get version and list of features from %s",
|
||||
$exe_mysqld);
|
||||
}
|
||||
|
||||
my $F= IO::File->new($spec_file) or
|
||||
mtr_error("can't open file \"$spec_file\": $!");
|
||||
#
|
||||
# Execute "mysqld --no-defaults --help --verbose" to get a
|
||||
# of all features and settings
|
||||
#
|
||||
my $list= `$exe_mysqld --no-defaults --verbose --help`;
|
||||
|
||||
while ( my $line= <$F> )
|
||||
foreach my $line (split('\n', $list))
|
||||
{
|
||||
# First look for version
|
||||
if ( !$mysql_version_id )
|
||||
@ -1294,7 +1336,7 @@ sub collect_mysqld_features () {
|
||||
}
|
||||
}
|
||||
}
|
||||
unlink($spec_file);
|
||||
|
||||
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
|
||||
mtr_error("Could not find variabes list") unless $found_variable_list_start;
|
||||
|
||||
@ -1308,7 +1350,8 @@ sub executable_setup_im () {
|
||||
mtr_exe_maybe_exists(
|
||||
"$glob_basedir/server-tools/instance-manager/mysqlmanager",
|
||||
"$glob_basedir/libexec/mysqlmanager",
|
||||
"$glob_basedir/bin/mysqlmanager");
|
||||
"$glob_basedir/bin/mysqlmanager",
|
||||
"$glob_basedir/sbin/mysqlmanager");
|
||||
|
||||
return ($exe_im eq "");
|
||||
}
|
||||
@ -1418,7 +1461,7 @@ sub executable_setup () {
|
||||
# Look for mysql_fix_privilege_tables.sql script
|
||||
$file_mysql_fix_privilege_tables=
|
||||
mtr_file_exists("$glob_basedir/scripts/mysql_fix_privilege_tables.sql",
|
||||
"$path_share/mysql_fix_privilege_tables.sql");
|
||||
"$glob_basedir/share/mysql_fix_privilege_tables.sql");
|
||||
|
||||
if ( ! $opt_skip_ndbcluster and executable_setup_ndb())
|
||||
{
|
||||
@ -1573,10 +1616,11 @@ sub environment_setup () {
|
||||
# Setup LD_LIBRARY_PATH so the libraries from this distro/clone
|
||||
# are used in favor of the system installed ones
|
||||
# --------------------------------------------------------------------------
|
||||
if ( $opt_source_dist )
|
||||
if ( $source_dist )
|
||||
{
|
||||
push(@ld_library_paths, "$glob_basedir/libmysql/.libs/",
|
||||
"$glob_basedir/libmysql_r/.libs/");
|
||||
"$glob_basedir/libmysql_r/.libs/",
|
||||
"$glob_basedir/zlib.libs/");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1604,9 +1648,17 @@ sub environment_setup () {
|
||||
# impossible to add correct supressions, that means if "/usr/lib/debug"
|
||||
# is available, it should be added to
|
||||
# LD_LIBRARY_PATH
|
||||
#
|
||||
# But pthread is broken in libc6-dbg on Debian <= 3.1 (see Debian
|
||||
# bug 399035, http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=399035),
|
||||
# so don't change LD_LIBRARY_PATH on that platform.
|
||||
# --------------------------------------------------------------------------
|
||||
my $debug_libraries_path= "/usr/lib/debug";
|
||||
if ( $opt_valgrind and -d $debug_libraries_path )
|
||||
my $deb_version;
|
||||
if ( $opt_valgrind and -d $debug_libraries_path and
|
||||
(! -e '/etc/debian_version' or
|
||||
($deb_version= mtr_grab_file('/etc/debian_version')) == 0 or
|
||||
$deb_version > 3.1 ) )
|
||||
{
|
||||
push(@ld_library_paths, $debug_libraries_path);
|
||||
}
|
||||
@ -1643,11 +1695,12 @@ sub environment_setup () {
|
||||
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
|
||||
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
|
||||
$ENV{'MYSQL_TCP_PORT'}= $mysqld_variables{'port'};
|
||||
$ENV{'DEFAULT_MASTER_PORT'}= $mysqld_variables{'master-port'};
|
||||
|
||||
$ENV{'IM_PATH_SOCK'}= $instance_manager->{path_sock};
|
||||
$ENV{'IM_USERNAME'}= $instance_manager->{admin_login};
|
||||
$ENV{'IM_PASSWORD'}= $instance_manager->{admin_password};
|
||||
$ENV{MTR_BUILD_THREAD}= 0 unless $ENV{MTR_BUILD_THREAD}; # Set if not set
|
||||
$ENV{MTR_BUILD_THREAD}= $opt_mtr_build_thread;
|
||||
|
||||
$ENV{'EXE_MYSQL'}= $exe_mysql;
|
||||
|
||||
@ -1942,29 +1995,23 @@ sub kill_running_servers () {
|
||||
# This is different from terminating processes we have
|
||||
# started from this run of the script, this is terminating
|
||||
# leftovers from previous runs.
|
||||
|
||||
if ( ! -d $opt_vardir )
|
||||
{
|
||||
if ( -l $opt_vardir and ! -d readlink($opt_vardir) )
|
||||
{
|
||||
mtr_report("Removing $opt_vardir symlink without destination");
|
||||
unlink($opt_vardir);
|
||||
}
|
||||
# The "var" dir does not exist already
|
||||
# the processes that mtr_kill_leftovers start will write
|
||||
# their log files to var/log so it should be created
|
||||
mkpath("$opt_vardir/log");
|
||||
}
|
||||
mtr_kill_leftovers();
|
||||
}
|
||||
}
|
||||
|
||||
sub cleanup_stale_files () {
|
||||
|
||||
my $created_by_mem_file= "$glob_mysql_test_dir/var/created_by_mem";
|
||||
#
|
||||
# Remove var and any directories in var/ created by previous
|
||||
# tests
|
||||
#
|
||||
sub remove_stale_vardir () {
|
||||
|
||||
mtr_report("Removing Stale Files");
|
||||
|
||||
# Safety!
|
||||
mtr_error("No, don't remove the vardir when running with --extern")
|
||||
if $opt_extern;
|
||||
|
||||
mtr_verbose("opt_vardir: $opt_vardir");
|
||||
if ( $opt_vardir eq $default_vardir )
|
||||
{
|
||||
#
|
||||
@ -1973,29 +2020,47 @@ sub cleanup_stale_files () {
|
||||
if ( -l $opt_vardir)
|
||||
{
|
||||
# var is a symlink
|
||||
if (-f $created_by_mem_file)
|
||||
|
||||
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
|
||||
{
|
||||
# Remove the directory which the link points at
|
||||
mtr_verbose("Removing " . readlink($opt_vardir));
|
||||
rmtree(readlink($opt_vardir));
|
||||
# Remove the entire "var" dir
|
||||
rmtree("$opt_vardir/");
|
||||
|
||||
# Remove the "var" symlink
|
||||
mtr_verbose("unlink($opt_vardir)");
|
||||
unlink($opt_vardir);
|
||||
}
|
||||
elsif ( $opt_mem )
|
||||
{
|
||||
# Just remove the "var" symlink
|
||||
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
|
||||
|
||||
mtr_verbose("unlink($opt_vardir)");
|
||||
unlink($opt_vardir);
|
||||
}
|
||||
else
|
||||
{
|
||||
# Some users creates a soft link in mysql-test/var to another area
|
||||
# - allow it
|
||||
# - allow it, but remove all files in it
|
||||
|
||||
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
|
||||
rmtree("$opt_vardir/log");
|
||||
rmtree("$opt_vardir/ndbcluster-$opt_ndbcluster_port");
|
||||
rmtree("$opt_vardir/run");
|
||||
rmtree("$opt_vardir/tmp");
|
||||
|
||||
# Make sure the directory where it points exist
|
||||
mtr_error("The destination for symlink $opt_vardir does not exist")
|
||||
if ! -d readlink($opt_vardir);
|
||||
|
||||
foreach my $bin ( glob("$opt_vardir/*") )
|
||||
{
|
||||
mtr_verbose("Removing bin $bin");
|
||||
rmtree($bin);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
# Remove the entire "var" dir
|
||||
mtr_verbose("Removing $opt_vardir/");
|
||||
rmtree("$opt_vardir/");
|
||||
}
|
||||
}
|
||||
@ -2007,21 +2072,56 @@ sub cleanup_stale_files () {
|
||||
|
||||
# Remove the var/ dir in mysql-test dir if any
|
||||
# this could be an old symlink that shouldn't be there
|
||||
mtr_verbose("Removing $default_vardir");
|
||||
rmtree($default_vardir);
|
||||
|
||||
# Remove the "var" dir
|
||||
mtr_verbose("Removing $opt_vardir/");
|
||||
rmtree("$opt_vardir/");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $opt_mem )
|
||||
#
|
||||
# Create var and the directories needed in var
|
||||
#
|
||||
sub setup_vardir() {
|
||||
mtr_report("Creating Directories");
|
||||
|
||||
if ( $opt_vardir eq $default_vardir )
|
||||
{
|
||||
# Runinng with var as a link to some "memory" location, normally tmpfs
|
||||
rmtree($opt_mem);
|
||||
mkpath($opt_mem);
|
||||
mtr_report("Creating symlink from $opt_vardir to $opt_mem");
|
||||
symlink($opt_mem, $opt_vardir);
|
||||
# Put a small file to recognize this dir was created by --mem
|
||||
mtr_tofile($created_by_mem_file, $opt_mem);
|
||||
#
|
||||
# Running with "var" in mysql-test dir
|
||||
#
|
||||
if ( -l $opt_vardir )
|
||||
{
|
||||
# it's a symlink
|
||||
|
||||
# Make sure the directory where it points exist
|
||||
mtr_error("The destination for symlink $opt_vardir does not exist")
|
||||
if ! -d readlink($opt_vardir);
|
||||
}
|
||||
elsif ( $opt_mem )
|
||||
{
|
||||
# Runinng with "var" as a link to some "memory" location, normally tmpfs
|
||||
mtr_verbose("Creating $opt_mem");
|
||||
mkpath($opt_mem);
|
||||
|
||||
mtr_report("Symlinking 'var' to '$opt_mem'");
|
||||
symlink($opt_mem, $opt_vardir);
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! -d $opt_vardir )
|
||||
{
|
||||
mtr_verbose("Creating $opt_vardir");
|
||||
mkpath($opt_vardir);
|
||||
}
|
||||
|
||||
# Ensure a proper error message if vardir couldn't be created
|
||||
unless ( -d $opt_vardir and -w $opt_vardir )
|
||||
{
|
||||
mtr_error("Writable 'var' directory is needed, use the " .
|
||||
"'--vardir=<path>' option");
|
||||
}
|
||||
|
||||
mkpath("$opt_vardir/log");
|
||||
@ -2029,10 +2129,9 @@ sub cleanup_stale_files () {
|
||||
mkpath("$opt_vardir/tmp");
|
||||
mkpath($opt_tmpdir) if $opt_tmpdir ne "$opt_vardir/tmp";
|
||||
|
||||
# Remove old and create new data dirs
|
||||
# Create new data dirs
|
||||
foreach my $data_dir (@data_dir_lst)
|
||||
{
|
||||
rmtree("$data_dir");
|
||||
mkpath("$data_dir/mysql");
|
||||
mkpath("$data_dir/test");
|
||||
}
|
||||
@ -2054,6 +2153,12 @@ sub cleanup_stale_files () {
|
||||
}
|
||||
closedir(DIR);
|
||||
}
|
||||
|
||||
# Remove old log files
|
||||
foreach my $name (glob("r/*.progress r/*.log r/*.warnings"))
|
||||
{
|
||||
unlink($name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2434,8 +2539,8 @@ sub ndbcluster_start ($$) {
|
||||
|
||||
sub rm_ndbcluster_tables ($) {
|
||||
my $dir= shift;
|
||||
foreach my $bin ( glob("$dir/cluster/apply_status*"),
|
||||
glob("$dir/cluster/schema*") )
|
||||
foreach my $bin ( glob("$dir/mysql/apply_status*"),
|
||||
glob("$dir/mysql/schema*"))
|
||||
{
|
||||
unlink($bin);
|
||||
}
|
||||
@ -2569,23 +2674,41 @@ sub run_suite () {
|
||||
|
||||
sub initialize_servers () {
|
||||
|
||||
datadir_setup();
|
||||
datadir_list_setup();
|
||||
|
||||
if ( ! $opt_extern )
|
||||
if ( $opt_extern )
|
||||
{
|
||||
# Running against an already started server, if the specified
|
||||
# vardir does not already exist it should be created
|
||||
if ( ! -d $opt_vardir )
|
||||
{
|
||||
mtr_report("Creating '$opt_vardir'");
|
||||
setup_vardir();
|
||||
}
|
||||
else
|
||||
{
|
||||
mtr_report("No need to create '$opt_vardir' it already exists");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
kill_running_servers();
|
||||
|
||||
if ( ! $opt_start_dirty )
|
||||
{
|
||||
cleanup_stale_files();
|
||||
remove_stale_vardir();
|
||||
setup_vardir();
|
||||
|
||||
mysql_install_db();
|
||||
if ( $opt_force )
|
||||
{
|
||||
# Save a snapshot of the freshly installed db
|
||||
# to make it possible to restore to a known point in time
|
||||
save_installed_db();
|
||||
}
|
||||
}
|
||||
check_running_as_root();
|
||||
}
|
||||
check_running_as_root();
|
||||
}
|
||||
|
||||
sub mysql_install_db () {
|
||||
@ -2952,26 +3075,15 @@ sub do_before_run_mysqltest($)
|
||||
unlink("$result_dir/$tname.log");
|
||||
unlink("$result_dir/$tname.warnings");
|
||||
|
||||
mtr_tonewfile($path_current_test_log,"$tname\n"); # Always tell where we are
|
||||
|
||||
# output current test to ndbcluster log file to enable diagnostics
|
||||
mtr_tofile($path_ndb_testrun_log,"CURRENT TEST $tname\n");
|
||||
|
||||
mtr_tofile($master->[0]->{'path_myerr'},"CURRENT_TEST: $tname\n");
|
||||
if ( $master->[1]->{'pid'} )
|
||||
{
|
||||
mtr_tofile($master->[1]->{'path_myerr'},"CURRENT_TEST: $tname\n");
|
||||
}
|
||||
|
||||
if ( $mysql_version_id < 50000 )
|
||||
{
|
||||
# Set envirnoment variable NDB_STATUS_OK to 1
|
||||
# Set environment variable NDB_STATUS_OK to 1
|
||||
# if script decided to run mysqltest cluster _is_ installed ok
|
||||
$ENV{'NDB_STATUS_OK'} = "1";
|
||||
}
|
||||
elsif ( $mysql_version_id < 50100 )
|
||||
{
|
||||
# Set envirnoment variable NDB_STATUS_OK to YES
|
||||
# Set environment variable NDB_STATUS_OK to YES
|
||||
# if script decided to run mysqltest cluster _is_ installed ok
|
||||
$ENV{'NDB_STATUS_OK'} = "YES";
|
||||
}
|
||||
@ -2982,9 +3094,9 @@ sub do_after_run_mysqltest($)
|
||||
my $tinfo= shift;
|
||||
my $tname= $tinfo->{'name'};
|
||||
|
||||
mtr_tofile($path_mysqltest_log,"CURRENT TEST $tname\n");
|
||||
|
||||
# Save info from this testcase run to mysqltest.log
|
||||
mtr_appendfile_to_file($path_current_test_log, $path_mysqltest_log)
|
||||
if -f $path_current_test_log;
|
||||
mtr_appendfile_to_file($path_timefile, $path_mysqltest_log)
|
||||
if -f $path_timefile;
|
||||
|
||||
@ -2994,18 +3106,38 @@ sub do_after_run_mysqltest($)
|
||||
}
|
||||
|
||||
|
||||
sub run_testcase_mark_logs($)
|
||||
{
|
||||
my ($log_msg)= @_;
|
||||
|
||||
# Write a marker to all log files
|
||||
|
||||
# The file indicating current test name
|
||||
mtr_tonewfile($path_current_test_log, $log_msg);
|
||||
|
||||
# each mysqld's .err file
|
||||
foreach my $mysqld (@{$master}, @{$slave})
|
||||
{
|
||||
mtr_tofile($mysqld->{path_myerr}, $log_msg);
|
||||
}
|
||||
|
||||
# ndbcluster log file
|
||||
mtr_tofile($path_ndb_testrun_log, $log_msg);
|
||||
|
||||
}
|
||||
|
||||
sub find_testcase_skipped_reason($)
|
||||
{
|
||||
my ($tinfo)= @_;
|
||||
|
||||
# Open mysqltest.log
|
||||
# Open mysqltest-time
|
||||
my $F= IO::File->new($path_timefile) or
|
||||
mtr_error("can't open file \"$path_timefile\": $!");
|
||||
my $reason;
|
||||
|
||||
while ( my $line= <$F> )
|
||||
{
|
||||
# Look for "reason: <reason fo skiping test>"
|
||||
# Look for "reason: <reason for skipping test>"
|
||||
if ( $line =~ /reason: (.*)/ )
|
||||
{
|
||||
$reason= $1;
|
||||
@ -3113,6 +3245,10 @@ sub run_testcase ($) {
|
||||
|
||||
run_testcase_stop_servers($tinfo, $master_restart, $slave_restart);
|
||||
}
|
||||
|
||||
# Write to all log files to indicate start of testcase
|
||||
run_testcase_mark_logs("CURRENT_TEST: $tinfo->{name}\n");
|
||||
|
||||
my $died= mtr_record_dead_children();
|
||||
if ($died or $master_restart or $slave_restart)
|
||||
{
|
||||
@ -3454,6 +3590,17 @@ sub mysqld_arguments ($$$$$) {
|
||||
mtr_add_arg($args, "%s--ndb-extra-logging", $prefix);
|
||||
}
|
||||
}
|
||||
|
||||
if ( $mysql_version_id <= 50106 )
|
||||
{
|
||||
# Force mysqld to use log files up until 5.1.6
|
||||
mtr_add_arg($args, "%s--log=%s", $prefix, $master->[0]->{'path_mylog'});
|
||||
}
|
||||
else
|
||||
{
|
||||
# Turn on logging, will be sent to tables
|
||||
mtr_add_arg($args, "%s--log=", $prefix);
|
||||
}
|
||||
}
|
||||
|
||||
if ( $type eq 'slave' )
|
||||
@ -3471,8 +3618,6 @@ sub mysqld_arguments ($$$$$) {
|
||||
mtr_add_arg($args, "%s--log-slave-updates", $prefix);
|
||||
}
|
||||
|
||||
mtr_add_arg($args, "%s--log=%s", $prefix,
|
||||
$slave->[$idx]->{'path_mylog'});
|
||||
mtr_add_arg($args, "%s--master-retry-count=10", $prefix);
|
||||
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
|
||||
$slave->[$idx]->{'path_pid'});
|
||||
@ -3533,6 +3678,18 @@ sub mysqld_arguments ($$$$$) {
|
||||
mtr_add_arg($args, "%s--ndb-extra-logging", $prefix);
|
||||
}
|
||||
}
|
||||
|
||||
if ( $mysql_version_id <= 50106 )
|
||||
{
|
||||
# Force mysqld to use log files up until 5.1.6
|
||||
mtr_add_arg($args, "%s--log=%s", $prefix, $master->[0]->{'path_mylog'});
|
||||
}
|
||||
else
|
||||
{
|
||||
# Turn on logging, will be sent to tables
|
||||
mtr_add_arg($args, "%s--log=", $prefix);
|
||||
}
|
||||
|
||||
} # end slave
|
||||
|
||||
if ( $opt_debug )
|
||||
@ -3609,7 +3766,6 @@ sub mysqld_arguments ($$$$$) {
|
||||
elsif ( $type eq 'master' )
|
||||
{
|
||||
mtr_add_arg($args, "%s--open-files-limit=1024", $prefix);
|
||||
mtr_add_arg($args, "%s--log=%s", $prefix, $master->[0]->{'path_mylog'});
|
||||
}
|
||||
|
||||
return $args;
|
||||
@ -4105,17 +4261,15 @@ sub run_testcase_start_servers($) {
|
||||
# tables ok FIXME This is a workaround so that only one mysqld
|
||||
# create the tables
|
||||
if ( ! sleep_until_file_created(
|
||||
"$master->[0]->{'path_myddir'}/cluster/apply_status.ndb",
|
||||
"$master->[0]->{'path_myddir'}/mysql/apply_status.ndb",
|
||||
$master->[0]->{'start_timeout'},
|
||||
$master->[0]->{'pid'}))
|
||||
{
|
||||
|
||||
$tinfo->{'comment'}= "Failed to create 'cluster/apply_status' table";
|
||||
$tinfo->{'comment'}= "Failed to create 'mysql/apply_status' table";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
mtr_tofile($master->[1]->{'path_myerr'},"CURRENT_TEST: $tname\n");
|
||||
|
||||
mysqld_start($master->[1],$tinfo->{'master_opt'},[]);
|
||||
}
|
||||
|
||||
@ -4143,8 +4297,6 @@ sub run_testcase_start_servers($) {
|
||||
# ----------------------------------------------------------------------
|
||||
if ( $tinfo->{'slave_num'} )
|
||||
{
|
||||
mtr_tofile($slave->[0]->{'path_myerr'},"CURRENT_TEST: $tname\n");
|
||||
|
||||
restore_slave_databases($tinfo->{'slave_num'});
|
||||
|
||||
do_before_start_slave($tinfo);
|
||||
@ -4758,6 +4910,8 @@ Options that specify ports
|
||||
slave_port=PORT Specify the port number used by the first slave
|
||||
ndbcluster-port=PORT Specify the port number used by cluster
|
||||
ndbcluster-port-slave=PORT Specify the port number used by slave cluster
|
||||
mtr-build-thread=# Specify unique collection of ports. Can also be set by
|
||||
setting the environment variable MTR_BUILD_THREAD.
|
||||
|
||||
Options for test case authoring
|
||||
|
||||
@ -4770,7 +4924,7 @@ Options that pass on options
|
||||
|
||||
Options to run test on running server
|
||||
|
||||
extern Use running server for tests FIXME DANGEROUS
|
||||
extern Use running server for tests
|
||||
ndb-connectstring=STR Use running cluster, and connect using STR
|
||||
ndb-connectstring-slave=STR Use running slave cluster, and connect using STR
|
||||
user=USER User for connection to extern server
|
||||
|
@ -1,3 +1,4 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
SHOW COLLATION LIKE 'cp1250_czech_cs';
|
||||
Collation Charset Id Default Compiled Sortlen
|
||||
cp1250_czech_cs cp1250 34 Yes 2
|
||||
|
@ -171,8 +171,8 @@ create table t1 (a char(10) character set koi8r, b text character set koi8r);
|
||||
insert into t1 values ('test','test');
|
||||
insert into t1 values ('<27><><EFBFBD><EFBFBD>','<27><><EFBFBD><EFBFBD>');
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'a' at row 1
|
||||
Warning 1265 Data truncated for column 'b' at row 1
|
||||
Warning 1366 Incorrect string value: '\xCA\xC3\xD5\xCB' for column 'a' at row 1
|
||||
Warning 1366 Incorrect string value: '\xCA\xC3\xD5\xCB' for column 'b' at row 1
|
||||
drop table t1;
|
||||
set names koi8r;
|
||||
create table t1 (a char(10) character set cp1251);
|
||||
|
@ -723,6 +723,28 @@ lily
|
||||
river
|
||||
drop table t1;
|
||||
deallocate prepare stmt;
|
||||
create table t1 (
|
||||
a char(10) unicode not null,
|
||||
index a (a)
|
||||
) engine=myisam;
|
||||
insert into t1 values (repeat(0x201f, 10));
|
||||
insert into t1 values (repeat(0x2020, 10));
|
||||
insert into t1 values (repeat(0x2021, 10));
|
||||
explain select hex(a) from t1 order by a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL a 20 NULL 3 Using index
|
||||
select hex(a) from t1 order by a;
|
||||
hex(a)
|
||||
201F201F201F201F201F201F201F201F201F201F
|
||||
2020202020202020202020202020202020202020
|
||||
2021202120212021202120212021202120212021
|
||||
alter table t1 drop index a;
|
||||
select hex(a) from t1 order by a;
|
||||
hex(a)
|
||||
201F201F201F201F201F201F201F201F201F201F
|
||||
2020202020202020202020202020202020202020
|
||||
2021202120212021202120212021202120212021
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (id int, s char(5) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci);
|
||||
INSERT INTO t1 VALUES (1, 'ZZZZZ'), (1, 'ZZZ'), (2, 'ZZZ'), (2, 'ZZZZZ');
|
||||
SELECT id, MIN(s) FROM t1 GROUP BY id;
|
||||
|
@ -197,7 +197,7 @@ drop table t1;
|
||||
create table t1 (s1 char(10) character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 's1' at row 1
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
@ -205,7 +205,7 @@ drop table t1;
|
||||
create table t1 (s1 varchar(10) character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 's1' at row 1
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
@ -213,7 +213,7 @@ drop table t1;
|
||||
create table t1 (s1 text character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 's1' at row 1
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
@ -1536,6 +1536,32 @@ set @a:=null;
|
||||
execute my_stmt using @a;
|
||||
a b
|
||||
drop table if exists t1;
|
||||
drop table if exists t1;
|
||||
drop view if exists v1, v2;
|
||||
set names utf8;
|
||||
create table t1(col1 varchar(12) character set utf8 collate utf8_unicode_ci);
|
||||
insert into t1 values('t1_val');
|
||||
create view v1 as select 'v1_val' as col1;
|
||||
select coercibility(col1), collation(col1) from v1;
|
||||
coercibility(col1) collation(col1)
|
||||
4 utf8_general_ci
|
||||
create view v2 as select col1 from v1 union select col1 from t1;
|
||||
select coercibility(col1), collation(col1)from v2;
|
||||
coercibility(col1) collation(col1)
|
||||
2 utf8_unicode_ci
|
||||
2 utf8_unicode_ci
|
||||
drop view v1, v2;
|
||||
create view v1 as select 'v1_val' collate utf8_swedish_ci as col1;
|
||||
select coercibility(col1), collation(col1) from v1;
|
||||
coercibility(col1) collation(col1)
|
||||
0 utf8_swedish_ci
|
||||
create view v2 as select col1 from v1 union select col1 from t1;
|
||||
select coercibility(col1), collation(col1) from v2;
|
||||
coercibility(col1) collation(col1)
|
||||
0 utf8_swedish_ci
|
||||
0 utf8_swedish_ci
|
||||
drop view v1, v2;
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
colA int(11) NOT NULL,
|
||||
colB varchar(255) character set utf8 NOT NULL,
|
||||
|
@ -186,12 +186,12 @@ date format datetime
|
||||
2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 2003-01-02 02:11:12.123450
|
||||
2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 00:11:12.123450
|
||||
2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12
|
||||
10:20:10 %H:%i:%s 0000-00-00 10:20:10
|
||||
10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10
|
||||
10:20:10 %T 0000-00-00 10:20:10
|
||||
10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10
|
||||
10:20:10AM %r 0000-00-00 10:20:10
|
||||
10:20:10.44AM %h:%i:%s.%f%p 0000-00-00 10:20:10.440000
|
||||
10:20:10 %H:%i:%s 0000-00-00 00:00:00
|
||||
10:20:10 %h:%i:%s.%f 0000-00-00 00:00:00
|
||||
10:20:10 %T 0000-00-00 00:00:00
|
||||
10:20:10AM %h:%i:%s%p 0000-00-00 00:00:00
|
||||
10:20:10AM %r 0000-00-00 00:00:00
|
||||
10:20:10.44AM %h:%i:%s.%f%p 0000-00-00 00:00:00
|
||||
15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58
|
||||
15 September 2001 %d %M %Y 2001-09-15 00:00:00
|
||||
15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00
|
||||
@ -208,6 +208,13 @@ Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00
|
||||
15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00
|
||||
15-01-20 %d-%m-%y 2020-01-15 00:00:00
|
||||
15-2001-1 %d-%Y-%c 2001-01-15 00:00:00
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10.440000'
|
||||
select date,format,DATE(str_to_date(date, format)) as date2 from t1;
|
||||
date format date2
|
||||
2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02
|
||||
@ -248,12 +255,12 @@ date format time
|
||||
2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 02:11:12.123450
|
||||
2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 00:11:12.123450
|
||||
2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 23:11:12
|
||||
10:20:10 %H:%i:%s 10:20:10
|
||||
10:20:10 %h:%i:%s.%f 10:20:10
|
||||
10:20:10 %T 10:20:10
|
||||
10:20:10AM %h:%i:%s%p 10:20:10
|
||||
10:20:10AM %r 10:20:10
|
||||
10:20:10.44AM %h:%i:%s.%f%p 10:20:10.440000
|
||||
10:20:10 %H:%i:%s NULL
|
||||
10:20:10 %h:%i:%s.%f NULL
|
||||
10:20:10 %T NULL
|
||||
10:20:10AM %h:%i:%s%p NULL
|
||||
10:20:10AM %r NULL
|
||||
10:20:10.44AM %h:%i:%s.%f%p NULL
|
||||
15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 12:59:58
|
||||
15 September 2001 %d %M %Y 00:00:00
|
||||
15 SEPTEMB 2001 %d %M %Y 00:00:00
|
||||
@ -270,6 +277,13 @@ Tuesday 52 2001 %W %V %X 00:00:00
|
||||
15-01-2001 %d-%m-%Y %H:%i:%S 00:00:00
|
||||
15-01-20 %d-%m-%y 00:00:00
|
||||
15-2001-1 %d-%Y-%c 00:00:00
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10.440000'
|
||||
select date,format,concat(TIME(str_to_date(date, format))) as time2 from t1;
|
||||
date format time2
|
||||
2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 10:11:12
|
||||
@ -279,12 +293,12 @@ date format time2
|
||||
2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 02:11:12.123450
|
||||
2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 00:11:12.123450
|
||||
2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 23:11:12
|
||||
10:20:10 %H:%i:%s 10:20:10
|
||||
10:20:10 %h:%i:%s.%f 10:20:10
|
||||
10:20:10 %T 10:20:10
|
||||
10:20:10AM %h:%i:%s%p 10:20:10
|
||||
10:20:10AM %r 10:20:10
|
||||
10:20:10.44AM %h:%i:%s.%f%p 10:20:10.440000
|
||||
10:20:10 %H:%i:%s NULL
|
||||
10:20:10 %h:%i:%s.%f NULL
|
||||
10:20:10 %T NULL
|
||||
10:20:10AM %h:%i:%s%p NULL
|
||||
10:20:10AM %r NULL
|
||||
10:20:10.44AM %h:%i:%s.%f%p NULL
|
||||
15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 12:59:58
|
||||
15 September 2001 %d %M %Y 00:00:00
|
||||
15 SEPTEMB 2001 %d %M %Y 00:00:00
|
||||
@ -301,6 +315,13 @@ Tuesday 52 2001 %W %V %X 00:00:00
|
||||
15-01-2001 %d-%m-%Y %H:%i:%S 00:00:00
|
||||
15-01-20 %d-%m-%y 00:00:00
|
||||
15-2001-1 %d-%Y-%c 00:00:00
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10'
|
||||
Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10.440000'
|
||||
select concat('',str_to_date('8:11:2.123456 03-01-02','%H:%i:%S.%f %y-%m-%d'));
|
||||
concat('',str_to_date('8:11:2.123456 03-01-02','%H:%i:%S.%f %y-%m-%d'))
|
||||
2003-01-02 08:11:02.123456
|
||||
@ -571,4 +592,13 @@ DATE_FORMAT('%Y-%m-%d %H:%i:%s', 1151414896)
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect datetime value: '%Y-%m-%d %H:%i:%s'
|
||||
select str_to_date('04 /30/2004', '%m /%d/%Y');
|
||||
str_to_date('04 /30/2004', '%m /%d/%Y')
|
||||
2004-04-30
|
||||
select str_to_date('04/30 /2004', '%m /%d /%Y');
|
||||
str_to_date('04/30 /2004', '%m /%d /%Y')
|
||||
2004-04-30
|
||||
select str_to_date('04/30/2004 ', '%m/%d/%Y ');
|
||||
str_to_date('04/30/2004 ', '%m/%d/%Y ')
|
||||
2004-04-30
|
||||
"End of 4.1 tests"
|
||||
|
@ -372,10 +372,10 @@ t collation(t) FORMAT(MATCH t AGAINST ('Osnabruck'),6)
|
||||
aus Osnabr<62>ck utf8_general_ci 1.591140
|
||||
alter table t1 modify t varchar(200) collate latin1_german2_ci not null;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 't' at row 3
|
||||
Warning 1265 Data truncated for column 't' at row 4
|
||||
Warning 1265 Data truncated for column 't' at row 5
|
||||
Warning 1265 Data truncated for column 't' at row 6
|
||||
Warning 1366 Incorrect string value: '\xD0\xAD\xD1\x82\xD0\xBE...' for column 't' at row 3
|
||||
Warning 1366 Incorrect string value: '\xD0\x9E\xD1\x82\xD0\xBB...' for column 't' at row 4
|
||||
Warning 1366 Incorrect string value: '\xD0\x9D\xD0\xB5 \xD0...' for column 't' at row 5
|
||||
Warning 1366 Incorrect string value: '\xD0\xB8 \xD0\xB1\xD1...' for column 't' at row 6
|
||||
SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabr<62>ck');
|
||||
t collation(t)
|
||||
aus Osnabr<62>ck latin1_german2_ci
|
||||
|
@ -658,3 +658,73 @@ GROUP_CONCAT(a) x
|
||||
2 1,2
|
||||
1 2,3
|
||||
DROP TABLE t1;
|
||||
set names utf8;
|
||||
create table t1
|
||||
(
|
||||
x text character set utf8 not null,
|
||||
y integer not null
|
||||
);
|
||||
insert into t1 values (repeat('a', 1022), 0), (repeat(_utf8 0xc3b7, 4), 0);
|
||||
set group_concat_max_len= 1022 + 10;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1032 1031 1027 aaaaaaa,÷÷÷÷ C3B7C3B7C3B7
|
||||
set group_concat_max_len= 1022 + 9;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1031 1031 1027 aaaaaaa,÷÷÷÷ C3B7C3B7C3B7
|
||||
set group_concat_max_len= 1022 + 8;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1030 1029 1026 aaaaaaaa,÷÷÷ C3B7C3B7C3B7
|
||||
set group_concat_max_len= 1022 + 7;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1029 1029 1026 aaaaaaaa,÷÷÷ C3B7C3B7C3B7
|
||||
set group_concat_max_len= 1022 + 6;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1028 1027 1025 aaaaaaaaa,÷÷ 612CC3B7C3B7
|
||||
set group_concat_max_len= 1022 + 5;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1027 1027 1025 aaaaaaaaa,÷÷ 612CC3B7C3B7
|
||||
set group_concat_max_len= 1022 + 4;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1026 1025 1024 aaaaaaaaaa,÷ 6161612CC3B7
|
||||
set group_concat_max_len= 1022 + 3;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1025 1025 1024 aaaaaaaaaa,÷ 6161612CC3B7
|
||||
set group_concat_max_len= 1022 + 2;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1024 1023 1023 aaaaaaaaaaa, 61616161612C
|
||||
set group_concat_max_len= 1022 + 1;
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
|
||||
1023 1023 1023 aaaaaaaaaaa, 61616161612C
|
||||
drop table t1;
|
||||
set group_concat_max_len=1024;
|
||||
set names latin1;
|
||||
create table t1 (f1 int unsigned, f2 varchar(255));
|
||||
insert into t1 values (1,repeat('a',255)),(2,repeat('b',255));
|
||||
select f2,group_concat(f1) from t1 group by f2;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t1 t1 f2 f2 253 255 255 Y 0 0 8
|
||||
def group_concat(f1) 252 1024 1 Y 128 0 63
|
||||
f2 group_concat(f1)
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1
|
||||
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 2
|
||||
drop table t1;
|
||||
|
@ -1029,3 +1029,29 @@ t1 CREATE TABLE `t1` (
|
||||
`stddev(0)` double(8,4) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);
|
||||
INSERT INTO t1 SELECT a, b+8 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+16 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+32 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+64 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+128 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+256 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+512 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+1024 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+2048 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+4096 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+8192 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+16384 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+32768 FROM t1;
|
||||
SELECT a,COUNT(DISTINCT b) AS cnt FROM t1 GROUP BY a HAVING cnt > 50;
|
||||
a cnt
|
||||
1 65536
|
||||
SELECT a,SUM(DISTINCT b) AS sumation FROM t1 GROUP BY a HAVING sumation > 50;
|
||||
a sumation
|
||||
1 2147516416
|
||||
SELECT a,AVG(DISTINCT b) AS average FROM t1 GROUP BY a HAVING average > 50;
|
||||
a average
|
||||
1 32768.5000
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -134,4 +134,11 @@ timediff(b, a) >= '00:00:03'
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
set global query_cache_size=default;
|
||||
create table t1 select INET_ATON('255.255.0.1') as `a`;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(21) unsigned default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
@ -1204,3 +1204,6 @@ fmtddate field2
|
||||
Sep-4 12:00AM abcd
|
||||
DROP TABLE testBug8868;
|
||||
SET NAMES DEFAULT;
|
||||
select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
|
||||
str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE
|
||||
NULL
|
||||
|
@ -873,3 +873,11 @@ SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0));
|
||||
1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(foo GEOMETRY NOT NULL, SPATIAL INDEX(foo) );
|
||||
INSERT INTO t1(foo) VALUES (NULL);
|
||||
ERROR 23000: Column 'foo' cannot be null
|
||||
INSERT INTO t1() VALUES ();
|
||||
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||
INSERT INTO t1(foo) VALUES ('');
|
||||
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||
DROP TABLE t1;
|
||||
|
@ -1254,3 +1254,18 @@ COLUMN_NAME MD5(COLUMN_DEFAULT) LENGTH(COLUMN_DEFAULT) COLUMN_DEFAULT=get_value(
|
||||
fld1 7cf7a6782be951a1f2464a350da926a5 65532 1
|
||||
DROP TABLE bug23037;
|
||||
DROP FUNCTION get_value;
|
||||
create view v1 as
|
||||
select table_schema as object_schema,
|
||||
table_name as object_name,
|
||||
table_type as object_type
|
||||
from information_schema.tables
|
||||
order by object_schema;
|
||||
explain select * from v1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 0 const row not found
|
||||
2 DERIVED tables ALL NULL NULL NULL NULL 2 Using filesort
|
||||
explain select * from (select table_name from information_schema.tables) as a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 0 const row not found
|
||||
2 DERIVED tables ALL NULL NULL NULL NULL 2
|
||||
drop view v1;
|
||||
|
@ -84,3 +84,27 @@ create table t2 like T1;
|
||||
drop table t1, t2;
|
||||
show tables;
|
||||
Tables_in_test
|
||||
set names utf8;
|
||||
drop table if exists İ,İİ;
|
||||
create table İ (s1 int);
|
||||
show create table İ;
|
||||
Table Create Table
|
||||
İ CREATE TABLE `i` (
|
||||
`s1` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show tables;
|
||||
Tables_in_test
|
||||
i
|
||||
drop table İ;
|
||||
create table İİ (s1 int);
|
||||
show create table İİ;
|
||||
Table Create Table
|
||||
İİ CREATE TABLE `ii` (
|
||||
`s1` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show tables;
|
||||
Tables_in_test
|
||||
ii
|
||||
drop table İİ;
|
||||
set names latin1;
|
||||
End of 5.0 tests
|
||||
|
@ -96,3 +96,37 @@ i
|
||||
2
|
||||
affected rows: 1
|
||||
affected rows: 0
|
||||
create table t1 (id int(10));
|
||||
insert into t1 values (1);
|
||||
CREATE VIEW v1 AS select t1.id as id from t1;
|
||||
CREATE VIEW v2 AS select t1.id as renamed from t1;
|
||||
CREATE VIEW v3 AS select t1.id + 12 as renamed from t1;
|
||||
select * from v1 group by id limit 1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t1 v1 id id 3 10 1 Y 32768 0 63
|
||||
id
|
||||
1
|
||||
select * from v1 group by id limit 0;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t1 v1 id id 3 10 0 Y 32768 0 63
|
||||
id
|
||||
select * from v1 where id=1000 group by id;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t1 v1 id id 3 10 0 Y 32768 0 63
|
||||
id
|
||||
select * from v1 where id=1 group by id;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t1 v1 id id 3 10 1 Y 32768 0 63
|
||||
id
|
||||
1
|
||||
select * from v2 where renamed=1 group by renamed;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t1 v2 id renamed 3 10 1 Y 32768 0 63
|
||||
renamed
|
||||
1
|
||||
select * from v3 where renamed=1 group by renamed;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def v3 renamed 8 12 0 Y 32896 0 63
|
||||
renamed
|
||||
drop table t1;
|
||||
drop view v1,v2,v3;
|
||||
|
@ -36,6 +36,8 @@ Tables_in_test
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
Tables_in_test
|
||||
t1
|
||||
_
|
||||
Test delimiter : from command line
|
||||
a
|
||||
@ -178,4 +180,8 @@ Too long dbname
|
||||
ERROR 1049 (42000) at line 1: Unknown database 'test_really_long_dbnamexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
||||
Too long hostname
|
||||
ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'cyrils_superlonghostnameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (errno)
|
||||
1
|
||||
1
|
||||
ERROR at line 1: DELIMITER cannot contain a backslash character
|
||||
ERROR at line 1: DELIMITER cannot contain a backslash character
|
||||
End of 5.0 tests
|
||||
|
@ -512,6 +512,12 @@ mysqltest: At line 1: End of line junk detected: "write_file filename ";
|
||||
mysqltest: At line 1: Missing required argument 'filename' to command 'file_exists'
|
||||
mysqltest: At line 1: Missing required argument 'from_file' to command 'copy_file'
|
||||
mysqltest: At line 1: Missing required argument 'to_file' to command 'copy_file'
|
||||
mysqltest: At line 1: Missing required argument 'mode' to command 'chmod'
|
||||
mysqltest: At line 1: You must write a 4 digit octal number for mode
|
||||
mysqltest: At line 1: You must write a 4 digit octal number for mode
|
||||
mysqltest: At line 1: Missing required argument 'file' to command 'chmod'
|
||||
mysqltest: At line 1: You must write a 4 digit octal number for mode
|
||||
mysqltest: At line 1: You must write a 4 digit octal number for mode
|
||||
hello
|
||||
hello
|
||||
hello
|
||||
|
@ -760,13 +760,6 @@ xxxxxxxxxxxxxxxxxxxaa
|
||||
xxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxz
|
||||
drop table t1;
|
||||
create table t1 (a int not null, b int not null, c int not null);
|
||||
insert t1 values (1,1,1),(1,1,2),(1,2,1);
|
||||
select a, b from t1 group by a, b order by sum(c);
|
||||
a b
|
||||
1 2
|
||||
1 1
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
`sid` decimal(8,0) default null,
|
||||
`wnid` varchar(11) not null default '',
|
||||
@ -854,6 +847,40 @@ b a
|
||||
20 1
|
||||
10 2
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SELECT a + 1 AS num FROM t1 ORDER BY 30 - num;
|
||||
num
|
||||
3
|
||||
2
|
||||
SELECT CONCAT('test', a) AS str FROM t1 ORDER BY UPPER(str);
|
||||
str
|
||||
test1
|
||||
test2
|
||||
SELECT a + 1 AS num FROM t1 GROUP BY 30 - num;
|
||||
num
|
||||
3
|
||||
2
|
||||
SELECT a + 1 AS num FROM t1 HAVING 30 - num;
|
||||
num
|
||||
2
|
||||
3
|
||||
SELECT a + 1 AS num, num + 1 FROM t1;
|
||||
ERROR 42S22: Unknown column 'num' in 'field list'
|
||||
SELECT a + 1 AS num, (select num + 2 FROM t1 LIMIT 1) FROM t1;
|
||||
num (select num + 2 FROM t1 LIMIT 1)
|
||||
2 4
|
||||
3 5
|
||||
SELECT a.a + 1 AS num FROM t1 a JOIN t1 b ON num = b.a;
|
||||
ERROR 42S22: Unknown column 'num' in 'on clause'
|
||||
DROP TABLE t1;
|
||||
create table t1 (a int not null, b int not null, c int not null);
|
||||
insert t1 values (1,1,1),(1,1,2),(1,2,1);
|
||||
select a, b from t1 group by a, b order by sum(c);
|
||||
a b
|
||||
1 2
|
||||
1 1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a));
|
||||
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
|
||||
explain SELECT t1.b as a, t2.b as c FROM
|
||||
|
@ -1273,3 +1273,51 @@ Variable_name Value
|
||||
Last_query_cost 0.000000
|
||||
drop table t1;
|
||||
SET GLOBAL query_cache_size=0;
|
||||
set global query_cache_size=1024*1024;
|
||||
flush status;
|
||||
create table t1 (a int);
|
||||
insert into t1 (a) values (1), (2), (3);
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
show status like 'Qcache_hits';
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
show status like 'Qcache_hits';
|
||||
Variable_name Value
|
||||
Qcache_hits 1
|
||||
create table t2 like t1;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
show status like 'Qcache_hits';
|
||||
Variable_name Value
|
||||
Qcache_hits 2
|
||||
insert into t2 select * from t1;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
show status like 'Qcache_hits';
|
||||
Variable_name Value
|
||||
Qcache_hits 3
|
||||
drop table t1, t2;
|
||||
create table t1(c1 int);
|
||||
create table t2(c1 int);
|
||||
create table t3(c1 int);
|
||||
create view v1 as select t3.c1 as c1 from t3,t2 where t3.c1 = t2.c1;
|
||||
start transaction;
|
||||
insert into t1(c1) select c1 from v1;
|
||||
drop table t1, t2, t3;
|
||||
drop view v1;
|
||||
set global query_cache_size=0;
|
||||
|
@ -39,6 +39,11 @@ delete t1 from t1,t3 where t1.a=t3.a;
|
||||
drop table t1;
|
||||
insert into t1 values(1);
|
||||
ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
|
||||
drop temporary table ttt;
|
||||
ERROR 42S02: Unknown table 'ttt'
|
||||
drop temporary table if exists ttt;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'ttt'
|
||||
drop table t1,t2;
|
||||
drop user test@localhost;
|
||||
set global read_only=0;
|
||||
|
@ -8,7 +8,7 @@ Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File
|
||||
change master to master_host='127.0.0.1';
|
||||
show slave status;
|
||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
||||
# 127.0.0.1 test MASTER_PORT 7 4 # # No No 0 0 0 # None 0 No #
|
||||
# 127.0.0.1 test DEFAULT_MASTER_PORT 7 4 # # No No 0 0 0 # None 0 No #
|
||||
change master to master_host='127.0.0.1',master_user='root',
|
||||
master_password='',master_port=MASTER_PORT;
|
||||
show slave status;
|
||||
|
@ -6,7 +6,7 @@ drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
create table t1 (a int not null, key(a)) engine=innodb;
|
||||
create table t2 (a int not null, key(a)) engine=innodb;
|
||||
create table t3 (a int) engine=innodb;
|
||||
create table t3 (a int unique) engine=innodb;
|
||||
create table t4 (a int) engine=innodb;
|
||||
show variables like 'slave_transaction_retries';
|
||||
Variable_name Value
|
||||
@ -35,14 +35,14 @@ begin;
|
||||
select * from t1 for update;
|
||||
a
|
||||
start slave;
|
||||
insert into t2 values(22);
|
||||
insert into t2 values(201);
|
||||
commit;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
select * from t2;
|
||||
a
|
||||
22
|
||||
201
|
||||
show slave status;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
@ -50,7 +50,7 @@ Master_User root
|
||||
Master_Port MASTER_MYPORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 18911
|
||||
Read_Master_Log_Pos 18918
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
@ -65,7 +65,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 18911
|
||||
Exec_Master_Log_Pos 18918
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
@ -78,12 +78,16 @@ Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
stop slave;
|
||||
change master to master_log_pos=532;
|
||||
delete from t3;
|
||||
change master to master_log_pos=539;
|
||||
begin;
|
||||
select * from t2 for update;
|
||||
a
|
||||
22
|
||||
201
|
||||
start slave;
|
||||
select count(*) from t3 /* must be zero */;
|
||||
count(*)
|
||||
0
|
||||
commit;
|
||||
select * from t1;
|
||||
a
|
||||
@ -91,7 +95,7 @@ a
|
||||
1
|
||||
select * from t2;
|
||||
a
|
||||
22
|
||||
201
|
||||
show slave status;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
@ -99,7 +103,7 @@ Master_User root
|
||||
Master_Port MASTER_MYPORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 18911
|
||||
Read_Master_Log_Pos 18918
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
@ -114,7 +118,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 18911
|
||||
Exec_Master_Log_Pos 18918
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
@ -129,12 +133,16 @@ Seconds_Behind_Master #
|
||||
set @my_max_relay_log_size= @@global.max_relay_log_size;
|
||||
set global max_relay_log_size=0;
|
||||
stop slave;
|
||||
change master to master_log_pos=532;
|
||||
delete from t3;
|
||||
change master to master_log_pos=539;
|
||||
begin;
|
||||
select * from t2 for update;
|
||||
a
|
||||
22
|
||||
201
|
||||
start slave;
|
||||
select count(*) from t3 /* must be zero */;
|
||||
count(*)
|
||||
0
|
||||
commit;
|
||||
select * from t1;
|
||||
a
|
||||
@ -143,7 +151,7 @@ a
|
||||
1
|
||||
select * from t2;
|
||||
a
|
||||
22
|
||||
201
|
||||
show slave status;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
@ -151,7 +159,7 @@ Master_User root
|
||||
Master_Port MASTER_MYPORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 18911
|
||||
Read_Master_Log_Pos 18918
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
@ -166,7 +174,7 @@ Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 18911
|
||||
Exec_Master_Log_Pos 18918
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
|
@ -14,3 +14,19 @@ SELECT * FROM t4;
|
||||
a
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t4;
|
||||
DROP TABLE IF EXISTS t5;
|
||||
CREATE TABLE t5 (
|
||||
word varchar(50) collate utf8_unicode_ci NOT NULL default ''
|
||||
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
SET @@session.character_set_client=33,@@session.collation_connection=192;
|
||||
CREATE TEMPORARY TABLE tmptbl504451f4258$1 (id INT NOT NULL) ENGINE=MEMORY;
|
||||
INSERT INTO t5 (word) VALUES ('TEST’');
|
||||
SELECT HEX(word) FROM t5;
|
||||
HEX(word)
|
||||
54455354E28099
|
||||
SELECT HEX(word) FROM t5;
|
||||
HEX(word)
|
||||
54455354E28099
|
||||
SELECT * FROM tmptbl504451f4258$1;
|
||||
ERROR 42S02: Table 'test.tmptbl504451f4258$1' doesn't exist
|
||||
DROP TABLE t5;
|
||||
|
17
mysql-test/r/rpl_packet.result
Normal file
17
mysql-test/r/rpl_packet.result
Normal file
@ -0,0 +1,17 @@
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
drop database if exists DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||
create database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||
select @@net_buffer_length, @@max_allowed_packet;
|
||||
@@net_buffer_length @@max_allowed_packet
|
||||
1024 1024
|
||||
create table `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1023');
|
||||
select count(*) from `DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________`.`t1` /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
drop database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
@ -467,3 +467,28 @@ DROP FUNCTION f1;
|
||||
drop table t1;
|
||||
set global log_bin_trust_function_creators=0;
|
||||
set global log_bin_trust_function_creators=0;
|
||||
drop database if exists mysqltest;
|
||||
drop database if exists mysqltest2;
|
||||
create database mysqltest;
|
||||
create database mysqltest2;
|
||||
use mysqltest2;
|
||||
create table t ( t integer );
|
||||
create procedure mysqltest.test() begin end;
|
||||
insert into t values ( 1 );
|
||||
show binlog events in 'master-bin.000001' from 8186;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 8186 Query 1 8317 use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION f1() RETURNS INT RETURN 0
|
||||
master-bin.000001 8317 Query 1 8397 use `test`; DROP PROCEDURE p1
|
||||
master-bin.000001 8397 Query 1 8476 use `test`; DROP FUNCTION f1
|
||||
master-bin.000001 8476 Query 1 8552 use `test`; drop table t1
|
||||
master-bin.000001 8552 Query 1 8653 drop database if exists mysqltest
|
||||
master-bin.000001 8653 Query 1 8756 drop database if exists mysqltest2
|
||||
master-bin.000001 8756 Query 1 8849 create database mysqltest
|
||||
master-bin.000001 8849 Query 1 8944 create database mysqltest2
|
||||
master-bin.000001 8944 Query 1 9041 use `mysqltest2`; create table t ( t integer )
|
||||
master-bin.000001 9041 Query 1 9180 use `mysqltest2`; CREATE DEFINER=`root`@`localhost` procedure mysqltest.test() begin end
|
||||
master-bin.000001 9180 Query 1 9275 use `mysqltest2`; insert into t values ( 1 )
|
||||
create procedure `\\`.test() begin end;
|
||||
ERROR 42000: Incorrect database name '\\'
|
||||
drop database mysqltest;
|
||||
drop database mysqltest2;
|
||||
|
@ -1,3 +1,4 @@
|
||||
drop table if exists t1;
|
||||
set @org_mode=@@sql_mode;
|
||||
create table t1
|
||||
(
|
||||
|
@ -1,3 +1,4 @@
|
||||
drop table if exists t1;
|
||||
set @org_mode=@@sql_mode;
|
||||
create table t1
|
||||
(
|
||||
|
@ -1,3 +1,4 @@
|
||||
drop table if exists t1;
|
||||
set @org_mode=@@sql_mode;
|
||||
create table t1
|
||||
(
|
||||
|
@ -1,3 +1,4 @@
|
||||
drop table if exists t1;
|
||||
set @org_mode=@@sql_mode;
|
||||
create table t1
|
||||
(
|
||||
|
@ -1,3 +1,4 @@
|
||||
drop table if exists t1;
|
||||
set @org_mode=@@sql_mode;
|
||||
create table t1
|
||||
(
|
||||
|
@ -744,7 +744,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`id` AS `id` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`id`,<exists>(select 1 AS `1` having (<cache>(`test`.`t2`.`id`) = <ref_null_helper>(1)) union select 3 AS `3` having (<cache>(`test`.`t2`.`id`) = <ref_null_helper>(3))))
|
||||
Note 1003 select `test`.`t2`.`id` AS `id` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`id`,<exists>(select 1 AS `1` having trigcond((<cache>(`test`.`t2`.`id`) = <ref_null_helper>(1))) union select 3 AS `3` having trigcond((<cache>(`test`.`t2`.`id`) = <ref_null_helper>(3)))))
|
||||
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 3);
|
||||
id
|
||||
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 2);
|
||||
@ -907,7 +907,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
2 DEPENDENT SUBQUERY t2 ref_or_null a a 5 func 2 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,<in_optimizer>(`test`.`t1`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and ((<cache>(`test`.`t1`.`a`) = `test`.`t2`.`a`) or isnull(`test`.`t2`.`a`))) having <is_not_null_test>(`test`.`t2`.`a`))) AS `t1.a in (select t2.a from t2,t3 where t3.a=t2.a)` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,<in_optimizer>(`test`.`t1`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and trigcond(((<cache>(`test`.`t1`.`a`) = `test`.`t2`.`a`) or isnull(`test`.`t2`.`a`)))) having trigcond(<is_not_null_test>(`test`.`t2`.`a`)))) AS `t1.a in (select t2.a from t2,t3 where t3.a=t2.a)` from `test`.`t1`
|
||||
drop table t1,t2,t3;
|
||||
create table t1 (a float);
|
||||
select 10.5 IN (SELECT * from t1 LIMIT 1);
|
||||
@ -2816,19 +2816,19 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'0') and ((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`)) and ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`))) having (<is_not_null_test>(`test`.`t2`.`one`) and <is_not_null_test>(`test`.`t2`.`two`)))) AS `test` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'0') and trigcond((((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`)) and ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`))))) having trigcond((<is_not_null_test>(`test`.`t2`.`one`) and <is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
explain extended SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'N') and (<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) and (<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`))))
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'N') and trigcond(((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) and (<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`))))))
|
||||
explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = _latin1'0') group by `test`.`t2`.`one`,`test`.`t2`.`two` having (((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`)) and ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)) and <is_not_null_test>(`test`.`t2`.`one`) and <is_not_null_test>(`test`.`t2`.`two`)))) AS `test` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = _latin1'0') group by `test`.`t2`.`one`,`test`.`t2`.`two` having trigcond((((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`)) and ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)) and <is_not_null_test>(`test`.`t2`.`one`) and <is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a char(5), b char(5));
|
||||
INSERT INTO t1 VALUES (NULL,'aaa'), ('aaa','aaa');
|
||||
@ -3001,6 +3001,38 @@ field1 field2
|
||||
1 1
|
||||
1 3
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1(a int, INDEX (a));
|
||||
INSERT INTO t1 VALUES (1), (3), (5), (7);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
CREATE TABLE t2(a int);
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
EXPLAIN SELECT a, a IN (SELECT a FROM t1) FROM t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 3
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using index
|
||||
SELECT a, a IN (SELECT a FROM t1) FROM t2;
|
||||
a a IN (SELECT a FROM t1)
|
||||
1 1
|
||||
2 NULL
|
||||
3 1
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a DATETIME);
|
||||
INSERT INTO t1 VALUES ('1998-09-23'), ('2003-03-25');
|
||||
CREATE TABLE t2 AS SELECT
|
||||
(SELECT a FROM t1 WHERE a < '2000-01-01') AS sub_a
|
||||
FROM t1 WHERE a > '2000-01-01';
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`sub_a` datetime default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
CREATE TABLE t3 AS (SELECT a FROM t1 WHERE a < '2000-01-01') UNION (SELECT a FROM t1 WHERE a > '2000-01-01');
|
||||
SHOW CREATE TABLE t3;
|
||||
Table Create Table
|
||||
t3 CREATE TABLE `t3` (
|
||||
`a` datetime default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1,t2,t3;
|
||||
create table t1 (df decimal(5,1));
|
||||
insert into t1 values(1.1);
|
||||
insert into t1 values(2.2);
|
||||
@ -3544,3 +3576,19 @@ FROM t1 GROUP BY t1.a LIMIT 1)
|
||||
2
|
||||
2
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a int, b int auto_increment, PRIMARY KEY (b));
|
||||
CREATE TABLE t2 (x int auto_increment, y int, z int,
|
||||
PRIMARY KEY (x), FOREIGN KEY (y) REFERENCES t1 (b));
|
||||
SET SESSION sort_buffer_size = 32 * 1024;
|
||||
SELECT SQL_NO_CACHE COUNT(*)
|
||||
FROM (SELECT a, b, (SELECT x FROM t2 WHERE y=b ORDER BY z DESC LIMIT 1) c
|
||||
FROM t1) t;
|
||||
COUNT(*)
|
||||
3000
|
||||
SET SESSION sort_buffer_size = 8 * 1024 * 1024;
|
||||
SELECT SQL_NO_CACHE COUNT(*)
|
||||
FROM (SELECT a, b, (SELECT x FROM t2 WHERE y=b ORDER BY z DESC LIMIT 1) c
|
||||
FROM t1) t;
|
||||
COUNT(*)
|
||||
3000
|
||||
DROP TABLE t1,t2;
|
||||
|
153
mysql-test/r/subselect3.result
Normal file
153
mysql-test/r/subselect3.result
Normal file
@ -0,0 +1,153 @@
|
||||
drop table if exists t0, t1, t2, t3, t4;
|
||||
create table t1 (oref int, grp int, ie int) ;
|
||||
insert into t1 (oref, grp, ie) values
|
||||
(1, 1, 1),
|
||||
(1, 1, 1),
|
||||
(1, 2, NULL),
|
||||
(2, 1, 3),
|
||||
(3, 1, 4),
|
||||
(3, 2, NULL);
|
||||
create table t2 (oref int, a int);
|
||||
insert into t2 values
|
||||
(1, 1),
|
||||
(2, 2),
|
||||
(3, 3),
|
||||
(4, NULL),
|
||||
(2, NULL);
|
||||
select a, oref, a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp) from t2;
|
||||
a oref a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp)
|
||||
1 1 1
|
||||
2 2 0
|
||||
3 3 NULL
|
||||
NULL 4 0
|
||||
NULL 2 NULL
|
||||
explain extended
|
||||
select a, oref, a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp) from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 5
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 6 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref`,<in_optimizer>(`test`.`t2`.`a`,<exists>(select max(`test`.`t1`.`ie`) AS `max(ie)` from `test`.`t1` where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) group by `test`.`t1`.`grp` having trigcond((<cache>(`test`.`t2`.`a`) = <ref_null_helper>(max(`test`.`t1`.`ie`)))))) AS `a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp)` from `test`.`t2`
|
||||
explain extended
|
||||
select a, oref from t2
|
||||
where a in (select max(ie) from t1 where oref=t2.oref group by grp);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 5 Using where
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 6 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(select max(`test`.`t1`.`ie`) AS `max(ie)` from `test`.`t1` where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) group by `test`.`t1`.`grp` having (<cache>(`test`.`t2`.`a`) = <ref_null_helper>(max(`test`.`t1`.`ie`)))))
|
||||
create table t3 (a int);
|
||||
insert into t3 values (NULL), (NULL);
|
||||
flush status;
|
||||
select a in (select max(ie) from t1 where oref=4 group by grp) from t3;
|
||||
a in (select max(ie) from t1 where oref=4 group by grp)
|
||||
0
|
||||
0
|
||||
show status like 'Handler_read_rnd_next';
|
||||
Variable_name Value
|
||||
Handler_read_rnd_next 11
|
||||
select ' ^ This must show 11' Z;
|
||||
Z
|
||||
^ This must show 11
|
||||
explain extended select a in (select max(ie) from t1 where oref=4 group by grp) from t3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 2
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 6 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select <in_optimizer>(`test`.`t3`.`a`,<exists>(select max(`test`.`t1`.`ie`) AS `max(ie)` from `test`.`t1` where (`test`.`t1`.`oref` = 4) group by `test`.`t1`.`grp` having trigcond((<cache>(`test`.`t3`.`a`) = <ref_null_helper>(max(`test`.`t1`.`ie`)))))) AS `a in (select max(ie) from t1 where oref=4 group by grp)` from `test`.`t3`
|
||||
drop table t1, t2, t3;
|
||||
create table t1 (a int, oref int, key(a));
|
||||
insert into t1 values
|
||||
(1, 1),
|
||||
(1, NULL),
|
||||
(2, 3),
|
||||
(2, NULL),
|
||||
(3, NULL);
|
||||
create table t2 (a int, oref int);
|
||||
insert into t2 values (1, 1), (2,2), (NULL, 3), (NULL, 4);
|
||||
select oref, a, a in (select a from t1 where oref=t2.oref) Z from t2;
|
||||
oref a Z
|
||||
1 1 1
|
||||
2 2 0
|
||||
3 NULL NULL
|
||||
4 NULL 0
|
||||
explain extended
|
||||
select oref, a, a in (select a from t1 where oref=t2.oref) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 4
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using index; Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`oref` AS `oref`,`test`.`t2`.`a` AS `a`,<in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a checking NULL where (`test`.`t1`.`oref` = `test`.`t2`.`oref`)))) AS `Z` from `test`.`t2`
|
||||
flush status;
|
||||
select oref, a from t2 where a in (select a from t1 where oref=t2.oref);
|
||||
oref a
|
||||
1 1
|
||||
show status like '%Handler_read_rnd_next';
|
||||
Variable_name Value
|
||||
Handler_read_rnd_next 5
|
||||
delete from t2;
|
||||
insert into t2 values (NULL, 0),(NULL, 0), (NULL, 0), (NULL, 0);
|
||||
flush status;
|
||||
select oref, a, a in (select a from t1 where oref=t2.oref) Z from t2;
|
||||
oref a Z
|
||||
0 NULL 0
|
||||
0 NULL 0
|
||||
0 NULL 0
|
||||
0 NULL 0
|
||||
show status like '%Handler_read%';
|
||||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 0
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
Handler_read_rnd_next 29
|
||||
select 'No key lookups, seq reads: 29= 5 reads from t2 + 4 * 6 reads from t1.' Z;
|
||||
Z
|
||||
No key lookups, seq reads: 29= 5 reads from t2 + 4 * 6 reads from t1.
|
||||
drop table t1, t2;
|
||||
create table t1 (a int, b int, primary key (a));
|
||||
insert into t1 values (1,1), (3,1),(100,1);
|
||||
create table t2 (a int, b int);
|
||||
insert into t2 values (1,1),(2,1),(NULL,1),(NULL,0);
|
||||
select a,b, a in (select a from t1 where t1.b = t2.b) Z from t2 ;
|
||||
a b Z
|
||||
1 1 1
|
||||
2 1 0
|
||||
NULL 1 NULL
|
||||
NULL 0 0
|
||||
drop table t1, t2;
|
||||
create table t1 (a int, b int, key(a));
|
||||
insert into t1 values
|
||||
(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
||||
create table t2 like t1;
|
||||
insert into t2 select * from t1;
|
||||
update t2 set b=1;
|
||||
create table t3 (a int, oref int);
|
||||
insert into t3 values (1, 1), (NULL,1), (NULL,0);
|
||||
select a, oref,
|
||||
t3.a in (select t1.a from t1, t2 where t1.b=t2.a and t2.b=t3.oref) Z
|
||||
from t3;
|
||||
a oref Z
|
||||
1 1 1
|
||||
NULL 1 NULL
|
||||
NULL 0 0
|
||||
explain extended
|
||||
select a, oref,
|
||||
t3.a in (select t1.a from t1, t2 where t1.b=t2.a and t2.b=t3.oref) Z
|
||||
from t3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 3
|
||||
2 DEPENDENT SUBQUERY t1 ref_or_null a a 5 func 4 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ref a a 5 test.t1.b 1 Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't3.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t3`.`oref` AS `oref`,<in_optimizer>(`test`.`t3`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`b` = `test`.`t3`.`oref`) and trigcond(((<cache>(`test`.`t3`.`a`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`)))) having trigcond(<is_not_null_test>(`test`.`t1`.`a`)))) AS `Z` from `test`.`t3`
|
||||
drop table t1, t2, t3;
|
@ -179,3 +179,15 @@ a
|
||||
2006-06-06 15:55:55
|
||||
DROP PREPARE s;
|
||||
DROP TABLE t1;
|
||||
SELECT CAST(CAST('2006-08-10' AS DATE) AS DECIMAL(20,6));
|
||||
CAST(CAST('2006-08-10' AS DATE) AS DECIMAL(20,6))
|
||||
20060810.000000
|
||||
SELECT CAST(CAST('2006-08-10 10:11:12' AS DATETIME) AS DECIMAL(20,6));
|
||||
CAST(CAST('2006-08-10 10:11:12' AS DATETIME) AS DECIMAL(20,6))
|
||||
20060810101112.000000
|
||||
SELECT CAST(CAST('2006-08-10 10:11:12' AS DATETIME) + INTERVAL 14 MICROSECOND AS DECIMAL(20,6));
|
||||
CAST(CAST('2006-08-10 10:11:12' AS DATETIME) + INTERVAL 14 MICROSECOND AS DECIMAL(20,6))
|
||||
20060810101112.000014
|
||||
SELECT CAST(CAST('10:11:12.098700' AS TIME) AS DECIMAL(20,6));
|
||||
CAST(CAST('10:11:12.098700' AS TIME) AS DECIMAL(20,6))
|
||||
101112.098700
|
||||
|
@ -1410,3 +1410,16 @@ i2 count(distinct j)
|
||||
1.0 2
|
||||
2.0 2
|
||||
drop table t1;
|
||||
create table t1(f1 decimal(20,6));
|
||||
insert into t1 values (CAST('10:11:12' AS date) + interval 14 microsecond);
|
||||
insert into t1 values (CAST('10:11:12' AS time));
|
||||
select * from t1;
|
||||
f1
|
||||
20101112000000.000014
|
||||
101112.000000
|
||||
drop table t1;
|
||||
select cast(19999999999999999999 as unsigned);
|
||||
cast(19999999999999999999 as unsigned)
|
||||
18446744073709551615
|
||||
Warnings:
|
||||
Error 1292 Truncated incorrect DECIMAL value: ''
|
||||
|
@ -105,6 +105,85 @@ explain select myfunc_int(f1) from t1 order by 1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
drop table t1;
|
||||
CREATE TABLE t1(a INT, b INT);
|
||||
INSERT INTO t1 values (1,1),(2,2);
|
||||
CREATE FUNCTION fn(a int) RETURNS int DETERMINISTIC
|
||||
BEGIN
|
||||
RETURN a;
|
||||
END
|
||||
||
|
||||
CREATE VIEW v1 AS SELECT a, fn(MIN(b)) as c FROM t1 GROUP BY a;
|
||||
SELECT myfunc_int(a AS attr_name) FROM t1;
|
||||
myfunc_int(a AS attr_name)
|
||||
1
|
||||
2
|
||||
EXPLAIN EXTENDED SELECT myfunc_int(a AS attr_name) FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||
Warnings:
|
||||
Note 1003 select myfunc_int(`test`.`t1`.`a` AS `attr_name`) AS `myfunc_int(a AS attr_name)` from `test`.`t1`
|
||||
EXPLAIN EXTENDED SELECT myfunc_int(a) FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||
Warnings:
|
||||
Note 1003 select myfunc_int(`test`.`t1`.`a` AS `a`) AS `myfunc_int(a)` from `test`.`t1`
|
||||
SELECT a,c FROM v1;
|
||||
a c
|
||||
1 1
|
||||
2 2
|
||||
SELECT a, fn(MIN(b) xx) as c FROM t1 GROUP BY a;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xx) as c FROM t1 GROUP BY a' at line 1
|
||||
SELECT myfunc_int(fn(MIN(b) xx)) as c FROM t1 GROUP BY a;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xx)) as c FROM t1 GROUP BY a' at line 1
|
||||
SELECT myfunc_int(test.fn(MIN(b) xx)) as c FROM t1 GROUP BY a;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xx)) as c FROM t1 GROUP BY a' at line 1
|
||||
SELECT myfunc_int(fn(MIN(b)) xx) as c FROM t1 GROUP BY a;
|
||||
c
|
||||
1
|
||||
2
|
||||
SELECT myfunc_int(test.fn(MIN(b)) xx) as c FROM t1 GROUP BY a;
|
||||
c
|
||||
1
|
||||
2
|
||||
EXPLAIN EXTENDED SELECT myfunc_int(MIN(b) xx) as c FROM t1 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select myfunc_int(min(`test`.`t1`.`b`) AS `xx`) AS `c` from `test`.`t1` group by `test`.`t1`.`a`
|
||||
EXPLAIN EXTENDED SELECT test.fn(MIN(b)) as c FROM t1 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select `test`.`fn`(min(`test`.`t1`.`b`)) AS `c` from `test`.`t1` group by `test`.`t1`.`a`
|
||||
EXPLAIN EXTENDED SELECT myfunc_int(fn(MIN(b))) as c FROM t1 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select myfunc_int(`test`.`fn`(min(`test`.`t1`.`b`)) AS `fn(MIN(b))`) AS `c` from `test`.`t1` group by `test`.`t1`.`a`
|
||||
EXPLAIN EXTENDED SELECT myfunc_int(test.fn(MIN(b))) as c FROM t1 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select myfunc_int(`test`.`fn`(min(`test`.`t1`.`b`)) AS `test.fn(MIN(b))`) AS `c` from `test`.`t1` group by `test`.`t1`.`a`
|
||||
SELECT myfunc_int(MIN(b) xx) as c FROM t1 GROUP BY a;
|
||||
c
|
||||
1
|
||||
2
|
||||
SELECT test.fn(MIN(b)) as c FROM t1 GROUP BY a;
|
||||
c
|
||||
1
|
||||
2
|
||||
SELECT myfunc_int(fn(MIN(b))) as c FROM t1 GROUP BY a;
|
||||
c
|
||||
1
|
||||
2
|
||||
SELECT myfunc_int(test.fn(MIN(b))) as c FROM t1 GROUP BY a;
|
||||
c
|
||||
1
|
||||
2
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
DROP FUNCTION fn;
|
||||
End of 5.0 tests.
|
||||
DROP FUNCTION metaphon;
|
||||
DROP FUNCTION myfunc_double;
|
||||
|
@ -26,3 +26,55 @@ select x,xx from t1;
|
||||
x xx
|
||||
1 2
|
||||
drop table t1;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varbinary(255) default NULL,
|
||||
`b` varchar(255) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select length(a), length(b) from t1;
|
||||
length(a) length(b)
|
||||
255 3
|
||||
255 3
|
||||
CHECK TABLE t1 FOR UPGRADE;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check error Table upgrade required. Please do "REPAIR TABLE `t1`" to fix it!
|
||||
REPAIR TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varbinary(255) default NULL,
|
||||
`b` varchar(255) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select length(a), length(b) from t1;
|
||||
length(a) length(b)
|
||||
3 3
|
||||
3 3
|
||||
insert into t1 values("ccc", "ddd");
|
||||
select length(a), length(b) from t1;
|
||||
length(a) length(b)
|
||||
3 3
|
||||
3 3
|
||||
3 3
|
||||
select hex(a), hex(b) from t1;
|
||||
hex(a) hex(b)
|
||||
616161 636363
|
||||
626262 646464
|
||||
636363 646464
|
||||
select concat("'", a, "'"), concat("'", b, "'") from t1;
|
||||
concat("'", a, "'") concat("'", b, "'")
|
||||
'aaa' 'ccc'
|
||||
'bbb' 'ddd'
|
||||
'ccc' 'ddd'
|
||||
drop table t1;
|
||||
create table t1(a varbinary(255));
|
||||
insert into t1 values("aaa ");
|
||||
select length(a) from t1;
|
||||
length(a)
|
||||
6
|
||||
alter table t1 modify a varchar(255);
|
||||
select length(a) from t1;
|
||||
length(a)
|
||||
6
|
||||
|
BIN
mysql-test/std_data/bug19371.MYD
Normal file
BIN
mysql-test/std_data/bug19371.MYD
Normal file
Binary file not shown.
BIN
mysql-test/std_data/bug19371.MYI
Normal file
BIN
mysql-test/std_data/bug19371.MYI
Normal file
Binary file not shown.
BIN
mysql-test/std_data/bug19371.frm
Normal file
BIN
mysql-test/std_data/bug19371.frm
Normal file
Binary file not shown.
@ -1,11 +1,3 @@
|
||||
# This test doesn't work with the embedded version as this code
|
||||
# assumes that one query is running while we are doing queries on
|
||||
# a second connection.
|
||||
# This would work if mysqltest run would be threaded and handle each
|
||||
# connection in a separate thread.
|
||||
#
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_bdb.inc
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
|
@ -550,7 +550,7 @@ create table t1 (
|
||||
a varchar(112) charset utf8 collate utf8_bin not null,
|
||||
primary key (a)
|
||||
) select 'test' as a ;
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
@ -563,7 +563,7 @@ CREATE TABLE t2 (
|
||||
);
|
||||
insert into t2 values(111);
|
||||
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin not null,
|
||||
b int not null, primary key (a)
|
||||
@ -571,7 +571,7 @@ create table t1 (
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin not null,
|
||||
b int not null, primary key (a)
|
||||
@ -579,7 +579,7 @@ create table t1 (
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin not null,
|
||||
b int null, primary key (a)
|
||||
@ -587,7 +587,7 @@ create table t1 (
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin not null,
|
||||
b int not null, primary key (a)
|
||||
@ -595,7 +595,7 @@ create table t1 (
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin,
|
||||
b int not null, primary key (a)
|
||||
@ -609,7 +609,7 @@ create table t1 (
|
||||
);
|
||||
insert into t1 values (1,1,1, 1,1,1, 1,1,1);
|
||||
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
create table t2 (
|
||||
a1 varchar(12) charset utf8 collate utf8_bin not null,
|
||||
a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int,
|
||||
@ -617,20 +617,20 @@ create table t2 (
|
||||
) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1 ;
|
||||
drop table t2;
|
||||
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
create table t2 (
|
||||
a1 varchar(12) charset utf8 collate utf8_bin,
|
||||
a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int
|
||||
) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1;
|
||||
|
||||
drop table t1, t2;
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
create table t1 (
|
||||
a1 int, a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int
|
||||
);
|
||||
insert into t1 values (1,1,1, 1,1,1, 1,1,1);
|
||||
|
||||
--warning 1364
|
||||
#--warning 1364
|
||||
create table t2 (
|
||||
a1 varchar(12) charset utf8 collate utf8_bin not null,
|
||||
a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int,
|
||||
|
@ -1360,27 +1360,27 @@ DROP TABLE bug14672;
|
||||
create table t1 (a int) engine=csv;
|
||||
insert t1 values (1);
|
||||
--enable_info
|
||||
delete from t1; -- delete_row
|
||||
delete from t1; -- delete_all_rows
|
||||
delete from t1; # delete_row
|
||||
delete from t1; # delete_all_rows
|
||||
--disable_info
|
||||
insert t1 values (1),(2);
|
||||
--enable_info
|
||||
delete from t1; -- delete_all_rows
|
||||
delete from t1; # delete_all_rows
|
||||
--disable_info
|
||||
insert t1 values (1),(2),(3);
|
||||
flush tables;
|
||||
--enable_info
|
||||
delete from t1; -- delete_row
|
||||
delete from t1; # delete_row
|
||||
--disable_info
|
||||
insert t1 values (1),(2),(3),(4);
|
||||
flush tables;
|
||||
select count(*) from t1;
|
||||
--enable_info
|
||||
delete from t1; -- delete_all_rows
|
||||
delete from t1; # delete_all_rows
|
||||
--disable_info
|
||||
insert t1 values (1),(2),(3),(4),(5);
|
||||
--enable_info
|
||||
truncate table t1; -- truncate
|
||||
truncate table t1; # truncate
|
||||
--disable_info
|
||||
drop table t1;
|
||||
|
||||
|
@ -59,7 +59,7 @@ INSERT INTO t1 (latin1_f) VALUES (_latin1'Z');
|
||||
INSERT INTO t1 (latin1_f) VALUES (_latin1'z');
|
||||
|
||||
|
||||
-- ORDER BY
|
||||
# ORDER BY
|
||||
|
||||
SELECT latin1_f FROM t1 ORDER BY latin1_f;
|
||||
SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_swedish_ci;
|
||||
@ -69,9 +69,9 @@ SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_bin;
|
||||
--error 1253
|
||||
SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE koi8r_general_ci;
|
||||
|
||||
--SELECT latin1_f COLLATE koi8r FROM t1 ;
|
||||
# SELECT latin1_f COLLATE koi8r FROM t1 ;
|
||||
|
||||
-- AS + ORDER BY
|
||||
# AS + ORDER BY
|
||||
SELECT latin1_f COLLATE latin1_swedish_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as;
|
||||
SELECT latin1_f COLLATE latin1_german2_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as;
|
||||
SELECT latin1_f COLLATE latin1_general_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as;
|
||||
@ -80,7 +80,7 @@ SELECT latin1_f COLLATE latin1_bin AS latin1_f_as FROM t1 ORDER BY latin1
|
||||
SELECT latin1_f COLLATE koi8r_general_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as;
|
||||
|
||||
|
||||
-- GROUP BY
|
||||
# GROUP BY
|
||||
|
||||
SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f;
|
||||
SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_swedish_ci;
|
||||
@ -91,7 +91,7 @@ SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_bin;
|
||||
SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE koi8r_general_ci;
|
||||
|
||||
|
||||
-- DISTINCT
|
||||
# DISTINCT
|
||||
|
||||
SELECT DISTINCT latin1_f FROM t1;
|
||||
SELECT DISTINCT latin1_f COLLATE latin1_swedish_ci FROM t1;
|
||||
@ -102,21 +102,20 @@ SELECT DISTINCT latin1_f COLLATE latin1_bin FROM t1;
|
||||
SELECT DISTINCT latin1_f COLLATE koi8r FROM t1;
|
||||
|
||||
|
||||
-- Aggregates
|
||||
--SELECT MAX(k COLLATE latin1_german2_ci)
|
||||
--FROM t1
|
||||
|
||||
|
||||
-- WHERE
|
||||
--SELECT *
|
||||
--FROM t1
|
||||
--WHERE (_latin1'Mu"ller' COLLATE latin1_german2_ci) = k
|
||||
|
||||
--HAVING
|
||||
--SELECT *
|
||||
--FROM t1
|
||||
--HAVING (_latin1'Mu"ller' COLLATE latin1_german2_ci) = k
|
||||
# Aggregates
|
||||
|
||||
--disable_parsing
|
||||
SELECT MAX(k COLLATE latin1_german2_ci)
|
||||
FROM t1
|
||||
WHERE
|
||||
SELECT *
|
||||
FROM t1
|
||||
WHERE (_latin1'Mu"ller' COLLATE latin1_german2_ci) = k
|
||||
HAVING
|
||||
SELECT *
|
||||
FROM t1
|
||||
HAVING (_latin1'Mu"ller' COLLATE latin1_german2_ci) = k;
|
||||
--enable_parsing
|
||||
|
||||
#
|
||||
# Check that SHOW displays COLLATE clause
|
||||
|
@ -1,5 +1,9 @@
|
||||
-- source include/have_cp1250_ch.inc
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
SHOW COLLATION LIKE 'cp1250_czech_cs';
|
||||
|
||||
#
|
||||
|
@ -298,7 +298,7 @@ INSERT INTO t1 VALUES (0xA),(0xAA),(0xAAA),(0xAAAA),(0xAAAAA);
|
||||
SELECT HEX(a) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
-- the same should be also done with enum and set
|
||||
# the same should be also done with enum and set
|
||||
|
||||
|
||||
#
|
||||
@ -454,6 +454,23 @@ select utext from t1 where utext like '%%';
|
||||
drop table t1;
|
||||
deallocate prepare stmt;
|
||||
|
||||
#
|
||||
# Bug#22052 Trailing spaces are not removed from UNICODE fields in an index
|
||||
#
|
||||
create table t1 (
|
||||
a char(10) unicode not null,
|
||||
index a (a)
|
||||
) engine=myisam;
|
||||
insert into t1 values (repeat(0x201f, 10));
|
||||
insert into t1 values (repeat(0x2020, 10));
|
||||
insert into t1 values (repeat(0x2021, 10));
|
||||
# make sure "index read" is used
|
||||
explain select hex(a) from t1 order by a;
|
||||
select hex(a) from t1 order by a;
|
||||
alter table t1 drop index a;
|
||||
select hex(a) from t1 order by a;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #20076: server crashes for a query with GROUP BY if MIN/MAX aggregation
|
||||
# over a 'ucs2' field uses a temporary table
|
||||
|
@ -1228,6 +1228,30 @@ set @a:=null;
|
||||
execute my_stmt using @a;
|
||||
drop table if exists t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug#21505 Create view - illegal mix of collation for operation 'UNION'
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop view if exists v1, v2;
|
||||
--enable_warnings
|
||||
set names utf8;
|
||||
create table t1(col1 varchar(12) character set utf8 collate utf8_unicode_ci);
|
||||
insert into t1 values('t1_val');
|
||||
create view v1 as select 'v1_val' as col1;
|
||||
select coercibility(col1), collation(col1) from v1;
|
||||
create view v2 as select col1 from v1 union select col1 from t1;
|
||||
select coercibility(col1), collation(col1)from v2;
|
||||
drop view v1, v2;
|
||||
create view v1 as select 'v1_val' collate utf8_swedish_ci as col1;
|
||||
select coercibility(col1), collation(col1) from v1;
|
||||
create view v2 as select col1 from v1 union select col1 from t1;
|
||||
select coercibility(col1), collation(col1) from v2;
|
||||
drop view v1, v2;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug#19960: Inconsistent results when joining
|
||||
# InnoDB tables using partial UTF8 indexes
|
||||
|
@ -326,4 +326,12 @@ SELECT TIME_FORMAT("25:00:00", '%l %p');
|
||||
#
|
||||
SELECT DATE_FORMAT('%Y-%m-%d %H:%i:%s', 1151414896);
|
||||
|
||||
#
|
||||
# Bug #22029: str_to_date returning NULL
|
||||
#
|
||||
|
||||
select str_to_date('04 /30/2004', '%m /%d/%Y');
|
||||
select str_to_date('04/30 /2004', '%m /%d /%Y');
|
||||
select str_to_date('04/30/2004 ', '%m/%d/%Y ');
|
||||
|
||||
--echo "End of 4.1 tests"
|
||||
|
@ -12,4 +12,3 @@
|
||||
|
||||
ndb_load : Bug#17233
|
||||
user_limits : Bug#23921 random failure of user_limits.test
|
||||
|
||||
|
@ -1,11 +1,3 @@
|
||||
# This test doesn't work with the embedded version as this code
|
||||
# assumes that one query is running while we are doing queries on
|
||||
# a second connection.
|
||||
# This would work if mysqltest run would be threaded and handle each
|
||||
# connection in a separate thread.
|
||||
#
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
connection con1;
|
||||
|
@ -3,9 +3,6 @@
|
||||
# We verify that we did not introduce a deadlock.
|
||||
# This is intended to mimick how mysqldump and innobackup work.
|
||||
|
||||
# This test doesn't work with the embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
# And it requires InnoDB
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
|
@ -461,3 +461,38 @@ SELECT GROUP_CONCAT(a), x
|
||||
GROUP BY x;
|
||||
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#23451 GROUP_CONCAT truncates a multibyte utf8 character
|
||||
#
|
||||
set names utf8;
|
||||
create table t1
|
||||
(
|
||||
x text character set utf8 not null,
|
||||
y integer not null
|
||||
);
|
||||
insert into t1 values (repeat('a', 1022), 0), (repeat(_utf8 0xc3b7, 4), 0);
|
||||
let $1= 10;
|
||||
while ($1)
|
||||
{
|
||||
eval set group_concat_max_len= 1022 + $1;
|
||||
--disable_result_log
|
||||
select @x:=group_concat(x) from t1 group by y;
|
||||
--enable_result_log
|
||||
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
|
||||
dec $1;
|
||||
}
|
||||
drop table t1;
|
||||
set group_concat_max_len=1024;
|
||||
set names latin1;
|
||||
|
||||
#
|
||||
# Bug#14169 type of group_concat() result changed to blob if tmp_table was used
|
||||
#
|
||||
create table t1 (f1 int unsigned, f2 varchar(255));
|
||||
insert into t1 values (1,repeat('a',255)),(2,repeat('b',255));
|
||||
--enable_metadata
|
||||
select f2,group_concat(f1) from t1 group by f2;
|
||||
--disable_metadata
|
||||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
@ -700,3 +700,28 @@ create table t1 select stddev(0);
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #23184: SELECT causes server crash
|
||||
#
|
||||
CREATE TABLE t1 (a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);
|
||||
INSERT INTO t1 SELECT a, b+8 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+16 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+32 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+64 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+128 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+256 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+512 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+1024 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+2048 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+4096 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+8192 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+16384 FROM t1;
|
||||
INSERT INTO t1 SELECT a, b+32768 FROM t1;
|
||||
SELECT a,COUNT(DISTINCT b) AS cnt FROM t1 GROUP BY a HAVING cnt > 50;
|
||||
SELECT a,SUM(DISTINCT b) AS sumation FROM t1 GROUP BY a HAVING sumation > 50;
|
||||
SELECT a,AVG(DISTINCT b) AS average FROM t1 GROUP BY a HAVING average > 50;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -125,4 +125,11 @@ drop table t2;
|
||||
drop table t1;
|
||||
set global query_cache_size=default;
|
||||
|
||||
#
|
||||
# Bug #21466: INET_ATON() returns signed, not unsigned
|
||||
#
|
||||
|
||||
create table t1 select INET_ATON('255.255.0.1') as `a`;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
--echo End of 5.0 tests
|
||||
|
@ -35,7 +35,7 @@ SET @@SQL_MODE="ALLOW_INVALID_DATES";
|
||||
select datediff("1997-11-31 23:59:59.000001","1997-12-31");
|
||||
SET @@SQL_MODE="";
|
||||
|
||||
-- This will give a warning
|
||||
# This will give a warning
|
||||
select datediff("1997-11-31 23:59:59.000001","1997-12-31");
|
||||
select datediff("1997-11-30 23:59:59.000001",null);
|
||||
|
||||
|
@ -300,18 +300,26 @@ select POSITION(_latin1'B' COLLATE latin1_general_ci IN _latin1'abcd' COLLATE la
|
||||
select POSITION(_latin1'B' IN _latin2'abcd');
|
||||
|
||||
select FIND_IN_SET(_latin1'B',_latin1'a,b,c,d');
|
||||
--fix this:
|
||||
--select FIND_IN_SET(_latin1'B',_latin1'a,b,c,d' COLLATE latin1_bin);
|
||||
--select FIND_IN_SET(_latin1'B' COLLATE latin1_bin,_latin1'a,b,c,d');
|
||||
|
||||
# fix this:
|
||||
--disable_parsing
|
||||
select FIND_IN_SET(_latin1'B',_latin1'a,b,c,d' COLLATE latin1_bin);
|
||||
select FIND_IN_SET(_latin1'B' COLLATE latin1_bin,_latin1'a,b,c,d');
|
||||
--enable_parsing
|
||||
|
||||
--error 1267
|
||||
select FIND_IN_SET(_latin1'B' COLLATE latin1_general_ci,_latin1'a,b,c,d' COLLATE latin1_bin);
|
||||
--error 1267
|
||||
select FIND_IN_SET(_latin1'B',_latin2'a,b,c,d');
|
||||
|
||||
select SUBSTRING_INDEX(_latin1'abcdabcdabcd',_latin1'd',2);
|
||||
--fix this:
|
||||
--select SUBSTRING_INDEX(_latin1'abcdabcdabcd' COLLATE latin1_bin,_latin1'd',2);
|
||||
--select SUBSTRING_INDEX(_latin1'abcdabcdabcd',_latin1'd' COLLATE latin1_bin,2);
|
||||
|
||||
# fix this:
|
||||
--disable_parsing
|
||||
select SUBSTRING_INDEX(_latin1'abcdabcdabcd' COLLATE latin1_bin,_latin1'd',2);
|
||||
select SUBSTRING_INDEX(_latin1'abcdabcdabcd',_latin1'd' COLLATE latin1_bin,2);
|
||||
--enable_parsing
|
||||
|
||||
--error 1267
|
||||
select SUBSTRING_INDEX(_latin1'abcdabcdabcd',_latin2'd',2);
|
||||
--error 1267
|
||||
|
@ -707,3 +707,9 @@ SELECT DATE_FORMAT(field1,'%b-%e %l:%i%p') as fmtddate, field2 FROM testBug8868;
|
||||
DROP TABLE testBug8868;
|
||||
|
||||
SET NAMES DEFAULT;
|
||||
|
||||
#
|
||||
# Bug #22229: bug in DATE_ADD()
|
||||
#
|
||||
|
||||
select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
|
||||
|
@ -242,3 +242,15 @@ INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,0)));
|
||||
SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0));
|
||||
DROP TABLE t1;
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# bug #21790 (UNKNOWN ERROR on NULLs in RTree)
|
||||
#
|
||||
CREATE TABLE t1(foo GEOMETRY NOT NULL, SPATIAL INDEX(foo) );
|
||||
--error 1048
|
||||
INSERT INTO t1(foo) VALUES (NULL);
|
||||
--error 1416
|
||||
INSERT INTO t1() VALUES ();
|
||||
--error 1416
|
||||
INSERT INTO t1(foo) VALUES ('');
|
||||
DROP TABLE t1;
|
||||
|
@ -118,7 +118,7 @@ drop table t1;
|
||||
#
|
||||
--error 1221
|
||||
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
|
||||
select 1; -- To test that the previous command didn't cause problems
|
||||
select 1; # To test that the previous command didn't cause problems
|
||||
|
||||
#
|
||||
# Bug #4898: User privileges depending on ORDER BY Settings of table db
|
||||
|
@ -140,18 +140,18 @@ insert into t7 values (21,2,3,4,5,6);
|
||||
select @@optimizer_search_depth;
|
||||
select @@optimizer_prune_level;
|
||||
|
||||
-- This value swithes back to the old implementation of 'find_best()'
|
||||
-- set optimizer_search_depth=63; - old (independent of the optimizer_prune_level)
|
||||
# This value swithes back to the old implementation of 'find_best()'
|
||||
# set optimizer_search_depth=63; - old (independent of the optimizer_prune_level)
|
||||
#
|
||||
# These are the values for the parameters that control the greedy optimizer
|
||||
# (total 6 combinations - 3 for optimizer_search_depth, 2 for optimizer_prune_level):
|
||||
--
|
||||
-- These are the values for the parameters that control the greedy optimizer
|
||||
-- (total 6 combinations - 3 for optimizer_search_depth, 2 for optimizer_prune_level):
|
||||
# set optimizer_search_depth=0; - automatic
|
||||
# set optimizer_search_depth=1; - min
|
||||
# set optimizer_search_depth=62; - max (default)
|
||||
--
|
||||
-- set optimizer_search_depth=0; - automatic
|
||||
-- set optimizer_search_depth=1; - min
|
||||
-- set optimizer_search_depth=62; - max (default)
|
||||
--
|
||||
-- set optimizer_prune_level=0 - exhaustive;
|
||||
-- set optimizer_prune_level=1 - heuristic; -- default
|
||||
# set optimizer_prune_level=0 - exhaustive;
|
||||
# set optimizer_prune_level=1 - heuristic; # default
|
||||
|
||||
|
||||
#
|
||||
@ -170,17 +170,17 @@ select @@optimizer_prune_level;
|
||||
set optimizer_search_depth=63;
|
||||
select @@optimizer_search_depth;
|
||||
|
||||
-- 6-table join, chain
|
||||
# 6-table join, chain
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, star
|
||||
# 6-table join, star
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, clique
|
||||
# 6-table join, clique
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
@ -195,17 +195,17 @@ select @@optimizer_prune_level;
|
||||
set optimizer_search_depth=0;
|
||||
select @@optimizer_search_depth;
|
||||
|
||||
-- 6-table join, chain
|
||||
# 6-table join, chain
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, star
|
||||
# 6-table join, star
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, clique
|
||||
# 6-table join, clique
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
@ -214,17 +214,17 @@ show status like 'Last_query_cost';
|
||||
set optimizer_search_depth=1;
|
||||
select @@optimizer_search_depth;
|
||||
|
||||
-- 6-table join, chain
|
||||
# 6-table join, chain
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, star
|
||||
# 6-table join, star
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, clique
|
||||
# 6-table join, clique
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
@ -233,17 +233,17 @@ show status like 'Last_query_cost';
|
||||
set optimizer_search_depth=62;
|
||||
select @@optimizer_search_depth;
|
||||
|
||||
-- 6-table join, chain
|
||||
# 6-table join, chain
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, star
|
||||
# 6-table join, star
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, clique
|
||||
# 6-table join, clique
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
@ -256,17 +256,17 @@ select @@optimizer_prune_level;
|
||||
set optimizer_search_depth=0;
|
||||
select @@optimizer_search_depth;
|
||||
|
||||
-- 6-table join, chain
|
||||
# 6-table join, chain
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, star
|
||||
# 6-table join, star
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, clique
|
||||
# 6-table join, clique
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
@ -275,17 +275,17 @@ show status like 'Last_query_cost';
|
||||
set optimizer_search_depth=1;
|
||||
select @@optimizer_search_depth;
|
||||
|
||||
-- 6-table join, chain
|
||||
# 6-table join, chain
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, star
|
||||
# 6-table join, star
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, clique
|
||||
# 6-table join, clique
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
@ -294,17 +294,17 @@ show status like 'Last_query_cost';
|
||||
set optimizer_search_depth=62;
|
||||
select @@optimizer_search_depth;
|
||||
|
||||
-- 6-table join, chain
|
||||
# 6-table join, chain
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c12 = t2.c21 and t2.c22 = t3.c31 and t3.c32 = t4.c41 and t4.c42 = t5.c51 and t5.c52 = t6.c61 and t6.c62 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, star
|
||||
# 6-table join, star
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
|
||||
show status like 'Last_query_cost';
|
||||
-- 6-table join, clique
|
||||
# 6-table join, clique
|
||||
explain select t1.c11 from t1, t2, t3, t4, t5, t6, t7 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
show status like 'Last_query_cost';
|
||||
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
|
||||
|
@ -57,8 +57,8 @@ create index idx_t1_1 on t1 (a1,a2,b,c);
|
||||
create index idx_t1_2 on t1 (a1,a2,b);
|
||||
analyze table t1;
|
||||
|
||||
-- t2 is the same as t1, but with some NULLs in the MIN/MAX column, and one more
|
||||
-- nullable attribute
|
||||
# t2 is the same as t1, but with some NULLs in the MIN/MAX column, and
|
||||
# one more nullable attribute
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t2;
|
||||
@ -68,7 +68,7 @@ create table t2 (
|
||||
a1 char(64), a2 char(64) not null, b char(16), c char(16), d char(16), dummy char(64) default ' '
|
||||
);
|
||||
insert into t2 select * from t1;
|
||||
-- add few rows with NULL's in the MIN/MAX column
|
||||
# add few rows with NULL's in the MIN/MAX column
|
||||
insert into t2 (a1, a2, b, c, d) values
|
||||
('a','a',NULL,'a777','xyz'),('a','a',NULL,'a888','xyz'),('a','a',NULL,'a999','xyz'),
|
||||
('a','a','a',NULL,'xyz'),
|
||||
@ -92,10 +92,10 @@ create index idx_t2_1 on t2 (a1,a2,b,c);
|
||||
create index idx_t2_2 on t2 (a1,a2,b);
|
||||
analyze table t2;
|
||||
|
||||
-- Table t3 is the same as t1, but with smaller column lenghts.
|
||||
-- This allows to test different branches of the cost computation procedure
|
||||
-- when the number of keys per block are less than the number of keys in the
|
||||
-- sub-groups formed by predicates over non-group attributes.
|
||||
# Table t3 is the same as t1, but with smaller column lenghts.
|
||||
# This allows to test different branches of the cost computation procedure
|
||||
# when the number of keys per block are less than the number of keys in the
|
||||
# sub-groups formed by predicates over non-group attributes.
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t3;
|
||||
@ -164,11 +164,11 @@ create index idx_t3_2 on t3 (a1,a2,b);
|
||||
analyze table t3;
|
||||
|
||||
|
||||
--
|
||||
-- Queries without a WHERE clause. These queries do not use ranges.
|
||||
--
|
||||
#
|
||||
# Queries without a WHERE clause. These queries do not use ranges.
|
||||
#
|
||||
|
||||
-- plans
|
||||
# plans
|
||||
explain select a1, min(a2) from t1 group by a1;
|
||||
explain select a1, max(a2) from t1 group by a1;
|
||||
explain select a1, min(a2), max(a2) from t1 group by a1;
|
||||
@ -176,31 +176,31 @@ explain select a1, a2, b, min(c), max(c) from t1 group by a1,a2,b;
|
||||
explain select a1,a2,b,max(c),min(c) from t1 group by a1,a2,b;
|
||||
--replace_column 7 # 9 #
|
||||
explain select a1,a2,b,max(c),min(c) from t2 group by a1,a2,b;
|
||||
-- Select fields in different order
|
||||
# Select fields in different order
|
||||
explain select min(a2), a1, max(a2), min(a2), a1 from t1 group by a1;
|
||||
explain select a1, b, min(c), a1, max(c), b, a2, max(c), max(c) from t1 group by a1, a2, b;
|
||||
explain select min(a2) from t1 group by a1;
|
||||
explain select a2, min(c), max(c) from t1 group by a1,a2,b;
|
||||
|
||||
-- queries
|
||||
# queries
|
||||
select a1, min(a2) from t1 group by a1;
|
||||
select a1, max(a2) from t1 group by a1;
|
||||
select a1, min(a2), max(a2) from t1 group by a1;
|
||||
select a1, a2, b, min(c), max(c) from t1 group by a1,a2,b;
|
||||
select a1,a2,b,max(c),min(c) from t1 group by a1,a2,b;
|
||||
select a1,a2,b,max(c),min(c) from t2 group by a1,a2,b;
|
||||
-- Select fields in different order
|
||||
# Select fields in different order
|
||||
select min(a2), a1, max(a2), min(a2), a1 from t1 group by a1;
|
||||
select a1, b, min(c), a1, max(c), b, a2, max(c), max(c) from t1 group by a1, a2, b;
|
||||
select min(a2) from t1 group by a1;
|
||||
select a2, min(c), max(c) from t1 group by a1,a2,b;
|
||||
|
||||
--
|
||||
-- Queries with a where clause
|
||||
--
|
||||
#
|
||||
# Queries with a where clause
|
||||
#
|
||||
|
||||
-- A) Preds only over the group 'A' attributes
|
||||
-- plans
|
||||
# A) Preds only over the group 'A' attributes
|
||||
# plans
|
||||
explain select a1,a2,b,min(c),max(c) from t1 where a1 < 'd' group by a1,a2,b;
|
||||
explain select a1,a2,b,min(c),max(c) from t1 where a1 >= 'b' group by a1,a2,b;
|
||||
explain select a1,a2,b, max(c) from t1 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
|
||||
@ -238,7 +238,7 @@ explain select a1,min(c),max(c) from t2 where a1 >= 'b' group by a1,a2,b;
|
||||
--replace_column 9 #
|
||||
explain select a1, max(c) from t2 where a1 in ('a','b','d') group by a1,a2,b;
|
||||
|
||||
-- queries
|
||||
# queries
|
||||
select a1,a2,b,min(c),max(c) from t1 where a1 < 'd' group by a1,a2,b;
|
||||
select a1,a2,b,min(c),max(c) from t1 where a1 >= 'b' group by a1,a2,b;
|
||||
select a1,a2,b, max(c) from t1 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
|
||||
@ -264,8 +264,8 @@ select a1,a2,b,min(c),max(c) from t2 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or
|
||||
select a1,min(c),max(c) from t2 where a1 >= 'b' group by a1,a2,b;
|
||||
select a1, max(c) from t2 where a1 in ('a','b','d') group by a1,a2,b;
|
||||
|
||||
-- B) Equalities only over the non-group 'B' attributes
|
||||
-- plans
|
||||
# B) Equalities only over the non-group 'B' attributes
|
||||
# plans
|
||||
explain select a1,a2,b,max(c),min(c) from t1 where (a2 = 'a') and (b = 'b') group by a1;
|
||||
explain select a1,max(c),min(c) from t1 where (a2 = 'a') and (b = 'b') group by a1;
|
||||
explain select a1,a2,b, max(c) from t1 where (b = 'b') group by a1,a2;
|
||||
@ -278,11 +278,11 @@ explain select a1,a2,b, max(c) from t2 where (b = 'b') group by a1,a2;
|
||||
explain select a1,a2,b,min(c),max(c) from t2 where (b = 'b') group by a1,a2;
|
||||
explain select a1,a2, max(c) from t2 where (b = 'b') group by a1,a2;
|
||||
|
||||
-- these queries test case 2) in TRP_GROUP_MIN_MAX::update_cost()
|
||||
# these queries test case 2) in TRP_GROUP_MIN_MAX::update_cost()
|
||||
explain select a1,a2,b,max(c),min(c) from t3 where (a2 = 'a') and (b = 'b') group by a1;
|
||||
explain select a1,max(c),min(c) from t3 where (a2 = 'a') and (b = 'b') group by a1;
|
||||
|
||||
-- queries
|
||||
# queries
|
||||
select a1,a2,b,max(c),min(c) from t1 where (a2 = 'a') and (b = 'b') group by a1;
|
||||
select a1,max(c),min(c) from t1 where (a2 = 'a') and (b = 'b') group by a1;
|
||||
select a1,a2,b, max(c) from t1 where (b = 'b') group by a1,a2;
|
||||
@ -295,20 +295,20 @@ select a1,a2,b, max(c) from t2 where (b = 'b') group by a1,a2;
|
||||
select a1,a2,b,min(c),max(c) from t2 where (b = 'b') group by a1,a2;
|
||||
select a1,a2, max(c) from t2 where (b = 'b') group by a1,a2;
|
||||
|
||||
-- these queries test case 2) in TRP_GROUP_MIN_MAX::update_cost()
|
||||
# these queries test case 2) in TRP_GROUP_MIN_MAX::update_cost()
|
||||
select a1,a2,b,max(c),min(c) from t3 where (a2 = 'a') and (b = 'b') group by a1;
|
||||
select a1,max(c),min(c) from t3 where (a2 = 'a') and (b = 'b') group by a1;
|
||||
|
||||
|
||||
-- IS NULL (makes sense for t2 only)
|
||||
-- plans
|
||||
# IS NULL (makes sense for t2 only)
|
||||
# plans
|
||||
explain select a1,a2,b,min(c) from t2 where (a2 = 'a') and b is NULL group by a1;
|
||||
explain select a1,a2,b,max(c) from t2 where (a2 = 'a') and b is NULL group by a1;
|
||||
explain select a1,a2,b,min(c) from t2 where b is NULL group by a1,a2;
|
||||
explain select a1,a2,b,max(c) from t2 where b is NULL group by a1,a2;
|
||||
explain select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
|
||||
explain select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
|
||||
-- queries
|
||||
# queries
|
||||
select a1,a2,b,min(c) from t2 where (a2 = 'a') and b is NULL group by a1;
|
||||
select a1,a2,b,max(c) from t2 where (a2 = 'a') and b is NULL group by a1;
|
||||
select a1,a2,b,min(c) from t2 where b is NULL group by a1,a2;
|
||||
@ -316,8 +316,8 @@ select a1,a2,b,max(c) from t2 where b is NULL group by a1,a2;
|
||||
select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
|
||||
select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
|
||||
|
||||
-- C) Range predicates for the MIN/MAX attribute
|
||||
-- plans
|
||||
# C) Range predicates for the MIN/MAX attribute
|
||||
# plans
|
||||
--replace_column 9 #
|
||||
explain select a1,a2,b, max(c) from t1 where (c > 'b1') group by a1,a2,b;
|
||||
explain select a1,a2,b,min(c),max(c) from t1 where (c > 'b1') group by a1,a2,b;
|
||||
@ -367,7 +367,7 @@ explain select a1,a2,b,min(c),max(c) from t2 where (c < 'c5') or (c = 'g412') or
|
||||
--replace_column 9 #
|
||||
explain select a1,a2,b,min(c),max(c) from t2 where ((c > 'b111') and (c <= 'g112')) or ((c > 'd000') and (c <= 'i110')) group by a1,a2,b;
|
||||
|
||||
-- queries
|
||||
# queries
|
||||
select a1,a2,b, max(c) from t1 where (c > 'b1') group by a1,a2,b;
|
||||
select a1,a2,b,min(c),max(c) from t1 where (c > 'b1') group by a1,a2,b;
|
||||
select a1,a2,b, max(c) from t1 where (c > 'f123') group by a1,a2,b;
|
||||
@ -401,19 +401,19 @@ select a1,a2,b,min(c),max(c) from t2 where (c > 'b111') and (c <= 'g112') group
|
||||
select a1,a2,b,min(c),max(c) from t2 where (c < 'c5') or (c = 'g412') or (c = 'k421') group by a1,a2,b;
|
||||
select a1,a2,b,min(c),max(c) from t2 where ((c > 'b111') and (c <= 'g112')) or ((c > 'd000') and (c <= 'i110')) group by a1,a2,b;
|
||||
|
||||
-- analyze the sub-select
|
||||
# analyze the sub-select
|
||||
explain select a1,a2,b,min(c),max(c) from t1
|
||||
where exists ( select * from t2 where t2.c = t1.c )
|
||||
group by a1,a2,b;
|
||||
|
||||
-- the sub-select is unrelated to MIN/MAX
|
||||
# the sub-select is unrelated to MIN/MAX
|
||||
explain select a1,a2,b,min(c),max(c) from t1
|
||||
where exists ( select * from t2 where t2.c > 'b1' )
|
||||
group by a1,a2,b;
|
||||
|
||||
|
||||
-- A,B,C) Predicates referencing mixed classes of attributes
|
||||
-- plans
|
||||
# A,B,C) Predicates referencing mixed classes of attributes
|
||||
# plans
|
||||
explain select a1,a2,b,min(c),max(c) from t1 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
|
||||
explain select a1,a2,b,min(c),max(c) from t1 where (a1 >= 'c' or a2 < 'b') and (c > 'b111') group by a1,a2,b;
|
||||
explain select a1,a2,b,min(c),max(c) from t1 where (a2 >= 'b') and (b = 'a') and (c > 'b111') group by a1,a2,b;
|
||||
@ -435,7 +435,7 @@ explain select a1,a2,b,min(c) from t2 where ((a1 > 'a') or (a1 < '9')) and ((a2
|
||||
--replace_column 9 #
|
||||
explain select a1,a2,b,min(c) from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
|
||||
|
||||
-- queries
|
||||
# queries
|
||||
select a1,a2,b,min(c),max(c) from t1 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
|
||||
select a1,a2,b,min(c),max(c) from t1 where (a1 >= 'c' or a2 < 'b') and (c > 'b111') group by a1,a2,b;
|
||||
select a1,a2,b,min(c),max(c) from t1 where (a2 >= 'b') and (b = 'a') and (c > 'b111') group by a1,a2,b;
|
||||
@ -452,11 +452,11 @@ select a1,a2,b,min(c) from t2 where ((a1 > 'a') or (a1 < '9')) and ((a2 >= 'b')
|
||||
select a1,a2,b,min(c) from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
|
||||
|
||||
|
||||
--
|
||||
-- GROUP BY queries without MIN/MAX
|
||||
--
|
||||
#
|
||||
# GROUP BY queries without MIN/MAX
|
||||
#
|
||||
|
||||
-- plans
|
||||
# plans
|
||||
explain select a1,a2,b from t1 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
|
||||
explain select a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
|
||||
explain select a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
|
||||
@ -471,7 +471,7 @@ explain select a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121'
|
||||
--replace_column 9 #
|
||||
explain select a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
|
||||
|
||||
-- queries
|
||||
# queries
|
||||
select a1,a2,b from t1 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
|
||||
select a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
|
||||
select a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
|
||||
@ -482,11 +482,11 @@ select a1,a2,b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
|
||||
select a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
|
||||
select a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
|
||||
|
||||
--
|
||||
-- DISTINCT queries
|
||||
--
|
||||
#
|
||||
# DISTINCT queries
|
||||
#
|
||||
|
||||
-- plans
|
||||
# plans
|
||||
explain select distinct a1,a2,b from t1;
|
||||
explain select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a');
|
||||
explain select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121');
|
||||
@ -502,7 +502,7 @@ explain select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c
|
||||
explain select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
|
||||
explain select distinct b from t2 where (a2 >= 'b') and (b = 'a');
|
||||
|
||||
-- queries
|
||||
# queries
|
||||
select distinct a1,a2,b from t1;
|
||||
select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a');
|
||||
select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121');
|
||||
@ -515,22 +515,22 @@ select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121
|
||||
select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
|
||||
select distinct b from t2 where (a2 >= 'b') and (b = 'a');
|
||||
|
||||
-- BUG #6303
|
||||
# BUG #6303
|
||||
select distinct t_00.a1
|
||||
from t1 t_00
|
||||
where exists ( select * from t2 where a1 = t_00.a1 );
|
||||
|
||||
-- BUG #8532 - SELECT DISTINCT a, a causes server to crash
|
||||
# BUG #8532 - SELECT DISTINCT a, a causes server to crash
|
||||
select distinct a1,a1 from t1;
|
||||
select distinct a2,a1,a2,a1 from t1;
|
||||
select distinct t1.a1,t2.a1 from t1,t2;
|
||||
|
||||
|
||||
--
|
||||
-- DISTINCT queries with GROUP-BY
|
||||
--
|
||||
#
|
||||
# DISTINCT queries with GROUP-BY
|
||||
#
|
||||
|
||||
-- plans
|
||||
# plans
|
||||
explain select distinct a1,a2,b from t1;
|
||||
explain select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
|
||||
explain select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
|
||||
@ -548,7 +548,7 @@ explain select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b =
|
||||
--replace_column 9 #
|
||||
explain select distinct b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
|
||||
|
||||
-- queries
|
||||
# queries
|
||||
select distinct a1,a2,b from t1;
|
||||
select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
|
||||
select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
|
||||
@ -562,9 +562,9 @@ select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') gr
|
||||
select distinct b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
|
||||
|
||||
|
||||
--
|
||||
-- COUNT (DISTINCT cols) queries
|
||||
--
|
||||
#
|
||||
# COUNT (DISTINCT cols) queries
|
||||
#
|
||||
|
||||
explain select count(distinct a1,a2,b) from t1 where (a2 >= 'b') and (b = 'a');
|
||||
explain select count(distinct a1,a2,b,c) from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121');
|
||||
@ -578,9 +578,9 @@ select count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a') and (b =
|
||||
select count(distinct b) from t1 where (a2 >= 'b') and (b = 'a');
|
||||
select ord(a1) + count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a');
|
||||
|
||||
--
|
||||
-- Queries with expressions in the select clause
|
||||
--
|
||||
#
|
||||
# Queries with expressions in the select clause
|
||||
#
|
||||
|
||||
explain select a1,a2,b, concat(min(c), max(c)) from t1 where a1 < 'd' group by a1,a2,b;
|
||||
explain select concat(a1,min(c)),b from t1 where a1 < 'd' group by a1,a2,b;
|
||||
@ -595,48 +595,48 @@ select concat(a1,a2),b,min(c),max(c) from t1 where a1 < 'd' group by a1,a2,b;
|
||||
select concat(ord(min(b)),ord(max(b))),min(b),max(b) from t1 group by a1,a2;
|
||||
|
||||
|
||||
--
|
||||
-- Negative examples: queries that should NOT be treated as optimizable by
|
||||
-- QUICK_GROUP_MIN_MAX_SELECT
|
||||
--
|
||||
#
|
||||
# Negative examples: queries that should NOT be treated as optimizable by
|
||||
# QUICK_GROUP_MIN_MAX_SELECT
|
||||
#
|
||||
|
||||
-- select a non-indexed attribute
|
||||
# select a non-indexed attribute
|
||||
explain select a1,a2,b,d,min(c),max(c) from t1 group by a1,a2,b;
|
||||
|
||||
explain select a1,a2,b,d from t1 group by a1,a2,b;
|
||||
|
||||
-- predicate that references an attribute that is after the MIN/MAX argument
|
||||
-- in the index
|
||||
# predicate that references an attribute that is after the MIN/MAX argument
|
||||
# in the index
|
||||
explain select a1,a2,min(b),max(b) from t1
|
||||
where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (c > 'a111') group by a1,a2;
|
||||
|
||||
-- predicate that references a non-indexed attribute
|
||||
# predicate that references a non-indexed attribute
|
||||
explain select a1,a2,b,min(c),max(c) from t1
|
||||
where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (d > 'xy2') group by a1,a2,b;
|
||||
|
||||
explain select a1,a2,b,c from t1
|
||||
where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (d > 'xy2') group by a1,a2,b,c;
|
||||
|
||||
-- non-equality predicate for a non-group select attribute
|
||||
# non-equality predicate for a non-group select attribute
|
||||
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') or (b < 'b') group by a1;
|
||||
explain select a1,a2,b from t1 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (c > 'a111') group by a1,a2,b;
|
||||
|
||||
-- non-group field with an equality predicate that references a keypart after the
|
||||
-- MIN/MAX argument
|
||||
# non-group field with an equality predicate that references a keypart after the
|
||||
# MIN/MAX argument
|
||||
explain select a1,a2,min(b),c from t2 where (a2 = 'a') and (c = 'a111') group by a1;
|
||||
select a1,a2,min(b),c from t2 where (a2 = 'a') and (c = 'a111') group by a1;
|
||||
|
||||
-- disjunction for a non-group select attribute
|
||||
# disjunction for a non-group select attribute
|
||||
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') or (b = 'a') group by a1;
|
||||
|
||||
-- non-range predicate for the MIN/MAX attribute
|
||||
# non-range predicate for the MIN/MAX attribute
|
||||
explain select a1,a2,b,min(c),max(c) from t2
|
||||
where (c > 'a000') and (c <= 'd999') and (c like '_8__') group by a1,a2,b;
|
||||
|
||||
-- not all attributes are indexed by one index
|
||||
# not all attributes are indexed by one index
|
||||
explain select a1, a2, b, c, min(d), max(d) from t1 group by a1,a2,b,c;
|
||||
|
||||
-- other aggregate functions than MIN/MAX
|
||||
# other aggregate functions than MIN/MAX
|
||||
explain select a1,a2,count(a2) from t1 group by a1,a2,b;
|
||||
explain select a1,a2,count(a2) from t1 where (a1 > 'a') group by a1,a2,b;
|
||||
explain select sum(ord(a1)) from t1 where (a1 > 'a') group by a1,a2,b;
|
||||
@ -765,24 +765,24 @@ INSERT INTO t4 VALUES(1);
|
||||
INSERT INTO t5 VALUES(1,1);
|
||||
INSERT INTO t6 VALUES(1);
|
||||
|
||||
-- original bug query
|
||||
# original bug query
|
||||
SELECT * FROM
|
||||
t1
|
||||
NATURAL JOIN
|
||||
(t2 JOIN (t3 NATURAL JOIN t4, t5 NATURAL JOIN t6)
|
||||
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5));
|
||||
|
||||
-- inner join swapped
|
||||
# inner join swapped
|
||||
SELECT * FROM
|
||||
t1
|
||||
NATURAL JOIN
|
||||
(((t3 NATURAL JOIN t4) join (t5 NATURAL JOIN t6) on t3.id4 = t5.id5) JOIN t2
|
||||
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5));
|
||||
|
||||
-- one join less, no ON cond
|
||||
# one join less, no ON cond
|
||||
SELECT * FROM t1 NATURAL JOIN ((t3 join (t5 NATURAL JOIN t6)) JOIN t2);
|
||||
|
||||
-- wrong error message: 'id2' - ambiguous column
|
||||
# wrong error message: 'id2' - ambiguous column
|
||||
SELECT * FROM
|
||||
(t2 JOIN (t3 NATURAL JOIN t4, t5 NATURAL JOIN t6)
|
||||
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5))
|
||||
|
@ -973,4 +973,18 @@ DROP FUNCTION get_value;
|
||||
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Bug#22413: EXPLAIN SELECT FROM view with ORDER BY yield server crash
|
||||
#
|
||||
create view v1 as
|
||||
select table_schema as object_schema,
|
||||
table_name as object_name,
|
||||
table_type as object_type
|
||||
from information_schema.tables
|
||||
order by object_schema;
|
||||
explain select * from v1;
|
||||
explain select * from (select table_name from information_schema.tables) as a;
|
||||
drop view v1;
|
||||
|
||||
# End of 5.0 tests.
|
||||
|
@ -1,6 +1,4 @@
|
||||
-- source include/have_innodb.inc
|
||||
# Can't test this with embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
|
@ -1,6 +1,4 @@
|
||||
-- source include/have_innodb.inc
|
||||
# Can't test this with embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
#
|
||||
# Check and select innodb lock type
|
||||
|
@ -1482,7 +1482,7 @@ INSERT INTO t1 (id) VALUES (NULL);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t2, t1;
|
||||
|
||||
-- Test that foreign keys in temporary tables are not accepted (bug #12084)
|
||||
# Test that foreign keys in temporary tables are not accepted (bug #12084)
|
||||
CREATE TABLE t1
|
||||
(
|
||||
id INT PRIMARY KEY
|
||||
|
@ -362,38 +362,38 @@ insert into t4 values (2, 3);
|
||||
insert into t5 values (11,4);
|
||||
insert into t6 values (2, 3);
|
||||
|
||||
-- Views with simple natural join.
|
||||
# Views with simple natural join.
|
||||
create algorithm=merge view v1a as
|
||||
select * from t1 natural join t2;
|
||||
-- as above, but column names are cross-renamed: a->c, c->b, b->a
|
||||
# as above, but column names are cross-renamed: a->c, c->b, b->a
|
||||
create algorithm=merge view v1b(a,b,c) as
|
||||
select * from t1 natural join t2;
|
||||
-- as above, but column names are aliased: a->c, c->b, b->a
|
||||
# as above, but column names are aliased: a->c, c->b, b->a
|
||||
create algorithm=merge view v1c as
|
||||
select b as a, c as b, a as c from t1 natural join t2;
|
||||
-- as above, but column names are cross-renamed, and aliased
|
||||
-- a->c->b, c->b->a, b->a->c
|
||||
# as above, but column names are cross-renamed, and aliased
|
||||
# a->c->b, c->b->a, b->a->c
|
||||
create algorithm=merge view v1d(b, a, c) as
|
||||
select a as c, c as b, b as a from t1 natural join t2;
|
||||
|
||||
-- Views with JOIN ... ON
|
||||
# Views with JOIN ... ON
|
||||
create algorithm=merge view v2a as
|
||||
select t1.c, t1.b, t2.a from t1 join (t2 join t4 on b + 1 = y) on t1.c = t4.c;
|
||||
create algorithm=merge view v2b as
|
||||
select t1.c as b, t1.b as a, t2.a as c
|
||||
from t1 join (t2 join t4 on b + 1 = y) on t1.c = t4.c;
|
||||
|
||||
-- Views with bigger natural join
|
||||
# Views with bigger natural join
|
||||
create algorithm=merge view v3a as
|
||||
select * from t1 natural join t2 natural join t3;
|
||||
create algorithm=merge view v3b as
|
||||
select * from t1 natural join (t2 natural join t3);
|
||||
|
||||
-- View over views with mixed natural join and join ... on
|
||||
# View over views with mixed natural join and join ... on
|
||||
create algorithm=merge view v4 as
|
||||
select * from v2a natural join v3a;
|
||||
|
||||
-- Nested natural/using joins.
|
||||
# Nested natural/using joins.
|
||||
select * from (t1 natural join t2) natural join (t3 natural join t4);
|
||||
select * from (t1 natural join t2) natural left join (t3 natural join t4);
|
||||
select * from (t3 natural join t4) natural right join (t1 natural join t2);
|
||||
@ -402,12 +402,12 @@ select * from (t4 natural right join t3) natural right join (t2 natural right jo
|
||||
select * from t1 natural join t2 natural join t3 natural join t4;
|
||||
select * from ((t1 natural join t2) natural join t3) natural join t4;
|
||||
select * from t1 natural join (t2 natural join (t3 natural join t4));
|
||||
-- BUG#15355: this query fails in 'prepared statements' mode
|
||||
-- select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5;
|
||||
-- select * from ((t3 natural left join (t1 natural left join t2)) natural left join t4) natural left join t5;
|
||||
# BUG#15355: this query fails in 'prepared statements' mode
|
||||
# select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5;
|
||||
# select * from ((t3 natural left join (t1 natural left join t2)) natural left join t4) natural left join t5;
|
||||
select * from t5 natural right join (t4 natural right join ((t2 natural right join t1) natural right join t3));
|
||||
select * from (t1 natural join t2), (t3 natural join t4);
|
||||
-- MySQL extension - nested comma ',' operator instead of cross join.
|
||||
# MySQL extension - nested comma ',' operator instead of cross join.
|
||||
select * from t5 natural join ((t1 natural join t2), (t3 natural join t4));
|
||||
select * from ((t1 natural join t2), (t3 natural join t4)) natural join t5;
|
||||
select * from t5 natural join ((t1 natural join t2) cross join (t3 natural join t4));
|
||||
@ -417,7 +417,7 @@ select * from (t1 join t2 using (b)) join (t3 join t4 using (c)) using (c);
|
||||
select * from (t1 join t2 using (b)) natural join (t3 join t4 using (c));
|
||||
|
||||
|
||||
-- Other clauses refer to NJ columns.
|
||||
# Other clauses refer to NJ columns.
|
||||
select a,b,c from (t1 natural join t2) natural join (t3 natural join t4)
|
||||
where b + 1 = y or b + 10 = y group by b,c,a having min(b) < max(y) order by a;
|
||||
select * from (t1 natural join t2) natural left join (t3 natural join t4)
|
||||
@ -425,23 +425,23 @@ where b + 1 = y or b + 10 = y group by b,c,a,y having min(b) < max(y) order by a
|
||||
select * from (t3 natural join t4) natural right join (t1 natural join t2)
|
||||
where b + 1 = y or b + 10 = y group by b,c,a,y having min(b) < max(y) order by a, y;
|
||||
|
||||
-- Qualified column references to NJ columns.
|
||||
# Qualified column references to NJ columns.
|
||||
select * from t1 natural join t2 where t1.c > t2.a;
|
||||
select * from t1 natural join t2 where t1.b > t2.b;
|
||||
select * from t1 natural left join (t4 natural join t5) where t5.z is not NULL;
|
||||
|
||||
-- Nested 'join ... on' - name resolution of ON conditions
|
||||
# Nested 'join ... on' - name resolution of ON conditions
|
||||
select * from t1 join (t2 join t4 on b + 1 = y) on t1.c = t4.c;
|
||||
select * from (t2 join t4 on b + 1 = y) join t1 on t1.c = t4.c;
|
||||
select * from t1 natural join (t2 join t4 on b + 1 = y);
|
||||
select * from (t1 cross join t2) join (t3 cross join t4) on (a < y and t2.b < t3.c);
|
||||
|
||||
-- MySQL extension - 'join ... on' over nested comma operator
|
||||
# MySQL extension - 'join ... on' over nested comma operator
|
||||
select * from (t1, t2) join (t3, t4) on (a < y and t2.b < t3.c);
|
||||
select * from (t1 natural join t2) join (t3 natural join t4) on a = y;
|
||||
select * from ((t3 join (t1 join t2 on c > a) on t3.b < t2.a) join t4 on y > t1.c) join t5 on z = t1.b + 3;
|
||||
|
||||
-- MySQL extension - refererence qualified coalesced columns
|
||||
# MySQL extension - refererence qualified coalesced columns
|
||||
select * from t1 natural join t2 where t1.b > 0;
|
||||
select * from t1 natural join (t4 natural join t5) where t4.y > 7;
|
||||
select * from (t4 natural join t5) natural join t1 where t4.y > 7;
|
||||
@ -449,11 +449,11 @@ select * from t1 natural left join (t4 natural join t5) where t4.y > 7;
|
||||
select * from (t4 natural join t5) natural right join t1 where t4.y > 7;
|
||||
select * from (t1 natural join t2) join (t3 natural join t4) on t1.b = t3.b;
|
||||
|
||||
-- MySQL extension - select qualified columns of NJ columns
|
||||
# MySQL extension - select qualified columns of NJ columns
|
||||
select t1.*, t2.* from t1 natural join t2;
|
||||
select t1.*, t2.*, t3.*, t4.* from (t1 natural join t2) natural join (t3 natural join t4);
|
||||
|
||||
-- Queries over subselects in the FROM clause
|
||||
# Queries over subselects in the FROM clause
|
||||
select * from (select * from t1 natural join t2) as t12
|
||||
natural join
|
||||
(select * from t3 natural join t4) as t34;
|
||||
@ -464,7 +464,7 @@ select * from (select * from t3 natural join t4) as t34
|
||||
natural right join
|
||||
(select * from t1 natural join t2) as t12;
|
||||
|
||||
-- Queries over views
|
||||
# Queries over views
|
||||
select * from v1a;
|
||||
select * from v1b;
|
||||
select * from v1c;
|
||||
@ -481,13 +481,13 @@ select * from v1c join v2a on v1c.b = v2a.c;
|
||||
select * from v1d join v2a on v1d.a = v2a.c;
|
||||
select * from v1a join (t3 natural join t4) on a = y;
|
||||
|
||||
-- TODO: add tests with correlated subqueries for natural join/join on.
|
||||
-- related to BUG#15269
|
||||
# TODO: add tests with correlated subqueries for natural join/join on.
|
||||
# related to BUG#15269
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
-- Negative tests (tests for errors)
|
||||
----------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------
|
||||
# Negative tests (tests for errors)
|
||||
#--------------------------------------------------------------------
|
||||
-- error 1052
|
||||
select * from t1 natural join (t3 cross join t4); -- works in Oracle - bug
|
||||
-- error 1052
|
||||
@ -504,7 +504,7 @@ select * from t6 natural join ((t1 natural join t2), (t3 natural join t4));
|
||||
select * from (t1 join t2 on t1.b=t2.b) natural join (t3 natural join t4);
|
||||
-- error 1052
|
||||
select * from (t3 natural join t4) natural join (t1 join t2 on t1.b=t2.b);
|
||||
-- this one is OK, the next equivalent one is incorrect (bug in Oracle)
|
||||
# this one is OK, the next equivalent one is incorrect (bug in Oracle)
|
||||
-- error 1052
|
||||
select * from (t3 join (t4 natural join t5) on (b < z))
|
||||
natural join
|
||||
@ -578,12 +578,12 @@ insert into t3 values (2,3);
|
||||
insert into t4 values (1,3);
|
||||
insert into t5 values (1,4);
|
||||
|
||||
-- this fails
|
||||
# this fails
|
||||
prepare stmt1 from "select * from ((t3 natural join (t1 natural join t2))
|
||||
natural join t4) natural join t5";
|
||||
execute stmt1;
|
||||
|
||||
-- this works
|
||||
# this works
|
||||
select * from ((t3 natural join (t1 natural join t2)) natural join t4)
|
||||
natural join t5;
|
||||
drop table t1, t2, t3, t4, t5;
|
||||
|
@ -7,7 +7,7 @@ drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
create table t1 (a int not null default 0 primary key, b int not null default 0);
|
||||
insert into t1 () values (); -- Testing default values
|
||||
insert into t1 () values (); # Testing default values
|
||||
insert into t1 values (1,1),(2,1),(3,1);
|
||||
update t1 set a=4 where b=1 limit 1;
|
||||
select * from t1;
|
||||
|
@ -1,11 +1,3 @@
|
||||
# This test doesn't work with the embedded version as this code
|
||||
# assumes that one query is running while we are doing queries on
|
||||
# a second connection.
|
||||
# This would work if mysqltest run would be threaded and handle each
|
||||
# connection in a separate thread.
|
||||
#
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
|
@ -85,3 +85,23 @@ drop table t1, t2;
|
||||
show tables;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
|
||||
#
|
||||
# Bug#20404: SHOW CREATE TABLE fails with Turkish I
|
||||
#
|
||||
set names utf8;
|
||||
--disable_warnings
|
||||
drop table if exists İ,İİ;
|
||||
--enable_warnings
|
||||
create table İ (s1 int);
|
||||
show create table İ;
|
||||
show tables;
|
||||
drop table İ;
|
||||
create table İİ (s1 int);
|
||||
show create table İİ;
|
||||
show tables;
|
||||
drop table İİ;
|
||||
set names latin1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -61,4 +61,23 @@ drop table t1;//
|
||||
delimiter ;//
|
||||
--disable_info
|
||||
|
||||
#
|
||||
# Bug #20191: getTableName gives wrong or inconsistent result when using VIEWs
|
||||
#
|
||||
--enable_metadata
|
||||
create table t1 (id int(10));
|
||||
insert into t1 values (1);
|
||||
CREATE VIEW v1 AS select t1.id as id from t1;
|
||||
CREATE VIEW v2 AS select t1.id as renamed from t1;
|
||||
CREATE VIEW v3 AS select t1.id + 12 as renamed from t1;
|
||||
select * from v1 group by id limit 1;
|
||||
select * from v1 group by id limit 0;
|
||||
select * from v1 where id=1000 group by id;
|
||||
select * from v1 where id=1 group by id;
|
||||
select * from v2 where renamed=1 group by renamed;
|
||||
select * from v3 where renamed=1 group by renamed;
|
||||
drop table t1;
|
||||
drop view v1,v2,v3;
|
||||
--disable_metadata
|
||||
|
||||
# End of 4.1 tests
|
||||
|
@ -142,6 +142,24 @@ drop table t1;
|
||||
--exec $MYSQL -e 'help ' > $MYSQLTEST_VARDIR/tmp/bug20328_2.result
|
||||
--exec diff $MYSQLTEST_VARDIR/tmp/bug20328_1.result $MYSQLTEST_VARDIR/tmp/bug20328_2.result
|
||||
|
||||
#
|
||||
# Bug #19216: Client crashes on long SELECT
|
||||
#
|
||||
--exec echo "select" > $MYSQLTEST_VARDIR/tmp/b19216.tmp
|
||||
# 3400 * 20 makes 68000 columns that is more than the max number that can fit
|
||||
# in a 16 bit number.
|
||||
let $i= 3400;
|
||||
while ($i)
|
||||
{
|
||||
--exec echo "'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a'," >> $MYSQLTEST_VARDIR/tmp/b19216.tmp
|
||||
dec $i;
|
||||
}
|
||||
|
||||
--exec echo "'b';" >> $MYSQLTEST_VARDIR/tmp/b19216.tmp
|
||||
--disable_query_log
|
||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/b19216.tmp >/dev/null
|
||||
--enable_query_log
|
||||
|
||||
#
|
||||
# Bug #20103: Escaping with backslash does not work
|
||||
#
|
||||
@ -223,4 +241,22 @@ drop table t17583;
|
||||
--error 1
|
||||
--exec $MYSQL test -e "\r test cyrils_superlonghostnameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 2>&1
|
||||
|
||||
#
|
||||
# Bug #21412: mysql cmdline client allows backslash(es)
|
||||
# as delimiter but can't recognize them
|
||||
#
|
||||
|
||||
# This should work just fine...
|
||||
--exec echo "DELIMITER /" > $MYSQLTEST_VARDIR/tmp/bug21412.sql
|
||||
--exec echo "SELECT 1/" >> $MYSQLTEST_VARDIR/tmp/bug21412.sql
|
||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1
|
||||
|
||||
# This should give an error...
|
||||
--exec echo "DELIMITER \\" > $MYSQLTEST_VARDIR/tmp/bug21412.sql
|
||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1
|
||||
|
||||
# As should this...
|
||||
--exec echo "DELIMITER \\\\" > $MYSQLTEST_VARDIR/tmp/bug21412.sql
|
||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -49,3 +49,13 @@ delimiter ; # Reset delimiter
|
||||
# Bug #11523: \d works differently than delimiter
|
||||
#
|
||||
source t/mysql_delimiter_source.sql
|
||||
delimiter ; # Reset delimiter
|
||||
|
||||
#
|
||||
# Bug #19799: delimiter command not working correctly when sourcing a sql file
|
||||
# with Windows style line endings.
|
||||
#
|
||||
source t/mysql_delimiter_19799.sql
|
||||
use test//
|
||||
show tables//
|
||||
delimiter ; # Reset delimiter
|
||||
|
1
mysql-test/t/mysql_delimiter_19799.sql
Executable file
1
mysql-test/t/mysql_delimiter_19799.sql
Executable file
@ -0,0 +1 @@
|
||||
delimiter //
|
@ -1521,6 +1521,46 @@ remove_file $MYSQLTEST_VARDIR/tmp/file2.tmp;
|
||||
--error 1
|
||||
--exec echo "copy_file from_file;" | $MYSQL_TEST 2>&1
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# test for chmod
|
||||
# ----------------------------------------------------------------------------
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
|
||||
file1
|
||||
EOF
|
||||
|
||||
chmod 0000 $MYSQLTEST_VARDIR/tmp/file1.tmp;
|
||||
# The below write fails, but --error is not implemented
|
||||
# for write_file
|
||||
#--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
|
||||
#test should fail
|
||||
#EOF
|
||||
|
||||
chmod 0777 $MYSQLTEST_VARDIR/tmp/file1.tmp;
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
|
||||
test2
|
||||
EOF
|
||||
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/file1.tmp;
|
||||
|
||||
--error 1
|
||||
--exec echo "chmod ;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "chmod 0 from_file;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "chmod 08 from_file;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "chmod from_file;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "chmod ABZD from_file;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "chmod 06789 from_file;" | $MYSQL_TEST 2>&1
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# test for perl
|
||||
# ----------------------------------------------------------------------------
|
||||
|
@ -177,7 +177,7 @@ drop table t1;
|
||||
# non-null string collation, i.e. case insensitively,
|
||||
# rather than according to NULL's collation, i.e. case sensitively
|
||||
#
|
||||
-- in field
|
||||
# in field
|
||||
select
|
||||
case 'str' when 'STR' then 'str' when null then 'null' end as c01,
|
||||
case 'str' when null then 'null' when 'STR' then 'str' end as c02,
|
||||
|
@ -514,11 +514,6 @@ set max_sort_length=20;
|
||||
select a from t1 order by a;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (a int not null, b int not null, c int not null);
|
||||
insert t1 values (1,1,1),(1,1,2),(1,2,1);
|
||||
select a, b from t1 group by a, b order by sum(c);
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #7331
|
||||
#
|
||||
@ -577,7 +572,27 @@ INSERT INTO t1 VALUES (1,30), (2,20), (1,10), (2,30), (1,20), (2,10);
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #22457: Column alias in ORDER BY works, but not if in an expression
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2);
|
||||
SELECT a + 1 AS num FROM t1 ORDER BY 30 - num;
|
||||
SELECT CONCAT('test', a) AS str FROM t1 ORDER BY UPPER(str);
|
||||
SELECT a + 1 AS num FROM t1 GROUP BY 30 - num;
|
||||
SELECT a + 1 AS num FROM t1 HAVING 30 - num;
|
||||
--error 1054
|
||||
SELECT a + 1 AS num, num + 1 FROM t1;
|
||||
SELECT a + 1 AS num, (select num + 2 FROM t1 LIMIT 1) FROM t1;
|
||||
--error 1054
|
||||
SELECT a.a + 1 AS num FROM t1 a JOIN t1 b ON num = b.a;
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
create table t1 (a int not null, b int not null, c int not null);
|
||||
insert t1 values (1,1,1),(1,1,2),(1,2,1);
|
||||
select a, b from t1 group by a, b order by sum(c);
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#21302: Result not properly sorted when using an ORDER BY on a second
|
||||
|
@ -870,3 +870,32 @@ select * from t1 where a > 3;
|
||||
show status like 'last_query_cost';
|
||||
drop table t1;
|
||||
SET GLOBAL query_cache_size=0;
|
||||
|
||||
#
|
||||
# Bug #20045: Server crash on INSERT ... SELECT ... FROM non-mergeable view
|
||||
#
|
||||
set global query_cache_size=1024*1024;
|
||||
flush status;
|
||||
create table t1 (a int);
|
||||
insert into t1 (a) values (1), (2), (3);
|
||||
select * from t1;
|
||||
show status like 'Qcache_hits';
|
||||
select * from t1;
|
||||
show status like 'Qcache_hits';
|
||||
create table t2 like t1;
|
||||
select * from t1;
|
||||
show status like 'Qcache_hits';
|
||||
insert into t2 select * from t1;
|
||||
select * from t1;
|
||||
show status like 'Qcache_hits';
|
||||
drop table t1, t2;
|
||||
|
||||
create table t1(c1 int);
|
||||
create table t2(c1 int);
|
||||
create table t3(c1 int);
|
||||
create view v1 as select t3.c1 as c1 from t3,t2 where t3.c1 = t2.c1;
|
||||
start transaction;
|
||||
insert into t1(c1) select c1 from v1;
|
||||
drop table t1, t2, t3;
|
||||
drop view v1;
|
||||
set global query_cache_size=0;
|
||||
|
@ -101,6 +101,18 @@ drop table t1;
|
||||
--error 1290
|
||||
insert into t1 values(1);
|
||||
|
||||
#
|
||||
# BUG #22077 "DROP TEMPORARY TABLE fails with wrong error if read_only is set"
|
||||
#
|
||||
# check if DROP TEMPORARY on a non-existing temporary table returns the right
|
||||
# error
|
||||
|
||||
--error ER_BAD_TABLE_ERROR
|
||||
drop temporary table ttt;
|
||||
|
||||
# check if DROP TEMPORARY TABLE IF EXISTS produces a warning with read_only set
|
||||
drop temporary table if exists ttt;
|
||||
|
||||
connection default;
|
||||
drop table t1,t2;
|
||||
drop user test@localhost;
|
||||
|
@ -2,10 +2,6 @@
|
||||
# Test of rename table
|
||||
#
|
||||
|
||||
# Test requires concurrent connections, which can't be tested on embedded
|
||||
# server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t0,t1,t2,t3,t4;
|
||||
# Clear up from other tests (to ensure that SHOW TABLES below is right)
|
||||
|
@ -12,7 +12,7 @@ show slave status;
|
||||
|
||||
change master to master_host='127.0.0.1';
|
||||
# The following needs to be cleaned up when change master is fixed
|
||||
--replace_result $MYSQL_TCP_PORT MASTER_PORT
|
||||
--replace_result $DEFAULT_MASTER_PORT DEFAULT_MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
|
@ -16,7 +16,8 @@ source include/master-slave.inc;
|
||||
connection master;
|
||||
create table t1 (a int not null, key(a)) engine=innodb;
|
||||
create table t2 (a int not null, key(a)) engine=innodb;
|
||||
create table t3 (a int) engine=innodb;
|
||||
# requiring 'unique' for the timeout part of the test
|
||||
create table t3 (a int unique) engine=innodb;
|
||||
create table t4 (a int) engine=innodb;
|
||||
show variables like 'slave_transaction_retries';
|
||||
sync_slave_with_master;
|
||||
@ -31,8 +32,7 @@ stop slave;
|
||||
connection master;
|
||||
begin;
|
||||
# Let's keep BEGIN and the locked statement in two different relay logs.
|
||||
let $1=200;
|
||||
disable_query_log;
|
||||
let $1=200;disable_query_log;
|
||||
while ($1)
|
||||
{
|
||||
eval insert into t3 values( $1 );
|
||||
@ -59,7 +59,7 @@ enable_query_log;
|
||||
select * from t1 for update;
|
||||
start slave;
|
||||
--real_sleep 3 # hope that slave is blocked now
|
||||
insert into t2 values(22); # provoke deadlock, slave should be victim
|
||||
insert into t2 values(201); # provoke deadlock, slave should be victim
|
||||
commit;
|
||||
sync_with_master;
|
||||
select * from t1; # check that slave succeeded finally
|
||||
@ -74,11 +74,13 @@ show slave status;
|
||||
# 2) Test lock wait timeout
|
||||
|
||||
stop slave;
|
||||
change master to master_log_pos=532; # the BEGIN log event
|
||||
delete from t3;
|
||||
change master to master_log_pos=539; # the BEGIN log event
|
||||
begin;
|
||||
select * from t2 for update; # hold lock
|
||||
start slave;
|
||||
--real_sleep 10 # slave should have blocked, and be retrying
|
||||
select count(*) from t3 /* must be zero */; # replaying begins after rollback
|
||||
commit;
|
||||
sync_with_master;
|
||||
select * from t1; # check that slave succeeded finally
|
||||
@ -97,11 +99,13 @@ set global max_relay_log_size=0;
|
||||
|
||||
# This is really copy-paste of 2) of above
|
||||
stop slave;
|
||||
change master to master_log_pos=532;
|
||||
delete from t3;
|
||||
change master to master_log_pos=539;
|
||||
begin;
|
||||
select * from t2 for update;
|
||||
start slave;
|
||||
--real_sleep 10
|
||||
select count(*) from t3 /* must be zero */; # replaying begins after rollback
|
||||
commit;
|
||||
sync_with_master;
|
||||
select * from t1;
|
||||
|
@ -1 +1 @@
|
||||
--replicate-ignore-table=test.t1 --replicate-ignore-table=test.t2 --replicate-ignore-table=test.t3
|
||||
--replicate-ignore-table=test.t1 --replicate-ignore-table=test.t2 --replicate-ignore-table=test.t3 --replicate-wild-ignore-table=%.tmptbl%
|
||||
|
@ -26,3 +26,26 @@ SELECT * FROM t4;
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t4;
|
||||
|
||||
|
||||
#
|
||||
# bug#22877 replication character sets get out of sync
|
||||
# using replicate-wild-ignore-table
|
||||
#
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t5;
|
||||
--enable_warnings
|
||||
CREATE TABLE t5 (
|
||||
word varchar(50) collate utf8_unicode_ci NOT NULL default ''
|
||||
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
SET @@session.character_set_client=33,@@session.collation_connection=192;
|
||||
CREATE TEMPORARY TABLE tmptbl504451f4258$1 (id INT NOT NULL) ENGINE=MEMORY;
|
||||
INSERT INTO t5 (word) VALUES ('TEST’');
|
||||
SELECT HEX(word) FROM t5;
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
SELECT HEX(word) FROM t5;
|
||||
--error 1146
|
||||
SELECT * FROM tmptbl504451f4258$1;
|
||||
connection master;
|
||||
DROP TABLE t5;
|
||||
|
1
mysql-test/t/rpl_packet-master.opt
Normal file
1
mysql-test/t/rpl_packet-master.opt
Normal file
@ -0,0 +1 @@
|
||||
-O max_allowed_packet=1024 -O net_buffer_length=1024
|
1
mysql-test/t/rpl_packet-slave.opt
Normal file
1
mysql-test/t/rpl_packet-slave.opt
Normal file
@ -0,0 +1 @@
|
||||
-O max_allowed_packet=1024 -O net_buffer_length=1024
|
39
mysql-test/t/rpl_packet.test
Normal file
39
mysql-test/t/rpl_packet.test
Normal file
@ -0,0 +1,39 @@
|
||||
#
|
||||
# Check replication protocol packet size handling
|
||||
# Bug#19402 SQL close to the size of the max_allowed_packet fails on slave
|
||||
#
|
||||
|
||||
# max-out size db name
|
||||
source include/master-slave.inc;
|
||||
|
||||
let $db= DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||
disable_warnings;
|
||||
eval drop database if exists $db;
|
||||
enable_warnings;
|
||||
eval create database $db;
|
||||
|
||||
connection master;
|
||||
select @@net_buffer_length, @@max_allowed_packet;
|
||||
disconnect master;
|
||||
|
||||
# alas, can't use eval here; if db name changed apply the change here
|
||||
connect (master,localhost,root,,DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________);
|
||||
|
||||
connection master;
|
||||
create table `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||
|
||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1023');
|
||||
save_master_pos;
|
||||
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
eval select count(*) from `$db`.`t1` /* must be 1 */;
|
||||
|
||||
connection master;
|
||||
eval drop database $db;
|
||||
save_master_pos;
|
||||
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# End of tests
|
@ -524,4 +524,25 @@ sync_slave_with_master;
|
||||
set global log_bin_trust_function_creators=0;
|
||||
connection master;
|
||||
set global log_bin_trust_function_creators=0;
|
||||
#
|
||||
# Bug22043: MySQL don't add "USE <DATABASE>" before "DROP PROCEDURE IF EXISTS"
|
||||
#
|
||||
connection master;
|
||||
--disable_warnings
|
||||
drop database if exists mysqltest;
|
||||
drop database if exists mysqltest2;
|
||||
--enable_warnings
|
||||
create database mysqltest;
|
||||
create database mysqltest2;
|
||||
use mysqltest2;
|
||||
create table t ( t integer );
|
||||
create procedure mysqltest.test() begin end;
|
||||
insert into t values ( 1 );
|
||||
show binlog events in 'master-bin.000001' from 8186;
|
||||
--error ER_WRONG_DB_NAME
|
||||
create procedure `\\`.test() begin end;
|
||||
# Clean up
|
||||
drop database mysqltest;
|
||||
drop database mysqltest2;
|
||||
|
||||
|
||||
|
@ -2700,7 +2700,7 @@ insert into t2 values ('58013'),('58014'),('58015'),('58016');
|
||||
create table t3 (a_id int(11) not null, b_id char(16) character set utf8);
|
||||
insert into t3 values (123,null),(123,null),(123,null),(123,null),(123,null),(123,'58013');
|
||||
|
||||
-- both queries are equivalent
|
||||
# both queries are equivalent
|
||||
select count(*)
|
||||
from t1 inner join (t3 left join t2 on t2.id = t3.b_id) on t1.id = t3.a_id;
|
||||
|
||||
@ -2940,7 +2940,7 @@ create table t2 (
|
||||
insert into t1 (b,c) values (0,1), (0,1);
|
||||
insert into t2 (b,c) values (0,1);
|
||||
|
||||
-- Row 1 should succeed. Row 2 should fail. Both fail.
|
||||
# Row 1 should succeed. Row 2 should fail. Both fail.
|
||||
select t1.a, t1.b + 0, t1.c + 0, t2.a, t2.b + 0, t2.c, t2.d
|
||||
from t1 left outer join t2 on t1.a = t2.c and t2.b <> 1
|
||||
where t1.b <> 1 order by t1.a;
|
||||
|
@ -1,5 +1,4 @@
|
||||
# Requires use of multiple simultaneous connections, not supported with
|
||||
# embedded server testing
|
||||
# Uses GRANT commands that usually disabled in embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
#
|
||||
|
@ -209,7 +209,7 @@ select f3() //
|
||||
|
||||
call sp1() //
|
||||
|
||||
---------------
|
||||
# ---------------
|
||||
drop procedure sp1//
|
||||
drop function f3//
|
||||
|
||||
|
@ -1,10 +1,3 @@
|
||||
# This test doesn't work with the embedded version as this code
|
||||
# assumes that one query is running while we are doing queries on
|
||||
# a second connection.
|
||||
# This would work if mysqltest run would be threaded and handle each
|
||||
# connection in a separate thread.
|
||||
#
|
||||
--source include/not_embedded.inc
|
||||
# PS causes different statistics
|
||||
--disable_ps_protocol
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user