This commit is contained in:
root
2024-04-24 10:25:44 +08:00
parent 627bf43ee3
commit 248388a322
5271 changed files with 3753425 additions and 803 deletions

View File

@@ -0,0 +1,383 @@
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4;
--enable_warnings
######## Running DELETE tests for DECIMAL ########
# Create tables
CREATE TABLE t1(c1 DECIMAL(10,5) UNSIGNED NOT NULL, c2 DECIMAL(10,5) SIGNED NULL, c3 DECIMAL, c4 INT, UNIQUE INDEX idx(c1,c4));
# Inserting data into table t1
# Trailing zeroes are not stripped, D=5
INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100119',1),('11111.00009','-9999.99999','9999999',2);
# DECIMAL := DECIMAL(10,0); Decimal values in c3 will be stripped;
INSERT INTO t1 VALUES('1000000','10000000','1000000000.0001',3);
# c1, c2, c3 will be rounded automatically
INSERT INTO t1 values('100.000001','1000.999999','9999.999999',4);
# Inserting maximum values
INSERT INTO t1 VALUES('99999.99999','-99999.99999','9999999999',5);
# Test insert leading zero, +/- signs, overflow handling
INSERT INTO t1 VALUES ("0.0","0.0","0.0",6),("01.0","01.0","01.0",7);
INSERT INTO t1 VALUES ("-.1","-.1","-.1",8);
INSERT INTO t1 VALUES ("+111111111.11","+111111111.11","+111111111.11",9);
# Inserting in scientific notations
INSERT INTO t1 VALUES('1.0e+4','1.0e-5','1.0e+9',10);
#INSERT INTO t1 VALUES('0.9999999999e+4','-.999999999e+4,'0.9999999999e+10',11);
--sorted_result
SELECT * FROM t1;
# Deletion starts here
# Delete by order by limit
DELETE FROM t1 WHERE c2 > 100 ORDER BY c2 LIMIT 1;
--sorted_result
SELECT c1,c2 FROM t1;
# Delete using range values
DELETE FROM t1 WHERE c3=1 AND c4=7;
--sorted_result
SELECT * FROM t1;
DELETE FROM t1 WHERE c3=9999999999 OR c2=1.0e-5;
--sorted_result
SELECT * FROM t1 WHERE c1=1.2e+2;
DELETE FROM t1 WHERE c4 IN (4,5,6);
--sorted_result
SELECT * FROM t1;
TRUNCATE t1;
INSERT INTO t1 VALUES ('11111.11111','-11111.11111','1111111111',1),('22222.22222','-22222.22222','2222222222',2),('33333.33333','-33333.33333','3333333333',3),('44444.44444','-44444.44444','4444444444',4),('55555.55555','-55555.55555','5555555555',5),('66666.66666','-66666.66666','6666666666',6),('77777.77777','-77777.77777','7777777777',7),('88888.88888','-88888.88888','8888888888',8),('99999.99999','-99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t1;
SELECT c1 FROM t1 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
DELETE FROM t1 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
--sorted_result
SELECT * FROM t1;
# Multi table delete
CREATE TABLE t2(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT, UNIQUE INDEX idx2(c1,c3));
CREATE TABLE t3(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT, UNIQUE INDEX idx3(c1,c3));
CREATE TABLE t4(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT, UNIQUE INDEX idx4(c1,c3));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
INSERT INTO t4 VALUES ('77777.77777','7777777777',7),('88888.88888','8888888888',8),('99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
DELETE t1,t2,t3,t4 FROM t1,t2,t3,t4 WHERE t1.c2 >'1111111111' AND t4.c2 < '8888888888';
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t1;
# Delete using various access methods
TRUNCATE t2;
TRUNCATE t3;
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
# Delete using Const
# EXPLAIN SELECT * FROM t2 WHERE t2.c1='22222.22222' AND t2.c3=2;
DELETE FROM t2 WHERE t2.c1='22222.22222' AND t2.c3=2;
--sorted_result
SELECT * FROM t2;
# Delete using range
# EXPLAIN SELECT * FROM t2 WHERE c1 BETWEEN '11111' AND '44444';
DELETE FROM t2 WHERE c1 BETWEEN '11111' AND '44444';
--sorted_result
SELECT * FROM t2;
# EXPLAIN SELECT * FROM t2 WHERE c1 IN ('44444.44444','99999.99999');
DELETE FROM t2 WHERE c1 IN ('44444.44444','99999.99999');
--sorted_result
SELECT * FROM t2;
# Delete using eq_ref
DROP TABLE t2,t3;
CREATE TABLE t2(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT);
CREATE TABLE t3(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT, UNIQUE INDEX idx3(c1));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('11111.11111','4444444444',1),('55555.55555','5555555555',2),('66666.66666','6666666666',3);
# EXPLAIN SELECT * FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
DELETE t2,t3 FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
# Droping the tables
--disable_warnings
DROP TABLES IF EXISTS t1,t2,t3,t4;
--enable_warnings
######## Running DELETE tests for FLOAT ########
# Create tables
CREATE TABLE t1(c1 FLOAT(10,5) UNSIGNED NOT NULL, c2 FLOAT(10,5) SIGNED NULL, c3 FLOAT, c4 INT, UNIQUE INDEX idx(c1,c4));
# Inserting data into table t1
# Trailing zeroes are not stripped, D=5
INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100119',1),('11111.00009','-9999.99999','9999999',2);
# DECIMAL := DECIMAL(10,0); Decimal values in c3 will be stripped;
INSERT INTO t1 VALUES('1000000','10000000','1000000000.0001',3);
# c1, c2, c3 will be rounded automatically
INSERT INTO t1 values('100.000001','1000.999999','9999.999999',4);
# Inserting maximum values
INSERT INTO t1 VALUES('99999.99999','-99999.99999','9999999999',5);
# Test insert leading zero, +/- signs, overflow handling
INSERT INTO t1 VALUES ("0.0","0.0","0.0",6),("01.0","01.0","01.0",7);
INSERT INTO t1 VALUES ("-.1","-.1","-.1",8);
INSERT INTO t1 VALUES ("+111111111.11","+111111111.11","+111111111.11",9);
# Inserting in scientific notations
INSERT INTO t1 VALUES('1.0e+4','1.0e-5','1.0e+9',10);
#INSERT INTO t1 VALUES('0.9999999999e+4','-.999999999e+4,'0.9999999999e+10',11);
--sorted_result
SELECT * FROM t1;
# Deletion starts here
# Delete by order by limit
DELETE FROM t1 WHERE c2 > 100 ORDER BY c2 LIMIT 1;
--sorted_result
SELECT c1,c2 FROM t1;
# Delete using range values
DELETE FROM t1 WHERE c3=1 AND c4=7;
--sorted_result
SELECT * FROM t1;
DELETE FROM t1 WHERE c3=9999999999 OR c2=1.0e-5;
--sorted_result
SELECT * FROM t1 WHERE c1=1.2e+2;
DELETE FROM t1 WHERE c4 IN (4,5,6);
--sorted_result
SELECT * FROM t1;
TRUNCATE t1;
INSERT INTO t1 VALUES ('11111.11111','-11111.11111','1111111111',1),('22222.22222','-22222.22222','2222222222',2),('33333.33333','-33333.33333','3333333333',3),('44444.44444','-44444.44444','4444444444',4),('55555.55555','-55555.55555','5555555555',5),('66666.66666','-66666.66666','6666666666',6),('77777.77777','-77777.77777','7777777777',7),('88888.88888','-88888.88888','8888888888',8),('99999.99999','-99999.99999','9999999999',9);
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
SELECT c1 FROM t1 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
DELETE FROM t1 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
# Multi table delete
CREATE TABLE t2(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT, UNIQUE INDEX idx2(c1,c3));
CREATE TABLE t3(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT, UNIQUE INDEX idx3(c1,c3));
CREATE TABLE t4(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT, UNIQUE INDEX idx4(c1,c3));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
INSERT INTO t4 VALUES ('77777.77777','7777777777',7),('88888.88888','8888888888',8),('99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t4;
DELETE t1,t2,t3,t4 FROM t1,t2,t3,t4 WHERE t1.c2 >'1111111111' AND t4.c2 < '8888888888';
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
# Delete using various access methods
TRUNCATE t2;
TRUNCATE t3;
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
# Delete using Const
# EXPLAIN SELECT * FROM t2 WHERE t2.c1='22222.22222' AND t2.c3=2;
DELETE FROM t2 WHERE t2.c1='22222.22222' AND t2.c3=2;
--sorted_result
SELECT * FROM t2;
# Delete using range
# EXPLAIN SELECT * FROM t2 WHERE c1 BETWEEN '11111' AND '44444';
DELETE FROM t2 WHERE c1 BETWEEN '11111' AND '44444';
--sorted_result
SELECT * FROM t2;
# EXPLAIN SELECT * FROM t2 WHERE c1 IN ('44444.44444','99999.99999');
DELETE FROM t2 WHERE c1 IN ('44444.44444','99999.99999');
--sorted_result
SELECT * FROM t2;
# Delete using eq_ref
DROP TABLE t2,t3;
CREATE TABLE t2(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT);
CREATE TABLE t3(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT, UNIQUE INDEX idx3(c1));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('11111.11111','4444444444',1),('55555.55555','5555555555',2),('66666.66666','6666666666',3);
# EXPLAIN SELECT * FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
DELETE t2,t3 FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t4;
# Droping the tables
--disable_warnings
DROP TABLES IF EXISTS t1,t2,t3,t4;
--enable_warnings
######## Running DELETE tests for DOUBLE ########
# Create tables
CREATE TABLE t1(c1 DOUBLE(10,5) UNSIGNED NOT NULL, c2 DOUBLE(10,5) SIGNED NULL, c3 DOUBLE, c4 INT, UNIQUE INDEX idx(c1,c4));
# Inserting data into table t1
# Trailing zeroes are not stripped, D=5
INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100119',1),('11111.00009','-9999.99999','9999999',2);
# DECIMAL := DECIMAL(10,0); Decimal values in c3 will be stripped;
INSERT INTO t1 VALUES('1000000','10000000','1000000000.0001',3);
# c1, c2, c3 will be rounded automatically
INSERT INTO t1 values('100.000001','1000.999999','9999.999999',4);
# Inserting maximum values
INSERT INTO t1 VALUES('99999.99999','-99999.99999','9999999999',5);
# Test insert leading zero, +/- signs, overflow handling
INSERT INTO t1 VALUES ("0.0","0.0","0.0",6),("01.0","01.0","01.0",7);
INSERT INTO t1 VALUES ("-.1","-.1","-.1",8);
INSERT INTO t1 VALUES ("+111111111.11","+111111111.11","+111111111.11",9);
# Inserting in scientific notations
INSERT INTO t1 VALUES('1.0e+4','1.0e-5','1.0e+9',10);
#INSERT INTO t1 VALUES('0.9999999999e+4','-.999999999e+4,'0.9999999999e+10',11);
--sorted_result
SELECT * FROM t1;
# Deletion starts here
# Delete by order by limit
DELETE FROM t1 WHERE c2 > 100 ORDER BY c2 LIMIT 1;
--sorted_result
SELECT c1,c2 FROM t1;
# Delete using range values
DELETE FROM t1 WHERE c3=1 AND c4=7;
--sorted_result
SELECT * FROM t1;
DELETE FROM t1 WHERE c3=9999999999 OR c2=1.0e-5;
--sorted_result
SELECT * FROM t1 WHERE c1=1.2e+2;
DELETE FROM t1 WHERE c4 IN (4,5,6);
--sorted_result
SELECT * FROM t1;
TRUNCATE t1;
INSERT INTO t1 VALUES ('11111.11111','-11111.11111','1111111111',1),('22222.22222','-22222.22222','2222222222',2),('33333.33333','-33333.33333','3333333333',3),('44444.44444','-44444.44444','4444444444',4),('55555.55555','-55555.55555','5555555555',5),('66666.66666','-66666.66666','6666666666',6),('77777.77777','-77777.77777','7777777777',7),('88888.88888','-88888.88888','8888888888',8),('99999.99999','-99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t1;
SELECT c1 FROM t1 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
DELETE FROM t1 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
--sorted_result
SELECT * FROM t1;
# Multi table delete
CREATE TABLE t2(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT, UNIQUE INDEX idx2(c1,c3));
CREATE TABLE t3(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT, UNIQUE INDEX idx3(c1,c3));
CREATE TABLE t4(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT, UNIQUE INDEX idx4(c1,c3));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
INSERT INTO t4 VALUES ('77777.77777','7777777777',7),('88888.88888','8888888888',8),('99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
DELETE t1,t2,t3,t4 FROM t1,t2,t3,t4 WHERE t1.c2 >'1111111111' AND t4.c2 < '8888888888';
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t1;
# Delete using various access methods
TRUNCATE t2;
TRUNCATE t3;
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
# Delete using Const
# EXPLAIN SELECT * FROM t2 WHERE t2.c1='22222.22222' AND t2.c3=2;
DELETE FROM t2 WHERE t2.c1='22222.22222' AND t2.c3=2;
--sorted_result
SELECT * FROM t2;
# Delete using range
# EXPLAIN SELECT * FROM t2 WHERE c1 BETWEEN '11111' AND '44444';
DELETE FROM t2 WHERE c1 BETWEEN '11111' AND '44444';
--sorted_result
SELECT * FROM t2;
# EXPLAIN SELECT * FROM t2 WHERE c1 IN ('44444.44444','99999.99999');
DELETE FROM t2 WHERE c1 IN ('44444.44444','99999.99999');
--sorted_result
SELECT * FROM t2;
# Delete using eq_ref
DROP TABLE t2,t3;
CREATE TABLE t2(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT);
CREATE TABLE t3(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT, UNIQUE INDEX idx3(c1));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('11111.11111','4444444444',1),('55555.55555','5555555555',2),('66666.66666','6666666666',3);
# EXPLAIN SELECT * FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
DELETE t2,t3 FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
# Droping the tables
--disable_warnings
DROP TABLES IF EXISTS t1,t2,t3,t4;
--enable_warnings

View File

@@ -0,0 +1,122 @@
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4;
--enable_warnings
# Create tables
CREATE TABLE t1(c1 TIME NOT NULL, c2 TIME NULL, PRIMARY KEY(c1));
CREATE TABLE t2(c1 TIME NOT NULL, c2 TIME NULL, PRIMARY KEY(c1,c2));
CREATE TABLE t3(c1 TIME NOT NULL, c2 TIME NULL, UNIQUE INDEX idx(c1,c2));
CREATE TABLE t4(c1 TIME NOT NULL, c2 TIME NULL);
# As a string in 'D HH:MM:SS.fraction' format
INSERT INTO t1 VALUES ('00:00:00.00','00:00:00.00'),('01:01:01.01','01:01:01.00'),('838:59:59.00','838:59:59.00'),('00:00:01','00:00:01'),('02:02:02','02:02:02'),('838:59:58','838:59:58'),('-838:59:59','-838:59:59'),('00:03','00:03'),('03:03','03:03'),('838:58','838:58'),('00 00:00:04','00 00:00:04'),('04 04:04:04','04 04:04:04'),('34 22:59:57','34 22:59:57'),('00 00:04','00 00:04'),('05 05:05','05 05:05'),('34 22:56','34 22:56'),('05 05','05 05'),('06 06','06 06'),('34 22','34 22'),('07','07'),('59','59');
INSERT INTO t2 VALUES ('00:00:00.00','00:00:00.00'),('01:01:01.01','01:01:01.00'),('838:59:59.00','838:59:59.00'),('00:00:01','00:00:01'),('02:02:02','02:02:02'),('838:59:58','838:59:58'),('-838:59:59','-838:59:59'),('00:03','00:03'),('03:03','03:03'),('838:58','838:58'),('00 00:00:04','00 00:00:04'),('04 04:04:04','04 04:04:04'),('34 22:59:57','34 22:59:57'),('00 00:04','00 00:04'),('05 05:05','05 05:05'),('34 22:56','34 22:56'),('05 05','05 05'),('06 06','06 06'),('34 22','34 22'),('07','07'),('59','59');
INSERT INTO t3 VALUES ('00:00:00.00','00:00:00.00'),('01:01:01.01','01:01:01.00'),('838:59:59.00','838:59:59.00'),('00:00:01','00:00:01'),('02:02:02','02:02:02'),('838:59:58','838:59:58'),('-838:59:59','-838:59:59'),('00:03','00:03'),('03:03','03:03'),('838:58','838:58'),('00 00:00:04','00 00:00:04'),('04 04:04:04','04 04:04:04'),('34 22:59:57','34 22:59:57'),('00 00:04','00 00:04'),('05 05:05','05 05:05'),('34 22:56','34 22:56'),('05 05','05 05'),('06 06','06 06'),('34 22','34 22'),('07','07'),('59','59');
INSERT INTO t4 VALUES ('00:00:00.00','00:00:00.00'),('01:01:01.01','01:01:01.00'),('838:59:59.00','838:59:59.00'),('00:00:01','00:00:01'),('02:02:02','02:02:02'),('838:59:58','838:59:58'),('-838:59:59','-838:59:59'),('00:03','00:03'),('03:03','03:03'),('838:58','838:58'),('00 00:00:04','00 00:00:04'),('04 04:04:04','04 04:04:04'),('34 22:59:57','34 22:59:57'),('00 00:04','00 00:04'),('05 05:05','05 05:05'),('34 22:56','34 22:56'),('05 05','05 05'),('06 06','06 06'),('34 22','34 22'),('07','07'),('59','59');
#As a string with no delimiters in 'HHMMSS' format
INSERT INTO t1 VALUES('000008','000008'),('080808','080808'),('8385955','8385955'),('-8385955','-8385955'),('0009','0009'),('0909','0909'),('5454','5454'),('10','10'),('53','53');
INSERT INTO t2 VALUES('000008','000008'),('080808','080808'),('8385955','8385955'),('-8385955','-8385955'),('0009','0009'),('0909','0909'),('5454','5454'),('10','10'),('53','53');
INSERT INTO t3 VALUES('000008','000008'),('080808','080808'),('8385955','8385955'),('-8385955','-8385955'),('0009','0009'),('0909','0909'),('5454','5454'),('10','10'),('53','53');
INSERT INTO t4 VALUES('000008','000008'),('080808','080808'),('8385955','8385955'),('-8385955','-8385955'),('0009','0009'),('0909','0909'),('5454','5454'),('10','10'),('53','53');
#As a number in HHMMSS format
INSERT INTO t1 VALUES (000011.00,000011.00),(111111.11,111111.11),(8385952.00,8385952.00),(000012,000012),(121212,121212),(8385951,8385951),(1313,1313),(5151,5151),(14,14),(50,50);
INSERT INTO t2 VALUES (000011.00,000011.00),(111111.11,111111.11),(8385952.00,8385952.00),(000012,000012),(121212,121212),(8385951,8385951),(1313,1313),(5151,5151),(14,14),(50,50);
INSERT INTO t3 VALUES (000011.00,000011.00),(111111.11,111111.11),(8385952.00,8385952.00),(000012,000012),(121212,121212),(8385951,8385951),(1313,1313),(5151,5151),(14,14),(50,50);
INSERT INTO t4 VALUES (000011.00,000011.00),(111111.11,111111.11),(8385952.00,8385952.00),(000012,000012),(121212,121212),(8385951,8385951),(1313,1313),(5151,5151),(14,14),(50,50);
#As the result of a function that returns a value that is acceptable in a TIME context
SET TIMESTAMP=1233216687; # 2009-01-29 13:41:27
INSERT INTO t1 VALUES(CURRENT_TIME(),CURRENT_TIME());
INSERT INTO t2 VALUES(CURRENT_TIME(),CURRENT_TIME());
INSERT INTO t3 VALUES(CURRENT_TIME(),CURRENT_TIME());
INSERT INTO t4 VALUES(CURRENT_TIME(),CURRENT_TIME());
#Insert permissible NULLs
INSERT INTO t1 VALUES('123456',null);
#INSERT INTO t2 VALUES('123456',null);
INSERT INTO t3 VALUES('123456',null);
INSERT INTO t4 VALUES('123456',null);
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
#Deleting the table rows
--sorted_result
SELECT c1 FROM t1 WHERE c1='00:00:07';
DELETE FROM t1 WHERE c1='00:00:07';
--sorted_result
SELECT c1 FROM t1;
--sorted_result
SELECT c1 FROM t2 WHERE c1='-838:59:59' AND c2='-838:59:59';
DELETE FROM t2 WHERE c1='-838:59:59' AND c2='-838:59:59';
--sorted_result
SELECT c1 FROM t2;
#Deleting rowa with NULL attributes
--sorted_result
SELECT c2 FROM t3 WHERE c2=null;
DELETE FROM t3 WHERE c2=null;
--sorted_result
SELECT c2 FROM t3;
#Delete by order by limit
--sorted_result
SELECT c1 FROM t4 WHERE c1 < '000009';
DELETE FROM t4 WHERE c1 < '000009' ORDER BY c1 LIMIT 3;
--sorted_result
SELECT c1 FROM t4;
#Delete by range values
DELETE FROM t1 WHERE c1='00:00:09' AND c1='01:01:01';
--sorted_result
SELECT c2 FROM t1;
DELETE FROM t2 WHERE c2=000400 OR c2= 000900;
--sorted_result
SELECT c1 FROM t2;
DELETE FROM t2 WHERE c1 IN ('100:04:04',005454,'2:2:2',111111) ORDER BY c1 LIMIT 2;
--sorted_result
SELECT c2 FROM t2;
#Multi table delete
DELETE t1,t2,t3,t4 FROM t1,t2,t3,t4 WHERE t1.c1='00:13:13' AND t2.c1=080808 AND t4.c1='00:04:00' AND t3.c2=020202;
#Delete using various access methods
# Delete using Const
# EXPLAIN SELECT * FROM t1 WHERE c1='00:09:09' AND c2='00:09:09';
DELETE FROM t1 WHERE c1='00:09:09' AND c2='00:09:09';
--sorted_result
SELECT * FROM t1;
# Delete using range
# EXPLAIN SELECT * FROM t1 WHERE c1 BETWEEN 080000 AND 100000;
DELETE FROM t1 WHERE c1 BETWEEN 080000 AND 100000;
--sorted_result
SELECT * FROM t1;
# EXPLAIN SELECT * FROM t1 WHERE c1 IN (222222,8385959,1500000);
DELETE FROM t1 WHERE c1 IN (222222,8385959,1500000);
--sorted_result
SELECT * FROM t1;
# Delete using eq_ref
# EXPLAIN SELECT * FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
DELETE t1,t2 FROM t1,t2 WHERE t1.c1=t2.c1 AND t1.c2=t2.c2;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
#Drop tables;
DROP TABLE IF EXISTS t1,t2,t3,t4;

View File

@@ -0,0 +1,110 @@
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4;
--enable_warnings
# Create tables
CREATE TABLE t1(c1 YEAR NOT NULL,c2 YEAR, PRIMARY KEY(c1));
CREATE TABLE t2(c1 YEAR NOT NULL, c2 YEAR, UNIQUE INDEX idx(c1,c2));
CREATE TABLE t3(c1 YEAR(2) NOT NULL,c2 YEAR(2), PRIMARY KEY(c1));
CREATE TABLE t4(c1 YEAR(2), c2 YEAR(2), UNIQUE INDEX idx(c1,c2));
#Insert as 4-digit number format in the range '1901' to '2155'
INSERT INTO t1 VALUES (1901,1901),(1970,1970),(1999,1999),(2000,2000),(2155,2155);
INSERT INTO t2 VALUES (1901,1901),(1970,1970),(1999,1999),(2000,2000),(2155,2155);
INSERT INTO t3 VALUES (1901,1901),(1970,1970),(1999,1999),(2000,2000),(2155,2155);
INSERT INTO t4 VALUES (1901,1901),(1970,1970),(1999,1999),(2000,2000),(2155,2155);
#Insert as 4-digit string format in the range '1901' to '2155'
INSERT INTO t1 VALUES ('1902','1902'),('1971','1971'),('1998','1998'),('2001','2001'),('2154','2154');
INSERT INTO t2 VALUES ('1902','1902'),('1971','1971'),('1998','1998'),('2001','2001'),('2154','2154');
INSERT INTO t3 VALUES ('1902','1902'),('1971','1971'),('1998','1998'),('2001','2001'),('2154','2154');
INSERT INTO t4 VALUES ('1902','1902'),('1971','1971'),('1998','1998'),('2001','2001'),('2154','2154');
#Insert as 2-digit number format
INSERT INTO t1 VALUES (04,04),(64,64),(69,69),(97,97);
INSERT INTO t2 VALUES (04,04),(64,64),(69,69),(97,97);
INSERT INTO t3 VALUES (04,04),(64,64),(69,69),(97,97);
INSERT INTO t4 VALUES (04,04),(64,64),(69,69),(97,97);
#Insert as 2-digit string format
INSERT INTO t1 VALUES ('05','05'),('65','65'),('75','75'),('95','95');
INSERT INTO t2 VALUES ('05','05'),('65','65'),('75','75'),('95','95');
INSERT INTO t3 VALUES ('05','05'),('65','65'),('75','75'),('95','95');
INSERT INTO t4 VALUES ('05','05'),('65','65'),('75','75'),('95','95');
#Insert permissible NULLs
INSERT INTO t1 VALUES ('09',null),('61',null),('79',null),('96',null);
INSERT INTO t2 VALUES ('09',null),('61',null),('79',null),('96',null);
INSERT INTO t3 VALUES ('09',null),('61',null),('79',null),('96',null);
INSERT INTO t4 VALUES ('09',null),('61',null),('79',null),('96',null);
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
#Deleting the specified rows
--sorted_result
SELECT c1 FROM t1 WHERE c1='2005';
DELETE FROM t1 WHERE c1='2005';
--sorted_result
SELECT c1 FROM t1;
# Delete rows with null attributes
--sorted_result
SELECT c2 FROM t2 WHERE c2=null;
DELETE FROM t2 WHERE c2=null LIMIT 2;
--sorted_result
SELECT c2 FROM t2;
#Delete order by limit
--sorted_result
SELECT c1 FROM t4 WHERE c1 < '55';
DELETE FROM t4 WHERE c1 < '65' ORDER BY c1 LIMIT 5;
--sorted_result
SELECT c1 FROM t4;
#Delete by range values
DELETE FROM t2 WHERE c1=2009 AND c2=null;
--sorted_result
SELECT c2 FROM t2;
DELETE FROM t1 WHERE c1=1979 OR c1=2154;
--sorted_result
SELECT c2 FROM t1;
DELETE FROM t4 WHERE c2 IN (01,54,65,69,null) LIMIT 2;
--sorted_result
SELECT c1 FROM t4;
#Multi table delete
DELETE t3,t4 FROM t3,t4 WHERE t3.c1=61 AND t4.c2=4;
# Delete using various access methods
# Delete using Const
# EXPLAIN SELECT * FROM t1 WHERE c1=2064 AND c2=2064;
DELETE FROM t1 WHERE c1=2064 AND c2=2064;
--sorted_result
SELECT * FROM t1;
# Delete using range
# EXPLAIN SELECT * FROM t1 WHERE c1 BETWEEN 2000 AND 2010;
DELETE FROM t1 WHERE c1 BETWEEN 2000 AND 2010 LIMIT 2;
--sorted_result
SELECT * FROM t1;
# EXPLAIN SELECT * FROM t1 WHERE c1 IN (2155,2009,1975);
DELETE FROM t1 WHERE c1 IN (2155,2009,1975) LIMIT 2;
--sorted_result
SELECT * FROM t1;
# Delete using eq_ref
# EXPLAIN SELECT * FROM t1,t2 WHERE t1.c1=t2.c1 AND t1.c2=t2.c2;
DELETE t1,t2 FROM t1,t2 WHERE t1.c1=t2.c1 AND t1.c2=t2.c2;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
#Drop tables
DROP TABLE IF EXISTS t1,t2,t3,t4;

View File

@@ -0,0 +1 @@
insert_calendar : Bug #52283 Innodb reports extra warnings when SELECT/WHERE is performed using invalid value

View File

@@ -0,0 +1,50 @@
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.
यह हिन्दी में एक वाक्य है.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,969 @@
--disable_warnings
DROP TABLE IF EXISTS t1,t2;
--enable_warnings
######## Running INSERT tests for DECIMAL ########
# Create tables
CREATE TABLE t1(c1 DECIMAL(10,5) UNSIGNED NOT NULL, c2 DECIMAL(10,5) SIGNED NULL, c3 DECIMAL, c4 INT, UNIQUE INDEX idx(c1,c2));
CREATE TABLE t2(c1 DECIMAL(10,0) SIGNED NOT NULL, c2 DECIMAL(10) UNSIGNED NULL, c3 DECIMAL, c4 INT);
# Test insert values, trailing zeroes are not stripped
INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100.05000',1);
INSERT INTO t2 VALUES('-1000000000','1000000000','1000000000',2);
# Test no approximation
INSERT INTO t1(c1) VALUES('12345.000009');
# Test insert max values
INSERT INTO t1 VALUES('99999.99999','-99999.99999','99999.99999',3);
INSERT INTO t2 VALUES('-9999999999','-9999999999','9999999999',4);
# Test insert outside max value, would be clipped to closest endpoint
--sorted_result
SELECT * FROM t1;
--error ER_DUP_ENTRY
INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
DELETE FROM t1 WHERE c1='99999.99999' AND c2='-99999.99999';
--sorted_result
SELECT * FROM t1;
INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
INSERT INTO t2 VALUES('10000000000','-10000000000','10000000000',6);
# Test insert leading zero, +/- signs, overflow handling
insert into t1 values ("0.0","0.0","0.0",7),("01.0","01.0","01.0",10);
insert into t1 values ("-.1","-.1","-.1",13);
insert into t1 values ("+111111111.11","+111111111.11","+111111111.11",19);
insert into t2 values ("0.0","0.0","0.0",7),("-0.0","-0.0","-0.0",8),("+0.0","+0.0","+0.0",9),("01.0","01.0","01.0",10),("+01.0","+01.0","+01.0",11),("-01.0","-01.0","-01.0",12);
insert into t2 values ("-.1","-.1","-.1",13),("+.1","+.1","+.1",14),(".1",".1",".1",15);
insert into t2 values ("00000000000001","00000000000001","00000000000001",16),("+0000000000001","+0000000000001","+0000000000001",17),("-0000000000001","-0000000000001","-0000000000001",18);
insert into t2 values ("+111111111.11","+111111111.11","+111111111.11",19),("111111111.11","111111111.11","111111111.11",20),("-11111111.11","-11111111.11","-11111111.11",21);
insert into t2 values ("-111111111.11","-111111111.11","-111111111.11",22),("+1111111111.11","+1111111111.11","+1111111111.11",23),("1111111111.11","1111111111.11","1111111111.11",24);
insert into t2 values ("1e+1000","1e+1000","1e+1000",25),("1e-1000","1e-1000","1e-1000",26),("-1e+1000","-1e+1000","-1e+1000",27);
insert into t2 values ("1e+4294967296","1e+4294967296","1e+4294967296",28),("1e-4294967296","1e-4294967296","1e-4294967296",29);
insert into t2 values ("1e+18446744073709551615","1e+18446744073709551615","1e+18446744073709551615",30),("1e+18446744073709551616","1e+18446744073709551616","1e+18446744073709551616",31),("1e-9223372036854775807","1e-9223372036854775807","1e-9223372036854775807",32),("1e-9223372036854775809","1e-9223372036854775809","1e-9223372036854775809",33);
# Now Select
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t1;
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t1;
SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t1;
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t2;
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t2;
SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t2;
# Select using various access methods
## Full table scan ##
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
--sorted_result
SELECT * FROM t1 WHERE c3 = '0.0';
## Forward index scan, covering ##
--sorted_result
SELECT c1,c2 FROM t1;
## Backward index scan, covering ##
SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
## Forward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
## Backward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
## ref type access
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC LIMIT 2;
## Range access, ordered ##
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
## Range access, backwards scan ##
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
## Full table scan ##
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
--sorted_result
SELECT * FROM t1 WHERE c3 = '-0.0';
## Forward index scan, covering ##
--sorted_result
SELECT c1,c2 FROM t1;
## Backward index scan, covering ##
SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
## Forward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
## Backward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
## ref type access
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
## Range access, ordered ##
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
## Range access, backwards scan ##
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
## Full table scan ##
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t1;
--sorted_result
SELECT * FROM t1 WHERE c3 = '-0.0';
## Forward index scan, covering ##
--sorted_result
SELECT c1,c2 FROM t1;
## Backward index scan, covering ##
SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
## Forward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
## Backward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
## ref type access
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
## Range access, ordered ##
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
## Range access, backwards scan ##
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
# Using index for group-by
--sorted_result
SELECT c1 FROM t1 GROUP BY c1;
--sorted_result
SELECT DISTINCT c1 FROM t1;
--sorted_result
SELECT c1,MIN(c2) FROM t1 GROUP BY c1;
# Test extremes
CREATE TABLE t5(c1 DECIMAL(65,0) UNSIGNED NOT NULL, c2 DECIMAL(65,0) SIGNED NULL, c3 DECIMAL, c4 INT, INDEX idx(c1,c2));
INSERT INTO t5 VALUES('1e+64','-1e+64','1e+64',1),('1e-64','-1e-64','1e-64',2);
INSERT INTO t5 VALUES('1.2e+65','-1.2e+65','1.2e+65',3),('1.2e-65','-1.2e-65','1.2e-65',4);
--sorted_result
SELECT * FROM t5;
DROP TABLE t5;
# Test encoding to various bytes
CREATE TABLE t5(c1 DECIMAL(18,9) UNSIGNED, c2 DECIMAL(18,9) SIGNED) /* requires 8 bytes */;
INSERT INTO t5 VALUES(123456789.123456789,-123456789.123456789);
--sorted_result
SELECT c1,c2 FROM t5;
ALTER TABLE t5 CHANGE c1 c1 DECIMAL(19,9) UNSIGNED, CHANGE c2 c2 DECIMAL(19,9) SIGNED /* requires 9 bytes */;
INSERT INTO t5 VALUES(1234567891.123456789,-1234567891.123456789);
--sorted_result
SELECT c1,c2 FROM t5;
ALTER TABLE t5 CHANGE c1 c1 DECIMAL(21,10) UNSIGNED, CHANGE c2 c2 DECIMAL(21,10) SIGNED /* requires 10 bytes */;
INSERT INTO t5 VALUES(12345678912.1234567891,-12345678912.1234567891);
--sorted_result
SELECT c1,c2 FROM t5;
ALTER TABLE t5 CHANGE c1 c1 DECIMAL(23,11) UNSIGNED, CHANGE c2 c2 DECIMAL(23,11) SIGNED /* requires 11 bytes */;
INSERT INTO t5 VALUES(123456789123.12345678912,-123456789123.12345678912);
--sorted_result
SELECT c1,c2 FROM t5;
ALTER TABLE t5 CHANGE c1 c1 DECIMAL(25,12) UNSIGNED, CHANGE c2 c2 DECIMAL(25,12) SIGNED /* requires 12 bytes */;
INSERT INTO t5 VALUES(1234567891234.123456789123,-1234567891234.123456789123);
--sorted_result
SELECT c1,c2 FROM t5;
SELECT SUM(c1),SUM(c2) FROM t5;
DROP TABLE t5;
# Test ROUND() and TRUNCATE()
CREATE TABLE t5(c1 DECIMAL(16,6), c2 tinyint);
INSERT INTO t5 VALUES(1.1325,3);
SELECT ROUND(c1,c2),TRUNCATE(c1,c2) FROM t5;
DROP TABLE t5;
# Test wrong decimal types
--error ER_TOO_BIG_PRECISION
CREATE TABLE t7(c1 DECIMAL(66,0));
--error ER_M_BIGGER_THAN_D
CREATE TABLE t7(c1 DECIMAL(5,10));
DROP TABLE t1,t2;
######## Running INSERT tests for FLOAT ########
# Create tables
CREATE TABLE t1(c1 FLOAT(10,5) UNSIGNED NOT NULL, c2 FLOAT(10,5) SIGNED NULL, c3 FLOAT, c4 INT, UNIQUE INDEX idx(c1,c2));
CREATE TABLE t2(c1 FLOAT(10,0) SIGNED NOT NULL, c2 FLOAT(10,0) UNSIGNED NULL, c3 FLOAT, c4 INT);
# Test insert values, trailing zeroes are not stripped
INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100.05000',1);
INSERT INTO t2 VALUES('-1000000000','1000000000','1000000000',2);
# Test approximation
INSERT INTO t1(c1) VALUES('12345.000009');
# Test insert max values
INSERT INTO t1 VALUES('99999.99999','-99999.99999','99999.99999',3);
INSERT INTO t2 VALUES('-9999999999','-9999999999','9999999999',4);
# Test insert outside max value, would be clipped to closest endpoint
SELECT * FROM t1;
--error ER_DUP_ENTRY
INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
DELETE FROM t1 WHERE c1='100000.00000' AND c2='-100000.00000';
INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
INSERT INTO t2 VALUES('10000000000','-10000000000','10000000000',6);
# Test insert leading zero, +/- signs, overflow handling
insert into t1 values ("0.0","0.0","0.0",7),("01.0","01.0","01.0",10);
insert into t1 values ("-.1","-.1","-.1",13);
insert into t1 values ("+111111111.11","+111111111.11","+111111111.11",19);
insert into t2 values ("0.0","0.0","0.0",7),("-0.0","-0.0","-0.0",8),("+0.0","+0.0","+0.0",9),("01.0","01.0","01.0",10),("+01.0","+01.0","+01.0",11),("-01.0","-01.0","-01.0",12);
insert into t2 values ("-.1","-.1","-.1",13),("+.1","+.1","+.1",14),(".1",".1",".1",15);
insert into t2 values ("00000000000001","00000000000001","00000000000001",16),("+0000000000001","+0000000000001","+0000000000001",17),("-0000000000001","-0000000000001","-0000000000001",18);
insert into t2 values ("+111111111.11","+111111111.11","+111111111.11",19),("111111111.11","111111111.11","111111111.11",20),("-11111111.11","-11111111.11","-11111111.11",21);
insert into t2 values ("-111111111.11","-111111111.11","-111111111.11",22),("+1111111111.11","+1111111111.11","+1111111111.11",23),("1111111111.11","1111111111.11","1111111111.11",24);
insert into t2 values ("1e+1000","1e+1000","1e+1000",25),("1e-1000","1e-1000","1e-1000",26),("-1e+1000","-1e+1000","-1e+1000",27);
insert into t2 values ("1e+4294967296","1e+4294967296","1e+4294967296",28),("1e-4294967296","1e-4294967296","1e-4294967296",29);
insert into t2 values ("1e+18446744073709551615","1e+18446744073709551615","1e+18446744073709551615",30),("1e+18446744073709551616","1e+18446744073709551616","1e+18446744073709551616",31),("1e-9223372036854775807","1e-9223372036854775807","1e-9223372036854775807",32),("1e-9223372036854775809","1e-9223372036854775809","1e-9223372036854775809",33);
# Now Select
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t1;
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t1;
SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t1;
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t2;
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t2;
SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t2;
# Select using various access methods
## Full table scan ##
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
--sorted_result
SELECT * FROM t1 WHERE c3 = '0.0';
## Forward index scan, covering ##
--sorted_result
SELECT c1,c2 FROM t1;
## Backward index scan, covering ##
SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
## Forward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
## Backward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
## ref type access
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC LIMIT 2;
## Range access, ordered ##
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
## Range access, backwards scan ##
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
## Full table scan ##
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
--sorted_result
SELECT * FROM t1 WHERE c3 = '-0.0';
## Forward index scan, covering ##
--sorted_result
SELECT c1,c2 FROM t1;
## Backward index scan, covering ##
SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
## Forward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
## Backward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
## ref type access
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
## Range access, ordered ##
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
## Range access, backwards scan ##
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
## Full table scan ##
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t1;
--sorted_result
SELECT * FROM t1 WHERE c3 = '-0.0';
## Forward index scan, covering ##
--sorted_result
SELECT c1,c2 FROM t1;
## Backward index scan, covering ##
SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
## Forward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
## Backward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
## ref type access
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
## Range access, ordered ##
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
## Range access, backwards scan ##
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
# Using index for group-by
--sorted_result
SELECT c1 FROM t1 GROUP BY c1;
--sorted_result
SELECT DISTINCT c1 FROM t1;
--sorted_result
SELECT c1,MIN(c2) FROM t1 GROUP BY c1;
# Test encoding to 4 or 8 bytes
CREATE TABLE t5(c1 FLOAT(23,0) UNSIGNED NOT NULL, c2 FLOAT(23,0) SIGNED NULL, c3 FLOAT, c4 INT, INDEX idx(c1,c2));
INSERT INTO t5 VALUES('1e+22','-1e+22','1e+22',1),('1e-22','-1e-22','1e-22',2);
#Output is platform dependent
--disable_result_log
--sorted_result
SELECT * FROM t5;
--enable_result_log
ALTER TABLE t5 CHANGE c1 c1 FLOAT(24,0) SIGNED NOT NULL, CHANGE c2 c2 FLOAT(24,0) UNSIGNED NULL;
INSERT INTO t5 VALUES('-1e+23','1e+23','1e+23',3),('-1e-23','1e-23','1e-23',4);
#Output is platform dependent
--disable_result_log
--sorted_result
SELECT * FROM t5;
--enable_result_log
ALTER TABLE t5 CHANGE c1 c1 FLOAT(53,0) UNSIGNED, CHANGE c2 c2 FLOAT(53,0) SIGNED;
INSERT INTO t5 VALUES('1e+52','-1e+52','1e+52',5),('1e-52','-1e-52','1e-52',6);
INSERT INTO t5 VALUES('1e+53','-1e+53','1e+53',7),('1e-53','-1e-53','1e-53',8);
#Output is platform dependent
--replace_column 1 # 2 #
--sorted_result
SELECT * FROM t5;
DROP TABLE t5;
# Test ROUND() and TRUNCATE()
CREATE TABLE t5(c1 FLOAT(16,6), c2 tinyint);
INSERT INTO t5 VALUES(1.1325,3);
SELECT ROUND(c1,c2),TRUNCATE(c1,c2) FROM t5;
DROP TABLE t5;
# Test wrong decimal types
--error ER_M_BIGGER_THAN_D
CREATE TABLE t7(c1 FLOAT(5,10));
DROP TABLE t1,t2;
######## Running INSERT tests for DOUBLE ########
# Create tables
CREATE TABLE t1(c1 DOUBLE(10,5) UNSIGNED NOT NULL, c2 DOUBLE(10,5) SIGNED NULL, c3 DOUBLE, c4 INT, UNIQUE INDEX idx(c1,c2));
CREATE TABLE t2(c1 DOUBLE(10,0) SIGNED NOT NULL, c2 DOUBLE(10,0) UNSIGNED NULL, c3 DOUBLE, c4 INT);
# Test insert values, trailing zeroes are not stripped
INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100.05000',1);
INSERT INTO t2 VALUES('-1000000000','1000000000','1000000000',2);
# Test approximation
INSERT INTO t1(c1) VALUES('12345.000009');
# Test insert max values
INSERT INTO t1 VALUES('99999.99999','-99999.99999','99999.99999',3);
INSERT INTO t2 VALUES('-9999999999','-9999999999','9999999999',4);
# Test insert outside max value, would be clipped to closest endpoint
SELECT * FROM t1;
--error ER_DUP_ENTRY
INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
DELETE FROM t1 WHERE c1='99999.99999' AND c2='-99999.99999';
INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
INSERT INTO t2 VALUES('10000000000','-10000000000','10000000000',6);
# Test insert leading zero, +/- signs, overflow handling
insert into t1 values ("0.0","0.0","0.0",7),("01.0","01.0","01.0",10);
insert into t1 values ("-.1","-.1","-.1",13);
insert into t1 values ("+111111111.11","+111111111.11","+111111111.11",19);
insert into t2 values ("0.0","0.0","0.0",7),("-0.0","-0.0","-0.0",8),("+0.0","+0.0","+0.0",9),("01.0","01.0","01.0",10),("+01.0","+01.0","+01.0",11),("-01.0","-01.0","-01.0",12);
insert into t2 values ("-.1","-.1","-.1",13),("+.1","+.1","+.1",14),(".1",".1",".1",15);
insert into t2 values ("00000000000001","00000000000001","00000000000001",16),("+0000000000001","+0000000000001","+0000000000001",17),("-0000000000001","-0000000000001","-0000000000001",18);
insert into t2 values ("+111111111.11","+111111111.11","+111111111.11",19),("111111111.11","111111111.11","111111111.11",20),("-11111111.11","-11111111.11","-11111111.11",21);
insert into t2 values ("-111111111.11","-111111111.11","-111111111.11",22),("+1111111111.11","+1111111111.11","+1111111111.11",23),("1111111111.11","1111111111.11","1111111111.11",24);
insert into t2 values ("1e+1000","1e+1000","1e+1000",25),("1e-1000","1e-1000","1e-1000",26),("-1e+1000","-1e+1000","-1e+1000",27);
insert into t2 values ("1e+4294967296","1e+4294967296","1e+4294967296",28),("1e-4294967296","1e-4294967296","1e-4294967296",29);
insert into t2 values ("1e+18446744073709551615","1e+18446744073709551615","1e+18446744073709551615",30),("1e+18446744073709551616","1e+18446744073709551616","1e+18446744073709551616",31),("1e-9223372036854775807","1e-9223372036854775807","1e-9223372036854775807",32),("1e-9223372036854775809","1e-9223372036854775809","1e-9223372036854775809",33);
# Now Select
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t1;
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t1;
SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t1;
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t2;
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t2;
#SELECT below outputs 'inf' and 'infinity' for Linux/SunOS respectively
--replace_column 4 inf 5 inf
SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t2;
# Select using various access methods
## Full table scan ##
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
--sorted_result
SELECT * FROM t1 WHERE c3 = '0.0';
## Forward index scan, covering ##
--sorted_result
SELECT c1,c2 FROM t1;
## Backward index scan, covering ##
SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
## Forward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
## Backward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
## ref type access
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC LIMIT 2;
## Range access, ordered ##
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
## Range access, backwards scan ##
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
## Full table scan ##
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
--sorted_result
SELECT * FROM t1 WHERE c3 = '-0.0';
## Forward index scan, covering ##
--sorted_result
SELECT c1,c2 FROM t1;
## Backward index scan, covering ##
SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
## Forward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
## Backward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
## ref type access
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
## Range access, ordered ##
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
## Range access, backwards scan ##
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
## Full table scan ##
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t1;
--sorted_result
SELECT * FROM t1 WHERE c3 = '-0.0';
## Forward index scan, covering ##
--sorted_result
SELECT c1,c2 FROM t1;
## Backward index scan, covering ##
SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
## Forward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
## Backward index scan, non-covering ##
SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
## ref type access
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
## Range access, ordered ##
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
## Range access, backwards scan ##
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
# Using index for group-by
--sorted_result
SELECT c1 FROM t1 GROUP BY c1;
--sorted_result
SELECT DISTINCT c1 FROM t1;
--sorted_result
SELECT c1,MIN(c2) FROM t1 GROUP BY c1;
# Test encoding to 4 or 8 bytes
CREATE TABLE t5(c1 DOUBLE(23,0) UNSIGNED NOT NULL, c2 DOUBLE(23,0) SIGNED NULL, c3 DOUBLE, c4 INT, INDEX idx(c1,c2));
INSERT INTO t5 VALUES('1e+22','-1e+22','1e+22',1),('1e-22','-1e-22','1e-22',2);
--sorted_result
SELECT * FROM t5;
ALTER TABLE t5 CHANGE c1 c1 DOUBLE(24,0) SIGNED NOT NULL, CHANGE c2 c2 DOUBLE(24,0) UNSIGNED NULL;
INSERT INTO t5 VALUES('-1e+23','1e+23','1e+23',3),('-1e-23','1e-23','1e-23',4);
#Output is platform dependent
--disable_result_log
--sorted_result
SELECT * FROM t5;
--enable_result_log
ALTER TABLE t5 CHANGE c1 c1 DOUBLE(53,0) UNSIGNED, CHANGE c2 c2 DOUBLE(53,0) SIGNED;
INSERT INTO t5 VALUES('1e+52','-1e+52','1e+52',5),('1e-52','-1e-52','1e-52',6);
INSERT INTO t5 VALUES('1e+53','-1e+53','1e+53',7),('1e-53','-1e-53','1e-53',8);
#Output is platform dependent
--disable_result_log
--sorted_result
SELECT * FROM t5;
--enable_result_log
DROP TABLE t5;
# Test ROUND() and TRUNCATE()
CREATE TABLE t5(c1 DOUBLE(16,6), c2 tinyint);
INSERT INTO t5 VALUES(1.1325,3);
SELECT ROUND(c1,c2),TRUNCATE(c1,c2) FROM t5;
DROP TABLE t5;
# Test wrong decimal types
--error ER_M_BIGGER_THAN_D
CREATE TABLE t7(c1 DOUBLE(5,10));
DROP TABLE t1,t2;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,500 @@
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.
This is a sample text.

View File

@@ -0,0 +1,134 @@
--disable_warnings
--enable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18;
######## Running UPDATE tests ########
#Test for latin1 character set
CREATE TABLE t5(c1 CHAR(1) CHARACTER SET latin1);
# Insert some targeted values for latin1 character set; borrowing from ctype_latin.test in the main suite
eval INSERT INTO t5 VALUES (0x00),(0x01),(0x02),(0x03),(0x04),(0x05),(0x06),(0x07);
eval INSERT INTO t5 VALUES (0x08),(0x09),(0x0A),(0x0B),(0x0C),(0x0D),(0x0E),(0x0F);
eval INSERT INTO t5 VALUES (0x10),(0x11),(0x12),(0x13),(0x14),(0x15),(0x16),(0x17);
eval INSERT INTO t5 VALUES (0x18),(0x19),(0x1A),(0x1B),(0x1C),(0x1D),(0x1E),(0x1F);
eval INSERT INTO t5 VALUES (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27);
eval INSERT INTO t5 VALUES (0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
eval INSERT INTO t5 VALUES (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37);
eval INSERT INTO t5 VALUES (0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
eval INSERT INTO t5 VALUES (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47);
eval INSERT INTO t5 VALUES (0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
eval INSERT INTO t5 VALUES (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57);
eval INSERT INTO t5 VALUES (0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
eval INSERT INTO t5 VALUES (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67);
eval INSERT INTO t5 VALUES (0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
eval INSERT INTO t5 VALUES (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77);
eval INSERT INTO t5 VALUES (0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
eval INSERT INTO t5 VALUES (0x80),(0x81),(0x82),(0x83),(0x84),(0x85),(0x86),(0x87);
eval INSERT INTO t5 VALUES (0x88),(0x89),(0x8A),(0x8B),(0x8C),(0x8D),(0x8E),(0x8F);
eval INSERT INTO t5 VALUES (0x90),(0x91),(0x92),(0x93),(0x94),(0x95),(0x96),(0x97);
eval INSERT INTO t5 VALUES (0x98),(0x99),(0x9A),(0x9B),(0x9C),(0x9D),(0x9E),(0x9F);
eval INSERT INTO t5 VALUES (0xA0),(0xA1),(0xA2),(0xA3),(0xA4),(0xA5),(0xA6),(0xA7);
eval INSERT INTO t5 VALUES (0xA8),(0xA9),(0xAA),(0xAB),(0xAC),(0xAD),(0xAE),(0xAF);
eval INSERT INTO t5 VALUES (0xB0),(0xB1),(0xB2),(0xB3),(0xB4),(0xB5),(0xB6),(0xB7);
eval INSERT INTO t5 VALUES (0xB8),(0xB9),(0xBA),(0xBB),(0xBC),(0xBD),(0xBE),(0xBF);
eval INSERT INTO t5 VALUES (0xC0),(0xC1),(0xC2),(0xC3),(0xC4),(0xC5),(0xC6),(0xC7);
eval INSERT INTO t5 VALUES (0xC8),(0xC9),(0xCA),(0xCB),(0xCC),(0xCD),(0xCE),(0xCF);
eval INSERT INTO t5 VALUES (0xD0),(0xD1),(0xD2),(0xD3),(0xD4),(0xD5),(0xD6),(0xD7);
eval INSERT INTO t5 VALUES (0xD8),(0xD9),(0xDA),(0xDB),(0xDC),(0xDD),(0xDE),(0xDF);
eval INSERT INTO t5 VALUES (0xE0),(0xE1),(0xE2),(0xE3),(0xE4),(0xE5),(0xE6),(0xE7);
eval INSERT INTO t5 VALUES (0xE8),(0xE9),(0xEA),(0xEB),(0xEC),(0xED),(0xEE),(0xEF);
eval INSERT INTO t5 VALUES (0xF0),(0xF1),(0xF2),(0xF3),(0xF4),(0xF5),(0xF6),(0xF7);
eval INSERT INTO t5 VALUES (0xF8),(0xF9),(0xFA),(0xFB),(0xFC),(0xFD),(0xFE),(0xFF);
SELECT c1 FROM t5;
CREATE TABLE t6 (a char(1) character set latin2);
INSERT INTO t6 VALUES (0x20),(0x21),(0x22),(0x23),(0x24),(0x25),(0x26),(0x27);
INSERT INTO t6 VALUES (0x28),(0x29),(0x2A),(0x2B),(0x2C),(0x2D),(0x2E),(0x2F);
INSERT INTO t6 VALUES (0x30),(0x31),(0x32),(0x33),(0x34),(0x35),(0x36),(0x37);
INSERT INTO t6 VALUES (0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F);
INSERT INTO t6 VALUES (0x40),(0x41),(0x42),(0x43),(0x44),(0x45),(0x46),(0x47);
INSERT INTO t6 VALUES (0x48),(0x49),(0x4A),(0x4B),(0x4C),(0x4D),(0x4E),(0x4F);
INSERT INTO t6 VALUES (0x50),(0x51),(0x52),(0x53),(0x54),(0x55),(0x56),(0x57);
INSERT INTO t6 VALUES (0x58),(0x59),(0x5A),(0x5B),(0x5C),(0x5D),(0x5E),(0x5F);
INSERT INTO t6 VALUES (0x60),(0x61),(0x62),(0x63),(0x64),(0x65),(0x66),(0x67);
INSERT INTO t6 VALUES (0x68),(0x69),(0x6A),(0x6B),(0x6C),(0x6D),(0x6E),(0x6F);
INSERT INTO t6 VALUES (0x70),(0x71),(0x72),(0x73),(0x74),(0x75),(0x76),(0x77);
INSERT INTO t6 VALUES (0x78),(0x79),(0x7A),(0x7B),(0x7C),(0x7D),(0x7E),(0x7F);
INSERT INTO t6 VALUES (0x80),(0x81),(0x82),(0x83),(0x84),(0x85),(0x86),(0x87);
INSERT INTO t6 VALUES (0x88),(0x89),(0x8A),(0x8B),(0x8C),(0x8D),(0x8E),(0x8F);
INSERT INTO t6 VALUES (0x90),(0x91),(0x92),(0x93),(0x94),(0x95),(0x96),(0x97);
INSERT INTO t6 VALUES (0x98),(0x99),(0x9A),(0x9B),(0x9C),(0x9D),(0x9E),(0x9F);
INSERT INTO t6 VALUES (0xA0),(0xA1),(0xA2),(0xA3),(0xA4),(0xA5),(0xA6),(0xA7);
INSERT INTO t6 VALUES (0xA8),(0xA9),(0xAA),(0xAB),(0xAC),(0xAD),(0xAE),(0xAF);
INSERT INTO t6 VALUES (0xB0),(0xB1),(0xB2),(0xB3),(0xB4),(0xB5),(0xB6),(0xB7);
INSERT INTO t6 VALUES (0xB8),(0xB9),(0xBA),(0xBB),(0xBC),(0xBD),(0xBE),(0xBF);
INSERT INTO t6 VALUES (0xC0),(0xC1),(0xC2),(0xC3),(0xC4),(0xC5),(0xC6),(0xC7);
INSERT INTO t6 VALUES (0xC8),(0xC9),(0xCA),(0xCB),(0xCC),(0xCD),(0xCE),(0xCF);
INSERT INTO t6 VALUES (0xD0),(0xD1),(0xD2),(0xD3),(0xD4),(0xD5),(0xD6),(0xD7);
INSERT INTO t6 VALUES (0xD8),(0xD9),(0xDA),(0xDB),(0xDC),(0xDD),(0xDE),(0xDF);
INSERT INTO t6 VALUES (0xE0),(0xE1),(0xE2),(0xE3),(0xE4),(0xE5),(0xE6),(0xE7);
INSERT INTO t6 VALUES (0xE8),(0xE9),(0xEA),(0xEB),(0xEC),(0xED),(0xEE),(0xEF);
INSERT INTO t6 VALUES (0xF0),(0xF1),(0xF2),(0xF3),(0xF4),(0xF5),(0xF6),(0xF7);
INSERT INTO t6 VALUES (0xF8),(0xF9),(0xFA),(0xFB),(0xFC),(0xFD),(0xFE),(0xFF);
SELECT c1 FROM t5;
#Table to test for ascii character set
set names ascii;
select 'e'='`';
select 'y'='~';
CREATE TABLE t7(a CHAR(1) CHARACTER SET ascii);
# Insert some targeted values for ascii character set; borrowing from ctype_ascii.test in the main suite
insert into t7 (a) values (' '), ('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('g'), ('h'), ('i'), ('j'), ('k'), ('l'), ('m'), ('n'), ('o'), ('p'), ('q'), ('r'), ('s'), ('t'), ('u'), ('v'), ('w'), ('x'), ('y'), ('z'), ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H'), ('I'), ('J'), ('K'), ('L'), ('M'), ('N'), ('O'), ('P'), ('Q'), ('R'), ('S'), ('T'), ('U'), ('V'), ('W'), ('X'), ('Y'), ('Z'), ('!'), ('@'), ('#'), ('$'), ('%'), ('^'), ('&'), ('*'), ('('), (')'), ('_'), ('+'), ('`'), ('~'), ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9'), ('0'), ('['), (']'), ('\\'), ('|'), ('}'), ('{'), ('"'), (':'), (''''), (';'), ('/'), ('.'), (','), ('?'), ('>'), ('<'), ('\n'), ('\t'), ('\a'), ('\f'), ('\v');
SELECT t7a.a, t7b.a FROM t7 as t7a, t7 as t7b WHERE t7a.a=t7b.a ORDER BY BINARY t7a.a, BINARY t7b.a;
UPDATE t7 SET a=CHAR(ASCII(a)+32) WHERE ASCII(a) >= 65 AND ASCII(a) <= 90;
UPDATE t7 SET a=CHAR(ASCII(a)-32) WHERE ASCII(a) >= 97 AND ASCII(a) <= 122;
SELECT a,HEX(a) FROM t7;
#Tests for utf8 character set
CREATE TABLE t8 (a char(10) character set utf8 not null);
INSERT INTO t8 VALUES ('a'),('a\0'),('a\t'),('a ');
SELECT hex(a),STRCMP(a,'a'), STRCMP(a,'a ') FROM t8;
DROP TABLE t8;
CREATE TABLE t8(a VARCHAR(255), KEY(a)) DEFAULT CHARSET=utf8;
eval INSERT INTO t8 VALUES('uUABCDEFGHIGKLMNOPRSTUVWXYZbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
INSERT INTO t8 VALUES('uu');
check table t8;
INSERT INTO t8 VALUES('uU');
check table t8;
INSERT INTO t8 VALUES('uu');
check table t8;
INSERT INTO t8 VALUES('uuABC');
check table t8;
INSERT INTO t8 VALUES('UuABC');
check table t8;
INSERT INTO t8 VALUES('uuABC');
check table t8;
alter table t8 add b int;
INSERT INTO t8 VALUES('BCDEFGHIGKLMNOPRSTUVWXYZbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',1);
INSERT INTO t8 VALUES('uuABCDEFGHIGKLMNOPRSTUVWXYZbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',2);
delete from t8 where b=1;
INSERT INTO t8 VALUES('UUABCDEFGHIGKLMNOPRSTUVWXYZbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',1);
check table t8;
INSERT INTO t8 VALUES('uuABCDEFGHIGKLMNOPRSTUVWXYZbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',3);
INSERT INTO t8 VALUES('uuABCDEFGHIGKLMNOPRSTUVWXYZbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',4);
delete from t8 where b=3;
INSERT INTO t8 VALUES('uUABCDEFGHIGKLMNOPRSTUVWXYZbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',3);
check table t8;
UPDATE t8 SET a=REPEAT('Z',255) WHERE a LIKE 'uu%';
SELECT a,LENGTH(a) FROM t8;
drop table t8;
SET collation_connection = 'utf8_general_ci';
CREATE TABLE t8 (c1 TEXT character set utf8 collate utf8_general_ci);
insert into t8 values (repeat('बांग्लादे',1200));
insert into t8 values ('রবীন্দ্রনাথ ঠাকুর');
insert into t8 values (LOAD_FILE('$MYSQLTEST_VARDIR/hindi.txt'));
ALTER TABLE t8 ADD c2 TEXT CHARACTER SET utf8 collate utf8_general_ci DEFAULT NULL;
INSERT INTO t8 values (repeat('রবীন্দ্রনাথ ঠাকুর',1300),'');
ALTER TABLE t8 ADD INDEX(c1(18));
UPDATE t8 SET c2='यह हिन्दी में एक अलग वाक्य है. यह एक अलग कॉलम में जोड़ा जा रहा है' WHERE c2=NULL;
SELECT length(c1),c1, length(c2),c2 FROM t8;
SELECT length(c1),c1, length(c2),c2 FROM t8 WHERE c1 LIKE _utf8 'রবীন%' COLLATE utf8_general_ci ;
ALTER TABLE t8 ADD INDEX(c1(18),c2(10));
SELECT length(c1),c1, length(c2),c2 FROM t8 WHERE c1 LIKE _utf8 'রবীন%' COLLATE utf8_general_ci OR c2 LIKE _utf8 'जग' COLLATE utf8_general_ci;
UPDATE t8 SET c1= REPEAT('৯',12000);
SELECT length(c1),length(c2) FROM t8;
DROP TABLE t8;
SET collation_connection = default;
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18;

View File

@@ -0,0 +1,145 @@
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18;
--enable_warnings
######## Running UPDATE tests ########
# Generic tables with mixed field types and sizes
CREATE TABLE t1(c1 CHAR(255), c2 TEXT);
eval INSERT INTO t1 VALUES(REPEAT('abcdef',40), REPEAT('1',65535));
eval INSERT INTO t1 VALUES(REPEAT('abc',80), REPEAT('2',65533));
eval INSERT INTO t1 VALUES(REPEAT('\t',255), REPEAT('3',65534));
UPDATE t1 SET c1=REPEAT('\n',255) WHERE c1=REPEAT('\t',255);
--sorted_result
SELECT LENGTH(c1),LENGTH(c2),CHAR_LENGTH(c2) FROM t1;
--sorted_result
SELECT c1, c2 FROM t1 where c1= REPEAT('\n',255);
#--warning 1265
UPDATE t1 SET c1=REPEAT('xyz',85), c2=REPEAT(c1, 100) ORDER by c1 LIMIT 2;
SHOW WARNINGS;
--sorted_result
SELECT LENGTH(c2) FROM t1 WHERE c2 LIKE 'xyz%';
--sorted_result
SELECT LENGTH(c1),LENGTH(c2),CHAR_LENGTH(c2) FROM t1;
--sorted_result
SELECT c1, c2 FROM t1;
--disable_query_log
eval INSERT INTO t1 VALUES(REPEAT('\0',255),LOAD_FILE('$MYSQLTEST_VARDIR/sample.txt'));
--enable_query_log
ALTER TABLE t1 MODIFY c1 TEXT;
UPDATE t1 SET c1=LOAD_FILE('$MYSQLTEST_VARDIR/temp.txt') LIMIT 2;
SHOW WARNINGS;
UPDATE t1 SET c1=NULL WHERE c1 LIKE 'xyz%';
DELETE FROM t1 LIMIT 1;
DELETE FROM t1 WHERE c1 NOT LIKE 'xyz%' LIMIT 1;
--sorted_result
SELECT length(c1), c1, length(c2), c2 FROM t1;
CREATE TABLE t2(c1 BLOB, c2 TINYBLOB, c3 TEXT);
eval INSERT INTO t2 VALUES(REPEAT('1',65535),REPEAT('a',254),REPEAT('d',65534 ));
eval INSERT INTO t2 VALUES(REPEAT('2',65534),REPEAT('b',253),REPEAT('e',65535 ));
eval INSERT INTO t2 VALUES(REPEAT('3',65533),REPEAT('c',255),REPEAT('f',65533));
--sorted_result
SELECT c1,c2 FROM t2;
let $i=100;
while($i){
let $j=100;
while($j){
eval INSERT INTO t2 VALUES('abcde\t \t fgh \n\n ', ' sdsdsd',NULL);
dec $j;
}
dec $i;
}
--sorted_result
SELECT length(c1),c1, length(c2),c2, length(c3), c3 FROM t2;
UPDATE t2 SET c3='Not NULL' WHERE c3=NULL;
--sorted_result
SELECT length(c1),c1, length(c2),c2, length(c3), c3 FROM t2;
# Multi-table updates/deletes
CREATE TABLE t3 (c1 CHAR(10), c2 CHAR(100));
INSERT INTO t3 VALUES ('AS','Axel Soa'), ('AK','Axle Kora'), ('HH','Hulk Hogan');
CREATE TABLE t4 (c1 CHAR(10), c2 CHAR(100));
INSERT INTO t4 VALUES ('AS','#100, Avenue, UK'), ('AK','#101, Avenue, US'), ('HH','#103, Avenu MT');
UPDATE t4 SET c2='#102, Avennue MT' WHERE c1='HH';
--sorted_result
SELECT LENGTH(c1), c1 , LENGTH(c2),c2 FROM t4;
DELETE FROM t3 USING t3,t4 WHERE t3.c1='AS' AND t3.c1=t4.c1 ;
--sorted_result
SELECT length(c1), c1, length(c2), c2 FROM t3;
DROP TABLE t3,t4;
CREATE TABLE t3 (id int(11) NOT NULL default '0',name varchar(10) default NULL,PRIMARY KEY (id)) ;
INSERT INTO t3 VALUES (1, 'aaa'),(2,'aaa'),(3,'aaa');
CREATE TABLE t4 (id int(11) NOT NULL default '0',name varchar(10) default NULL, PRIMARY KEY (id)) ;
INSERT INTO t4 VALUES (2,'bbb'),(3,'bbb'),(4,'bbb');
CREATE TABLE t5 (id int(11) NOT NULL default '0', mydate datetime default NULL,PRIMARY KEY (id));
INSERT INTO t5 VALUES (1,'2002-02-04 00:00:00'),(3,'2002-05-12 00:00:00'),(5,'2002-05-12 00:00:00'),(6,'2002-06-22 00:00:00'),(7,'2002-07-22 00:00:00');
delete t3,t4,t5 from t3,t4,t5 where to_days(now())-to_days(t5.mydate)>=30 and t5.id=t3.id and t5.id=t4.id;
select * from t5;
DROP TABLE t3,t4,t5;
CREATE TABLE t6 (a char(2) not null primary key, b varchar(20) not null, key (b));
CREATE TABLE t7 (a char(2) not null primary key, b varchar(20) not null, key (b));
INSERT INTO t6 values ('AB','MySQLAB'),('JA','Sun Microsystems'),('MS','Microsoft'),('IB','IBM- Inc.'),('GO','Google Inc.');
INSERT INTO t7 values ('AB','Sweden'),('JA','USA'),('MS','United States of Amercica'),('IB','North America'),('GO','South America');
update t6,t7 set t6.a=LCASE(t6.a);
--sorted_result
select * from t6;
update t6,t7 set t6.a=UCASE(t6.a) where t6.a='AB';
--sorted_result
select * from t6;
update t6,t7 set t6.b=UPPER(t6.b) where t6.b LIKE 'United%';
--sorted_result
select * from t7;
update t6,t7 set t6.b=UPPER(t6.b),t7.b=LOWER(t7.b) where LENGTH(t6.b) between 3 and 5 and t7.a=LOWER(t6.a);
--sorted_result
select * from t6;
--sorted_result
select * from t7;
drop table t6,t7;
# Test for some STRING functions on TEXT columns
CREATE TABLE t12(c1 TINYTEXT, c2 TEXT, c3 MEDIUMTEXT, c4 LONGTEXT);
eval INSERT INTO t12 values (" This is a test ","\0 \0 for STRING","functions available \t in", " \t\t MySQL " );
eval UPDATE t12 SET c1="This is a update test!" WHERE c2 LIKE "\0%";
--sorted_result
SELECT LENGTH(c1),LENGTH(c2),LENGTH(c3),LENGTH(c4) FROM t12;
--sorted_result
SELECT LEFT(c1,5),LEFT(c2,5),LEFT(c3,5),LEFT(c4,5) FROM t12;
--sorted_result
SELECT RTRIM(c1),RTRIM(c2),RTRIM(c3),RTRIM(c4) FROM t12;
--sorted_result
SELECT HEX(c1),HEX(c2),HEX(c3),HEX(c4) FROM t12;
--sorted_result
SELECT REVERSE(c1),REVERSE(c2),REVERSE(c3),REVERSE(c4) FROM t12;
DELETE FROM t12 WHERE C1 LIKE "%update%";
--sorted_result
SELECT HEX(c1),HEX(c2),HEX(c3),HEX(c4) FROM t12;
# Test for SET datatype
CREATE TABLE t16 (c1 SET('a', 'b', 'c', 'd', 'e'));
eval INSERT INTO t16 VALUES (('d,a,d,d'));
--sorted_result
SELECT c1 FROM t16;
eval INSERT INTO t16 (c1) VALUES ('a,b,d'),('d,A ,b');
--sorted_result
SELECT c1 FROM t16;
#--warning WARN_DATA_TRUNCATED
eval INSERT INTO t16 (c1) VALUES ('f,a,b');
SHOW WARNINGS;
--sorted_result
SELECT c1 FROM t16;
#--warning ER_DUPLICATED_VALUE_IN_TYPE
CREATE TABLE t17 (c1 SET('a','b','a','b'));
SHOW WARNINGS;
# Tests for ENUM datatype
# Invalid ENUM value insert behavior
CREATE TABLE t18 (c1 CHAR(4),c2 enum('SMALL','MEDIUM','LARGE','VERY LARGE'));
eval INSERT INTO t18 VALUES('SIZE', 'SMALL');
eval INSERT INTO t18 VALUES('SIZE', 'SMALL1');
--sorted_result
SELECT * FROM t18 WHERE c2=0;
EXPLAIN SELECT * FROM t18 WHERE c2=0;
eval SET sql_mode= 'STRICT_ALL_TABLES';
--error 1265
eval INSERT INTO t18 VALUES('SIZE','SMALL2');
--sorted_result
SELECT * FROM t18 WHERE c2=0;
DROP TABLE t17,t18;
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,553 @@
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4;
--enable_warnings
######## Running UPDATE tests for DECIMAL ########
# Create tables
CREATE TABLE t1(c1 DECIMAL(10,5) UNSIGNED NOT NULL, c2 DECIMAL(10,5) SIGNED NULL, c3 DECIMAL, c4 INT, UNIQUE INDEX idx(c1,c4));
# Inserting data into table t1
# Trailing zeroes are not stripped, D=5
INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100119',1),('11111.00009','-9999.99999','9999999',2);
# DECIMAL := DECIMAL(10,0); Decimal values in c3 will be stripped;
INSERT INTO t1 VALUES('1000000','10000000','1000000000.0001',3);
# c1, c2, c3 will be rounded automatically
INSERT INTO t1 values('100.000001','1000.999999','9999.999999',4);
# Inserting maximum values
INSERT INTO t1 VALUES('99999.99999','-99999.99999','9999999999',5);
# Test insert leading zero, +/- signs, overflow handling
INSERT INTO t1 VALUES ("0.0","0.0","0.0",6),("01.0","01.0","01.0",7);
INSERT INTO t1 VALUES ("-.1","-.1","-.1",8);
INSERT INTO t1 VALUES ("+111111111.11","+111111111.11","+111111111.11",9);
# Inserting in scientific notations
INSERT INTO t1 VALUES('1.0e+4','1.0e-5','1.0e+9',10);
#INSERT INTO t1 VALUES('0.9999999999e+4','-.999999999e+4,'0.9999999999e+10',11);
--sorted_result
SELECT * FROM t1;
# UPDATE starts here
# Update order by limit
UPDATE t1 SET c1='10001.00001' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
--sorted_result
SELECT c1,c2 FROM t1;
# Update with arithmetic operations
UPDATE t1 SET c1=c2+c3 WHERE c3 < 10000;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
--sorted_result
SELECT * FROM t1;
# Update with NULL ( NULL to number & number to NULL)
UPDATE t1 SET c2=NULL WHERE c4=4;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c2=1.0e+5 WHERE c2=NULL;
--sorted_result
SELECT * FROM t1;
# Update negative value to unsigned column
UPDATE t1 SET c1=-1.0e+2 WHERE c4=2;
SHOW WARNINGS;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1=1.0e+20 WHERE c4=2;
SHOW WARNINGS;
--sorted_result
SELECT * FROM t1;
# Update range values
UPDATE t1 SET c1=0.9999999999e+5 WHERE c3=1 AND c4=7;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1=1.2e+2,c2=c4+c2 WHERE c3=9999999999 OR c2=1.0e-5;
--sorted_result
SELECT * FROM t1 WHERE c1=1.2e+2;
UPDATE t1 SET c3=1234567890 WHERE c4 IN (4,5,6);
--sorted_result
SELECT * FROM t1;
# Update outside range would be clipped to closest endpoints
UPDATE t1 SET c1=99999.999999 WHERE c4=7;
--sorted_result
SELECT c1,c4 FROM t1;
UPDATE t1 SET c2=-9999.0099 WHERE c4=5;
--sorted_result
SELECT c2,c4 FROM t1;
# Update ignore on bad null error
SELECT c1 FROM t1 WHERE c1>1000;
SET SQL_MODE=STRICT_ALL_TABLES;
--error ER_BAD_NULL_ERROR
UPDATE t1 SET c1=NULL WHERE c1>1000;
UPDATE IGNORE t1 SET c1=NULL WHERE c1>1000;
--sorted_result
SELECT c1 from t1 WHERE c1>1000;
SET SQL_MODE=DEFAULT;
TRUNCATE t1;
INSERT INTO t1 VALUES ('11111.11111','-11111.11111','1111111111',1),('22222.22222','-22222.22222','2222222222',2),('33333.33333','-33333.33333','3333333333',3),('44444.44444','-44444.44444','4444444444',4),('55555.55555','-55555.55555','5555555555',5),('66666.66666','-66666.66666','6666666666',6),('77777.77777','-77777.77777','7777777777',7),('88888.88888','-88888.88888','8888888888',8),('99999.99999','-99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t1;
SELECT c1 FROM t1 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
UPDATE t1 SET c1=c1-100, c2=c1+c2 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
--sorted_result
SELECT * FROM t1;
# Multi table update
CREATE TABLE t2(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT, UNIQUE INDEX idx2(c1,c3));
CREATE TABLE t3(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT, UNIQUE INDEX idx3(c1,c3));
CREATE TABLE t4(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT, UNIQUE INDEX idx4(c1,c3));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
INSERT INTO t4 VALUES ('77777.77777','7777777777',7),('88888.88888','8888888888',8),('99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
UPDATE t1,t2,t3,t4 SET t2.c1=t2.c1+t3.c1, t3.c2=t3.c2-t2.c1, t4.c1=t1.c1*t1.c3 WHERE t1.c2 >'1111111111' AND t4.c2 < '8888888888' ;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t1;
# Update using various access methods
TRUNCATE t2;
TRUNCATE t3;
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
# Update using Const
# EXPLAIN SELECT * FROM t2 WHERE t2.c1='22222.22222' AND t2.c3=2;
UPDATE t2 SET t2.c1='44444.44444', t2.c3=4 WHERE t2.c1='22222.22222' AND t2.c3=2;
--sorted_result
SELECT * FROM t2;
# Update using range
# EXPLAIN SELECT * FROM t2 WHERE c1 BETWEEN '11111' AND '44444';
update t2 set t2.c1='99999.99999' where c1 BETWEEN '11111' AND '44444';
--sorted_result
SELECT * FROM t2;
# EXPLAIN SELECT * FROM t2 WHERE c1 IN ('44444.44444','99999.99999');
UPDATE t2 SET c1=c1-1,c2=c2-1 WHERE c1 IN ('44444.44444','99999.99999');
--sorted_result
SELECT * FROM t2;
# Update using eq_ref
DROP TABLE t2,t3;
CREATE TABLE t2(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT);
CREATE TABLE t3(c1 DECIMAL(10,5) NOT NULL, c2 DECIMAL, c3 INT, UNIQUE INDEX idx3(c1));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('11111.11111','4444444444',1),('55555.55555','5555555555',2),('66666.66666','6666666666',3);
# EXPLAIN SELECT * FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
UPDATE t2,t3 SET t3.c1='22222.22222' WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
#Updating with invalid values
UPDATE t1 SET c3='asdf' WHERE c1='11111.11111';
--sorted_result
SELECT c3 FROM t1;
UPDATE t1 SET c2="1 e 1" WHERE c4=2;
--sorted_result
SELECT c2 FROM t1;
#Duplicate keys
--error ER_DUP_ENTRY
UPDATE t4 SET c1=88888.88888,c3=8 WHERE c3=7;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
# Droping the tables
--disable_warnings
DROP TABLES IF EXISTS t1,t2,t3,t4;
--enable_warnings
######## Running UPDATE tests for FLOAT ########
# Create tables
CREATE TABLE t1(c1 FLOAT(10,5) UNSIGNED NOT NULL, c2 FLOAT(10,5) SIGNED NULL, c3 FLOAT, c4 INT, UNIQUE INDEX idx(c1,c4));
# Inserting data into table t1
# Trailing zeroes are not stripped, D=5
INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100119',1),('11111.00009','-9999.99999','9999999',2);
# DECIMAL := DECIMAL(10,0); Decimal values in c3 will be stripped;
INSERT INTO t1 VALUES('1000000','10000000','1000000000.0001',3);
# c1, c2, c3 will be rounded automatically
INSERT INTO t1 values('100.000001','1000.999999','9999.999999',4);
# Inserting maximum values
INSERT INTO t1 VALUES('99999.99999','-99999.99999','9999999999',5);
# Test insert leading zero, +/- signs, overflow handling
INSERT INTO t1 VALUES ("0.0","0.0","0.0",6),("01.0","01.0","01.0",7);
INSERT INTO t1 VALUES ("-.1","-.1","-.1",8);
INSERT INTO t1 VALUES ("+111111111.11","+111111111.11","+111111111.11",9);
# Inserting in scientific notations
INSERT INTO t1 VALUES('1.0e+4','1.0e-5','1.0e+9',10);
#INSERT INTO t1 VALUES('0.9999999999e+4','-.999999999e+4,'0.9999999999e+10',11);
--sorted_result
SELECT * FROM t1;
# UPDATE starts here
# Update order by limit
UPDATE t1 SET c1='10001.00001' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
--sorted_result
SELECT c1,c2 FROM t1;
# Update with arithmetic operations
UPDATE t1 SET c1=c2+c3 WHERE c3 < 10000;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
--sorted_result
SELECT * FROM t1;
# Update with NULL ( NULL to number & number to NULL)
UPDATE t1 SET c2=NULL WHERE c4=4;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c2=1.0e+5 WHERE c2=NULL;
--sorted_result
SELECT * FROM t1;
# Update negative value to unsigned column
UPDATE t1 SET c1=-1.0e+2 WHERE c4=2;
SHOW WARNINGS;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1=1.0e+20 WHERE c4=2;
SHOW WARNINGS;
--sorted_result
SELECT * FROM t1;
# Update range values
UPDATE t1 SET c1=0.9999999999e+5 WHERE c3=1 AND c4=7;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1=1.2e+2,c2=c4+c2 WHERE c3=9999999999 OR c2=1.0e-5;
--sorted_result
SELECT * FROM t1 WHERE c1=1.2e+2;
UPDATE t1 SET c3=1234567890 WHERE c4 IN (4,5,6);
--sorted_result
SELECT * FROM t1;
# Update outside range would be clipped to closest endpoints
UPDATE t1 SET c1=99999.999999 WHERE c4=7;
--sorted_result
SELECT c1,c4 FROM t1;
UPDATE t1 SET c2=-9999.0099 WHERE c4=5;
--sorted_result
SELECT c2,c4 FROM t1;
# Update ignore on bad null error
SELECT c1 FROM t1 WHERE c1>1000;
SET SQL_MODE=STRICT_ALL_TABLES;
--error ER_BAD_NULL_ERROR
UPDATE t1 SET c1=NULL WHERE c1>1000;
UPDATE IGNORE t1 SET c1=NULL WHERE c1>1000;
--sorted_result
SELECT c1 from t1 WHERE c1>1000;
SET SQL_MODE=DEFAULT;
TRUNCATE t1;
INSERT INTO t1 VALUES ('11111.11111','-11111.11111','1111111111',1),('22222.22222','-22222.22222','2222222222',2),('33333.33333','-33333.33333','3333333333',3),('44444.44444','-44444.44444','4444444444',4),('55555.55555','-55555.55555','5555555555',5),('66666.66666','-66666.66666','6666666666',6),('77777.77777','-77777.77777','7777777777',7),('88888.88888','-88888.88888','8888888888',8),('99999.99999','-99999.99999','9999999999',9);
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
SELECT c1 FROM t1 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
UPDATE t1 SET c1=c1-100, c2=c1+c2 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
# Multi table update
CREATE TABLE t2(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT, UNIQUE INDEX idx2(c1,c3));
CREATE TABLE t3(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT, UNIQUE INDEX idx3(c1,c3));
CREATE TABLE t4(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT, UNIQUE INDEX idx4(c1,c3));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
INSERT INTO t4 VALUES ('77777.77777','7777777777',7),('88888.88888','8888888888',8),('99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t4;
UPDATE t1,t2,t3,t4 SET t2.c1=t2.c1+t3.c1, t3.c2=t3.c2-t2.c1, t4.c1=t1.c1*t1.c3 WHERE t1.c2 >'1111111111' AND t4.c2 < '8888888888' ;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
# Update using various access methods
TRUNCATE t2;
TRUNCATE t3;
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
# Update using Const
# EXPLAIN SELECT * FROM t2 WHERE t2.c1='22222.22222' AND t2.c3=2;
UPDATE t2 SET t2.c1='44444.44444', t2.c3=4 WHERE t2.c1='22222.22222' AND t2.c3=2;
--sorted_result
SELECT * FROM t2;
# Update using range
# EXPLAIN SELECT * FROM t2 WHERE c1 BETWEEN '11111' AND '44444';
update t2 set t2.c1='99999.99999' where c1 BETWEEN '11111' AND '44444';
--sorted_result
SELECT * FROM t2;
# EXPLAIN SELECT * FROM t2 WHERE c1 IN ('44444.44444','99999.99999');
UPDATE t2 SET c1=c1-1,c2=c2-1 WHERE c1 IN ('44444.44444','99999.99999');
--sorted_result
SELECT * FROM t2;
# Update using eq_ref
DROP TABLE t2,t3;
CREATE TABLE t2(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT);
CREATE TABLE t3(c1 FLOAT(10,5) NOT NULL, c2 FLOAT, c3 INT, UNIQUE INDEX idx3(c1));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('11111.11111','4444444444',1),('55555.55555','5555555555',2),('66666.66666','6666666666',3);
# EXPLAIN SELECT * FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
UPDATE t2,t3 SET t3.c1='22222.22222' WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
#Updating with invalid values
UPDATE t1 SET c3='asdf' WHERE c1='11111.11111';
--sorted_result
SELECT c3 FROM t1;
UPDATE t1 SET c2="1 e 1" WHERE c4=2;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT c2 FROM t1;
#Duplicate keys
--replace_result 88888.89063 88888.89062
--error ER_DUP_ENTRY
UPDATE t4 SET c1=88888.88888,c3=8 WHERE c3=7;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--replace_result 88888.89063 88888.89062
--sorted_result
SELECT * FROM t4;
# Droping the tables
--disable_warnings
DROP TABLES IF EXISTS t1,t2,t3,t4;
--enable_warnings
######## Running UPDATE tests for DOUBLE ########
# Create tables
CREATE TABLE t1(c1 DOUBLE(10,5) UNSIGNED NOT NULL, c2 DOUBLE(10,5) SIGNED NULL, c3 DOUBLE, c4 INT, UNIQUE INDEX idx(c1,c4));
# Inserting data into table t1
# Trailing zeroes are not stripped, D=5
INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100119',1),('11111.00009','-9999.99999','9999999',2);
# DECIMAL := DECIMAL(10,0); Decimal values in c3 will be stripped;
INSERT INTO t1 VALUES('1000000','10000000','1000000000.0001',3);
# c1, c2, c3 will be rounded automatically
INSERT INTO t1 values('100.000001','1000.999999','9999.999999',4);
# Inserting maximum values
INSERT INTO t1 VALUES('99999.99999','-99999.99999','9999999999',5);
# Test insert leading zero, +/- signs, overflow handling
INSERT INTO t1 VALUES ("0.0","0.0","0.0",6),("01.0","01.0","01.0",7);
INSERT INTO t1 VALUES ("-.1","-.1","-.1",8);
INSERT INTO t1 VALUES ("+111111111.11","+111111111.11","+111111111.11",9);
# Inserting in scientific notations
INSERT INTO t1 VALUES('1.0e+4','1.0e-5','1.0e+9',10);
#INSERT INTO t1 VALUES('0.9999999999e+4','-.999999999e+4,'0.9999999999e+10',11);
--sorted_result
SELECT * FROM t1;
# UPDATE starts here
# Update order by limit
UPDATE t1 SET c1='10001.00001' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
--sorted_result
SELECT c1,c2 FROM t1;
# Update with arithmetic operations
UPDATE t1 SET c1=c2+c3 WHERE c3 < 10000;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
--sorted_result
SELECT * FROM t1;
# Update with NULL ( NULL to number & number to NULL)
UPDATE t1 SET c2=NULL WHERE c4=4;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c2=1.0e+5 WHERE c2=NULL;
--sorted_result
SELECT * FROM t1;
# Update negative value to unsigned column
UPDATE t1 SET c1=-1.0e+2 WHERE c4=2;
SHOW WARNINGS;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1=1.0e+20 WHERE c4=2;
SHOW WARNINGS;
--sorted_result
SELECT * FROM t1;
# Update range values
UPDATE t1 SET c1=0.9999999999e+5 WHERE c3=1 AND c4=7;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1=1.2e+2,c2=c4+c2 WHERE c3=9999999999 OR c2=1.0e-5;
--sorted_result
SELECT * FROM t1 WHERE c1=1.2e+2;
UPDATE t1 SET c3=1234567890 WHERE c4 IN (4,5,6);
--sorted_result
SELECT * FROM t1;
# Update outside range would be clipped to closest endpoints
UPDATE t1 SET c1=99999.999999 WHERE c4=7;
--sorted_result
SELECT c1,c4 FROM t1;
UPDATE t1 SET c2=-9999.0099 WHERE c4=5;
--sorted_result
SELECT c2,c4 FROM t1;
# Update ignore on bad null error
SELECT c1 FROM t1 WHERE c1>1000;
SET SQL_MODE=STRICT_ALL_TABLES;
--error ER_BAD_NULL_ERROR
UPDATE t1 SET c1=NULL WHERE c1>1000;
UPDATE IGNORE t1 SET c1=NULL WHERE c1>1000;
--sorted_result
SELECT c1 from t1 WHERE c1>1000;
SET SQL_MODE=DEFAULT;
TRUNCATE t1;
INSERT INTO t1 VALUES ('11111.11111','-11111.11111','1111111111',1),('22222.22222','-22222.22222','2222222222',2),('33333.33333','-33333.33333','3333333333',3),('44444.44444','-44444.44444','4444444444',4),('55555.55555','-55555.55555','5555555555',5),('66666.66666','-66666.66666','6666666666',6),('77777.77777','-77777.77777','7777777777',7),('88888.88888','-88888.88888','8888888888',8),('99999.99999','-99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t1;
SELECT c1 FROM t1 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
UPDATE t1 SET c1=c1-100, c2=c1+c2 WHERE c1>='22222.22222' AND c1<='55555.55555' ORDER BY c1;
--sorted_result
SELECT * FROM t1;
# Multi table update
CREATE TABLE t2(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT, UNIQUE INDEX idx2(c1,c3));
CREATE TABLE t3(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT, UNIQUE INDEX idx3(c1,c3));
CREATE TABLE t4(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT, UNIQUE INDEX idx4(c1,c3));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
INSERT INTO t4 VALUES ('77777.77777','7777777777',7),('88888.88888','8888888888',8),('99999.99999','9999999999',9);
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
UPDATE t1,t2,t3,t4 SET t2.c1=t2.c1+t3.c1, t3.c2=t3.c2-t2.c1, t4.c1=t1.c1*t1.c3 WHERE t1.c2 >'1111111111' AND t4.c2 < '8888888888' ;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t1;
# Update using various access methods
TRUNCATE t2;
TRUNCATE t3;
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('44444.44444','4444444444',4),('55555.55555','5555555555',5),('66666.66666','6666666666',6);
# Update using Const
# EXPLAIN SELECT * FROM t2 WHERE t2.c1='22222.22222' AND t2.c3=2;
UPDATE t2 SET t2.c1='44444.44444', t2.c3=4 WHERE t2.c1='22222.22222' AND t2.c3=2;
--sorted_result
SELECT * FROM t2;
# Update using range
# EXPLAIN SELECT * FROM t2 WHERE c1 BETWEEN '11111' AND '44444';
update t2 set t2.c1='99999.99999' where c1 BETWEEN '11111' AND '44444';
--sorted_result
SELECT * FROM t2;
# EXPLAIN SELECT * FROM t2 WHERE c1 IN ('44444.44444','99999.99999');
UPDATE t2 SET c1=c1-1,c2=c2-1 WHERE c1 IN ('44444.44444','99999.99999');
--sorted_result
SELECT * FROM t2;
# Update using eq_ref
DROP TABLE t2,t3;
CREATE TABLE t2(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT);
CREATE TABLE t3(c1 DOUBLE(10,5) NOT NULL, c2 DOUBLE, c3 INT, UNIQUE INDEX idx3(c1));
INSERT INTO t2 VALUES ('11111.11111','1111111111',1),('22222.22222','2222222222',2),('33333.33333','3333333333',3);
INSERT INTO t3 VALUES ('11111.11111','4444444444',1),('55555.55555','5555555555',2),('66666.66666','6666666666',3);
# EXPLAIN SELECT * FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
UPDATE t2,t3 SET t3.c1='22222.22222' WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
#Updating with invalid values
UPDATE t1 SET c3='asdf' WHERE c1='11111.11111';
--sorted_result
SELECT c3 FROM t1;
UPDATE t1 SET c2="1 e 1" WHERE c4=2;
--sorted_result
SELECT c2 FROM t1;
#Duplicate keys
--error ER_DUP_ENTRY
UPDATE t4 SET c1=88888.88888,c3=8 WHERE c3=7;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
# Droping the tables
--disable_warnings
DROP TABLES IF EXISTS t1,t2,t3,t4;
--enable_warnings

View File

@@ -0,0 +1,763 @@
--disable_warnings
DROP TABLE IF EXISTS t1,t2;
--enable_warnings
######## Running UPDATE tests for DATE ########
# Create tables
CREATE TABLE t1(c1 DATE NOT NULL PRIMARY KEY, c2 DATE NULL, c3 INT, INDEX idx2(c2));
# Insert into table
INSERT INTO t1 VALUE('1998-01-01','10-01-01',1),('2001-01-01','70-01-01',2),('2001-01-03','2001-01-04 09:34:00',3);
--sorted_result
SELECT * FROM t1;
# Update year,month,day,4 digit year date type to 2 digit and vice-versa
UPDATE t1 SET c1='69-02-02' WHERE c2='10-01-01';
SELECT year(c1),month(c1),day(c1),year(c2) FROM t1 WHERE c2='10-01-01';
UPDATE t1 SET c1='1969-02-02',c2='1910-02-02' WHERE c2='10-01-01';
SELECT * FROM t1 WHERE c1='1969-02-02' AND c2='1910-02-02';
UPDATE t1 SET c1='01-02-02',c2='2070-02-02' WHERE c2='70-01-01';
SELECT year(c1),c2 FROM t1 WHERE c1='01-02-02' AND c2='2070-02-02';
# Update with time values
UPDATE t1 SET c1='2001-01-03 08:30:00',c2='2001-01-05' WHERE c2='2001-01-04';
SELECT c1,hour(c1),minute(c1),second(c1) FROM t1 WHERE c2='2001-01-05';
# Update with function
INSERT INTO t1 VALUES('2009-02-25','09-02-27',4);
SET TIMESTAMP=1235553613; #'2009-02-25'
UPDATE t1 SET c2=NOW() WHERE c1 >=CURDATE();
UPDATE t1 SET c1=DATE_ADD(CURDATE(),INTERVAL '1 1:1:1' DAY_SECOND) WHERE c2=CURDATE();
--sorted_result
SELECT * FROM t1;
# Update with Null, null to valid date
INSERT INTO t1 VALUES('2001-01-06','2001-01-07',5),('2001-01-08',NULL,6);
UPDATE t1 SET c2=NULL WHERE c1='2001-01-06';
--sorted_result
SELECT * FROM t1 WHERE c2 IS NULL;
UPDATE t1 SET c2='2001-01-10' WHERE c2 IS NULL;
--sorted_result
SELECT * FROM t1 WHERE c2='2001-01-10';
# Update with invalid dates, converts to zero dates, ALLOW_INVALID_DATES allows
INSERT INTO t1 VALUES('2001-01-11','2001-01-11',7),('2001-01-12','2001-01-12',8),('2001-01-13','2001-01-13',9),('2001-01-14','2001-01-14',10),('2001-01-15','2001-01-15',11),('2001-01-16','2001-01-16',12);
UPDATE t1 SET c1='10:45:15',c2='2009-01-32' WHERE c1='2001-01-11';
UPDATE t1 SET c2='2009-02-30' WHERE c2='2001-01-12';
UPDATE t1 SET c2='2009-04-31' WHERE c2='2001-01-13';
UPDATE t1 SET c2='2009-06-31' WHERE c2='2001-01-14';
UPDATE t1 SET c2='2009-09-31' WHERE c2='2001-01-15';
SELECT count(*) FROM t1 WHERE c2='10:45:15' OR c2='2009-01-32' OR c2='2009-02-30' OR c2='2009-04-31' OR c2='2009-06-31' OR c2='2009-09-31' /* returns 0 */;
UPDATE t1 SET c2='2009-11-31' WHERE c2='2001-01-16';
--sorted_result
SELECT * FROM t1 WHERE c2='0000-00-00';
SET SQL_MODE=ALLOW_INVALID_DATES;
INSERT INTO t1 VALUES('2001-01-27','2001-01-28',19);
UPDATE t1 SET c1='2009-04-31',c2='2009-02-30' WHERE c3=19;
SELECT c1,c2,day(c1),day(c2) FROM t1 WHERE c3=19;
SET SQL_MODE=DEFAULT;
# Update with zero dates, zero dates to valid dates
INSERT INTO t1 VALUES('2001-01-17','0000-00-00',13),('2001-01-18','2001-01-18',14);
SET SQL_MODE=TRADITIONAL;
SELECT * FROM t1 WHERE c2='0000-00-00';
--error ER_TRUNCATED_WRONG_VALUE
UPDATE t1 SET c2='0000-00-00' WHERE c2='2001-01-18';
SET SQL_MODE=DEFAULT;
UPDATE t1 SET c2='0000-00-00' WHERE c2='2001-01-18';
UPDATE t1 SET c2='2001-01-18' WHERE c2='0000-00-00' AND c1='2001-01-17';
--sorted_result
SELECT * FROM t1 WHERE c1='0000-00-00' OR c2='0000-00-00';
# Update with valid dates with zero in month/day
INSERT INTO t1 VALUES('2001-01-19','2001-01-20',15);
UPDATE t1 SET c1='2010-00-01',c2='2010-10-00' WHERE c3=15;
SELECT *,month(c1),day(c2) from t1 WHERE c3=15;
# Update with range values
INSERT INTO t1 VALUES('2001-01-21','2001-01-22',16);
UPDATE t1 SET c1='1000-01-01',c2='9999-12-31' WHERE c1='2001-01-21';
SELECT * FROM t1 WHERE c1='1000-01-01' AND c2='9999-12-31';
# Update ignore on bad null/duplicate key
INSERT INTO t1 VALUES('2001-01-23','2001-01-24',17),('2001-01-25','2001-01-26',18);
--error ER_DUP_ENTRY
UPDATE t1 SET c1='2001-01-23' WHERE c1='2001-01-25';
UPDATE IGNORE t1 SET c1='2001-01-23' WHERE c1='2001-01-25';
SELECT count(*) FROM t1 WHERE c1='2001-01-23';
--error ER_DUP_ENTRY
UPDATE t1 SET c1=NULL WHERE c2='2001-01-24' /* updates to 0000-00-00 */;
UPDATE IGNORE t1 SET c1=NULL WHERE c2='2001-01-24';
--sorted_result
SELECT * FROM t1 WHERE c1='0000-00-00';
# Multi table update
TRUNCATE TABLE t1;
CREATE TABLE t2(c1 DATE NOT NULL PRIMARY KEY, c2 DATE, c3 INT);
# eq-ref join
INSERT INTO t1 VALUES('2001-01-02','2001-01-01',1),('2001-01-03','2001-01-02',2);
INSERT INTO t2 VALUES('2001-01-02','2001-01-03',1),('2001-01-04','2001-01-05',2);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c1;
UPDATE t1,t2 SET t2.c1='2005-01-06',t1.c1='2005-01-06' WHERE t2.c1=t1.c1;
SELECT * FROM t1,t2 WHERE t2.c1=t1.c1;
INSERT INTO t1 VALUES('2002-01-01','2002-01-02',3),('2002-01-04','2002-01-02',4);
INSERT INTO t2 VALUES('2002-01-02','2002-01-03',3),('2002-01-03','2002-01-04',4);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
UPDATE t1,t2 SET t2.c1='2002-01-06',t1.c2='2002-01-06' WHERE t2.c1=t1.c2;
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1='2002-01-06' AND t1.c2='2002-01-06';
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DELETE FROM t1 WHERE c2='2002-01-06' AND c3=3;
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DROP TABLE t2;
# Update with other access methods, ORDER BY LIMIT
TRUNCATE TABLE t1;
ALTER TABLE t1 CHANGE c1 c1 DATE NOT NULL, DROP PRIMARY KEY;
ALTER TABLE t1 CHANGE c1 c1 DATE NOT NULL, ADD KEY(c1);
# ref access
UPDATE t1 SET c1='2002-01-07' WHERE c2='2002-01-05';
SELECT * FROM t1 WHERE c1='2002-01-07';
# range access
INSERT INTO t1 VALUES('2002-01-08','2002-01-09',4),('2002-01-10','2002-01-11',5),('2002-01-12','2002-01-13',6),('2002-01-14','2002-01-15',7),('2002-01-16','2002-01-17',8),('2002-01-18','2002-01-19',9),('2002-01-20','2002-01-21',10),('2002-01-22','2002-01-23',11),('2002-01-24','2002-01-25',12),('2002-01-26','2002-01-27',13),('2002-01-28','2002-01-29',14),('2002-01-30','2002-01-31',15),('2002-02-01','2002-02-02',16),('2002-02-03','2002-02-04',17),('2002-02-05','2002-02-06',18),('2002-02-07','2002-02-08',19),('2002-02-09','2002-02-10',20);
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1='2003-01-01' WHERE c2 <> '2002-01-09' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <> '2002-01-09' ORDER BY c2;
UPDATE t1 SET c1='2003-01-01' WHERE c2 >= '2002-01-13' ORDER BY c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '2002-01-13' ORDER BY c2 DESC;
UPDATE t1 SET c1='2003-01-01' WHERE c2 <='2002-01-21' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <='2002-01-21' ORDER BY c2;
UPDATE t1 SET c1='2003-01-01' WHERE c2 <=> '2002-01-23' ORDER BY c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 <=> '2002-01-23' ORDER BY c2 DESC;
UPDATE t1 SET c1='2003-01-01' WHERE c2 BETWEEN '2002-01-25' AND '2002-01-29' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 BETWEEN '2002-01-25' AND '2002-01-29' ORDER BY c2;
UPDATE t1 SET c1='2003-01-01' WHERE c2 IN('2002-01-29','2002-01-31') ORDER BY c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IN('2002-01-29','2002-01-31') ORDER BY c2 DESC;
UPDATE t1 SET c1='2003-01-01' WHERE c2 IS NULL ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2;
UPDATE t1 SET c1='2003-01-01' WHERE c2>= '2002-02-06' AND c1 < '2002-02-09' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2>= '2002-02-06' AND c1 < '2002-02-09' ORDER BY c2;
INSERT INTO t1 VALUES('2002-03-01','2002-03-01',1),('2002-03-03','2002-03-04',2),('2002-03-05','2002-03-06',3),('2005-01-01','2005-01-02',4),('2005-01-03','2005-01-04',5),('2005-01-05','2005-01-06',6),('2005-01-07','2005-01-08',7),('2005-01-09',NULL,8);
# Select using various access methods
## Full table scan
--sorted_result
SELECT * FROM t1;
## Forward index scan, covering ##
--sorted_result
SELECT c1 FROM t1;
## Backward index scan, covering ##
SELECT c1 FROM t1 ORDER BY c1 DESC;
# ref access
--sorted_result
SELECT * FROM t1 WHERE c1='2003-01-01';
## Range access ##
SELECT * FROM t1 WHERE c1 <> '2003-01-01' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <> '2003-01-01' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 > '2003-01-01' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 >= '2003-01-01' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 < '2003-01-01' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <= '2003-01-01' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <=> '2003-01-01' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '2003-01-01' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 BETWEEN '2002-03-01' AND '2003-01-01' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '2002-03-01' AND '2003-01-01' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IN('2003-01-01','2005-01-07') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN('2003-01-01','2005-01-07') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1 DESC;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1;
SELECT * FROM t1 WHERE c1>='2003-01-01' AND c1 <= '2005-01-07' ORDER BY c2,c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1>='2003-01-01' AND c1 <= '2005-01-07' ORDER BY c2,c1;
# Index-merge access
SELECT * FROM t1 WHERE c1='2003-01-03' OR c2='2002-03-06';
UPDATE t1 SET c1='2006-01-01' WHERE c1='2003-01-03' OR c2='2002-03-06';
--sorted_result
SELECT * FROM t1 WHERE c1='2006-01-01' OR c2='2002-03-04';
# Testing delete using various access methods
TRUNCATE TABLE t1;
ALTER TABLE t1 CHANGE c1 c1 DATE NOT NULL, ADD PRIMARY KEY(c1);
INSERT INTO t1 VALUES(NOW(),NOW(),3),(ADDTIME(NOW(),'1 01:01:01'),ADDTIME(NOW(),'1 01:01:01'),4),(ADDTIME(NOW(),'2 01:01:01'),ADDTIME(NOW(),'2 01:01:01'),5),(ADDTIME(NOW(),'3 01:01:01'),ADDTIME(NOW(),'3 01:01:01'),6);
INSERT INTO t1 VALUES('1000-01-01','1000-01-01',1),('9999-12-31','9999-12-31',2);
SELECT * FROM t1 WHERE c1 <='1000-01-01';
DELETE FROM t1 WHERE c1 <='1000-01-01';
SELECT * FROM t1 WHERE c1 <='1000-01-01';
SELECT * FROM t1 WHERE c1 >='9999-12-31';
DELETE FROM t1 WHERE c1 >='9999-12-31';
SELECT * FROM t1 WHERE c1 >='9999-12-31';
SELECT * FROM t1 WHERE c1 > ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 > ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <> CURDATE() ORDER BY c1;
DELETE FROM t1 WHERE c1 <> CURDATE() ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1 <> CURDATE() ORDER BY c1;
INSERT INTO t1 VALUES('2001-01-01',NOW(),7),(ADDTIME(NOW(),'1 01:01:01'),ADDTIME(NOW(),'1 01:01:01'),8),(ADDTIME(NOW(),'2 01:01:01'),ADDTIME(NOW(),'2 01:01:01'),9),(ADDTIME(NOW(),'3 01:01:01'),ADDTIME(NOW(),'3 01:01:01'),10);
SELECT * FROM t1 WHERE c1 < ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
DELETE FROM t1 WHERE c1 < ADDTIME(NOW(),'2 01:01:01') ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1 < ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <=> ADDDATE(CURDATE(),'1 01:01:01') ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 <=> ADDDATE(CURDATE(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <=> ADDDATE(CURDATE(),'1 01:01:01') ORDER BY c1 DESC;
INSERT INTO t1 VALUES('2001-01-01',NOW(),11),(ADDTIME(NOW(),'1 01:01:01'),ADDTIME(NOW(),'1 01:01:01'),12),(ADDTIME(NOW(),'4 01:01:01'),NULL,13),(ADDTIME(NOW(),'5 01:01:01'),NULL,14);
SELECT * FROM t1 WHERE c1 BETWEEN CURDATE() AND ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
DELETE FROM t1 WHERE c1 BETWEEN CURDATE() AND ADDTIME(NOW(),'2 01:01:01') ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN CURDATE() AND ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
SELECT * FROM t1 WHERE c1 IN(CURDATE(),ADDDATE(CURDATE(),'3 01:01:01')) ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 IN(CURDATE(),ADDDATE(CURDATE(),'3 01:01:01')) ORDER BY c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN(CURDATE(),ADDDATE(CURDATE(),'3 01:01:01')) ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1;
DELETE FROM t1 WHERE c2 IS NULL ORDER BY c2,c1 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1;
INSERT INTO t1 VALUES(ADDTIME(NOW(),'6 01:01:01'),ADDTIME(NOW(),'6 01:01:01'),15),(ADDTIME(NOW(),'7 01:01:01'),NULL,16),(ADDTIME(NOW(),'8 01:01:01'),ADDTIME(NOW(),'8 01:01:01'),17),(ADDTIME(NOW(),'9 01:01:01'),ADDTIME(NOW(),'9 01:01:01'),18),(ADDTIME(NOW(),'10 01:01:01'),ADDTIME(NOW(),'10 01:01:01'),19);
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC;
DELETE FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC;
SELECT * FROM t1 WHERE c1>=ADDTIME(NOW(),'5 01:01:01') AND c2 < ADDTIME(NOW(),'8 01:01:01') ORDER BY c1;
DELETE FROM t1 WHERE c1>=ADDTIME(NOW(),'5 01:01:01') AND c2 < ADDTIME(NOW(),'8 01:01:01') ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1>=ADDTIME(NOW(),'5 01:01:01') AND c2 < ADDTIME(NOW(),'8 01:01:01') ORDER BY c1;
--sorted_result
SELECT * FROM t1 WHERE c1=ADDDATE(CURDATE(),'9 01:01:01') OR c2=ADDDATE(CURDATE(),'10 01:01:01');
DELETE FROM t1 WHERE c1=ADDDATE(CURDATE(),'9 01:01:01') OR c2=ADDDATE(CURDATE(),'10 01:01:01');
# Disable warnings due to #43763
--disable_warnings
--sorted_result
SELECT * FROM t1 WHERE c1=ADDDATE(CURDATE(),'9 01:01:01') OR c2=ADDDATE(CURDATE(),'10 01:01:01');
--enable_warnings
SELECT count(*) FROM t1;
TRUNCATE TABLE t1;
SELECT count(*) FROM t1;
# Multi-table delete
# eq-ref join
CREATE TABLE t2(c1 DATE NOT NULL PRIMARY KEY, c2 DATE, c3 INT);
INSERT INTO t1 VALUES('2001-01-02','2001-01-01',1),('2001-01-03','2001-01-02',2);
INSERT INTO t2 VALUES('2001-01-02','2001-01-03',1),('2001-01-04','2001-01-05',2);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c1;
DELETE t1,t2 FROM t1,t2 WHERE t2.c1=t1.c1;
SELECT * FROM t1,t2 WHERE t2.c1=t1.c1;
TRUNCATE TABLE t1;
TRUNCATE TABLE t2;
INSERT INTO t1 VALUES('2001-01-01','2001-01-02',1),('2001-01-03','2001-01-02',2);
INSERT INTO t2 VALUES('2001-01-02','2001-01-03',1),('2001-01-04','2001-01-05',2);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2 WHERE a2.c1=a1.c2;
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DROP TABLE t1,t2;
######## Running UPDATE tests for DATETIME ########
# Create tables
CREATE TABLE t1(c1 DATETIME NOT NULL PRIMARY KEY, c2 DATETIME NULL, c3 INT, INDEX idx2(c2));
# Update date values to datetime field
INSERT INTO t1 VALUE('1998-01-01 09:23:45','10-01-01 14:12:33',1);
UPDATE t1 SET c1='2001-01-01' WHERE c2='10-01-01 14:12:33';
SELECT c1,hour(c1),minute(c1),second(c1) FROM t1 WHERE c2='10-01-01 14:12:33';
# Update with single digit hour, minute, second,fraction part to time
INSERT INTO t1 VALUES('2009-01-01 08:42:42','2009-01-02 23:59:59',2);
UPDATE t1 SET c1='2009-01-01 1:2:3',c2='2009-01-02 23:59:59.999999' WHERE c2='2009-01-02 23:59:59';
SELECT c1,ADDTIME(c2,'1 1:1:1.000002') FROM t1 WHERE c3=2;
# Update with function
INSERT INTO t1 VALUES('2009-02-25 15:45','09-02-27 15:46',3);
SET TIMESTAMP=1235553613; #'2009-02-25'
UPDATE t1 SET c2=NOW() WHERE c1 >=CURDATE();
UPDATE t1 SET c1=DATE_ADD(CURDATE(),INTERVAL '1 1:1:1' DAY_SECOND) WHERE c2=CURRENT_TIMESTAMP();
--sorted_result
SELECT * FROM t1;
# Update with Null, null to valid date
INSERT INTO t1 VALUES('2001-01-06','2001-01-07 09:30:00',4),('2001-01-08',NULL,5);
--sorted_result
SELECT * FROM t1 WHERE c2 IS NULL;
UPDATE t1 SET c2=NULL WHERE c1='2001-01-06 00:00:00';
--sorted_result
SELECT * FROM t1 WHERE c2 IS NULL;
UPDATE t1 SET c2='2001-01-10 00:00:00' WHERE c2 IS NULL;
--sorted_result
SELECT * FROM t1 WHERE c2='2001-01-10';
# Update with invalid datetimes, converts to zero datetime
INSERT INTO t1 VALUES('2001-01-09','2001-01-10',6),('2001-01-11','2001-01-12',7);
UPDATE t1 SET c1='2001-01-09 24:59:59',c2='2009-01-10 23:60:59' WHERE c1='2001-01-09';
UPDATE t1 SET c2='2001-01-11 23:59:60' WHERE c1='2001-01-11';
SELECT count(*) FROM t1 WHERE c1='2001-01-09 24:59:59' AND c2='2009-01-10 23:60:59';
# Bug#52283 : Remove the following --disable_warnings
# command when the bug is fixed
--disable_warnings
SELECT count(*) FROM t1 WHERE c2='2001-01-11 23:59:60' /* returns 0 */;
--enable_warnings
--sorted_result
SELECT * FROM t1 WHERE c1='0000-00-00 00:00:00' OR c2='0000-00-00 00:00:00';
# Update with zero datetimes, zero datetimes to valid datetimes
INSERT INTO t1 VALUES('2001-01-17','0000-00-00 00:00:00',8),('2001-01-18','2001-01-18 07:35',9);
SET SQL_MODE=TRADITIONAL;
SELECT * FROM t1 WHERE c2='0000-00-00 00:00:00';
--error ER_TRUNCATED_WRONG_VALUE
UPDATE t1 SET c2='0000-00-00 00:00:00' WHERE c2='2001-01-18 07:35';
SET SQL_MODE=DEFAULT;
UPDATE t1 SET c2='0000-00-00 00:00:00' WHERE c2='2001-01-18 07:35';
UPDATE t1 SET c2='2001-01-17 12:34:00' WHERE c2='0000-00-00 00:00:00' AND c1='2001-01-17';
--sorted_result
SELECT * FROM t1 WHERE c1='0000-00-00 00:00:00' OR c2='0000-00-00 00:00:00';
--sorted_result
SELECT * FROM t1 WHERE c2='2001-01-17 12:34:00';
# Update with range values
INSERT INTO t1 VALUES('2001-01-21 05:43:43','2001-01-22 06:53:53',10);
UPDATE t1 SET c1='1000-01-01 00:00:00',c2='9999-12-31 23:59:59' WHERE c1='2001-01-21 05:43:43';
SELECT * FROM t1 WHERE c1='1000-01-01 00:00:00' AND c2='9999-12-31 23:59:59';
# Update ignore on bad null/duplicate key
INSERT INTO t1 VALUES('2001-01-23 02:33','2001-01-24 03:33',11),('2001-01-25 04:33','2001-01-26 05:33',12);
--error ER_DUP_ENTRY
UPDATE t1 SET c1='2001-01-23 02:33' WHERE c1='2001-01-25 04:33';
UPDATE IGNORE t1 SET c1='2001-01-23 02:33' WHERE c1='2001-01-25 04:33';
SELECT count(*) FROM t1 WHERE c1='2001-01-23 02:33';
--error ER_DUP_ENTRY
UPDATE t1 SET c1=NULL WHERE c2='2001-01-24 03:33' /* updates to 0000-00-00 00:00:00 */;
UPDATE IGNORE t1 SET c1=NULL WHERE c2='2001-01-24 03:33';
--sorted_result
SELECT * FROM t1 WHERE c1='0000-00-00 00:00:00';
# Multi table update
TRUNCATE TABLE t1;
CREATE TABLE t2(c1 DATETIME NOT NULL PRIMARY KEY, c2 DATETIME, c3 INT);
# eq-ref join
INSERT INTO t1 VALUES('2001-01-02 2:30:45','2001-01-01 1:30',1),('2001-01-03 3:30','2001-01-02 2:30:45',2);
INSERT INTO t2 VALUES('2001-01-02 2:30:45','2001-01-03 3:30',1),('2001-01-04 4:30','2001-01-05 5:30',2);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c1;
UPDATE t1,t2 SET t2.c1='2005-01-06 2:30:50',t1.c1='2005-01-06 2:30:50' WHERE t2.c1=t1.c1;
SELECT * FROM t1,t2 WHERE t2.c1=t1.c1;
INSERT INTO t1 VALUES('2002-01-01 3:30','2002-01-02 2:30:45',3),('2002-01-04 4:30','2002-01-02 2:30:45',4);
INSERT INTO t2 VALUES('2002-01-02 2:30:45','2002-01-03 3:30',3),('2002-01-03 3:30','2002-01-04 4:30',4);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
UPDATE t1,t2 SET t2.c1='2002-01-06 2:30:50',t1.c2='2002-01-06 2:30:50' WHERE t2.c1=t1.c2;
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1='2002-01-06 2:30:50' AND t1.c2='2002-01-06 2:30:50';
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DELETE FROM t1 WHERE c2='2002-01-06 2:30:50' AND c3=3;
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DROP TABLE t2;
# Update with other access methods, ORDER BY LIMIT
TRUNCATE TABLE t1;
ALTER TABLE t1 CHANGE c1 c1 DATETIME NOT NULL, DROP PRIMARY KEY;
ALTER TABLE t1 CHANGE c1 c1 DATETIME NOT NULL, ADD KEY(c1);
# ref access
UPDATE t1 SET c1='2002-01-07 7:30' WHERE c2='2002-01-05 5:30';
SELECT * FROM t1 WHERE c1='2002-01-07 7:30';
# range access, MRR
INSERT INTO t1 VALUES('2002-01-08 1:30','2002-01-09 1:30',4),('2002-01-08 1:30:5','2002-01-09 1:30:5',5),('2002-01-08 1:30:10','2002-01-09 1:30:10',6),('2002-01-08 1:30:15','2002-01-09 1:30:15',7),('2002-01-08 1:30:20','2002-01-09 1:30:20',8),('2002-01-08 1:30:25','2002-01-09 1:30:25',9),('2002-01-08 1:30:30','2002-01-09 1:30:30',10),('2002-01-08 1:30:35','2002-01-09 1:30:35',11),('2002-01-08 1:30:40','2002-01-09 1:30:40',12),('2002-01-08 1:30:45','2002-01-09 1:30:45',13),('2002-01-08 1:30:50','2002-01-09 1:30:50',14),('2002-01-08 1:30:55','2002-01-09 1:30:55',15),('2002-01-08 1:30:59','2002-01-09 1:30:59',16),('2002-01-08 2:00','2002-01-09 2:00',17),('2002-01-08 2:00:05','2002-01-09 2:00:05',18),('2002-01-08 2:00:10','2002-01-09 2:00:10',19),('2002-01-08 2:00:15','2002-01-09 2:00:15',20);
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 <> '2002-01-09 01:30:00' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <> '2002-01-09 01:30:00' ORDER BY c2;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 >= '20020109013010' ORDER BY c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '20020109013010' ORDER BY c2 DESC;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 <='02-01-09 1:30:20' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <='02-01-09 1:30:20' ORDER BY c2;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 <=> '020109013030' ORDER BY c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 <=> '020109013030' ORDER BY c2 DESC;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 BETWEEN '20020109 01:30:40' AND '20020109 01:30:50' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 BETWEEN '20020109 01:30:40' AND '20020109 01:30:50' ORDER BY c2;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 IN('2002-01-09 1:30:55','2002-01-09 2:00') ORDER BY c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IN('2002-01-09 1:30:55','2002-01-09 2:00') ORDER BY c2 DESC;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 IS NULL ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2>= '2002-02-09 2:00:5' AND c1 < '2002-02-09 2:00:15' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2>= '2002-02-09 2:00:5' AND c1 < '2002-02-09 2:00:15' ORDER BY c2;
INSERT INTO t1 VALUES('20020301000001','20020302000001',1),('020303010030','020304010030',2),('050103000001','050104000001',3),('5-10-10 1:2:3','5-10-10 1:2:3',4),('0000-00-00 00:00:01',NULL,5);
# Select using various access methods
## Full table scan
--sorted_result
SELECT * FROM t1;
## Forward index scan, covering ##
--sorted_result
SELECT c1 FROM t1;
## Backward index scan, covering ##
SELECT c1 FROM t1 ORDER BY c1 DESC;
# ref access
--sorted_result
SELECT * FROM t1 WHERE c1='2003-01-01 1:2:3';
## Range access ##
SELECT * FROM t1 WHERE c1 <> '2003-01-01 1:2:3' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <> '2003-01-01 1:2:3' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 > '20030101010203' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > '20030101010203' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 < '03-01-01 1:2:3' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 < '03-01-01 1:2:3' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <=> '2003-01-01 1:2:3' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '2003-01-01 1:2:3' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 BETWEEN '20020301' AND '2003-01-01 1:2:3' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '20020301' AND '2003-01-01 1:2:3' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IN('2003-01-01 1:2:3','2005-01-03 00:00:01') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN('2003-01-01 1:2:3','2005-01-03 00:00:01') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1 DESC;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1;
SELECT * FROM t1 WHERE c1>='2003-01-01 01:02:03' AND c1 <= '20050104000001' ORDER BY c2,c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1>='2003-01-01 01:02:03' AND c1 <= '20050104000001' ORDER BY c2,c1;
# Index-merge access
SELECT * FROM t1 WHERE c1='2003-01-03 1:2:3' OR c2='2002-03-02 00:00:01';
UPDATE t1 SET c1='20060101000001' WHERE c1='2003-01-03 1:2:3' OR c2='2002-03-02 00:00:01';
--sorted_result
SELECT * FROM t1 WHERE c1='20060101000001' OR c2='020304010030';
# Testing delete using various access methods
TRUNCATE TABLE t1;
ALTER TABLE t1 CHANGE c1 c1 DATETIME NOT NULL, ADD PRIMARY KEY(c1);
INSERT INTO t1 VALUES(NOW(),NOW(),3),(ADDTIME(NOW(),'1 01:01:01'),ADDTIME(NOW(),'1 01:01:01'),4),(ADDTIME(NOW(),'2 01:01:01'),ADDTIME(NOW(),'2 01:01:01'),5),(ADDTIME(NOW(),'3 01:01:01'),ADDTIME(NOW(),'3 01:01:01'),6);
INSERT INTO t1 VALUES('1000-01-01 00:00:00','1000-01-01 00:00:00',1),('9999-12-31 23:59:59','9999-12-31 23:59:59',2);
SELECT * FROM t1 WHERE c1 <='1000-01-01 00:00:00';
DELETE FROM t1 WHERE c1 <='1000-01-01 00:00:00';
SELECT * FROM t1 WHERE c1 <='1000-01-01 00:00:00';
SELECT * FROM t1 WHERE c1 >='9999-12-31 23:59:59';
DELETE FROM t1 WHERE c1 >='9999-12-31 23:59:59';
SELECT * FROM t1 WHERE c1 >='9999-12-31 23:59:59';
SELECT * FROM t1 WHERE c1 > ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 > ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <> CURRENT_TIMESTAMP() ORDER BY c1;
DELETE FROM t1 WHERE c1 <> CURRENT_TIMESTAMP() ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1 <> CURRENT_TIMESTAMP() ORDER BY c1;
INSERT INTO t1 VALUES('2001-01-01',NOW(),7),(ADDTIME(NOW(),'1 01:01:01'),ADDTIME(NOW(),'1 01:01:01'),8),(ADDTIME(NOW(),'2 01:01:01'),ADDTIME(NOW(),'2 01:01:01'),9),(ADDTIME(NOW(),'3 01:01:01'),ADDTIME(NOW(),'3 01:01:01'),10);
SELECT * FROM t1 WHERE c1 < ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
DELETE FROM t1 WHERE c1 < ADDTIME(NOW(),'2 01:01:01') ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1 < ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
INSERT INTO t1 VALUES('2001-01-01',NOW(),11),(ADDTIME(NOW(),'1 01:01:01'),ADDTIME(NOW(),'1 01:01:01'),12),(ADDTIME(NOW(),'4 01:01:01'),NULL,13),(ADDTIME(NOW(),'5 01:01:01'),NULL,14);
SELECT * FROM t1 WHERE c1 BETWEEN NOW() AND ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
DELETE FROM t1 WHERE c1 BETWEEN NOW() AND ADDTIME(NOW(),'2 01:01:01') ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN NOW() AND ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
SELECT * FROM t1 WHERE c1 IN(NOW(),ADDTIME(NOW(),'3 01:01:01')) ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 IN(NOW(),ADDTIME(NOW(),'3 01:01:01')) ORDER BY c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN(NOW(),ADDTIME(NOW(),'3 01:01:01')) ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1;
DELETE FROM t1 WHERE c2 IS NULL ORDER BY c2,c1 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1;
INSERT INTO t1 VALUES(ADDTIME(NOW(),'6 01:01:01'),ADDTIME(NOW(),'6 01:01:01'),15),(ADDTIME(NOW(),'7 01:01:01'),NULL,16),(ADDTIME(NOW(),'8 01:01:01'),ADDTIME(NOW(),'8 01:01:01'),17),(ADDTIME(NOW(),'9 01:01:01'),ADDTIME(NOW(),'9 01:01:01'),18),(ADDTIME(NOW(),'10 01:01:01'),ADDTIME(NOW(),'10 01:01:01'),19);
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC;
DELETE FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC;
SELECT * FROM t1 WHERE c1>=ADDTIME(NOW(),'5 01:01:01') AND c2 < ADDTIME(NOW(),'8 13:25') ORDER BY c1;
DELETE FROM t1 WHERE c1>=ADDTIME(NOW(),'5 01:01:01') AND c2 < ADDTIME(NOW(),'8 13:25') ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1>=ADDTIME(NOW(),'5 01:01:01') AND c2 < ADDTIME(NOW(),'8 13:25') ORDER BY c1;
--sorted_result
SELECT * FROM t1 WHERE c1=ADDTIME(NOW(),'9 01:01:01') OR c2=ADDTIME(NOW(),'10 01:01:01');
DELETE FROM t1 WHERE c1=ADDTIME(NOW(),'9 01:01:01') OR c2=ADDTIME(NOW(),'10 01:01:01');
--sorted_result
SELECT * FROM t1 WHERE c1=ADDTIME(NOW(),'9 01:01:01') OR c2=ADDTIME(NOW(),'10 01:01:01');
SELECT count(*) FROM t1;
TRUNCATE TABLE t1;
SELECT count(*) FROM t1;
# Multi-table delete
# eq-ref join
CREATE TABLE t2(c1 DATETIME NOT NULL PRIMARY KEY, c2 DATETIME, c3 INT);
INSERT INTO t1 VALUES('2001-01-01 1:30','2001-01-02 2:30',1),('2001-01-03 3:30','2001-01-02 2:30',2);
INSERT INTO t2 VALUES('2001-01-02 2:30','2001-01-03 3:30',1),('2001-01-04 4:30','2001-01-05 5:30',2);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DELETE t1,t2 FROM t1,t2 WHERE t2.c1=t1.c2;
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
TRUNCATE TABLE t1;
TRUNCATE TABLE t2;
INSERT INTO t1 VALUES('2001-01-01 1:30','2001-01-02 2:30',1),('2001-01-03 3:30','2001-01-02 2:30',2);
INSERT INTO t2 VALUES('2001-01-02 2:30','2001-01-03 3:30',1),('2001-01-04 4:30','2001-01-05 5:30',2);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2 WHERE a2.c1=a1.c2;
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DROP TABLE t1,t2;
# More tests for update/delete........
CREATE TABLE mt1(id int(11) NOT NULL default '0', name varchar(10) default NULL, PRIMARY KEY (id));
INSERT INTO mt1 VALUES (1,'aaa'),(2,'aaa'),(3,'aaa');
CREATE TABLE mt2 (id int(11) NOT NULL default '0', name varchar(10) default NULL, PRIMARY KEY (id));
INSERT INTO mt2 VALUES (2,'bbb'),(3,'bbb'),(4,'bbb');
CREATE TABLE mt3 (id int(11) NOT NULL default '0', mydate datetime default NULL, PRIMARY KEY (id));
INSERT INTO mt3 VALUES (1,'2002-02-04 00:00:00'),(3,'2002-05-12 00:00:00'),(5,'2002-05-12 00:00:00'),(6,'2002-06-22 00:00:00'),(7,'2002-07-22 00:00:00');
delete mt1,mt2,mt3 from mt1,mt2,mt3 where to_days(now())-to_days(mt3.mydate)>=30 and mt3.id=mt1.id and mt3.id=mt2.id;
--sorted_result
select * from mt3;
DROP TABLE mt1,mt2,mt3;
######## Running UPDATE tests for TIMESTAMP ########
# Create tables
CREATE TABLE t1(c1 TIMESTAMP NOT NULL PRIMARY KEY, c2 TIMESTAMP NULL, c3 INT, INDEX idx2(c2));
# Update date values to timestamp field
INSERT INTO t1 VALUE('1998-01-01 09:23:45','10-01-01 14:12:33',1);
UPDATE t1 SET c1='2001-01-01' WHERE c2='10-01-01 14:12:33';
SELECT c1,hour(c1),minute(c1),second(c1) FROM t1 WHERE c2='10-01-01 14:12:33';
# Update with single digit hour, minute, second,fraction part to time
INSERT INTO t1 VALUES('2009-01-01 08:42:42','2009-01-02 23:59:59',2);
UPDATE t1 SET c1='2009-01-01 1:2:3',c2='2009-01-02 23:59:59.999999' WHERE c2='2009-01-02 23:59:59';
SELECT c1,ADDTIME(c2,'1 1:1:1.000002') FROM t1 WHERE c3=2;
# Update with function
INSERT INTO t1 VALUES('2009-02-25 15:45','09-02-27 15:46',3);
SET TIMESTAMP=1235553613; #'2009-02-25'
UPDATE t1 SET c2=NOW() WHERE c1 >=CURDATE() /* updates c1 with current timestamp */;
UPDATE t1 SET c1=DATE_ADD(CURDATE(),INTERVAL '1 1:1:1' DAY_SECOND) WHERE c2=CURRENT_TIMESTAMP();
--sorted_result
SELECT * FROM t1;
# Update with Null, null to valid date
INSERT INTO t1 VALUES('2001-01-06','2001-01-07 09:30:00',4),('2001-01-08',NULL,5);
UPDATE t1 SET c1='20010106010030',c2=NULL WHERE c1='2001-01-06 00:00:00';
--sorted_result
SELECT c1,c2 FROM t1 WHERE c2 IS NULL;
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1=c1,c2='2001-01-10 00:00:00' WHERE c2 IS NULL;
--sorted_result
SELECT * FROM t1 WHERE c2='2001-01-10';
# Update with invalid datetimes, converts to zero datetime
INSERT INTO t1 VALUES('2001-01-09','2001-01-10',6),('2001-01-11','2001-01-12',7);
UPDATE t1 SET c1='2001-01-09 24:59:59',c2='2009-01-10 23:60:59' WHERE c1='2001-01-09';
UPDATE t1 SET c1='2001-01-11 23:59:59',c2='2001-01-11 23:59:60' WHERE c1='2001-01-11';
SELECT count(*) FROM t1 WHERE c1='2001-01-09 24:59:59' AND c2='2009-01-10 23:60:59';
SELECT count(*) FROM t1 WHERE c1='2001-01-11 23:59:59' AND c2='2001-01-11 23:59:60';
--sorted_result
SELECT * FROM t1 WHERE c1='0000-00-00 00:00:00' OR c2='0000-00-00 00:00:00';
# Update with zero datetimes, zero datetimes to valid datetimes
INSERT INTO t1 VALUES('2001-01-17','0000-00-00 00:00:00',8),('2001-01-18','2001-01-18 07:35',9);
SET SQL_MODE=TRADITIONAL;
SELECT * FROM t1 WHERE c2='0000-00-00 00:00:00';
--error ER_TRUNCATED_WRONG_VALUE
UPDATE t1 SET c1='1972-01-01 07:35',c2='0000-00-00 00:00:00' WHERE c2='2001-01-18 07:35';
SET SQL_MODE=DEFAULT;
UPDATE t1 SET c1='1972-01-01 07:35',c2='0000-00-00 00:00:00' WHERE c2='2001-01-18 07:35';
UPDATE t1 SET c1='2001-01-17 12:34:00',c2='2001-01-17 12:34:00' WHERE c2='0000-00-00 00:00:00' AND c1='2001-01-17';
--sorted_result
SELECT * FROM t1 WHERE c1='0000-00-00 00:00:00' OR c2='0000-00-00 00:00:00';
--sorted_result
SELECT * FROM t1 WHERE c1='2001-01-17 12:34:00' AND c2='2001-01-17 12:34:00';
# Update with range values
INSERT INTO t1 VALUES('2001-01-21 05:43:43','2001-01-22 06:53:53',10);
UPDATE t1 SET c1='1971-01-01 00:00:01',c2='2038-01-09 03:14:07' WHERE c1='2001-01-21 05:43:43';
SELECT * FROM t1 WHERE c1='1971-01-01 00:00:01' AND c2='2038-01-09 03:14:07';
# Update ignore on duplicate key
INSERT INTO t1 VALUES('2001-01-23 02:33','2001-01-24 03:33',11),('2001-01-25 04:33','2001-01-26 05:33',12);
--error ER_DUP_ENTRY
UPDATE t1 SET c1='2001-01-23 02:33' WHERE c1='2001-01-25 04:33';
UPDATE IGNORE t1 SET c1='2001-01-23 02:33' WHERE c1='2001-01-25 04:33';
SELECT count(*) FROM t1 WHERE c1='2001-01-23 02:33';
UPDATE t1 SET c1=NULL WHERE c2='2001-01-24 03:33' /* updates to current timestamp */;
UPDATE IGNORE t1 SET c1=NULL WHERE c2='2001-01-26 05:33';
--sorted_result
SELECT * FROM t1 WHERE c1=CURRENT_TIMESTAMP();
# Multi table update
TRUNCATE TABLE t1;
CREATE TABLE t2(c1 TIMESTAMP NOT NULL PRIMARY KEY, c2 TIMESTAMP, c3 INT);
# eq-ref join
INSERT INTO t1 VALUES('2001-01-02 2:30:45','2001-01-01 1:30',1),('2001-01-03 3:30','2001-01-02 2:30:45',2);
INSERT INTO t2 VALUES('2001-01-02 2:30:45','2001-01-03 3:30',1),('2001-01-04 4:30','2001-01-05 5:30',2);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c1;
UPDATE t1,t2 SET t2.c1='2005-01-06 2:30:50',t1.c1='2005-01-06 2:30:50' WHERE t2.c1=t1.c1;
SELECT * FROM t1,t2 WHERE t2.c1=t1.c1;
INSERT INTO t1 VALUES('2002-01-01 3:30','2002-01-02 2:30:45',3),('2002-01-04 4:30','2002-01-02 2:30:45',4);
INSERT INTO t2 VALUES('2002-01-02 2:30:45','2002-01-03 3:30',3),('2002-01-03 3:30','2002-01-04 4:30',4);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
UPDATE t1,t2 SET t2.c1='2002-01-06 2:30:50',t1.c1=t1.c1,t1.c2='2002-01-06 2:30:50' WHERE t2.c1=t1.c2;
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1='2002-01-06 2:30:50' AND t1.c2='2002-01-06 2:30:50';
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DELETE FROM t1 WHERE c2='2002-01-06 2:30:50' AND c3=3;
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DROP TABLE t2;
# Update with other access methods, ORDER BY LIMIT
TRUNCATE TABLE t1;
ALTER TABLE t1 CHANGE c1 c1 TIMESTAMP NOT NULL, DROP PRIMARY KEY;
ALTER TABLE t1 CHANGE c1 c1 TIMESTAMP NOT NULL, ADD KEY(c1);
# ref access
UPDATE t1 SET c1='2002-01-07 7:30' WHERE c2='2002-01-05 5:30';
SELECT * FROM t1 WHERE c1='2002-01-07 7:30';
# range access, MRR
INSERT INTO t1 VALUES('2002-01-08 1:30','2002-01-09 1:30',4),('2002-01-08 1:30:5','2002-01-09 1:30:5',5),('2002-01-08 1:30:10','2002-01-09 1:30:10',6),('2002-01-08 1:30:15','2002-01-09 1:30:15',7),('2002-01-08 1:30:20','2002-01-09 1:30:20',8),('2002-01-08 1:30:25','2002-01-09 1:30:25',9),('2002-01-08 1:30:30','2002-01-09 1:30:30',10),('2002-01-08 1:30:35','2002-01-09 1:30:35',11),('2002-01-08 1:30:40','2002-01-09 1:30:40',12),('2002-01-08 1:30:45','2002-01-09 1:30:45',13),('2002-01-08 1:30:50','2002-01-09 1:30:50',14),('2002-01-08 1:30:55','2002-01-09 1:30:55',15),('2002-01-08 1:30:59','2002-01-09 1:30:59',16),('2002-01-08 2:00','2002-01-09 2:00',17),('2002-01-08 2:00:05','2002-01-09 2:00:05',18),('2002-01-08 2:00:10','2002-01-09 2:00:10',19),('2002-01-08 2:00:15','2002-01-09 2:00:15',20);
--sorted_result
SELECT * FROM t1;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 <> '2002-01-09 01:30:00' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <> '2002-01-09 01:30:00' ORDER BY c2;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 >= '20020109013010' ORDER BY c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 >= '20020109013010' ORDER BY c2 DESC;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 <='02-01-09 1:30:20' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 <='02-01-09 1:30:20' ORDER BY c2;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 <=> '020109013030' ORDER BY c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 <=> '020109013030' ORDER BY c2 DESC;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 BETWEEN '20020109 01:30:40' AND '20020109 01:30:50' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 BETWEEN '20020109 01:30:40' AND '20020109 01:30:50' ORDER BY c2;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 IN('2002-01-09 1:30:55','2002-01-09 2:00') ORDER BY c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IN('2002-01-09 1:30:55','2002-01-09 2:00') ORDER BY c2 DESC;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2 IS NULL ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2;
UPDATE t1 SET c1='2003-01-01 1:2:3' WHERE c2>= '2002-02-09 2:00:5' AND c1 < '2002-02-09 2:00:15' ORDER BY c2 LIMIT 2;
SELECT * FROM t1 WHERE c2>= '2002-02-09 2:00:5' AND c1 < '2002-02-09 2:00:15' ORDER BY c2;
INSERT INTO t1 VALUES('20020301000001','20020302000001',1),('020303010030','020304010030',2),('050103000001','050104000001',3),('5-10-10 1:2:3','5-10-10 1:2:3',4),('0000-00-00 00:00:01',NULL,5);
# Select using various access methods
## Full table scan
--sorted_result
SELECT * FROM t1;
## Forward index scan, covering ##
--sorted_result
SELECT c1 FROM t1;
## Backward index scan, covering ##
SELECT c1 FROM t1 ORDER BY c1 DESC;
# ref access
--sorted_result
SELECT * FROM t1 WHERE c1='2003-01-01 1:2:3';
## Range access ##
SELECT * FROM t1 WHERE c1 <> '2003-01-01 1:2:3' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 <> '2003-01-01 1:2:3' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 > '20030101010203' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > '20030101010203' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 < '03-01-01 1:2:3' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 < '03-01-01 1:2:3' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 <=> '2003-01-01 1:2:3' ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 <=> '2003-01-01 1:2:3' ORDER BY c1,c2;
SELECT * FROM t1 WHERE c1 BETWEEN '20020301' AND '2003-01-01 1:2:3' ORDER BY c1,c2 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN '20020301' AND '2003-01-01 1:2:3' ORDER BY c1,c2 DESC;
SELECT * FROM t1 WHERE c1 IN('2003-01-01 1:2:3','2005-01-03 00:00:01') ORDER BY c1,c2 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN('2003-01-01 1:2:3','2005-01-03 00:00:01') ORDER BY c1,c2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1 DESC;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1;
SELECT * FROM t1 WHERE c1>='2003-01-01 01:02:03' AND c1 <= '20050104000001' ORDER BY c2,c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1>='2003-01-01 01:02:03' AND c1 <= '20050104000001' ORDER BY c2,c1;
# Index-merge access
SELECT * FROM t1 WHERE c1='2003-01-03 1:2:3' OR c2='2002-03-02 00:00:01';
UPDATE t1 SET c1='20060101000001' WHERE c1='2003-01-03 1:2:3' OR c2='2002-03-02 00:00:01';
--sorted_result
SELECT * FROM t1 WHERE c1='20060101000001' OR c2='020304010030';
# Testing delete using various access methods
TRUNCATE TABLE t1;
ALTER TABLE t1 CHANGE c1 c1 TIMESTAMP NOT NULL, ADD PRIMARY KEY(c1);
INSERT INTO t1 VALUES(NOW(),NOW(),3),(ADDTIME(NOW(),'1 01:01:01'),ADDTIME(NOW(),'1 01:01:01'),4),(ADDTIME(NOW(),'2 01:01:01'),ADDTIME(NOW(),'2 01:01:01'),5),(ADDTIME(NOW(),'3 01:01:01'),ADDTIME(NOW(),'3 01:01:01'),6);
INSERT INTO t1 VALUES('1971-01-01 00:00:01','1971-01-01 00:00:01',1),('2038-01-09 03:14:07','2038-01-09 03:14:07',2);
SELECT * FROM t1 WHERE c1 <='1971-01-01 00:00:01';
DELETE FROM t1 WHERE c1 <='1971-01-01 00:00:01';
SELECT * FROM t1 WHERE c1 <='1971-01-01 00:00:01';
SELECT * FROM t1 WHERE c1 >='2038-01-09 03:14:07';
DELETE FROM t1 WHERE c1 >='2038-01-09 03:14:07';
SELECT * FROM t1 WHERE c1 >='2038-01-09 03:14:07';
SELECT * FROM t1 WHERE c1 > ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 > ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 > ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <> CURRENT_TIMESTAMP() ORDER BY c1;
DELETE FROM t1 WHERE c1 <> CURRENT_TIMESTAMP() ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1 <> CURRENT_TIMESTAMP() ORDER BY c1;
INSERT INTO t1 VALUES('2001-01-01',NOW(),7),(ADDTIME(NOW(),'1 01:01:01'),ADDTIME(NOW(),'1 01:01:01'),8),(ADDTIME(NOW(),'2 01:01:01'),ADDTIME(NOW(),'2 01:01:01'),9),(ADDTIME(NOW(),'3 01:01:01'),ADDTIME(NOW(),'3 01:01:01'),10);
SELECT * FROM t1 WHERE c1 < ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
DELETE FROM t1 WHERE c1 < ADDTIME(NOW(),'2 01:01:01') ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1 < ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c1 <=> ADDTIME(NOW(),'1 01:01:01') ORDER BY c1 DESC;
INSERT INTO t1 VALUES('2001-01-01',NOW(),11),(ADDTIME(NOW(),'1 01:01:01'),ADDTIME(NOW(),'1 01:01:01'),12),(ADDTIME(NOW(),'4 01:01:01'),NULL,13),(ADDTIME(NOW(),'5 01:01:01'),NULL,14);
SELECT * FROM t1 WHERE c1 BETWEEN NOW() AND ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
DELETE FROM t1 WHERE c1 BETWEEN NOW() AND ADDTIME(NOW(),'2 01:01:01') ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1 BETWEEN NOW() AND ADDTIME(NOW(),'2 01:01:01') ORDER BY c1;
SELECT * FROM t1 WHERE c1 IN(NOW(),ADDTIME(NOW(),'3 01:01:01')) ORDER BY c1 DESC;
DELETE FROM t1 WHERE c1 IN(NOW(),ADDTIME(NOW(),'3 01:01:01')) ORDER BY c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c1 IN(NOW(),ADDTIME(NOW(),'3 01:01:01')) ORDER BY c1 DESC;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1;
DELETE FROM t1 WHERE c2 IS NULL ORDER BY c2,c1 LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c2,c1;
INSERT INTO t1 VALUES(ADDTIME(NOW(),'6 01:01:01'),ADDTIME(NOW(),'6 01:01:01'),15),(ADDTIME(NOW(),'7 01:01:01'),NULL,16),(ADDTIME(NOW(),'8 01:01:01'),ADDTIME(NOW(),'8 01:01:01'),17),(ADDTIME(NOW(),'9 01:01:01'),ADDTIME(NOW(),'9 01:01:01'),18),(ADDTIME(NOW(),'10 01:01:01'),ADDTIME(NOW(),'10 01:01:01'),19);
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC;
DELETE FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC LIMIT 2;
SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c2,c1 DESC;
SELECT * FROM t1 WHERE c1>=ADDTIME(NOW(),'5 01:01:01') AND c2 < ADDTIME(NOW(),'8 13:25') ORDER BY c1;
DELETE FROM t1 WHERE c1>=ADDTIME(NOW(),'5 01:01:01') AND c2 < ADDTIME(NOW(),'8 13:25') ORDER BY c1 LIMIT 2;
SELECT * FROM t1 WHERE c1>=ADDTIME(NOW(),'5 01:01:01') AND c2 < ADDTIME(NOW(),'8 13:25') ORDER BY c1;
--sorted_result
SELECT * FROM t1 WHERE c1=ADDTIME(NOW(),'9 01:01:01') OR c2=ADDTIME(NOW(),'10 01:01:01');
DELETE FROM t1 WHERE c1=ADDTIME(NOW(),'9 01:01:01') OR c2=ADDTIME(NOW(),'10 01:01:01');
--sorted_result
SELECT * FROM t1 WHERE c1=ADDTIME(NOW(),'9 01:01:01') OR c2=ADDTIME(NOW(),'10 01:01:01');
SELECT count(*) FROM t1;
TRUNCATE TABLE t1;
SELECT count(*) FROM t1;
# Multi-table delete
# eq-ref join
CREATE TABLE t2(c1 TIMESTAMP NOT NULL PRIMARY KEY, c2 TIMESTAMP, c3 INT);
INSERT INTO t1 VALUES('2001-01-01 1:30','2001-01-02 2:30',1),('2001-01-03 3:30','2001-01-02 2:30',2);
INSERT INTO t2 VALUES('2001-01-02 2:30','2001-01-03 3:30',1),('2001-01-04 4:30','2001-01-05 5:30',2);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DELETE t1,t2 FROM t1,t2 WHERE t2.c1=t1.c2;
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
TRUNCATE TABLE t1;
TRUNCATE TABLE t2;
INSERT INTO t1 VALUES('2001-01-01 1:30','2001-01-02 2:30',1),('2001-01-03 3:30','2001-01-02 2:30',2);
INSERT INTO t2 VALUES('2001-01-02 2:30','2001-01-03 3:30',1),('2001-01-04 4:30','2001-01-05 5:30',2);
--sorted_result
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2 WHERE a2.c1=a1.c2;
SELECT * FROM t1,t2 WHERE t2.c1=t1.c2;
DROP TABLE t1,t2;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,197 @@
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4;
--enable_warnings
# Create tables
CREATE TABLE t1(c1 TIME NOT NULL, c2 TIME NULL, PRIMARY KEY(c1));
CREATE TABLE t2(c1 TIME NOT NULL, c2 TIME NULL, PRIMARY KEY(c1,c2));
CREATE TABLE t3(c1 TIME NOT NULL, c2 TIME NULL, UNIQUE INDEX idx(c1,c2));
CREATE TABLE t4(c1 TIME NOT NULL, c2 TIME NULL);
# As a string in 'D HH:MM:SS.fraction' format
INSERT INTO t1 VALUES ('00:00:00.00','00:00:00.00'),('01:01:01.01','01:01:01.00'),('838:59:59.00','838:59:59.00'),('00:00:01','00:00:01'),('02:02:02','02:02:02'),('838:59:58','838:59:58'),('-838:59:59','-838:59:59'),('00:03','00:03'),('03:03','03:03'),('838:58','838:58'),('00 00:00:04','00 00:00:04'),('04 04:04:04','04 04:04:04'),('34 22:59:57','34 22:59:57'),('00 00:04','00 00:04'),('05 05:05','05 05:05'),('34 22:56','34 22:56'),('05 05','05 05'),('06 06','06 06'),('34 22','34 22'),('07','07'),('59','59');
INSERT INTO t2 VALUES ('00:00:00.00','00:00:00.00'),('01:01:01.01','01:01:01.00'),('838:59:59.00','838:59:59.00'),('00:00:01','00:00:01'),('02:02:02','02:02:02'),('838:59:58','838:59:58'),('-838:59:59','-838:59:59'),('00:03','00:03'),('03:03','03:03'),('838:58','838:58'),('00 00:00:04','00 00:00:04'),('04 04:04:04','04 04:04:04'),('34 22:59:57','34 22:59:57'),('00 00:04','00 00:04'),('05 05:05','05 05:05'),('34 22:56','34 22:56'),('05 05','05 05'),('06 06','06 06'),('34 22','34 22'),('07','07'),('59','59');
INSERT INTO t3 VALUES ('00:00:00.00','00:00:00.00'),('01:01:01.01','01:01:01.00'),('838:59:59.00','838:59:59.00'),('00:00:01','00:00:01'),('02:02:02','02:02:02'),('838:59:58','838:59:58'),('-838:59:59','-838:59:59'),('00:03','00:03'),('03:03','03:03'),('838:58','838:58'),('00 00:00:04','00 00:00:04'),('04 04:04:04','04 04:04:04'),('34 22:59:57','34 22:59:57'),('00 00:04','00 00:04'),('05 05:05','05 05:05'),('34 22:56','34 22:56'),('05 05','05 05'),('06 06','06 06'),('34 22','34 22'),('07','07'),('59','59');
INSERT INTO t4 VALUES ('00:00:00.00','00:00:00.00'),('01:01:01.01','01:01:01.00'),('838:59:59.00','838:59:59.00'),('00:00:01','00:00:01'),('02:02:02','02:02:02'),('838:59:58','838:59:58'),('-838:59:59','-838:59:59'),('00:03','00:03'),('03:03','03:03'),('838:58','838:58'),('00 00:00:04','00 00:00:04'),('04 04:04:04','04 04:04:04'),('34 22:59:57','34 22:59:57'),('00 00:04','00 00:04'),('05 05:05','05 05:05'),('34 22:56','34 22:56'),('05 05','05 05'),('06 06','06 06'),('34 22','34 22'),('07','07'),('59','59');
#As a string with no delimiters in 'HHMMSS' format
INSERT INTO t1 VALUES('000008','000008'),('080808','080808'),('8385955','8385955'),('-8385955','-8385955'),('0009','0009'),('0909','0909'),('5454','5454'),('10','10'),('53','53');
INSERT INTO t2 VALUES('000008','000008'),('080808','080808'),('8385955','8385955'),('-8385955','-8385955'),('0009','0009'),('0909','0909'),('5454','5454'),('10','10'),('53','53');
INSERT INTO t3 VALUES('000008','000008'),('080808','080808'),('8385955','8385955'),('-8385955','-8385955'),('0009','0009'),('0909','0909'),('5454','5454'),('10','10'),('53','53');
INSERT INTO t4 VALUES('000008','000008'),('080808','080808'),('8385955','8385955'),('-8385955','-8385955'),('0009','0009'),('0909','0909'),('5454','5454'),('10','10'),('53','53');
#As a number in HHMMSS format
INSERT INTO t1 VALUES (000011.00,000011.00),(111111.11,111111.11),(8385952.00,8385952.00),(000012,000012),(121212,121212),(8385951,8385951),(1313,1313),(5151,5151),(14,14),(50,50);
INSERT INTO t2 VALUES (000011.00,000011.00),(111111.11,111111.11),(8385952.00,8385952.00),(000012,000012),(121212,121212),(8385951,8385951),(1313,1313),(5151,5151),(14,14),(50,50);
INSERT INTO t3 VALUES (000011.00,000011.00),(111111.11,111111.11),(8385952.00,8385952.00),(000012,000012),(121212,121212),(8385951,8385951),(1313,1313),(5151,5151),(14,14),(50,50);
INSERT INTO t4 VALUES (000011.00,000011.00),(111111.11,111111.11),(8385952.00,8385952.00),(000012,000012),(121212,121212),(8385951,8385951),(1313,1313),(5151,5151),(14,14),(50,50);
#As the result of a function that returns a value that is acceptable in a TIME context
SET TIMESTAMP=1233216687; # 2009-01-29 13:41:27
INSERT INTO t1 VALUES(CURRENT_TIME(),CURRENT_TIME());
INSERT INTO t2 VALUES(CURRENT_TIME(),CURRENT_TIME());
INSERT INTO t3 VALUES(CURRENT_TIME(),CURRENT_TIME());
INSERT INTO t4 VALUES(CURRENT_TIME(),CURRENT_TIME());
#Insert permissible NULLs
INSERT INTO t1 VALUES('123456',null);
#INSERT INTO t2 VALUES('123456',null);
INSERT INTO t3 VALUES('123456',null);
INSERT INTO t4 VALUES('123456',null);
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
#Updating the tables
--sorted_result
SELECT c1 FROM t1 WHERE c1='00:00:07';
UPDATE t1 SET c1='22:22:22' WHERE c1='00:00:07';
--sorted_result
SELECT c1 FROM t1;
--sorted_result
SELECT c1 FROM t2 WHERE c1='-838:59:59' AND c2='-838:59:59';
UPDATE t2 SET c1='22:22:22' WHERE c1='-838:59:59' AND c2='-838:59:59';
--sorted_result
SELECT c1 FROM t2;
# Update with NULL ( NULL to number & number to NULL)
--sorted_result
SELECT c2 FROM t3 WHERE c2=null;
UPDATE t3 SET c2='34 22:59:59' WHERE c2=null;
--sorted_result
SELECT c2 FROM t3;
--sorted_result
SELECT c2 FROM t4 WHERE c1='00:00:00';
UPDATE t4 SET c2=null WHERE c1='00:00:00';
--sorted_result
SELECT c2 FROM t4;
#Update order by limit
--sorted_result
SELECT c1 FROM t4 WHERE c1 < '000009';
UPDATE t4 SET c1='0101' WHERE c1 < '000009' ORDER BY c1 LIMIT 3;
--sorted_result
SELECT c1 FROM t4;
#Update negative value to unsigned column
--sorted_result
SELECT c1 FROM t1 WHERE c1='12:12:12';
UPDATE t1 SET c1='-12:12:12' WHERE c1='12:12:12';
--sorted_result
SELECT c1 FROM t1;
#Update with Arithmetic operations
--sorted_result
SELECT c1 FROM t1 WHERE c1=111127;
UPDATE t1 SET c1=c1+c2 WHERE c1=111127;
--sorted_result
SELECT c1 FROM t1;
--sorted_result
SELECT c1 FROM t2 WHERE c2='100:04:04';
UPDATE t2 SET c1=c1 - '010101' WHERE c2=1000404;
--sorted_result
SELECT c1 FROM t2;
--sorted_result
SELECT c2 FROM t3 WHERE c2=020202;
UPDATE t3 SET c2=c1 * 2 WHERE c2='020202';
--sorted_result
SELECT c1 FROM t3;
--sorted_result
SELECT c1 FROM t4 WHERE c1=121212;
UPDATE t4 SET c1=c1 / 2 WHERE c1='12:12:12';
--sorted_result
SELECT c1 FROM t4;
#Update range values
UPDATE t1 SET c2=1250000 WHERE c1='00:00:09' AND c1='01:01:01';
--sorted_result
SELECT c2 FROM t1;
UPDATE t2 SET c1=125959 WHERE c2=000400 OR c2= 000900;
--sorted_result
SELECT c1 FROM t2;
UPDATE t2 SET c2='1111' WHERE c1 IN ('100:04:04',005454,'2:2:2',111111);
--sorted_result
SELECT c2 FROM t2;
#Update outside range would be clipped to closest endpoints
UPDATE t4 SET c2='-838:59:60' WHERE c1='100:04:04';
--sorted_result
SELECT c2 FROM t4;
UPDATE t4 SET c2='838:59:60' WHERE c1='100:04:04';
--sorted_result
SELECT c2 FROM t4;
UPDATE t4 SET c2='00:00:00' WHERE c1='100:04:04';
--sorted_result
SELECT c2 FROM t4;
UPDATE t4 SET c2='11:11:60' WHERE c1='100:04:04';
--sorted_result
SELECT c2 FROM t4;
UPDATE t4 SET c2='11:60:11' WHERE c1='100:04:04';
--sorted_result
SELECT c2 FROM t4;
# Update ignore on bad null error
--sorted_result
SELECT c1 FROM t3 WHERE c2 < '000007';
SET SQL_MODE=STRICT_ALL_TABLES;
--error ER_BAD_NULL_ERROR
UPDATE t3 SET c1=NULL WHERE c2 < '000007';
UPDATE IGNORE t3 SET c1=NULL WHERE c2 < '000007';
--sorted_result
SELECT c1 from t3 WHERE c2 < '000007';
SET SQL_MODE=DEFAULT;
#Duplicate keys
--error ER_DUP_ENTRY
UPDATE t1 SET c1=8385958 WHERE c2='34 22:59:59';
#Update with invalid values
UPDATE t1 SET c2='def' WHERE c1=59;
--sorted_result
SELECT c2 FROM t1;
--error ER_PARSE_ERROR
UPDATE t4 SET c1=11:11:11 WHERE c2=NULL;
--sorted_result
SELECT c1 FROM t4;
#Multi table update
UPDATE t1,t2,t3,t4 SET t1.c2=t2.c1+t2.c2,t3.c2=t4.c1*2 WHERE t1.c1='00:13:13' AND t2.c1=080808 AND t4.c1='00:04:00' AND t3.c2=020202;
# Update using various access methods
# Update using Const
# EXPLAIN SELECT * FROM t1 WHERE c1='00:09:09' AND c2='00:09:09';
UPDATE t1 SET t1.c1='00:12:12' WHERE c1='00:09:09' AND c2='00:09:09';
--sorted_result
SELECT * FROM t1;
# Update using range
# EXPLAIN SELECT * FROM t1 WHERE c1 BETWEEN 080000 AND 100000;
UPDATE t1 SET t1.c2='99999.99999' WHERE c1 BETWEEN 080000 AND 100000;
--sorted_result
SELECT * FROM t1;
# EXPLAIN SELECT * FROM t1 WHERE c1 IN (222222,8385955,1500000);
UPDATE t1 SET c1=c1+1,c2=c2-1 WHERE c1 IN (222222,8385955,1500000) ORDER BY c1;
--sorted_result
SELECT * FROM t1;
# Update using eq_ref
# EXPLAIN SELECT * FROM t2,t3 WHERE t2.c1=t3.c1 AND t2.c3=t3.c3;
UPDATE t1,t2 SET t1.c2='22222.22222' WHERE t1.c1=t2.c1 AND t1.c2=t2.c2;
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
#Drop tables;
DROP TABLE IF EXISTS t1,t2,t3,t4;

View File

@@ -0,0 +1,212 @@
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4;
--enable_warnings
# Create tables
CREATE TABLE t1(c1 YEAR NOT NULL,c2 YEAR, PRIMARY KEY(c1));
CREATE TABLE t2(c1 YEAR NOT NULL, c2 YEAR, UNIQUE INDEX idx(c1,c2));
CREATE TABLE t3(c1 YEAR(2) NOT NULL,c2 YEAR(2), PRIMARY KEY(c1));
CREATE TABLE t4(c1 YEAR(2), c2 YEAR(2), UNIQUE INDEX idx(c1,c2));
#Insert as 4-digit number format in the range '1901' to '2155'
INSERT INTO t1 VALUES (1901,1901),(1970,1970),(1999,1999),(2000,2000),(2155,2155);
INSERT INTO t2 VALUES (1901,1901),(1970,1970),(1999,1999),(2000,2000),(2155,2155);
INSERT INTO t3 VALUES (1901,1901),(1970,1970),(1999,1999),(2000,2000),(2155,2155);
INSERT INTO t4 VALUES (1901,1901),(1970,1970),(1999,1999),(2000,2000),(2155,2155);
#Insert as 4-digit string format in the range '1901' to '2155'
INSERT INTO t1 VALUES ('1902','1902'),('1971','1971'),('1998','1998'),('2001','2001'),('2154','2154');
INSERT INTO t2 VALUES ('1902','1902'),('1971','1971'),('1998','1998'),('2001','2001'),('2154','2154');
INSERT INTO t3 VALUES ('1902','1902'),('1971','1971'),('1998','1998'),('2001','2001'),('2154','2154');
INSERT INTO t4 VALUES ('1902','1902'),('1971','1971'),('1998','1998'),('2001','2001'),('2154','2154');
#Insert as 2-digit number format
INSERT INTO t1 VALUES (04,04),(64,64),(69,69),(97,97);
INSERT INTO t2 VALUES (04,04),(64,64),(69,69),(97,97);
INSERT INTO t3 VALUES (04,04),(64,64),(69,69),(97,97);
INSERT INTO t4 VALUES (04,04),(64,64),(69,69),(97,97);
#Insert as 2-digit string format
INSERT INTO t1 VALUES ('05','05'),('65','65'),('75','75'),('95','95');
INSERT INTO t2 VALUES ('05','05'),('65','65'),('75','75'),('95','95');
INSERT INTO t3 VALUES ('05','05'),('65','65'),('75','75'),('95','95');
INSERT INTO t4 VALUES ('05','05'),('65','65'),('75','75'),('95','95');
#Insert permissible NULLs
INSERT INTO t1 VALUES ('09',null),('61',null),('79',null),('96',null);
INSERT INTO t2 VALUES ('09',null),('61',null),('79',null),('96',null);
INSERT INTO t3 VALUES ('09',null),('61',null),('79',null),('96',null);
INSERT INTO t4 VALUES ('09',null),('61',null),('79',null),('96',null);
--sorted_result
SELECT * FROM t1;
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
#Updating the tables
--sorted_result
SELECT c1 FROM t1 WHERE c1='2005';
UPDATE t1 SET c1='2003' WHERE c1='2005';
--sorted_result
SELECT c1 FROM t1;
# Update with NULL ( NULL to number & number to NULL)
--sorted_result
SELECT c2 FROM t2 WHERE c2=null;
UPDATE t2 SET c2='2070' WHERE c2=null AND c1='1996';
--sorted_result
SELECT c2 FROM t2;
--sorted_result
SELECT c2 FROM t3 WHERE c2 < '64';
UPDATE t3 SET c2=null WHERE c2 < '64' ORDER BY c2 LIMIT 3;
--sorted_result
SELECT c2 FROM t3;
#Update order by limit
--sorted_result
SELECT c1 FROM t4 WHERE c1 < '55';
UPDATE t4 SET c1='00' WHERE c1 < '65' ORDER BY c1 LIMIT 5;
--sorted_result
SELECT c1 FROM t4;
#Update with Arithmetic operations
#
#Updating 'YY' values
--sorted_result
SELECT c1 FROM t3 WHERE c1='05';
UPDATE t3 SET c1=c1+c2 WHERE c1='05';
--sorted_result
SELECT c1 FROM t3;
--sorted_result
SELECT c1 FROM t4 WHERE c2=4;
UPDATE t4 SET c1=c1 + 04 WHERE c2=04;
--sorted_result
SELECT c1 FROM t4;
--sorted_result
SELECT c2 FROM t3 WHERE c2=75;
UPDATE t3 SET c2=c2 + 1902 WHERE c2='75';
--sorted_result
SELECT c2 FROM t3;
--sorted_result
SELECT c1 FROM t4 WHERE c1=09;
UPDATE t4 SET c1=c1 - c2 WHERE c1='09';
--sorted_result
SELECT c1 FROM t4;
--sorted_result
SELECT c1 FROM t3 WHERE c1=75;
UPDATE t3 SET c1=c1 - 01 WHERE c1='75';
--sorted_result
SELECT c1 FROM t3;
--sorted_result
SELECT c1 FROM t4 WHERE c1=98;
UPDATE t4 SET c1=c1 / 2 WHERE c1='98';
--sorted_result
SELECT c1 FROM t4;
--sorted_result
SELECT c2 FROM t3 WHERE c2=03;
UPDATE t3 SET c2=c2 * 03 WHERE c2='03';
--sorted_result
SELECT c2 FROM t3;
#
#Updating 'YYYY' values
--sorted_result
SELECT c1 FROM t1 WHERE c1 > 2060 AND c1 < 2070;
UPDATE t1 SET c1=c1 + 10 WHERE c1 > 2060 AND c1 < 2070;
--sorted_result
SELECT c1 FROM t1;
--sorted_result
SELECT c1 FROM t2 WHERE c1 > 1969 AND c1 < 1980;
UPDATE t2 SET c1=c1 - 10 WHERE c1 > 1969 AND c1 < 1980 ORDER BY c1 LIMIT 2;
--sorted_result
SELECT c1 FROM t2;
#Update range values
UPDATE t2 SET c2=2009 WHERE c1=2009 AND c2=null;
--sorted_result
SELECT c2 FROM t2;
UPDATE t1 SET c2=2155 WHERE c1=1979 OR c1=2154;
--sorted_result
SELECT c2 FROM t1;
UPDATE t4 SET c1=99 WHERE c2 IN (01,54,65,69,null);
--sorted_result
SELECT c1 FROM t4;
# Update outside range would be clipped to closest endpoints
UPDATE t1 SET c2=-1 WHERE c1=2071;
--sorted_result
SELECT c2 FROM t1;
UPDATE t1 SET c2=0 WHERE c1=2003;
--sorted_result
SELECT c2 FROM t1;
UPDATE t1 SET c2=2156 WHERE c1=2001;
--sorted_result
SELECT c2 FROM t1;
UPDATE t4 SET c2=-1 WHERE c1=71;
--sorted_result
SELECT c2 FROM t4;
UPDATE t4 SET c2=0 WHERE c1=70;
--sorted_result
SELECT c2 FROM t4;
UPDATE t4 SET c2=100 WHERE c1=79;
--sorted_result
SELECT c2 FROM t4;
# Update ignore on bad null error
--sorted_result
SELECT c1 FROM t1 WHERE c2 < 1975;
SET SQL_MODE=STRICT_ALL_TABLES;
--error ER_BAD_NULL_ERROR
UPDATE t1 SET c1=NULL WHERE c2 < 1975;
UPDATE IGNORE t1 SET c1=NULL WHERE c2 < 1975;
--sorted_result
SELECT c1 from t1 WHERE c2 < 1975;
SET SQL_MODE=DEFAULT
#Update with invalid values
#UPDATE t2 SET c1='def' WHERE c2=2064;
#--sorted_result
#SELECT c1 FROM t2;
UPDATE t4 SET c1=-70 WHERE c2=75;
--sorted_result
SELECT c1 FROM t4;
#Update duplicate key
--error ER_DUP_ENTRY
UPDATE t1 SET c1=1971 WHERE c2=1995;
#Multi table update
UPDATE t1,t2,t3,t4 SET t3.c1=t4.c1+t4.c2 WHERE t3.c1=61 AND t4.c2=4;
# Update using various access methods
# Update using Const
# EXPLAIN SELECT * FROM t1 WHERE c1=2074 AND c2=2064;
UPDATE t1 SET t1.c1=2073 WHERE c1=2074 AND c2=2064;
--sorted_result
SELECT * FROM t1;
# Update using range
# EXPLAIN SELECT * FROM t1 WHERE c1 BETWEEN 2000 AND 2010;
UPDATE t1 SET t1.c2=0000 WHERE c1 BETWEEN 2000 AND 2010;
--sorted_result
SELECT * FROM t1;
# EXPLAIN SELECT * FROM t1 WHERE c1 IN (2154,2009,1979);
UPDATE t1 SET c1=c1-1,c2=c2+1 WHERE c1 IN (2154,2009,1979);
--sorted_result
SELECT * FROM t1;
# Update using eq_ref
# EXPLAIN SELECT * FROM t1,t2 WHERE t1.c1=t2.c1 AND t1.c2=t2.c2;
UPDATE t1,t2 SET t1.c2='2155' WHERE t1.c1=t2.c1 AND t1.c2=t2.c2;
#BUG49910
--disable_result_log
--sorted_result
SELECT * FROM t1;
--enable_result_log
--sorted_result
SELECT * FROM t2;
--sorted_result
SELECT * FROM t3;
--sorted_result
SELECT * FROM t4;
#Drop tables
DROP TABLE IF EXISTS t1,t2,t3,t4;