1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

Merge pull request #1986 from tntnatbry/MCOL-1482

MCOL-1482 An UPDATE operation on a non-ColumnStore table involving a cross-engine join
This commit is contained in:
Roman Nozdrin
2021-07-01 14:25:32 +03:00
committed by GitHub
6 changed files with 180 additions and 71 deletions

View File

@ -6,6 +6,7 @@ GRANT ALL PRIVILEGES ON *.* TO 'cejuser'@'localhost';
FLUSH PRIVILEGES;
CREATE TABLE t1 (t1_int INT, t1_char CHAR(5))ENGINE=Innodb;
CREATE TABLE t2 (t2_int INT, t2_char CHAR(5))ENGINE=Columnstore;
CREATE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES (NULL,''),(1,'aaa'),(2,'bbb'),(3,'ccc'),(4,'ddd'),(5,'eee'),(6,'ffff'),(7,'ggggg');
INSERT INTO t2 VALUES (NULL,''),(1,'hhhh'),(3,'iii'),(5,'jjj'),(7,'kkkk'),(9,'lll'),(11,'m'),(13,'nnn');
SELECT * FROM t1, t2 WHERE t1.t1_int = t2.t2_int AND t1.t1_int = 3;
@ -23,17 +24,38 @@ t1_int t1_char t2_int t2_char
5 eee 5 sssss
7 ggggg 7 sssss
UPDATE t1 JOIN t2 on t1.t1_int=t2.t2_int SET t1.t1_char='s';
ERROR HY000: Internal error: IDB-2006: 'mcs45_db.t1' does not exist in Columnstore.
SELECT * FROM t1;
t1_int t1_char
NULL
1 aaa
1 s
2 bbb
3 ccc
3 s
4 ddd
5 eee
5 s
6 ffff
7 ggggg
7 s
UPDATE v1 JOIN t2 on v1.t1_int=t2.t2_int SET v1.t1_char='t';
SELECT * FROM t1;
t1_int t1_char
NULL
1 t
2 bbb
3 t
4 ddd
5 t
6 ffff
7 t
UPDATE t1 JOIN (SELECT * FROM t2 WHERE t2_int < 5) d_t2 on t1.t1_int=d_t2.t2_int SET t1.t1_char='u';
SELECT * FROM t1;
t1_int t1_char
NULL
1 u
2 bbb
3 u
4 ddd
5 t
6 ffff
7 t
SELECT * FROM t2;
t2_int t2_char
NULL NULL
@ -48,13 +70,13 @@ DELETE t2 FROM t2 JOIN t1 ON t1.t1_int = t2.t2_int AND t1.t1_int = 7;
SELECT * FROM t1;
t1_int t1_char
NULL
1 aaa
1 u
2 bbb
3 ccc
3 u
4 ddd
5 eee
5 t
6 ffff
7 ggggg
7 t
SELECT * FROM t2;
t2_int t2_char
NULL NULL
@ -66,5 +88,21 @@ NULL NULL
13 nnn
DELETE t1 FROM t1 JOIN t2 ON t1.t1_int = t2.t2_int AND t1.t1_int = 5;
ERROR HY000: Internal error: IDB-2006: 'mcs45_db.t1' does not exist in Columnstore.
CREATE TABLE mcs(a INT, b INT)ENGINE=Columnstore;
CREATE TABLE idb(a INT, b INT)ENGINE=Innodb;
INSERT INTO mcs(a,b) VALUES (1,2),(2,3),(4,5);
INSERT INTO idb(a,b) VALUES (1,2),(2,3),(4,5);
UPDATE idb dest JOIN mcs src ON dest.a=src.a SET dest.b = dest.b + src.b + 100;
SELECT * FROM idb;
a b
1 104
2 106
4 110
UPDATE idb dest JOIN mcs src ON dest.a=src.a SET dest.b = dest.b + src.b + 100;
SELECT * FROM idb;
a b
1 206
2 209
4 215
DROP USER 'cejuser'@'localhost';
DROP DATABASE mcs45_db;