mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge neptunus.(none):/home/msvensson/mysql/mysql-4.1
into neptunus.(none):/home/msvensson/mysql/mysql-4.1-maint client/mysqltest.c: Auto merged Makefile.am: Manual merge mysql-test/mysql-test-run.pl: Manual merge
This commit is contained in:
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;
|
||||
|
@ -87,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;
|
||||
|
||||
@ -437,6 +438,7 @@ sub main () {
|
||||
mtr_exit(0);
|
||||
}
|
||||
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Default settings
|
||||
@ -472,6 +474,16 @@ sub command_line_setup () {
|
||||
# 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 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 ( $ENV{'MTR_BUILD_THREAD'} )
|
||||
{
|
||||
# Up to two masters, up to three slaves
|
||||
|
@ -820,3 +820,30 @@ 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;
|
||||
|
@ -2981,3 +2981,35 @@ 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;
|
||||
|
@ -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,,);
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -34,6 +34,24 @@
|
||||
--exec echo 'help' | $MYSQL > $MYSQLTEST_VARDIR/tmp/bug20328.tmp
|
||||
--exec echo 'help ' | $MYSQL > $MYSQLTEST_VARDIR/tmp/bug20328.tmp
|
||||
|
||||
#
|
||||
# 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#17583: mysql drops connection when stdout is not writable
|
||||
#
|
||||
@ -51,4 +69,21 @@ select count(*) from t17583;
|
||||
--exec echo "select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; select count(*) from t17583; " |$MYSQL test >&-
|
||||
drop table t17583;
|
||||
|
||||
#
|
||||
# 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
|
||||
--echo End of 4.1 tests.
|
||||
|
@ -559,4 +559,20 @@ 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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
#
|
||||
|
@ -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
|
||||
|
||||
|
@ -1948,4 +1948,37 @@ SELECT field1, field2
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Bug #23478: not top-level IN subquery returning a non-empty result set
|
||||
# with possible NULL values by index access from the outer query
|
||||
#
|
||||
|
||||
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;
|
||||
SELECT a, a IN (SELECT a FROM t1) FROM t2;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug #11302: getObject() returns a String for a sub-query of type datetime
|
||||
#
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
Reference in New Issue
Block a user