197 lines
5.3 KiB
Plaintext
197 lines
5.3 KiB
Plaintext
--source include/force_myisam_default.inc
|
|
--source include/have_myisam.inc
|
|
|
|
SET sql_mode = 'traditional';
|
|
|
|
--echo
|
|
--echo #------------------------------------------------------------------
|
|
--echo # Checking INSERT INTO ... SELECT ...
|
|
--echo #------------------------------------------------------------------
|
|
|
|
--echo
|
|
--echo # - No column list (all columns) + NULL-value for NOT NULL column.
|
|
|
|
# Following scenario is to test the functionality of MyISAM
|
|
|
|
# A table with one NOT NULL column.
|
|
CREATE TABLE t1(a INT, b INT NOT NULL) ENGINE=MyISAM;
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
|
|
# A table with a few NOT NULL columns.
|
|
CREATE TABLE t2(a INT, b INT NOT NULL, c INT NOT NULL, d INT NOT NULL) ENGINE=MyISAM;
|
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
|
|
|
# Aux table with data for t1.
|
|
CREATE TABLE t1_data(a INT, b INT) ENGINE=MyISAM;
|
|
INSERT INTO t1_data VALUES
|
|
(11, 12),
|
|
(NULL, 22),
|
|
(31, NULL),
|
|
(NULL, NULL);
|
|
|
|
# Aux table with data for t2.
|
|
CREATE TABLE t2_data(a INT, b INT, c INT, d INT) ENGINE=MyISAM;
|
|
INSERT INTO t2_data VALUES
|
|
(11, 12, 13, 14),
|
|
(NULL, 22, 23, 24),
|
|
(31, NULL, 33, 34),
|
|
(41, 42, NULL, 44),
|
|
(51, 52, 53, NULL),
|
|
(NULL, NULL, NULL, NULL);
|
|
|
|
--echo
|
|
--error ER_BAD_NULL_ERROR
|
|
INSERT INTO t1 SELECT * FROM t1_data;
|
|
--error ER_BAD_NULL_ERROR
|
|
INSERT INTO v1 SELECT a * 10, b * 10 FROM t1_data;
|
|
|
|
--echo
|
|
--echo # The following SELECT output should have 4 rows.
|
|
--echo # t1's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
--sorted_result
|
|
SELECT * FROM t1;
|
|
DELETE FROM t1;
|
|
|
|
--echo
|
|
--error ER_BAD_NULL_ERROR
|
|
REPLACE INTO t1 SELECT * FROM t1_data;
|
|
--error ER_BAD_NULL_ERROR
|
|
REPLACE INTO v1 SELECT a * 10, b * 10 FROM t1_data;
|
|
|
|
--echo
|
|
--echo # The following SELECT output should have 4 rows.
|
|
--echo # t1's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
--sorted_result
|
|
SELECT * FROM t1;
|
|
DELETE FROM t1;
|
|
|
|
--echo
|
|
--echo # - No column list (all columns) + NULL-value for NOT NULL column.
|
|
--error ER_BAD_NULL_ERROR
|
|
INSERT INTO t2 SELECT * FROM t2_data;
|
|
--error ER_BAD_NULL_ERROR
|
|
INSERT INTO v2 SELECT a * 10, b * 10, c * 10, d * 10 FROM t2_data;
|
|
|
|
--echo
|
|
--echo # The following SELECT output should have 4 rows.
|
|
--echo # t2's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
--sorted_result
|
|
SELECT * FROM t2;
|
|
DELETE FROM t2;
|
|
|
|
--echo
|
|
--echo # - No column list (all columns) + NULL-value for NOT NULL column.
|
|
--error ER_BAD_NULL_ERROR
|
|
REPLACE INTO t2 SELECT * FROM t2_data;
|
|
--error ER_BAD_NULL_ERROR
|
|
REPLACE INTO v2 SELECT a * 10, b * 10, c * 10, d * 10 FROM t2_data;
|
|
|
|
--echo
|
|
--echo # The following SELECT output should have 4 rows.
|
|
--echo # t2's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
--sorted_result
|
|
SELECT * FROM t2;
|
|
DELETE FROM t2;
|
|
|
|
--echo
|
|
--echo # - All columns + NULL-value for NOT NULL column.
|
|
|
|
--echo
|
|
--error ER_BAD_NULL_ERROR
|
|
INSERT INTO t1(a, b) SELECT * FROM t1_data;
|
|
--error ER_BAD_NULL_ERROR
|
|
INSERT INTO v1(a, b) SELECT a * 10, b * 10 FROM t1_data;
|
|
|
|
--echo
|
|
--echo # The following SELECT output should have 4 rows.
|
|
--echo # t1's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
--sorted_result
|
|
SELECT * FROM t1;
|
|
DELETE FROM t1;
|
|
|
|
--echo
|
|
--error ER_BAD_NULL_ERROR
|
|
REPLACE INTO t1(a, b) SELECT * FROM t1_data;
|
|
--error ER_BAD_NULL_ERROR
|
|
REPLACE INTO v1(a, b) SELECT a * 10, b * 10 FROM t1_data;
|
|
|
|
--echo
|
|
--echo # The following SELECT output should have 4 rows.
|
|
--echo # t1's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
--sorted_result
|
|
SELECT * FROM t1;
|
|
DELETE FROM t1;
|
|
|
|
--echo
|
|
--error ER_BAD_NULL_ERROR
|
|
INSERT INTO t2(a, b, c, d) SELECT * FROM t2_data;
|
|
--error ER_BAD_NULL_ERROR
|
|
INSERT INTO v2(a, b, c, d) SELECT a * 10, b * 10, c * 10, d * 10 FROM t2_data;
|
|
|
|
--echo
|
|
--echo # The following SELECT output should have 4 rows.
|
|
--echo # t2's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
--sorted_result
|
|
SELECT * FROM t2;
|
|
DELETE FROM t2;
|
|
|
|
--echo
|
|
--error ER_BAD_NULL_ERROR
|
|
REPLACE INTO t2(a, b, c, d) SELECT * FROM t2_data;
|
|
--error ER_BAD_NULL_ERROR
|
|
REPLACE INTO v2(a, b, c, d) SELECT a * 10, b * 10, c * 10, d * 10 FROM t2_data;
|
|
|
|
--echo
|
|
--echo # The following SELECT output should have 4 rows.
|
|
--echo # t2's engine is MyISAM, so the transaction can not be fully rolled back.
|
|
--sorted_result
|
|
SELECT * FROM t2;
|
|
DELETE FROM t2;
|
|
|
|
# Clean up
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
DROP TABLE t1_data;
|
|
DROP TABLE t2_data;
|
|
DROP VIEW v1;
|
|
DROP VIEW v2;
|
|
|
|
--echo "Test for multi table update (across engines)"
|
|
CREATE TABLE t1(a1 INT NOT NULL, a2 INT) ENGINE = INNODB;
|
|
CREATE TABLE t2(a1 INT NOT NULL, a2 INT) ENGINE = MyISAM;
|
|
INSERT INTO t1 VALUES (1, NULL),(2, 2);
|
|
INSERT INTO t2 VALUES (1, NULL),(2876543, 2098);
|
|
|
|
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1
|
|
FOR EACH ROW
|
|
SET NEW.a1 = 10;
|
|
|
|
CREATE TRIGGER t2_bu BEFORE UPDATE ON t2
|
|
FOR EACH ROW
|
|
SET NEW.a1 = 20;
|
|
|
|
UPDATE t1, t2 SET t1.a1 = NULL , t2.a1 = NULL;
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
|
|
DROP TRIGGER t1_bu;
|
|
DROP TRIGGER t2_bu;
|
|
DROP TABLE t1, t2;
|
|
|
|
--echo "Test for multi table update (across engines)"
|
|
CREATE TABLE t1(a1 INT NOT NULL, a2 INT) ENGINE = INNODB;
|
|
CREATE TABLE t2(a1 INT NOT NULL, a2 INT) ENGINE = MyISAM;
|
|
INSERT INTO t1 VALUES (1, NULL),(2, 2);
|
|
INSERT INTO t2 VALUES (1, NULL),(2876543, 20111098);
|
|
|
|
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1
|
|
FOR EACH ROW
|
|
SET NEW.a1 = NULL;
|
|
--error ER_BAD_NULL_ERROR
|
|
UPDATE t1, t2 SET t1.a1 = 1 , t2.a1 = 2;
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
|
|
DROP TRIGGER t1_bu;
|
|
DROP TABLE t1, t2;
|