Merge 10.1 into 10.2
This commit is contained in:
commit
9835f7b80f
@ -581,6 +581,56 @@ HEX(a)
|
|||||||
C3A4
|
C3A4
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# MDEV-15744: Assertion `derived->table' failed in mysql_derived_merge_for_insert
|
||||||
|
#
|
||||||
|
create table t1 (a int, b int);
|
||||||
|
CREATE OR REPLACE VIEW t2 AS SELECT * FROM t1;
|
||||||
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
LOAD DATA INFILE '../../std_data/loaddata7.dat' INTO TABLE v2
|
||||||
|
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
|
||||||
|
select * from v2;
|
||||||
|
a b
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
4 4
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
select * from t2;
|
||||||
|
a b
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
4 4
|
||||||
|
5 5
|
||||||
|
6 6
|
||||||
|
DROP VIEW IF EXISTS v2,t2;
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
#
|
||||||
|
# MDEV-15950: LOAD DATA INTO compex_view crashed
|
||||||
|
#
|
||||||
|
create table t1 (a int, b int);
|
||||||
|
create table t0 (x int, y int);
|
||||||
|
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1,t0;
|
||||||
|
CREATE VIEW v2 AS SELECT * FROM v1;
|
||||||
|
LOAD DATA INFILE '../../std_data/loaddata7.dat' INTO TABLE v1
|
||||||
|
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
|
||||||
|
ERROR HY000: Incorrect usage of Multi-table VIEW and LOAD
|
||||||
|
LOAD DATA INFILE '../../std_data/loaddata7.dat' INTO TABLE v2
|
||||||
|
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
|
||||||
|
ERROR HY000: Incorrect usage of Multi-table VIEW and LOAD
|
||||||
|
DROP VIEW IF EXISTS v2,v1;
|
||||||
|
DROP TABLE IF EXISTS t1,t0;
|
||||||
|
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a), UNIQUE(b));
|
||||||
|
INSERT INTO t1 VALUES (1,1);
|
||||||
|
CREATE TABLE t2 (c INT);
|
||||||
|
CREATE VIEW v AS SELECT t1.* FROM t1 JOIN t2;
|
||||||
|
SELECT a, b FROM t1 INTO OUTFILE '15645.data';
|
||||||
|
LOAD DATA INFILE '15645.data' IGNORE INTO TABLE v (a,b);
|
||||||
|
ERROR HY000: Incorrect usage of Multi-table VIEW and LOAD
|
||||||
|
LOAD DATA INFILE '15645.data' REPLACE INTO TABLE v (a,b);
|
||||||
|
ERROR HY000: Incorrect usage of Multi-table VIEW and LOAD
|
||||||
|
drop table t1,t2;
|
||||||
|
drop view v;
|
||||||
|
#
|
||||||
# MDEV-15497 Wrong empty value in a GEOMETRY column on LOAD DATA
|
# MDEV-15497 Wrong empty value in a GEOMETRY column on LOAD DATA
|
||||||
#
|
#
|
||||||
SET sql_mode='';
|
SET sql_mode='';
|
||||||
|
@ -76,3 +76,40 @@ set @@log_slow_filter=default;
|
|||||||
set @@log_slow_verbosity=default;
|
set @@log_slow_verbosity=default;
|
||||||
set global log_output= default;
|
set global log_output= default;
|
||||||
truncate mysql.slow_log;
|
truncate mysql.slow_log;
|
||||||
|
#
|
||||||
|
# MDEV-18333 Slow_queries count doesn't increase when slow_query_log is turned off
|
||||||
|
#
|
||||||
|
SET SESSION slow_query_log=OFF;
|
||||||
|
SET GLOBAL slow_query_log=OFF;
|
||||||
|
SET long_query_time=0.1;
|
||||||
|
# Although this query is disallowed by slow_query_log, it should still increment Slow_queries
|
||||||
|
SELECT VARIABLE_VALUE INTO @global_slow_queries
|
||||||
|
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||||
|
WHERE VARIABLE_NAME='SLOW_QUERIES';
|
||||||
|
SELECT sleep(0.2) INTO @tmp FROM DUAL;
|
||||||
|
SELECT
|
||||||
|
CAST(VARIABLE_VALUE AS UNSIGNED)-@global_slow_queries AS Slow_queries_increment
|
||||||
|
FROM
|
||||||
|
INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||||
|
WHERE
|
||||||
|
VARIABLE_NAME='SLOW_QUERIES';
|
||||||
|
Slow_queries_increment
|
||||||
|
1
|
||||||
|
# Although this query is disallowed by log_slow_filter, it should still increment Slow_queries
|
||||||
|
SET log_slow_filter=filesort;
|
||||||
|
SELECT sleep(0.2) INTO @tmp FROM DUAL;
|
||||||
|
SELECT VARIABLE_VALUE INTO @global_slow_queries
|
||||||
|
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||||
|
WHERE VARIABLE_NAME='SLOW_QUERIES';
|
||||||
|
SELECT sleep(0.2) INTO @tmp FROM DUAL;
|
||||||
|
SELECT
|
||||||
|
CAST(VARIABLE_VALUE AS UNSIGNED)-@global_slow_queries AS Slow_queries_increment
|
||||||
|
FROM
|
||||||
|
INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||||
|
WHERE
|
||||||
|
VARIABLE_NAME='SLOW_QUERIES';
|
||||||
|
Slow_queries_increment
|
||||||
|
1
|
||||||
|
SET log_slow_filter=DEFAULT;
|
||||||
|
SET @@long_query_time=default;
|
||||||
|
SET GLOBAL slow_query_log= @org_slow_query_log;
|
||||||
|
@ -7926,6 +7926,39 @@ CALL sp;
|
|||||||
c a b a b
|
c a b a b
|
||||||
DROP PROCEDURE sp;
|
DROP PROCEDURE sp;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-17055: Server crashes in find_order_in_list upon
|
||||||
|
# 2nd (3rd) execution of SP with UPDATE
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
CREATE TABLE t2 (c INT);
|
||||||
|
CREATE PROCEDURE sp() UPDATE v1 SET a = 1 ORDER BY a, b LIMIT 1;
|
||||||
|
LOCK TABLE t2 READ;
|
||||||
|
CALL sp;
|
||||||
|
ERROR HY000: Table 'v1' was not locked with LOCK TABLES
|
||||||
|
UNLOCK TABLES;
|
||||||
|
CALL sp;
|
||||||
|
ERROR 42S22: Unknown column 'b' in 'order clause'
|
||||||
|
CALL sp;
|
||||||
|
ERROR 42S22: Unknown column 'b' in 'order clause'
|
||||||
|
CALL sp;
|
||||||
|
ERROR 42S22: Unknown column 'b' in 'order clause'
|
||||||
|
DROP PROCEDURE sp;
|
||||||
|
CREATE PROCEDURE sp() UPDATE v1 SET a = 1 WHERE a=1 and b=2;
|
||||||
|
LOCK TABLE t2 READ;
|
||||||
|
CALL sp;
|
||||||
|
ERROR HY000: Table 'v1' was not locked with LOCK TABLES
|
||||||
|
UNLOCK TABLES;
|
||||||
|
CALL sp;
|
||||||
|
ERROR 42S22: Unknown column 'b' in 'where clause'
|
||||||
|
CALL sp;
|
||||||
|
ERROR 42S22: Unknown column 'b' in 'where clause'
|
||||||
|
CALL sp;
|
||||||
|
ERROR 42S22: Unknown column 'b' in 'where clause'
|
||||||
|
DROP PROCEDURE sp;
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
# End of 5.5 test
|
# End of 5.5 test
|
||||||
#
|
#
|
||||||
# MDEV-7040: Crash in field_conv, memcpy_field_possible, part#2
|
# MDEV-7040: Crash in field_conv, memcpy_field_possible, part#2
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--- suite/encryption/r/innodb-checksum-algorithm.result
|
--- suite/encryption/r/innodb-checksum-algorithm.result
|
||||||
+++ suite/encryption/r/innodb-checksum-algorithm,32k.reject
|
+++ suite/encryption/r/innodb-checksum-algorithm.result
|
||||||
@@ -13,9 +13,9 @@
|
@@ -13,9 +13,9 @@
|
||||||
SET GLOBAL innodb_default_encryption_key_id=4;
|
SET GLOBAL innodb_default_encryption_key_id=4;
|
||||||
SET GLOBAL innodb_checksum_algorithm=crc32;
|
SET GLOBAL innodb_checksum_algorithm=crc32;
|
||||||
@ -9,10 +9,10 @@
|
|||||||
create table tc_crc32(a serial, b blob, index(b(10))) engine=innodb
|
create table tc_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table te_crc32(a serial, b blob, index(b(10))) engine=innodb
|
create table te_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=yes;
|
@@ -153,9 +153,9 @@
|
||||||
create table t_crc32(a serial, b blob, index(b(10))) engine=innodb
|
|
||||||
@@ -222,9 +222,9 @@
|
|
||||||
t_crc32, tpe_crc32, tp_crc32;
|
t_crc32, tpe_crc32, tp_crc32;
|
||||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||||
create table tce_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table tce_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
@ -21,10 +21,10 @@
|
|||||||
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table te_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table te_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=yes;
|
@@ -293,9 +293,9 @@
|
||||||
create table t_innodb(a serial, b blob, index(b(10))) engine=innodb
|
|
||||||
@@ -431,9 +431,9 @@
|
|
||||||
t_innodb, tpe_innodb, tp_innodb;
|
t_innodb, tpe_innodb, tp_innodb;
|
||||||
SET GLOBAL innodb_checksum_algorithm=none;
|
SET GLOBAL innodb_checksum_algorithm=none;
|
||||||
create table tce_none(a serial, b blob, index(b(10))) engine=innodb
|
create table tce_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
@ -33,6 +33,6 @@
|
|||||||
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table te_none(a serial, b blob, index(b(10))) engine=innodb
|
create table te_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=yes;
|
|
||||||
create table t_none(a serial, b blob, index(b(10))) engine=innodb
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--- suite/encryption/r/innodb-checksum-algorithm.result
|
--- suite/encryption/r/innodb-checksum-algorithm.result
|
||||||
+++ suite/encryption/r/innodb-checksum-algorithm,64k.reject
|
+++ suite/encryption/r/innodb-checksum-algorithm.result
|
||||||
@@ -13,9 +13,9 @@
|
@@ -13,9 +13,9 @@
|
||||||
SET GLOBAL innodb_default_encryption_key_id=4;
|
SET GLOBAL innodb_default_encryption_key_id=4;
|
||||||
SET GLOBAL innodb_checksum_algorithm=crc32;
|
SET GLOBAL innodb_checksum_algorithm=crc32;
|
||||||
@ -9,10 +9,10 @@
|
|||||||
create table tc_crc32(a serial, b blob, index(b(10))) engine=innodb
|
create table tc_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table te_crc32(a serial, b blob, index(b(10))) engine=innodb
|
create table te_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=yes;
|
@@ -153,9 +153,9 @@
|
||||||
create table t_crc32(a serial, b blob, index(b(10))) engine=innodb
|
|
||||||
@@ -222,9 +222,9 @@
|
|
||||||
t_crc32, tpe_crc32, tp_crc32;
|
t_crc32, tpe_crc32, tp_crc32;
|
||||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||||
create table tce_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table tce_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
@ -21,10 +21,10 @@
|
|||||||
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table te_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table te_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=yes;
|
@@ -293,9 +293,9 @@
|
||||||
create table t_innodb(a serial, b blob, index(b(10))) engine=innodb
|
|
||||||
@@ -431,9 +431,9 @@
|
|
||||||
t_innodb, tpe_innodb, tp_innodb;
|
t_innodb, tpe_innodb, tp_innodb;
|
||||||
SET GLOBAL innodb_checksum_algorithm=none;
|
SET GLOBAL innodb_checksum_algorithm=none;
|
||||||
create table tce_none(a serial, b blob, index(b(10))) engine=innodb
|
create table tce_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
@ -33,6 +33,6 @@
|
|||||||
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table te_none(a serial, b blob, index(b(10))) engine=innodb
|
create table te_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=yes;
|
|
||||||
create table t_none(a serial, b blob, index(b(10))) engine=innodb
|
|
||||||
|
@ -14,14 +14,20 @@ create table tce_crc32(a serial, b blob, index(b(10))) engine=innodb
|
|||||||
ROW_FORMAT=COMPRESSED encrypted=yes;
|
ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||||
create table tc_crc32(a serial, b blob, index(b(10))) engine=innodb
|
create table tc_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||||
ROW_FORMAT=COMPRESSED encrypted=no;
|
ROW_FORMAT=COMPRESSED encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table te_crc32(a serial, b blob, index(b(10))) engine=innodb
|
create table te_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=yes;
|
encrypted=yes;
|
||||||
create table t_crc32(a serial, b blob, index(b(10))) engine=innodb
|
create table t_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=no;
|
encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table tpe_crc32(a serial, b blob, index(b(10))) engine=innodb
|
create table tpe_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||||
page_compressed=yes encrypted=yes;
|
page_compressed=yes encrypted=yes;
|
||||||
create table tp_crc32(a serial, b blob, index(b(10))) engine=innodb
|
create table tp_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||||
page_compressed=yes encrypted=no;
|
page_compressed=yes encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
begin;
|
begin;
|
||||||
insert into tce_crc32(b) values (repeat('secret',20));
|
insert into tce_crc32(b) values (repeat('secret',20));
|
||||||
insert into tc_crc32(b) values (repeat('secret',20));
|
insert into tc_crc32(b) values (repeat('secret',20));
|
||||||
@ -148,14 +154,20 @@ create table tce_innodb(a serial, b blob, index(b(10))) engine=innodb
|
|||||||
ROW_FORMAT=COMPRESSED encrypted=yes;
|
ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||||
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
ROW_FORMAT=COMPRESSED encrypted=no;
|
ROW_FORMAT=COMPRESSED encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table te_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table te_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=yes;
|
encrypted=yes;
|
||||||
create table t_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table t_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=no;
|
encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table tpe_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table tpe_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
page_compressed=yes encrypted=yes;
|
page_compressed=yes encrypted=yes;
|
||||||
create table tp_innodb(a serial, b blob, index(b(10))) engine=innodb
|
create table tp_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||||
page_compressed=yes encrypted=no;
|
page_compressed=yes encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
begin;
|
begin;
|
||||||
insert into tce_innodb(b) values (repeat('secret',20));
|
insert into tce_innodb(b) values (repeat('secret',20));
|
||||||
insert into tc_innodb(b) values (repeat('secret',20));
|
insert into tc_innodb(b) values (repeat('secret',20));
|
||||||
@ -282,14 +294,20 @@ create table tce_none(a serial, b blob, index(b(10))) engine=innodb
|
|||||||
ROW_FORMAT=COMPRESSED encrypted=yes;
|
ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||||
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
ROW_FORMAT=COMPRESSED encrypted=no;
|
ROW_FORMAT=COMPRESSED encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table te_none(a serial, b blob, index(b(10))) engine=innodb
|
create table te_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=yes;
|
encrypted=yes;
|
||||||
create table t_none(a serial, b blob, index(b(10))) engine=innodb
|
create table t_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
encrypted=no;
|
encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
create table tpe_none(a serial, b blob, index(b(10))) engine=innodb
|
create table tpe_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
page_compressed=yes encrypted=yes;
|
page_compressed=yes encrypted=yes;
|
||||||
create table tp_none(a serial, b blob, index(b(10))) engine=innodb
|
create table tp_none(a serial, b blob, index(b(10))) engine=innodb
|
||||||
page_compressed=yes encrypted=no;
|
page_compressed=yes encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
begin;
|
begin;
|
||||||
insert into tce_none(b) values (repeat('secret',20));
|
insert into tce_none(b) values (repeat('secret',20));
|
||||||
insert into tc_none(b) values (repeat('secret',20));
|
insert into tc_none(b) values (repeat('secret',20));
|
||||||
|
@ -7,6 +7,8 @@ set GLOBAL innodb_default_encryption_key_id=4;
|
|||||||
create table t1(a int not null primary key, b blob, index(b(10))) engine=innodb row_format=compressed;
|
create table t1(a int not null primary key, b blob, index(b(10))) engine=innodb row_format=compressed;
|
||||||
create table t2(a int not null primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=yes;
|
create table t2(a int not null primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=yes;
|
||||||
create table t3(a int not null primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=no;
|
create table t3(a int not null primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=no;
|
||||||
|
Warnings:
|
||||||
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
insert into t1 values (1, repeat('secret',6000));
|
insert into t1 values (1, repeat('secret',6000));
|
||||||
insert into t2 values (1, repeat('secret',6000));
|
insert into t2 values (1, repeat('secret',6000));
|
||||||
insert into t3 values (1, repeat('secret',6000));
|
insert into t3 values (1, repeat('secret',6000));
|
||||||
|
@ -2,9 +2,16 @@ SET GLOBAL innodb_encrypt_tables = ON;
|
|||||||
SET GLOBAL innodb_encryption_threads = 4;
|
SET GLOBAL innodb_encryption_threads = 4;
|
||||||
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=4;
|
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=4;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 4 when encryption is disabled
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
set @save_global = @@GLOBAL.innodb_default_encryption_key_id;
|
||||||
set innodb_default_encryption_key_id = 99;
|
set innodb_default_encryption_key_id = 99;
|
||||||
|
Warnings:
|
||||||
|
Warning 1210 innodb_default_encryption_key=99 is not available
|
||||||
|
set global innodb_default_encryption_key_id = 99;
|
||||||
|
Warnings:
|
||||||
|
Warning 1210 innodb_default_encryption_key=99 is not available
|
||||||
|
set global innodb_default_encryption_key_id = @save_global;
|
||||||
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB;
|
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB;
|
||||||
ERROR HY000: Can't create table `test`.`t1` (errno: 140 "Wrong create options")
|
ERROR HY000: Can't create table `test`.`t1` (errno: 140 "Wrong create options")
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
@ -38,8 +45,6 @@ t1 CREATE TABLE `t1` (
|
|||||||
PRIMARY KEY (`pk`)
|
PRIMARY KEY (`pk`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `ENCRYPTION_KEY_ID`=4
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `ENCRYPTION_KEY_ID`=4
|
||||||
CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=1;
|
CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=1;
|
||||||
Warnings:
|
|
||||||
Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 1 when encryption is disabled
|
|
||||||
ALTER TABLE t1 ENCRYPTION_KEY_ID=99;
|
ALTER TABLE t1 ENCRYPTION_KEY_ID=99;
|
||||||
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID'
|
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID'
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
@ -51,38 +56,32 @@ drop table t1,t2;
|
|||||||
SET GLOBAL innodb_encrypt_tables=OFF;
|
SET GLOBAL innodb_encrypt_tables=OFF;
|
||||||
CREATE TABLE t1 (a int not null primary key) engine=innodb;
|
CREATE TABLE t1 (a int not null primary key) engine=innodb;
|
||||||
ALTER TABLE t1 ENCRYPTION_KEY_ID=4;
|
ALTER TABLE t1 ENCRYPTION_KEY_ID=4;
|
||||||
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID'
|
|
||||||
SHOW WARNINGS;
|
|
||||||
Level Code Message
|
|
||||||
Warning 140 InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1
|
|
||||||
Error 1478 Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID'
|
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` int(11) NOT NULL,
|
`a` int(11) NOT NULL,
|
||||||
PRIMARY KEY (`a`)
|
PRIMARY KEY (`a`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `ENCRYPTION_KEY_ID`=4
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t2 (a int not null primary key) engine=innodb;
|
CREATE TABLE t2 (a int not null primary key) engine=innodb;
|
||||||
ALTER TABLE t2 ENCRYPTION_KEY_ID=4, ALGORITHM=COPY;
|
ALTER TABLE t2 ENCRYPTION_KEY_ID=4, ALGORITHM=COPY;
|
||||||
ERROR HY000: Can't create table `test`.`t2` (errno: 140 "Wrong create options")
|
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Warning 140 InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1
|
|
||||||
Error 1005 Can't create table `test`.`t2` (errno: 140 "Wrong create options")
|
|
||||||
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
|
|
||||||
SHOW CREATE TABLE t2;
|
SHOW CREATE TABLE t2;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t2 CREATE TABLE `t2` (
|
t2 CREATE TABLE `t2` (
|
||||||
`a` int(11) NOT NULL,
|
`a` int(11) NOT NULL,
|
||||||
PRIMARY KEY (`a`)
|
PRIMARY KEY (`a`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `ENCRYPTION_KEY_ID`=4
|
||||||
CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4;
|
CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4;
|
||||||
ERROR HY000: Can't create table `test`.`t3` (errno: 140 "Wrong create options")
|
DROP TABLE t3;
|
||||||
|
SET GLOBAL innodb_encrypt_tables='FORCE';
|
||||||
|
CREATE TABLE t1 (a int primary key) engine=innodb encrypted=no;
|
||||||
|
ERROR HY000: Can't create table `test`.`t1` (errno: 140 "Wrong create options")
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Warning 140 InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1
|
Warning 140 InnoDB: ENCRYPTED=NO cannot be used with innodb_encrypt_tables=FORCE
|
||||||
Error 1005 Can't create table `test`.`t3` (errno: 140 "Wrong create options")
|
Error 1005 Can't create table `test`.`t1` (errno: 140 "Wrong create options")
|
||||||
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
|
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
create table t1(f1 int not null, f2 int not null)engine=innodb encrypted=yes;
|
create table t1(f1 int not null, f2 int not null)engine=innodb encrypted=yes;
|
||||||
|
@ -12,7 +12,10 @@ SET GLOBAL innodb_encryption_threads = 4;
|
|||||||
|
|
||||||
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=4;
|
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=4;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
set @save_global = @@GLOBAL.innodb_default_encryption_key_id;
|
||||||
set innodb_default_encryption_key_id = 99;
|
set innodb_default_encryption_key_id = 99;
|
||||||
|
set global innodb_default_encryption_key_id = 99;
|
||||||
|
set global innodb_default_encryption_key_id = @save_global;
|
||||||
--error 1005
|
--error 1005
|
||||||
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB;
|
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB;
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
@ -83,22 +86,24 @@ drop table t1,t2;
|
|||||||
#
|
#
|
||||||
# MDEV-17230: encryption_key_id from alter is ignored by encryption threads
|
# MDEV-17230: encryption_key_id from alter is ignored by encryption threads
|
||||||
#
|
#
|
||||||
|
--enable_warnings
|
||||||
SET GLOBAL innodb_encrypt_tables=OFF;
|
SET GLOBAL innodb_encrypt_tables=OFF;
|
||||||
CREATE TABLE t1 (a int not null primary key) engine=innodb;
|
CREATE TABLE t1 (a int not null primary key) engine=innodb;
|
||||||
--error ER_ILLEGAL_HA_CREATE_OPTION
|
|
||||||
ALTER TABLE t1 ENCRYPTION_KEY_ID=4;
|
ALTER TABLE t1 ENCRYPTION_KEY_ID=4;
|
||||||
SHOW WARNINGS;
|
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
CREATE TABLE t2 (a int not null primary key) engine=innodb;
|
CREATE TABLE t2 (a int not null primary key) engine=innodb;
|
||||||
--error ER_CANT_CREATE_TABLE
|
|
||||||
ALTER TABLE t2 ENCRYPTION_KEY_ID=4, ALGORITHM=COPY;
|
ALTER TABLE t2 ENCRYPTION_KEY_ID=4, ALGORITHM=COPY;
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
SHOW CREATE TABLE t2;
|
SHOW CREATE TABLE t2;
|
||||||
|
|
||||||
--error ER_CANT_CREATE_TABLE
|
|
||||||
CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4;
|
CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4;
|
||||||
|
DROP TABLE t3;
|
||||||
|
|
||||||
|
SET GLOBAL innodb_encrypt_tables='FORCE';
|
||||||
|
--error ER_CANT_CREATE_TABLE
|
||||||
|
CREATE TABLE t1 (a int primary key) engine=innodb encrypted=no;
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
|
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
|
@ -3,12 +3,9 @@ INSERT INTO t VALUES (1,2,3),(4,5,6),(7,8,9);
|
|||||||
ALTER TABLE t CHANGE c1 c1 INT NULL FIRST, ALGORITHM=INPLACE;
|
ALTER TABLE t CHANGE c1 c1 INT NULL FIRST, ALGORITHM=INPLACE;
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
set @old_sql_mode = @@sql_mode;
|
|
||||||
set @@sql_mode = 'STRICT_TRANS_TABLES';
|
|
||||||
ALTER TABLE t MODIFY c3 INT NOT NULL, ALGORITHM=INPLACE;
|
ALTER TABLE t MODIFY c3 INT NOT NULL, ALGORITHM=INPLACE;
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
set @@sql_mode = @old_sql_mode;
|
|
||||||
ALTER TABLE t CHANGE c2 c2 INT, CHANGE c2 c2 INT NOT NULL;
|
ALTER TABLE t CHANGE c2 c2 INT, CHANGE c2 c2 INT NOT NULL;
|
||||||
ERROR 42S22: Unknown column 'c2' in 't'
|
ERROR 42S22: Unknown column 'c2' in 't'
|
||||||
ALTER TABLE t MODIFY c2 INT, MODIFY c2 INT NOT NULL;
|
ALTER TABLE t MODIFY c2 INT, MODIFY c2 INT NOT NULL;
|
||||||
@ -24,8 +21,6 @@ ALTER TABLE t MODIFY c2 INT NOT NULL;
|
|||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
connect con1,localhost,root,,;
|
connect con1,localhost,root,,;
|
||||||
connection con1;
|
|
||||||
SET SQL_MODE='STRICT_ALL_TABLES';
|
|
||||||
UPDATE t SET c2=NULL;
|
UPDATE t SET c2=NULL;
|
||||||
ERROR 23000: Column 'c2' cannot be null
|
ERROR 23000: Column 'c2' cannot be null
|
||||||
SELECT * FROM t;
|
SELECT * FROM t;
|
||||||
@ -61,3 +56,34 @@ CREATE TABLE t1(c1 INT) ENGINE=InnoDB;
|
|||||||
ALTER TABLE t1 ADD CONSTRAINT UNIQUE KEY i1(c1);
|
ALTER TABLE t1 ADD CONSTRAINT UNIQUE KEY i1(c1);
|
||||||
ALTER TABLE t1 CHANGE c1 c1 INT NOT NULL,ADD KEY(c1);
|
ALTER TABLE t1 CHANGE c1 c1 INT NOT NULL,ADD KEY(c1);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-18732 InnoDB: ALTER IGNORE returns error for NULL
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(c INT) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
ALTER IGNORE TABLE t1 MODIFY c INT NOT NULL;
|
||||||
|
affected rows: 1
|
||||||
|
info: Records: 1 Duplicates: 0 Warnings: 1
|
||||||
|
Warnings:
|
||||||
|
Warning 1265 Data truncated for column 'c' at row 1
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
ERROR 23000: Column 'c' cannot be null
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(c INT) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (NULL),(1),(1);
|
||||||
|
ALTER IGNORE TABLE t1 ADD UNIQUE(c);
|
||||||
|
affected rows: 3
|
||||||
|
info: Records: 3 Duplicates: 1 Warnings: 0
|
||||||
|
ALTER IGNORE TABLE t1 ADD PRIMARY KEY(c);
|
||||||
|
affected rows: 2
|
||||||
|
info: Records: 2 Duplicates: 0 Warnings: 1
|
||||||
|
Warnings:
|
||||||
|
Warning 1265 Data truncated for column 'c' at row 1
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c
|
||||||
|
0
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -13,14 +13,7 @@ INSERT INTO t VALUES (1,2,3),(4,5,6),(7,8,9);
|
|||||||
ALTER TABLE t CHANGE c1 c1 INT NULL FIRST, ALGORITHM=INPLACE;
|
ALTER TABLE t CHANGE c1 c1 INT NULL FIRST, ALGORITHM=INPLACE;
|
||||||
|
|
||||||
# NULL -> NOT NULL only allowed INPLACE if strict sql_mode is on.
|
# NULL -> NOT NULL only allowed INPLACE if strict sql_mode is on.
|
||||||
--disable_info
|
|
||||||
set @old_sql_mode = @@sql_mode;
|
|
||||||
set @@sql_mode = 'STRICT_TRANS_TABLES';
|
|
||||||
--enable_info
|
|
||||||
ALTER TABLE t MODIFY c3 INT NOT NULL, ALGORITHM=INPLACE;
|
ALTER TABLE t MODIFY c3 INT NOT NULL, ALGORITHM=INPLACE;
|
||||||
--disable_info
|
|
||||||
set @@sql_mode = @old_sql_mode;
|
|
||||||
--enable_info
|
|
||||||
|
|
||||||
# Request some conflicting changes for a single column.
|
# Request some conflicting changes for a single column.
|
||||||
--error ER_BAD_FIELD_ERROR
|
--error ER_BAD_FIELD_ERROR
|
||||||
@ -38,9 +31,6 @@ ALTER TABLE t MODIFY c2 INT NOT NULL;
|
|||||||
--disable_info
|
--disable_info
|
||||||
|
|
||||||
connect (con1,localhost,root,,);
|
connect (con1,localhost,root,,);
|
||||||
connection con1;
|
|
||||||
|
|
||||||
SET SQL_MODE='STRICT_ALL_TABLES';
|
|
||||||
|
|
||||||
--error ER_BAD_NULL_ERROR
|
--error ER_BAD_NULL_ERROR
|
||||||
UPDATE t SET c2=NULL;
|
UPDATE t SET c2=NULL;
|
||||||
@ -76,6 +66,29 @@ ALTER TABLE t1 ADD CONSTRAINT UNIQUE KEY i1(c1);
|
|||||||
ALTER TABLE t1 CHANGE c1 c1 INT NOT NULL,ADD KEY(c1);
|
ALTER TABLE t1 CHANGE c1 c1 INT NOT NULL,ADD KEY(c1);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-18732 InnoDB: ALTER IGNORE returns error for NULL
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(c INT) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
--enable_info
|
||||||
|
ALTER IGNORE TABLE t1 MODIFY c INT NOT NULL;
|
||||||
|
--disable_info
|
||||||
|
--error ER_BAD_NULL_ERROR
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1(c INT) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (NULL),(1),(1);
|
||||||
|
--enable_info
|
||||||
|
ALTER IGNORE TABLE t1 ADD UNIQUE(c);
|
||||||
|
ALTER IGNORE TABLE t1 ADD PRIMARY KEY(c);
|
||||||
|
--disable_info
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# Check that all connections opened by test cases in this file are really
|
# Check that all connections opened by test cases in this file are really
|
||||||
# gone so execution of other tests won't be affected by their presence.
|
# gone so execution of other tests won't be affected by their presence.
|
||||||
--source include/wait_until_count_sessions.inc
|
--source include/wait_until_count_sessions.inc
|
||||||
|
@ -677,6 +677,51 @@ LOAD DATA INFILE '../../std_data/loaddata/mdev-11631.txt' INTO TABLE t1 CHARACTE
|
|||||||
SELECT HEX(a) FROM t1;
|
SELECT HEX(a) FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-15744: Assertion `derived->table' failed in mysql_derived_merge_for_insert
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (a int, b int);
|
||||||
|
CREATE OR REPLACE VIEW t2 AS SELECT * FROM t1;
|
||||||
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
||||||
|
LOAD DATA INFILE '../../std_data/loaddata7.dat' INTO TABLE v2
|
||||||
|
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
|
||||||
|
select * from v2;
|
||||||
|
select * from t2;
|
||||||
|
DROP VIEW IF EXISTS v2,t2;
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-15950: LOAD DATA INTO compex_view crashed
|
||||||
|
--echo #
|
||||||
|
create table t1 (a int, b int);
|
||||||
|
create table t0 (x int, y int);
|
||||||
|
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1,t0;
|
||||||
|
CREATE VIEW v2 AS SELECT * FROM v1;
|
||||||
|
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
|
LOAD DATA INFILE '../../std_data/loaddata7.dat' INTO TABLE v1
|
||||||
|
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
|
||||||
|
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
|
LOAD DATA INFILE '../../std_data/loaddata7.dat' INTO TABLE v2
|
||||||
|
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
|
||||||
|
|
||||||
|
DROP VIEW IF EXISTS v2,v1;
|
||||||
|
DROP TABLE IF EXISTS t1,t0;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a), UNIQUE(b));
|
||||||
|
INSERT INTO t1 VALUES (1,1);
|
||||||
|
CREATE TABLE t2 (c INT);
|
||||||
|
CREATE VIEW v AS SELECT t1.* FROM t1 JOIN t2;
|
||||||
|
SELECT a, b FROM t1 INTO OUTFILE '15645.data';
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
|
LOAD DATA INFILE '15645.data' IGNORE INTO TABLE v (a,b);
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
|
LOAD DATA INFILE '15645.data' REPLACE INTO TABLE v (a,b);
|
||||||
|
drop table t1,t2;
|
||||||
|
drop view v;
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-15497 Wrong empty value in a GEOMETRY column on LOAD DATA
|
--echo # MDEV-15497 Wrong empty value in a GEOMETRY column on LOAD DATA
|
||||||
|
@ -58,3 +58,43 @@ set @@log_slow_filter=default;
|
|||||||
set @@log_slow_verbosity=default;
|
set @@log_slow_verbosity=default;
|
||||||
set global log_output= default;
|
set global log_output= default;
|
||||||
truncate mysql.slow_log;
|
truncate mysql.slow_log;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-18333 Slow_queries count doesn't increase when slow_query_log is turned off
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET SESSION slow_query_log=OFF;
|
||||||
|
SET GLOBAL slow_query_log=OFF;
|
||||||
|
SET long_query_time=0.1;
|
||||||
|
|
||||||
|
--echo # Although this query is disallowed by slow_query_log, it should still increment Slow_queries
|
||||||
|
|
||||||
|
SELECT VARIABLE_VALUE INTO @global_slow_queries
|
||||||
|
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||||
|
WHERE VARIABLE_NAME='SLOW_QUERIES';
|
||||||
|
SELECT sleep(0.2) INTO @tmp FROM DUAL;
|
||||||
|
SELECT
|
||||||
|
CAST(VARIABLE_VALUE AS UNSIGNED)-@global_slow_queries AS Slow_queries_increment
|
||||||
|
FROM
|
||||||
|
INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||||
|
WHERE
|
||||||
|
VARIABLE_NAME='SLOW_QUERIES';
|
||||||
|
|
||||||
|
--echo # Although this query is disallowed by log_slow_filter, it should still increment Slow_queries
|
||||||
|
|
||||||
|
SET log_slow_filter=filesort;
|
||||||
|
SELECT sleep(0.2) INTO @tmp FROM DUAL;
|
||||||
|
SELECT VARIABLE_VALUE INTO @global_slow_queries
|
||||||
|
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||||
|
WHERE VARIABLE_NAME='SLOW_QUERIES';
|
||||||
|
SELECT sleep(0.2) INTO @tmp FROM DUAL;
|
||||||
|
SELECT
|
||||||
|
CAST(VARIABLE_VALUE AS UNSIGNED)-@global_slow_queries AS Slow_queries_increment
|
||||||
|
FROM
|
||||||
|
INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||||
|
WHERE
|
||||||
|
VARIABLE_NAME='SLOW_QUERIES';
|
||||||
|
SET log_slow_filter=DEFAULT;
|
||||||
|
|
||||||
|
SET @@long_query_time=default;
|
||||||
|
SET GLOBAL slow_query_log= @org_slow_query_log;
|
||||||
|
@ -9362,6 +9362,47 @@ CALL sp;
|
|||||||
DROP PROCEDURE sp;
|
DROP PROCEDURE sp;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-17055: Server crashes in find_order_in_list upon
|
||||||
|
--echo # 2nd (3rd) execution of SP with UPDATE
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
CREATE TABLE t2 (c INT);
|
||||||
|
|
||||||
|
CREATE PROCEDURE sp() UPDATE v1 SET a = 1 ORDER BY a, b LIMIT 1;
|
||||||
|
LOCK TABLE t2 READ;
|
||||||
|
--error ER_TABLE_NOT_LOCKED
|
||||||
|
CALL sp;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
CALL sp;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
CALL sp;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
CALL sp;
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP PROCEDURE sp;
|
||||||
|
|
||||||
|
CREATE PROCEDURE sp() UPDATE v1 SET a = 1 WHERE a=1 and b=2;
|
||||||
|
LOCK TABLE t2 READ;
|
||||||
|
--error ER_TABLE_NOT_LOCKED
|
||||||
|
CALL sp;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
CALL sp;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
CALL sp;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
CALL sp;
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP PROCEDURE sp;
|
||||||
|
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
--echo # End of 5.5 test
|
--echo # End of 5.5 test
|
||||||
|
|
||||||
|
@ -5340,7 +5340,7 @@ int Query_log_event::do_apply_event(rpl_group_info *rgi,
|
|||||||
thd->variables.sql_log_slow= opt_log_slow_slave_statements;
|
thd->variables.sql_log_slow= opt_log_slow_slave_statements;
|
||||||
}
|
}
|
||||||
|
|
||||||
thd->enable_slow_log= thd->variables.sql_log_slow;
|
thd->enable_slow_log= true;
|
||||||
mysql_parse(thd, thd->query(), thd->query_length(), &parser_state,
|
mysql_parse(thd, thd->query(), thd->query_length(), &parser_state,
|
||||||
FALSE, FALSE);
|
FALSE, FALSE);
|
||||||
/* Finalize server status flags after executing a statement. */
|
/* Finalize server status flags after executing a statement. */
|
||||||
|
@ -1305,7 +1305,6 @@ bool Sql_cmd_analyze_table::execute(THD *thd)
|
|||||||
FALSE, UINT_MAX, FALSE))
|
FALSE, UINT_MAX, FALSE))
|
||||||
goto error;
|
goto error;
|
||||||
WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, first_table);
|
WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, first_table);
|
||||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
|
||||||
res= mysql_admin_table(thd, first_table, &m_lex->check_opt,
|
res= mysql_admin_table(thd, first_table, &m_lex->check_opt,
|
||||||
"analyze", lock_type, 1, 0, 0, 0,
|
"analyze", lock_type, 1, 0, 0, 0,
|
||||||
&handler::ha_analyze, 0);
|
&handler::ha_analyze, 0);
|
||||||
@ -1337,8 +1336,6 @@ bool Sql_cmd_check_table::execute(THD *thd)
|
|||||||
if (check_table_access(thd, SELECT_ACL, first_table,
|
if (check_table_access(thd, SELECT_ACL, first_table,
|
||||||
TRUE, UINT_MAX, FALSE))
|
TRUE, UINT_MAX, FALSE))
|
||||||
goto error; /* purecov: inspected */
|
goto error; /* purecov: inspected */
|
||||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
|
||||||
|
|
||||||
res= mysql_admin_table(thd, first_table, &m_lex->check_opt, "check",
|
res= mysql_admin_table(thd, first_table, &m_lex->check_opt, "check",
|
||||||
lock_type, 0, 0, HA_OPEN_FOR_REPAIR, 0,
|
lock_type, 0, 0, HA_OPEN_FOR_REPAIR, 0,
|
||||||
&handler::ha_check, &view_check);
|
&handler::ha_check, &view_check);
|
||||||
@ -1362,7 +1359,6 @@ bool Sql_cmd_optimize_table::execute(THD *thd)
|
|||||||
FALSE, UINT_MAX, FALSE))
|
FALSE, UINT_MAX, FALSE))
|
||||||
goto error; /* purecov: inspected */
|
goto error; /* purecov: inspected */
|
||||||
WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, first_table);
|
WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, first_table);
|
||||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
|
||||||
res= (specialflag & SPECIAL_NO_NEW_FUNC) ?
|
res= (specialflag & SPECIAL_NO_NEW_FUNC) ?
|
||||||
mysql_recreate_table(thd, first_table, true) :
|
mysql_recreate_table(thd, first_table, true) :
|
||||||
mysql_admin_table(thd, first_table, &m_lex->check_opt,
|
mysql_admin_table(thd, first_table, &m_lex->check_opt,
|
||||||
@ -1395,7 +1391,6 @@ bool Sql_cmd_repair_table::execute(THD *thd)
|
|||||||
if (check_table_access(thd, SELECT_ACL | INSERT_ACL, first_table,
|
if (check_table_access(thd, SELECT_ACL | INSERT_ACL, first_table,
|
||||||
FALSE, UINT_MAX, FALSE))
|
FALSE, UINT_MAX, FALSE))
|
||||||
goto error; /* purecov: inspected */
|
goto error; /* purecov: inspected */
|
||||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
|
||||||
WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, first_table);
|
WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, first_table);
|
||||||
res= mysql_admin_table(thd, first_table, &m_lex->check_opt, "repair",
|
res= mysql_admin_table(thd, first_table, &m_lex->check_opt, "repair",
|
||||||
TL_WRITE, 1,
|
TL_WRITE, 1,
|
||||||
|
@ -28,7 +28,7 @@ int reassign_keycache_tables(THD* thd, KEY_CACHE *src_cache,
|
|||||||
/**
|
/**
|
||||||
Sql_cmd_analyze_table represents the ANALYZE TABLE statement.
|
Sql_cmd_analyze_table represents the ANALYZE TABLE statement.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_analyze_table : public Sql_cmd
|
class Sql_cmd_analyze_table : public Sql_cmd_admin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -53,7 +53,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
Sql_cmd_check_table represents the CHECK TABLE statement.
|
Sql_cmd_check_table represents the CHECK TABLE statement.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_check_table : public Sql_cmd
|
class Sql_cmd_check_table : public Sql_cmd_admin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -77,7 +77,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
Sql_cmd_optimize_table represents the OPTIMIZE TABLE statement.
|
Sql_cmd_optimize_table represents the OPTIMIZE TABLE statement.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_optimize_table : public Sql_cmd
|
class Sql_cmd_optimize_table : public Sql_cmd_admin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -102,7 +102,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
Sql_cmd_repair_table represents the REPAIR TABLE statement.
|
Sql_cmd_repair_table represents the REPAIR TABLE statement.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_repair_table : public Sql_cmd
|
class Sql_cmd_repair_table : public Sql_cmd_admin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -303,8 +303,6 @@ bool Sql_cmd_alter_table::execute(THD *thd)
|
|||||||
"INDEX DIRECTORY");
|
"INDEX DIRECTORY");
|
||||||
create_info.data_file_name= create_info.index_file_name= NULL;
|
create_info.data_file_name= create_info.index_file_name= NULL;
|
||||||
|
|
||||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
|
||||||
|
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (WSREP(thd) &&
|
if (WSREP(thd) &&
|
||||||
(!thd->is_current_stmt_binlog_format_row() ||
|
(!thd->is_current_stmt_binlog_format_row() ||
|
||||||
@ -351,8 +349,6 @@ bool Sql_cmd_discard_import_tablespace::execute(THD *thd)
|
|||||||
if (check_grant(thd, ALTER_ACL, table_list, false, UINT_MAX, false))
|
if (check_grant(thd, ALTER_ACL, table_list, false, UINT_MAX, false))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Check if we attempt to alter mysql.slow_log or
|
Check if we attempt to alter mysql.slow_log or
|
||||||
mysql.general_log table and return an error if
|
mysql.general_log table and return an error if
|
||||||
|
@ -370,7 +370,7 @@ private:
|
|||||||
statements.
|
statements.
|
||||||
@todo move Alter_info and other ALTER generic structures from Lex here.
|
@todo move Alter_info and other ALTER generic structures from Lex here.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_common_alter_table : public Sql_cmd
|
class Sql_cmd_common_alter_table : public Sql_cmd_admin
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
|
@ -148,6 +148,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual bool execute(THD *thd) = 0;
|
virtual bool execute(THD *thd) = 0;
|
||||||
|
|
||||||
|
virtual bool log_slow_enabled_statement(const THD *thd) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Sql_cmd()
|
Sql_cmd()
|
||||||
{}
|
{}
|
||||||
@ -164,4 +166,17 @@ protected:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Sql_cmd_admin: public Sql_cmd
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Sql_cmd_admin()
|
||||||
|
{}
|
||||||
|
~Sql_cmd_admin()
|
||||||
|
{}
|
||||||
|
bool log_slow_enabled_statement(const THD *thd) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // SQL_CMD_INCLUDED
|
#endif // SQL_CMD_INCLUDED
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2010, Oracle and/or its affiliates.
|
Copyright (c) 2000, 2010, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2010, 2015, MariaDB
|
Copyright (c) 2010, 2019, MariaDB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -41,7 +41,7 @@
|
|||||||
#include "records.h" // init_read_record,
|
#include "records.h" // init_read_record,
|
||||||
#include "filesort.h"
|
#include "filesort.h"
|
||||||
#include "uniques.h"
|
#include "uniques.h"
|
||||||
#include "sql_derived.h" // mysql_handle_list_of_derived
|
#include "sql_derived.h" // mysql_handle_derived
|
||||||
// end_read_record
|
// end_read_record
|
||||||
#include "sql_partition.h" // make_used_partitions_str
|
#include "sql_partition.h" // make_used_partitions_str
|
||||||
|
|
||||||
@ -252,9 +252,9 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
|
|||||||
if (open_and_lock_tables(thd, table_list, TRUE, 0))
|
if (open_and_lock_tables(thd, table_list, TRUE, 0))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
if (mysql_handle_list_of_derived(thd->lex, table_list, DT_MERGE_FOR_INSERT))
|
if (thd->lex->handle_list_of_derived(table_list, DT_MERGE_FOR_INSERT))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
if (mysql_handle_list_of_derived(thd->lex, table_list, DT_PREPARE))
|
if (thd->lex->handle_list_of_derived(table_list, DT_PREPARE))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
if (!table_list->single_table_updatable())
|
if (!table_list->single_table_updatable())
|
||||||
|
@ -93,6 +93,7 @@ mysql_handle_derived(LEX *lex, uint phases)
|
|||||||
sl= sl->next_select_in_list())
|
sl= sl->next_select_in_list())
|
||||||
{
|
{
|
||||||
TABLE_LIST *cursor= sl->get_table_list();
|
TABLE_LIST *cursor= sl->get_table_list();
|
||||||
|
sl->changed_elements|= TOUCHED_SEL_DERIVED;
|
||||||
/*
|
/*
|
||||||
DT_MERGE_FOR_INSERT is not needed for views/derived tables inside
|
DT_MERGE_FOR_INSERT is not needed for views/derived tables inside
|
||||||
subqueries. Views and derived tables of subqueries should be
|
subqueries. Views and derived tables of subqueries should be
|
||||||
@ -202,36 +203,6 @@ mysql_handle_single_derived(LEX *lex, TABLE_LIST *derived, uint phases)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Run specified phases for derived tables/views in the given list
|
|
||||||
|
|
||||||
@param lex LEX for this thread
|
|
||||||
@param table_list list of derived tables/view to handle
|
|
||||||
@param phase_map phases to process tables/views through
|
|
||||||
|
|
||||||
@details
|
|
||||||
This function runs phases specified by the 'phases_map' on derived
|
|
||||||
tables/views found in the 'dt_list' with help of the
|
|
||||||
TABLE_LIST::handle_derived function.
|
|
||||||
'lex' is passed as an argument to the TABLE_LIST::handle_derived.
|
|
||||||
|
|
||||||
@return FALSE ok
|
|
||||||
@return TRUE error
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool
|
|
||||||
mysql_handle_list_of_derived(LEX *lex, TABLE_LIST *table_list, uint phases)
|
|
||||||
{
|
|
||||||
for (TABLE_LIST *tl= table_list; tl; tl= tl->next_local)
|
|
||||||
{
|
|
||||||
if (tl->is_view_or_derived() &&
|
|
||||||
tl->handle_derived(lex, phases))
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Merge a derived table/view into the embedding select
|
Merge a derived table/view into the embedding select
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ struct LEX;
|
|||||||
|
|
||||||
bool mysql_handle_derived(LEX *lex, uint phases);
|
bool mysql_handle_derived(LEX *lex, uint phases);
|
||||||
bool mysql_handle_single_derived(LEX *lex, TABLE_LIST *derived, uint phases);
|
bool mysql_handle_single_derived(LEX *lex, TABLE_LIST *derived, uint phases);
|
||||||
bool mysql_handle_list_of_derived(LEX *lex, TABLE_LIST *dt_list, uint phases);
|
|
||||||
bool mysql_derived_reinit(THD *thd, LEX *lex, TABLE_LIST *derived);
|
bool mysql_derived_reinit(THD *thd, LEX *lex, TABLE_LIST *derived);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1482,7 +1482,7 @@ bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list,
|
|||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
if (table_list->handle_derived(thd->lex, DT_MERGE_FOR_INSERT))
|
if (table_list->handle_derived(thd->lex, DT_MERGE_FOR_INSERT))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
if (mysql_handle_list_of_derived(thd->lex, table_list, DT_PREPARE))
|
if (thd->lex->handle_list_of_derived(table_list, DT_PREPARE))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
/*
|
/*
|
||||||
For subqueries in VALUES() we should not see the table in which we are
|
For subqueries in VALUES() we should not see the table in which we are
|
||||||
@ -1568,7 +1568,6 @@ bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list,
|
|||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
select_lex->fix_prepare_information(thd, &fake_conds, &fake_conds);
|
select_lex->fix_prepare_information(thd, &fake_conds, &fake_conds);
|
||||||
select_lex->first_execution= 0;
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
Only call prepare_for_posistion() if we are not performing a DELAYED
|
Only call prepare_for_posistion() if we are not performing a DELAYED
|
||||||
|
@ -2132,7 +2132,7 @@ void st_select_lex::init_query()
|
|||||||
hidden_bit_fields= 0;
|
hidden_bit_fields= 0;
|
||||||
subquery_in_having= explicit_limit= 0;
|
subquery_in_having= explicit_limit= 0;
|
||||||
is_item_list_lookup= 0;
|
is_item_list_lookup= 0;
|
||||||
first_execution= 1;
|
changed_elements= 0;
|
||||||
first_natural_join_processing= 1;
|
first_natural_join_processing= 1;
|
||||||
first_cond_optimization= 1;
|
first_cond_optimization= 1;
|
||||||
parsing_place= NO_MATTER;
|
parsing_place= NO_MATTER;
|
||||||
@ -3661,9 +3661,10 @@ void st_select_lex::fix_prepare_information(THD *thd, Item **conds,
|
|||||||
Item **having_conds)
|
Item **having_conds)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("st_select_lex::fix_prepare_information");
|
DBUG_ENTER("st_select_lex::fix_prepare_information");
|
||||||
if (!thd->stmt_arena->is_conventional() && first_execution)
|
if (!thd->stmt_arena->is_conventional() &&
|
||||||
|
!(changed_elements & TOUCHED_SEL_COND))
|
||||||
{
|
{
|
||||||
first_execution= 0;
|
changed_elements|= TOUCHED_SEL_COND;
|
||||||
if (group_list.first)
|
if (group_list.first)
|
||||||
{
|
{
|
||||||
if (!group_list_ptrs)
|
if (!group_list_ptrs)
|
||||||
@ -3914,14 +3915,7 @@ bool st_select_lex::optimize_unflattened_subqueries(bool const_only)
|
|||||||
|
|
||||||
bool st_select_lex::handle_derived(LEX *lex, uint phases)
|
bool st_select_lex::handle_derived(LEX *lex, uint phases)
|
||||||
{
|
{
|
||||||
for (TABLE_LIST *cursor= (TABLE_LIST*) table_list.first;
|
return lex->handle_list_of_derived(table_list.first, phases);
|
||||||
cursor;
|
|
||||||
cursor= cursor->next_local)
|
|
||||||
{
|
|
||||||
if (cursor->is_view_or_derived() && cursor->handle_derived(lex, phases))
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4843,6 +4837,20 @@ bool LEX::is_partition_management() const
|
|||||||
alter_info.flags == Alter_info::ALTER_REORGANIZE_PARTITION));
|
alter_info.flags == Alter_info::ALTER_REORGANIZE_PARTITION));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Sql_cmd::log_slow_enabled_statement(const THD *thd) const
|
||||||
|
{
|
||||||
|
return global_system_variables.sql_log_slow && thd->variables.sql_log_slow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Sql_cmd_admin::log_slow_enabled_statement(const THD *thd) const
|
||||||
|
{
|
||||||
|
return opt_log_slow_admin_statements &&
|
||||||
|
Sql_cmd::log_slow_enabled_statement(thd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
uint binlog_unsafe_map[256];
|
uint binlog_unsafe_map[256];
|
||||||
|
|
||||||
|
@ -752,6 +752,10 @@ public:
|
|||||||
:tmp_field(fld), producing_item(item) {}
|
:tmp_field(fld), producing_item(item) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define TOUCHED_SEL_COND 1/* WHERE/HAVING/ON should be reinited before use */
|
||||||
|
#define TOUCHED_SEL_DERIVED (1<<1)/* derived should be reinited before use */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SELECT_LEX - store information of parsed SELECT statment
|
SELECT_LEX - store information of parsed SELECT statment
|
||||||
*/
|
*/
|
||||||
@ -926,7 +930,8 @@ public:
|
|||||||
subquery. Prepared statements work OK in that regard, as in
|
subquery. Prepared statements work OK in that regard, as in
|
||||||
case of an error during prepare the PS is not created.
|
case of an error during prepare the PS is not created.
|
||||||
*/
|
*/
|
||||||
bool first_execution;
|
uint8 changed_elements; // see TOUCHED_SEL_*
|
||||||
|
/* TODO: add foloowing first_* to bitmap above */
|
||||||
bool first_natural_join_processing;
|
bool first_natural_join_processing;
|
||||||
bool first_cond_optimization;
|
bool first_cond_optimization;
|
||||||
/* do not wrap view fields with Item_ref */
|
/* do not wrap view fields with Item_ref */
|
||||||
@ -3157,6 +3162,31 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool tmp_table() const { return create_info.tmp_table(); }
|
bool tmp_table() const { return create_info.tmp_table(); }
|
||||||
bool if_exists() const { return create_info.if_exists(); }
|
bool if_exists() const { return create_info.if_exists(); }
|
||||||
|
|
||||||
|
/*
|
||||||
|
Run specified phases for derived tables/views in the given list
|
||||||
|
|
||||||
|
@param table_list - list of derived tables/view to handle
|
||||||
|
@param phase - phases to process tables/views through
|
||||||
|
|
||||||
|
@details
|
||||||
|
This method runs phases specified by the 'phases' on derived
|
||||||
|
tables/views found in the 'table_list' with help of the
|
||||||
|
TABLE_LIST::handle_derived function.
|
||||||
|
'this' is passed as an argument to the TABLE_LIST::handle_derived.
|
||||||
|
|
||||||
|
@return false - ok
|
||||||
|
@return true - error
|
||||||
|
*/
|
||||||
|
bool handle_list_of_derived(TABLE_LIST *table_list, uint phases)
|
||||||
|
{
|
||||||
|
for (TABLE_LIST *tl= table_list; tl; tl= tl->next_local)
|
||||||
|
{
|
||||||
|
if (tl->is_view_or_derived() && tl->handle_derived(this, phases))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -384,8 +384,9 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||||||
|
|
||||||
if (open_and_lock_tables(thd, table_list, TRUE, 0))
|
if (open_and_lock_tables(thd, table_list, TRUE, 0))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
if (mysql_handle_single_derived(thd->lex, table_list, DT_MERGE_FOR_INSERT) ||
|
if (table_list->handle_derived(thd->lex, DT_MERGE_FOR_INSERT))
|
||||||
mysql_handle_single_derived(thd->lex, table_list, DT_PREPARE))
|
DBUG_RETURN(TRUE);
|
||||||
|
if (thd->lex->handle_list_of_derived(table_list, DT_PREPARE))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
if (setup_tables_and_check_access(thd, &thd->lex->select_lex.context,
|
if (setup_tables_and_check_access(thd, &thd->lex->select_lex.context,
|
||||||
&thd->lex->select_lex.top_join_list,
|
&thd->lex->select_lex.top_join_list,
|
||||||
@ -401,6 +402,11 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||||||
my_error(ER_NON_UPDATABLE_TABLE, MYF(0), table_list->alias, "LOAD");
|
my_error(ER_NON_UPDATABLE_TABLE, MYF(0), table_list->alias, "LOAD");
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
if (table_list->is_multitable())
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_USAGE, MYF(0), "Multi-table VIEW", "LOAD");
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
|
}
|
||||||
if (table_list->prepare_where(thd, 0, TRUE) ||
|
if (table_list->prepare_where(thd, 0, TRUE) ||
|
||||||
table_list->prepare_check_option(thd))
|
table_list->prepare_check_option(thd))
|
||||||
{
|
{
|
||||||
|
@ -1616,7 +1616,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||||||
Commands which always take a long time are logged into
|
Commands which always take a long time are logged into
|
||||||
the slow log only if opt_log_slow_admin_statements is set.
|
the slow log only if opt_log_slow_admin_statements is set.
|
||||||
*/
|
*/
|
||||||
thd->enable_slow_log= thd->variables.sql_log_slow;
|
thd->enable_slow_log= true;
|
||||||
thd->query_plan_flags= QPLAN_INIT;
|
thd->query_plan_flags= QPLAN_INIT;
|
||||||
thd->lex->sql_command= SQLCOM_END; /* to avoid confusing VIEW detectors */
|
thd->lex->sql_command= SQLCOM_END; /* to avoid confusing VIEW detectors */
|
||||||
thd->reset_kill_query();
|
thd->reset_kill_query();
|
||||||
@ -2444,6 +2444,31 @@ com_multi_end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool log_slow_enabled_statement(const THD *thd)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
TODO-10.4: Add classes Sql_cmd_create_index and Sql_cmd_drop_index
|
||||||
|
for symmetry with other admin commands, so these statements can be
|
||||||
|
handled by this command:
|
||||||
|
*/
|
||||||
|
if (thd->lex->m_sql_cmd)
|
||||||
|
return thd->lex->m_sql_cmd->log_slow_enabled_statement(thd);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Currently CREATE INDEX or DROP INDEX cause a full table rebuild
|
||||||
|
and thus classify as slow administrative statements just like
|
||||||
|
ALTER TABLE.
|
||||||
|
*/
|
||||||
|
if ((thd->lex->sql_command == SQLCOM_CREATE_INDEX ||
|
||||||
|
thd->lex->sql_command == SQLCOM_DROP_INDEX) &&
|
||||||
|
!opt_log_slow_admin_statements)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return global_system_variables.sql_log_slow &&
|
||||||
|
thd->variables.sql_log_slow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@note
|
@note
|
||||||
This function must call delete_explain_query().
|
This function must call delete_explain_query().
|
||||||
@ -2460,13 +2485,18 @@ void log_slow_statement(THD *thd)
|
|||||||
if (unlikely(thd->in_sub_stmt))
|
if (unlikely(thd->in_sub_stmt))
|
||||||
goto end; // Don't set time for sub stmt
|
goto end; // Don't set time for sub stmt
|
||||||
|
|
||||||
|
/*
|
||||||
|
Skip both long_query_count increment and logging if the current
|
||||||
|
statement forces slow log suppression (e.g. an SP statement).
|
||||||
|
|
||||||
|
Note, we don't check for global_system_variables.sql_log_slow here.
|
||||||
|
According to the manual, the "Slow_queries" status variable does not require
|
||||||
|
sql_log_slow to be ON. So even if sql_log_slow is OFF, we still need to
|
||||||
|
continue and increment long_query_count (and skip only logging, see below):
|
||||||
|
*/
|
||||||
|
if (!thd->enable_slow_log)
|
||||||
|
goto end; // E.g. SP statement
|
||||||
|
|
||||||
/* Follow the slow log filter configuration. */
|
|
||||||
if (!thd->enable_slow_log || !global_system_variables.sql_log_slow ||
|
|
||||||
(thd->variables.log_slow_filter
|
|
||||||
&& !(thd->variables.log_slow_filter & thd->query_plan_flags)))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
if (((thd->server_status & SERVER_QUERY_WAS_SLOW) ||
|
if (((thd->server_status & SERVER_QUERY_WAS_SLOW) ||
|
||||||
((thd->server_status &
|
((thd->server_status &
|
||||||
(SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) &&
|
(SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) &&
|
||||||
@ -2475,6 +2505,10 @@ void log_slow_statement(THD *thd)
|
|||||||
thd->get_examined_row_count() >= thd->variables.min_examined_row_limit)
|
thd->get_examined_row_count() >= thd->variables.min_examined_row_limit)
|
||||||
{
|
{
|
||||||
thd->status_var.long_query_count++;
|
thd->status_var.long_query_count++;
|
||||||
|
|
||||||
|
if (!log_slow_enabled_statement(thd))
|
||||||
|
goto end;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If rate limiting of slow log writes is enabled, decide whether to log
|
If rate limiting of slow log writes is enabled, decide whether to log
|
||||||
this query to the log or not.
|
this query to the log or not.
|
||||||
@ -2483,6 +2517,14 @@ void log_slow_statement(THD *thd)
|
|||||||
(global_query_id % thd->variables.log_slow_rate_limit) != 0)
|
(global_query_id % thd->variables.log_slow_rate_limit) != 0)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Follow the slow log filter configuration:
|
||||||
|
skip logging if the current statement matches the filter.
|
||||||
|
*/
|
||||||
|
if (thd->variables.log_slow_filter &&
|
||||||
|
!(thd->variables.log_slow_filter & thd->query_plan_flags))
|
||||||
|
goto end;
|
||||||
|
|
||||||
THD_STAGE_INFO(thd, stage_logging_slow_query);
|
THD_STAGE_INFO(thd, stage_logging_slow_query);
|
||||||
slow_log_print(thd, thd->query(), thd->query_length(),
|
slow_log_print(thd, thd->query(), thd->query_length(),
|
||||||
thd->utime_after_query);
|
thd->utime_after_query);
|
||||||
@ -4033,12 +4075,6 @@ end_with_restore_list:
|
|||||||
if (check_one_table_access(thd, INDEX_ACL, all_tables))
|
if (check_one_table_access(thd, INDEX_ACL, all_tables))
|
||||||
goto error; /* purecov: inspected */
|
goto error; /* purecov: inspected */
|
||||||
WSREP_TO_ISOLATION_BEGIN(first_table->db, first_table->table_name, NULL)
|
WSREP_TO_ISOLATION_BEGIN(first_table->db, first_table->table_name, NULL)
|
||||||
/*
|
|
||||||
Currently CREATE INDEX or DROP INDEX cause a full table rebuild
|
|
||||||
and thus classify as slow administrative statements just like
|
|
||||||
ALTER TABLE.
|
|
||||||
*/
|
|
||||||
thd->enable_slow_log&= opt_log_slow_admin_statements;
|
|
||||||
thd->query_plan_flags|= QPLAN_ADMIN;
|
thd->query_plan_flags|= QPLAN_ADMIN;
|
||||||
|
|
||||||
bzero((char*) &create_info, sizeof(create_info));
|
bzero((char*) &create_info, sizeof(create_info));
|
||||||
|
@ -91,7 +91,6 @@ bool Sql_cmd_alter_table_exchange_partition::execute(THD *thd)
|
|||||||
DBUG_ASSERT(!create_info.data_file_name && !create_info.index_file_name);
|
DBUG_ASSERT(!create_info.data_file_name && !create_info.index_file_name);
|
||||||
WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, first_table);
|
WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, first_table);
|
||||||
|
|
||||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
|
||||||
DBUG_RETURN(exchange_partition(thd, first_table, &alter_info));
|
DBUG_RETURN(exchange_partition(thd, first_table, &alter_info));
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
wsrep_error_label:
|
wsrep_error_label:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2002, 2015, Oracle and/or its affiliates.
|
/* Copyright (c) 2002, 2015, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2008, 2017, MariaDB
|
Copyright (c) 2008, 2019, MariaDB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -2944,7 +2944,7 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
|
|||||||
}
|
}
|
||||||
for (; sl; sl= sl->next_select_in_list())
|
for (; sl; sl= sl->next_select_in_list())
|
||||||
{
|
{
|
||||||
if (!sl->first_execution)
|
if (sl->changed_elements & TOUCHED_SEL_COND)
|
||||||
{
|
{
|
||||||
/* remove option which was put by mysql_explain_union() */
|
/* remove option which was put by mysql_explain_union() */
|
||||||
sl->options&= ~SELECT_DESCRIBE;
|
sl->options&= ~SELECT_DESCRIBE;
|
||||||
@ -2991,8 +2991,13 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
|
|||||||
order->next= sl->group_list_ptrs->at(ix+1);
|
order->next= sl->group_list_ptrs->at(ix+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
{ // no harm to do it (item_ptr set on parsing)
|
||||||
|
ORDER *order;
|
||||||
for (order= sl->group_list.first; order; order= order->next)
|
for (order= sl->group_list.first; order; order= order->next)
|
||||||
|
{
|
||||||
order->item= &order->item_ptr;
|
order->item= &order->item_ptr;
|
||||||
|
}
|
||||||
/* Fix ORDER list */
|
/* Fix ORDER list */
|
||||||
for (order= sl->order_list.first; order; order= order->next)
|
for (order= sl->order_list.first; order; order= order->next)
|
||||||
order->item= &order->item_ptr;
|
order->item= &order->item_ptr;
|
||||||
@ -3006,15 +3011,16 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
|
|||||||
for (order= win_spec->order_list->first; order; order= order->next)
|
for (order= win_spec->order_list->first; order; order= order->next)
|
||||||
order->item= &order->item_ptr;
|
order->item= &order->item_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
#ifndef DBUG_OFF
|
|
||||||
bool res=
|
|
||||||
#endif
|
|
||||||
sl->handle_derived(lex, DT_REINIT);
|
|
||||||
DBUG_ASSERT(res == 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (sl->changed_elements & TOUCHED_SEL_DERIVED)
|
||||||
|
{
|
||||||
|
#ifndef DBUG_OFF
|
||||||
|
bool res=
|
||||||
|
#endif
|
||||||
|
sl->handle_derived(lex, DT_REINIT);
|
||||||
|
DBUG_ASSERT(res == 0);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
SELECT_LEX_UNIT *unit= sl->master_unit();
|
SELECT_LEX_UNIT *unit= sl->master_unit();
|
||||||
unit->unclean();
|
unit->unclean();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2016 Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2016 Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009, 2018 MariaDB Corporation
|
Copyright (c) 2009, 2019 MariaDB Corporation
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -898,7 +898,7 @@ JOIN::prepare(TABLE_LIST *tables_init,
|
|||||||
select_lex->check_unrestricted_recursive(
|
select_lex->check_unrestricted_recursive(
|
||||||
thd->variables.only_standard_compliant_cte))
|
thd->variables.only_standard_compliant_cte))
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
if (select_lex->first_execution)
|
if (!(select_lex->changed_elements & TOUCHED_SEL_COND))
|
||||||
select_lex->check_subqueries_with_recursive_references();
|
select_lex->check_subqueries_with_recursive_references();
|
||||||
|
|
||||||
int res= check_and_do_in_subquery_rewrites(this);
|
int res= check_and_do_in_subquery_rewrites(this);
|
||||||
|
@ -417,8 +417,9 @@ st_select_lex_unit::init_prepare_fake_select_lex(THD *thd_arg,
|
|||||||
called at the first execution of the statement, while first_execution
|
called at the first execution of the statement, while first_execution
|
||||||
shows whether this is called at the first execution of the union that
|
shows whether this is called at the first execution of the union that
|
||||||
may form just a subselect.
|
may form just a subselect.
|
||||||
*/
|
*/
|
||||||
if (!fake_select_lex->first_execution && first_execution)
|
if ((fake_select_lex->changed_elements & TOUCHED_SEL_COND) &&
|
||||||
|
first_execution)
|
||||||
{
|
{
|
||||||
for (ORDER *order= global_parameters()->order_list.first;
|
for (ORDER *order= global_parameters()->order_list.first;
|
||||||
order;
|
order;
|
||||||
|
@ -4,7 +4,7 @@ Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
|||||||
Copyright (c) 2008, 2009 Google Inc.
|
Copyright (c) 2008, 2009 Google Inc.
|
||||||
Copyright (c) 2009, Percona Inc.
|
Copyright (c) 2009, Percona Inc.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2013, 2018, MariaDB Corporation.
|
Copyright (c) 2013, 2019, MariaDB Corporation.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted by
|
Portions of this file contain modifications contributed and copyrighted by
|
||||||
Google, Inc. Those modifications are gratefully acknowledged and are described
|
Google, Inc. Those modifications are gratefully acknowledged and are described
|
||||||
@ -708,9 +708,25 @@ static MYSQL_THDVAR_BOOL(compression_default, PLUGIN_VAR_OPCMDARG,
|
|||||||
"Is compression the default for new tables",
|
"Is compression the default for new tables",
|
||||||
NULL, NULL, FALSE);
|
NULL, NULL, FALSE);
|
||||||
|
|
||||||
|
/** Update callback for SET [SESSION] innodb_default_encryption_key_id */
|
||||||
|
static void
|
||||||
|
innodb_default_encryption_key_id_update(THD* thd, st_mysql_sys_var* var,
|
||||||
|
void* var_ptr, const void *save)
|
||||||
|
{
|
||||||
|
uint key_id = *static_cast<const uint*>(save);
|
||||||
|
if (key_id != FIL_DEFAULT_ENCRYPTION_KEY
|
||||||
|
&& !encryption_key_id_exists(key_id)) {
|
||||||
|
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
|
ER_WRONG_ARGUMENTS,
|
||||||
|
"innodb_default_encryption_key=%u"
|
||||||
|
" is not available", key_id);
|
||||||
|
}
|
||||||
|
*static_cast<uint*>(var_ptr) = key_id;
|
||||||
|
}
|
||||||
|
|
||||||
static MYSQL_THDVAR_UINT(default_encryption_key_id, PLUGIN_VAR_RQCMDARG,
|
static MYSQL_THDVAR_UINT(default_encryption_key_id, PLUGIN_VAR_RQCMDARG,
|
||||||
"Default encryption key id used for table encryption.",
|
"Default encryption key id used for table encryption.",
|
||||||
NULL, NULL,
|
NULL, innodb_default_encryption_key_id_update,
|
||||||
FIL_DEFAULT_ENCRYPTION_KEY, 1, UINT_MAX32, 0);
|
FIL_DEFAULT_ENCRYPTION_KEY, 1, UINT_MAX32, 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -11284,8 +11300,8 @@ err_col:
|
|||||||
if (err == DB_SUCCESS) {
|
if (err == DB_SUCCESS) {
|
||||||
err = row_create_table_for_mysql(
|
err = row_create_table_for_mysql(
|
||||||
table, m_trx,
|
table, m_trx,
|
||||||
(fil_encryption_t)options->encryption,
|
fil_encryption_t(options->encryption),
|
||||||
(uint32_t)options->encryption_key_id);
|
options->encryption_key_id);
|
||||||
m_drop_before_rollback = (err == DB_SUCCESS);
|
m_drop_before_rollback = (err == DB_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11757,25 +11773,61 @@ const char*
|
|||||||
create_table_info_t::check_table_options()
|
create_table_info_t::check_table_options()
|
||||||
{
|
{
|
||||||
enum row_type row_format = m_create_info->row_type;
|
enum row_type row_format = m_create_info->row_type;
|
||||||
ha_table_option_struct *options= m_form->s->option_struct;
|
const ha_table_option_struct *options= m_form->s->option_struct;
|
||||||
fil_encryption_t encrypt = (fil_encryption_t)options->encryption;
|
|
||||||
bool should_encrypt = (encrypt == FIL_ENCRYPTION_ON);
|
|
||||||
|
|
||||||
/* Currently we do not support encryption for
|
switch (options->encryption) {
|
||||||
spatial indexes thus do not allow creating table with forced
|
case FIL_ENCRYPTION_OFF:
|
||||||
encryption */
|
if (options->encryption_key_id != FIL_DEFAULT_ENCRYPTION_KEY) {
|
||||||
for(ulint i = 0; i < m_form->s->keys; i++) {
|
push_warning(
|
||||||
const KEY* key = m_form->key_info + i;
|
m_thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
if (key->flags & HA_SPATIAL && should_encrypt) {
|
HA_WRONG_CREATE_OPTION,
|
||||||
push_warning_printf(m_thd, Sql_condition::WARN_LEVEL_WARN,
|
"InnoDB: ENCRYPTED=NO implies"
|
||||||
HA_ERR_UNSUPPORTED,
|
" ENCRYPTION_KEY_ID=1");
|
||||||
"InnoDB: ENCRYPTED=ON not supported for table because "
|
compile_time_assert(FIL_DEFAULT_ENCRYPTION_KEY == 1);
|
||||||
"it contains spatial index.");
|
}
|
||||||
return "ENCRYPTED";
|
if (srv_encrypt_tables != 2) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
push_warning(
|
||||||
|
m_thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
|
HA_WRONG_CREATE_OPTION,
|
||||||
|
"InnoDB: ENCRYPTED=NO cannot be used with"
|
||||||
|
" innodb_encrypt_tables=FORCE");
|
||||||
|
return "ENCRYPTED";
|
||||||
|
case FIL_ENCRYPTION_DEFAULT:
|
||||||
|
if (!srv_encrypt_tables) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* fall through */
|
||||||
|
case FIL_ENCRYPTION_ON:
|
||||||
|
if (!encryption_key_id_exists(options->encryption_key_id)) {
|
||||||
|
push_warning_printf(
|
||||||
|
m_thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
|
HA_WRONG_CREATE_OPTION,
|
||||||
|
"InnoDB: ENCRYPTION_KEY_ID %u not available",
|
||||||
|
options->encryption_key_id);
|
||||||
|
return "ENCRYPTION_KEY_ID";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Currently we do not support encryption for spatial indexes.
|
||||||
|
Do not allow ENCRYPTED=YES if any SPATIAL INDEX exists. */
|
||||||
|
if (options->encryption != FIL_ENCRYPTION_ON) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (ulint i = 0; i < m_form->s->keys; i++) {
|
||||||
|
if (m_form->key_info[i].flags & HA_SPATIAL) {
|
||||||
|
push_warning(m_thd,
|
||||||
|
Sql_condition::WARN_LEVEL_WARN,
|
||||||
|
HA_ERR_UNSUPPORTED,
|
||||||
|
"InnoDB: ENCRYPTED=YES is not"
|
||||||
|
" supported for SPATIAL INDEX");
|
||||||
|
return "ENCRYPTED";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (encrypt != FIL_ENCRYPTION_DEFAULT && !m_allow_file_per_table) {
|
if (!m_allow_file_per_table
|
||||||
|
&& options->encryption != FIL_ENCRYPTION_DEFAULT) {
|
||||||
push_warning(
|
push_warning(
|
||||||
m_thd, Sql_condition::WARN_LEVEL_WARN,
|
m_thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
HA_WRONG_CREATE_OPTION,
|
HA_WRONG_CREATE_OPTION,
|
||||||
@ -11783,14 +11835,6 @@ create_table_info_t::check_table_options()
|
|||||||
return "ENCRYPTED";
|
return "ENCRYPTED";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (encrypt == FIL_ENCRYPTION_OFF && srv_encrypt_tables == 2) {
|
|
||||||
push_warning(
|
|
||||||
m_thd, Sql_condition::WARN_LEVEL_WARN,
|
|
||||||
HA_WRONG_CREATE_OPTION,
|
|
||||||
"InnoDB: ENCRYPTED=OFF cannot be used when innodb_encrypt_tables=FORCE");
|
|
||||||
return "ENCRYPTED";
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check page compression requirements */
|
/* Check page compression requirements */
|
||||||
if (options->page_compressed) {
|
if (options->page_compressed) {
|
||||||
|
|
||||||
@ -11872,46 +11916,6 @@ create_table_info_t::check_table_options()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If encryption is set up make sure that used key_id is found */
|
|
||||||
if (encrypt == FIL_ENCRYPTION_ON ||
|
|
||||||
(encrypt == FIL_ENCRYPTION_DEFAULT && srv_encrypt_tables)) {
|
|
||||||
if (!encryption_key_id_exists((unsigned int)options->encryption_key_id)) {
|
|
||||||
push_warning_printf(
|
|
||||||
m_thd, Sql_condition::WARN_LEVEL_WARN,
|
|
||||||
HA_WRONG_CREATE_OPTION,
|
|
||||||
"InnoDB: ENCRYPTION_KEY_ID %u not available",
|
|
||||||
(uint)options->encryption_key_id
|
|
||||||
);
|
|
||||||
return "ENCRYPTION_KEY_ID";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ignore nondefault key_id if encryption is set off */
|
|
||||||
if (encrypt == FIL_ENCRYPTION_OFF &&
|
|
||||||
options->encryption_key_id != THDVAR(m_thd, default_encryption_key_id)) {
|
|
||||||
push_warning_printf(
|
|
||||||
m_thd, Sql_condition::WARN_LEVEL_WARN,
|
|
||||||
HA_WRONG_CREATE_OPTION,
|
|
||||||
"InnoDB: Ignored ENCRYPTION_KEY_ID %u when encryption is disabled",
|
|
||||||
(uint)options->encryption_key_id
|
|
||||||
);
|
|
||||||
options->encryption_key_id = FIL_DEFAULT_ENCRYPTION_KEY;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If default encryption is used and encryption is disabled, you may
|
|
||||||
not use nondefault encryption_key_id as it is not stored anywhere. */
|
|
||||||
if (encrypt == FIL_ENCRYPTION_DEFAULT
|
|
||||||
&& !srv_encrypt_tables
|
|
||||||
&& options->encryption_key_id != FIL_DEFAULT_ENCRYPTION_KEY) {
|
|
||||||
compile_time_assert(FIL_DEFAULT_ENCRYPTION_KEY == 1);
|
|
||||||
push_warning_printf(
|
|
||||||
m_thd, Sql_condition::WARN_LEVEL_WARN,
|
|
||||||
HA_WRONG_CREATE_OPTION,
|
|
||||||
"InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1"
|
|
||||||
);
|
|
||||||
return "ENCRYPTION_KEY_ID";
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -644,12 +644,24 @@ ha_innobase::check_if_supported_inplace_alter(
|
|||||||
NULL to a NOT NULL value. */
|
NULL to a NOT NULL value. */
|
||||||
if ((ha_alter_info->handler_flags
|
if ((ha_alter_info->handler_flags
|
||||||
& Alter_inplace_info::ALTER_COLUMN_NOT_NULLABLE)
|
& Alter_inplace_info::ALTER_COLUMN_NOT_NULLABLE)
|
||||||
&& !thd_is_strict_mode(m_user_thd)) {
|
&& (ha_alter_info->ignore || !thd_is_strict_mode(m_user_thd))) {
|
||||||
ha_alter_info->unsupported_reason = innobase_get_err_msg(
|
ha_alter_info->unsupported_reason = innobase_get_err_msg(
|
||||||
ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL);
|
ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL);
|
||||||
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
|
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* InnoDB cannot IGNORE when creating unique indexes. IGNORE
|
||||||
|
should silently delete some duplicate rows. Our inplace_alter
|
||||||
|
code will not delete anything from existing indexes. */
|
||||||
|
if (ha_alter_info->ignore
|
||||||
|
&& (ha_alter_info->handler_flags
|
||||||
|
& (Alter_inplace_info::ADD_PK_INDEX
|
||||||
|
| Alter_inplace_info::ADD_UNIQUE_INDEX))) {
|
||||||
|
ha_alter_info->unsupported_reason = innobase_get_err_msg(
|
||||||
|
ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_IGNORE);
|
||||||
|
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
|
||||||
|
}
|
||||||
|
|
||||||
/* DROP PRIMARY KEY is only allowed in combination with ADD
|
/* DROP PRIMARY KEY is only allowed in combination with ADD
|
||||||
PRIMARY KEY. */
|
PRIMARY KEY. */
|
||||||
if ((ha_alter_info->handler_flags
|
if ((ha_alter_info->handler_flags
|
||||||
|
@ -5,7 +5,7 @@ Copyright (c) 2013, 2018, MariaDB Corporation.
|
|||||||
Copyright (c) 2008, 2009 Google Inc.
|
Copyright (c) 2008, 2009 Google Inc.
|
||||||
Copyright (c) 2009, Percona Inc.
|
Copyright (c) 2009, Percona Inc.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2013, 2018, MariaDB Corporation.
|
Copyright (c) 2013, 2019, MariaDB Corporation.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted by
|
Portions of this file contain modifications contributed and copyrighted by
|
||||||
Google, Inc. Those modifications are gratefully acknowledged and are described
|
Google, Inc. Those modifications are gratefully acknowledged and are described
|
||||||
@ -692,9 +692,25 @@ ib_cb_t innodb_api_cb[] = {
|
|||||||
static void innodb_remember_check_sysvar_funcs();
|
static void innodb_remember_check_sysvar_funcs();
|
||||||
mysql_var_check_func check_sysvar_enum;
|
mysql_var_check_func check_sysvar_enum;
|
||||||
|
|
||||||
|
/** Update callback for SET [SESSION] innodb_default_encryption_key_id */
|
||||||
|
static void
|
||||||
|
innodb_default_encryption_key_id_update(THD* thd, st_mysql_sys_var* var,
|
||||||
|
void* var_ptr, const void *save)
|
||||||
|
{
|
||||||
|
uint key_id = *static_cast<const uint*>(save);
|
||||||
|
if (key_id != FIL_DEFAULT_ENCRYPTION_KEY
|
||||||
|
&& !encryption_key_id_exists(key_id)) {
|
||||||
|
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
|
ER_WRONG_ARGUMENTS,
|
||||||
|
"innodb_default_encryption_key=%u"
|
||||||
|
" is not available", key_id);
|
||||||
|
}
|
||||||
|
*static_cast<uint*>(var_ptr) = key_id;
|
||||||
|
}
|
||||||
|
|
||||||
static MYSQL_THDVAR_UINT(default_encryption_key_id, PLUGIN_VAR_RQCMDARG,
|
static MYSQL_THDVAR_UINT(default_encryption_key_id, PLUGIN_VAR_RQCMDARG,
|
||||||
"Default encryption key id used for table encryption.",
|
"Default encryption key id used for table encryption.",
|
||||||
NULL, NULL,
|
NULL, innodb_default_encryption_key_id_update,
|
||||||
FIL_DEFAULT_ENCRYPTION_KEY, 1, UINT_MAX32, 0);
|
FIL_DEFAULT_ENCRYPTION_KEY, 1, UINT_MAX32, 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -11357,8 +11373,7 @@ create_table_def(
|
|||||||
const char* remote_path, /*!< in: Remote path or zero length-string */
|
const char* remote_path, /*!< in: Remote path or zero length-string */
|
||||||
ulint flags, /*!< in: table flags */
|
ulint flags, /*!< in: table flags */
|
||||||
ulint flags2, /*!< in: table flags2 */
|
ulint flags2, /*!< in: table flags2 */
|
||||||
fil_encryption_t mode, /*!< in: encryption mode */
|
const ha_table_option_struct*options)
|
||||||
ulint key_id) /*!< in: encryption key_id */
|
|
||||||
{
|
{
|
||||||
THD* thd = trx->mysql_thd;
|
THD* thd = trx->mysql_thd;
|
||||||
dict_table_t* table;
|
dict_table_t* table;
|
||||||
@ -11549,7 +11564,9 @@ err_col:
|
|||||||
fts_add_doc_id_column(table, heap);
|
fts_add_doc_id_column(table, heap);
|
||||||
}
|
}
|
||||||
|
|
||||||
err = row_create_table_for_mysql(table, trx, false, mode, key_id);
|
err = row_create_table_for_mysql(table, trx, false,
|
||||||
|
fil_encryption_t(options->encryption),
|
||||||
|
options->encryption_key_id);
|
||||||
|
|
||||||
mem_heap_free(heap);
|
mem_heap_free(heap);
|
||||||
|
|
||||||
@ -12380,21 +12397,47 @@ ha_innobase::check_table_options(
|
|||||||
enum row_type row_format = table->s->row_type;
|
enum row_type row_format = table->s->row_type;
|
||||||
ha_table_option_struct *options= table->s->option_struct;
|
ha_table_option_struct *options= table->s->option_struct;
|
||||||
atomic_writes_t awrites = (atomic_writes_t)options->atomic_writes;
|
atomic_writes_t awrites = (atomic_writes_t)options->atomic_writes;
|
||||||
fil_encryption_t encrypt = (fil_encryption_t)options->encryption;
|
|
||||||
|
|
||||||
if (encrypt != FIL_ENCRYPTION_DEFAULT && !use_tablespace) {
|
switch (options->encryption) {
|
||||||
|
case FIL_ENCRYPTION_OFF:
|
||||||
|
if (options->encryption_key_id != FIL_DEFAULT_ENCRYPTION_KEY) {
|
||||||
|
push_warning(
|
||||||
|
thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
|
HA_WRONG_CREATE_OPTION,
|
||||||
|
"InnoDB: ENCRYPTED=NO implies"
|
||||||
|
" ENCRYPTION_KEY_ID=1");
|
||||||
|
compile_time_assert(FIL_DEFAULT_ENCRYPTION_KEY == 1);
|
||||||
|
}
|
||||||
|
if (srv_encrypt_tables != 2) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
push_warning(
|
push_warning(
|
||||||
thd, Sql_condition::WARN_LEVEL_WARN,
|
thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
HA_WRONG_CREATE_OPTION,
|
HA_WRONG_CREATE_OPTION,
|
||||||
"InnoDB: ENCRYPTED requires innodb_file_per_table");
|
"InnoDB: ENCRYPTED=NO cannot be used with"
|
||||||
|
" innodb_encrypt_tables=FORCE");
|
||||||
return "ENCRYPTED";
|
return "ENCRYPTED";
|
||||||
|
case FIL_ENCRYPTION_DEFAULT:
|
||||||
|
if (!srv_encrypt_tables) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* fall through */
|
||||||
|
case FIL_ENCRYPTION_ON:
|
||||||
|
if (!encryption_key_id_exists(options->encryption_key_id)) {
|
||||||
|
push_warning_printf(
|
||||||
|
thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
|
HA_WRONG_CREATE_OPTION,
|
||||||
|
"InnoDB: ENCRYPTION_KEY_ID %u not available",
|
||||||
|
options->encryption_key_id);
|
||||||
|
return "ENCRYPTION_KEY_ID";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (encrypt == FIL_ENCRYPTION_OFF && srv_encrypt_tables == 2) {
|
if (!use_tablespace && options->encryption != FIL_ENCRYPTION_DEFAULT) {
|
||||||
push_warning(
|
push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||||
thd, Sql_condition::WARN_LEVEL_WARN,
|
HA_WRONG_CREATE_OPTION,
|
||||||
HA_WRONG_CREATE_OPTION,
|
"InnoDB: ENCRYPTED requires"
|
||||||
"InnoDB: ENCRYPTED=OFF cannot be used when innodb_encrypt_tables=FORCE");
|
" innodb_file_per_table");
|
||||||
return "ENCRYPTED";
|
return "ENCRYPTED";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -12470,47 +12513,6 @@ ha_innobase::check_table_options(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If encryption is set up make sure that used key_id is found */
|
|
||||||
if (encrypt == FIL_ENCRYPTION_ON ||
|
|
||||||
(encrypt == FIL_ENCRYPTION_DEFAULT && srv_encrypt_tables)) {
|
|
||||||
if (!encryption_key_id_exists((unsigned int)options->encryption_key_id)) {
|
|
||||||
push_warning_printf(
|
|
||||||
thd, Sql_condition::WARN_LEVEL_WARN,
|
|
||||||
HA_WRONG_CREATE_OPTION,
|
|
||||||
"InnoDB: ENCRYPTION_KEY_ID %u not available",
|
|
||||||
(uint)options->encryption_key_id
|
|
||||||
);
|
|
||||||
return "ENCRYPTION_KEY_ID";
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ignore nondefault key_id if encryption is set off */
|
|
||||||
if (encrypt == FIL_ENCRYPTION_OFF &&
|
|
||||||
options->encryption_key_id != THDVAR(thd, default_encryption_key_id)) {
|
|
||||||
push_warning_printf(
|
|
||||||
thd, Sql_condition::WARN_LEVEL_WARN,
|
|
||||||
HA_WRONG_CREATE_OPTION,
|
|
||||||
"InnoDB: Ignored ENCRYPTION_KEY_ID %u when encryption is disabled",
|
|
||||||
(uint)options->encryption_key_id
|
|
||||||
);
|
|
||||||
options->encryption_key_id = FIL_DEFAULT_ENCRYPTION_KEY;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If default encryption is used and encryption is disabled, you may
|
|
||||||
not use nondefault encryption_key_id as it is not stored anywhere. */
|
|
||||||
if (encrypt == FIL_ENCRYPTION_DEFAULT
|
|
||||||
&& !srv_encrypt_tables
|
|
||||||
&& options->encryption_key_id != FIL_DEFAULT_ENCRYPTION_KEY) {
|
|
||||||
compile_time_assert(FIL_DEFAULT_ENCRYPTION_KEY == 1);
|
|
||||||
push_warning_printf(
|
|
||||||
thd, Sql_condition::WARN_LEVEL_WARN,
|
|
||||||
HA_WRONG_CREATE_OPTION,
|
|
||||||
"InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1"
|
|
||||||
);
|
|
||||||
return "ENCRYPTION_KEY_ID";
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check atomic writes requirements */
|
/* Check atomic writes requirements */
|
||||||
if (awrites == ATOMIC_WRITES_ON ||
|
if (awrites == ATOMIC_WRITES_ON ||
|
||||||
(awrites == ATOMIC_WRITES_DEFAULT && srv_use_atomic_writes)) {
|
(awrites == ATOMIC_WRITES_DEFAULT && srv_use_atomic_writes)) {
|
||||||
@ -12568,10 +12570,6 @@ ha_innobase::create(
|
|||||||
|
|
||||||
const char* stmt;
|
const char* stmt;
|
||||||
size_t stmt_len;
|
size_t stmt_len;
|
||||||
/* Cache table options */
|
|
||||||
ha_table_option_struct *options= form->s->option_struct;
|
|
||||||
fil_encryption_t encrypt = (fil_encryption_t)options->encryption;
|
|
||||||
uint key_id = (uint)options->encryption_key_id;
|
|
||||||
|
|
||||||
DBUG_ENTER("ha_innobase::create");
|
DBUG_ENTER("ha_innobase::create");
|
||||||
|
|
||||||
@ -12594,7 +12592,7 @@ ha_innobase::create(
|
|||||||
|
|
||||||
/* Validate create options if innodb_strict_mode is set. */
|
/* Validate create options if innodb_strict_mode is set. */
|
||||||
if (create_options_are_invalid(
|
if (create_options_are_invalid(
|
||||||
thd, form, create_info, use_tablespace)) {
|
thd, form, create_info, use_tablespace)) {
|
||||||
DBUG_RETURN(HA_WRONG_CREATE_OPTION);
|
DBUG_RETURN(HA_WRONG_CREATE_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -12670,7 +12668,8 @@ ha_innobase::create(
|
|||||||
row_mysql_lock_data_dictionary(trx);
|
row_mysql_lock_data_dictionary(trx);
|
||||||
|
|
||||||
error = create_table_def(trx, form, norm_name, temp_path,
|
error = create_table_def(trx, form, norm_name, temp_path,
|
||||||
remote_path, flags, flags2, encrypt, key_id);
|
remote_path, flags, flags2,
|
||||||
|
form->s->option_struct);
|
||||||
if (error) {
|
if (error) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -332,7 +332,7 @@ ha_innobase::check_if_supported_inplace_alter(
|
|||||||
NULL to a NOT NULL value. */
|
NULL to a NOT NULL value. */
|
||||||
if ((ha_alter_info->handler_flags
|
if ((ha_alter_info->handler_flags
|
||||||
& Alter_inplace_info::ALTER_COLUMN_NOT_NULLABLE)
|
& Alter_inplace_info::ALTER_COLUMN_NOT_NULLABLE)
|
||||||
&& !thd_is_strict_mode(user_thd)) {
|
&& (ha_alter_info->ignore || !thd_is_strict_mode(user_thd))) {
|
||||||
ha_alter_info->unsupported_reason = innobase_get_err_msg(
|
ha_alter_info->unsupported_reason = innobase_get_err_msg(
|
||||||
ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL);
|
ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL);
|
||||||
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
|
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
|
||||||
|
@ -398,9 +398,10 @@ IF("$ENV{EXTRA_LIGHT_ARGS}")
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
FILE(REMOVE mysql_server.wixobj extra.wixobj)
|
FILE(REMOVE mysql_server.wixobj extra.wixobj)
|
||||||
|
STRING(REPLACE " " ";" EXTRA_WIX_PREPROCESSOR_FLAGS_LIST ${EXTRA_WIX_PREPROCESSOR_FLAGS})
|
||||||
EXECUTE_PROCESS(
|
EXECUTE_PROCESS(
|
||||||
COMMAND ${CANDLE_EXECUTABLE}
|
COMMAND ${CANDLE_EXECUTABLE}
|
||||||
${EXTRA_WIX_PREPROCESSOR_FLAGS}
|
${EXTRA_WIX_PREPROCESSOR_FLAGS_LIST}
|
||||||
${CANDLE_ARCH}
|
${CANDLE_ARCH}
|
||||||
-ext WixUtilExtension
|
-ext WixUtilExtension
|
||||||
-ext WixFirewallExtension
|
-ext WixFirewallExtension
|
||||||
@ -410,7 +411,7 @@ EXECUTE_PROCESS(
|
|||||||
|
|
||||||
EXECUTE_PROCESS(
|
EXECUTE_PROCESS(
|
||||||
COMMAND ${CANDLE_EXECUTABLE} ${CANDLE_ARCH}
|
COMMAND ${CANDLE_EXECUTABLE} ${CANDLE_ARCH}
|
||||||
${EXTRA_WIX_PREPROCESSOR_FLAGS}
|
${EXTRA_WIX_PREPROCESSOR_FLAGS_LIST}
|
||||||
-ext WixUtilExtension
|
-ext WixUtilExtension
|
||||||
-ext WixFirewallExtension
|
-ext WixFirewallExtension
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/extra.wxs
|
${CMAKE_CURRENT_BINARY_DIR}/extra.wxs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user