mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-05-28 13:01:26 +03:00
This patch improves handling of NULLs in textual fields in ColumnStore. Previously empty strings were considered NULLs and it could be a problem if data scheme allows for empty strings. It was also one of major reasons of behavior difference between ColumnStore and other engines in MariaDB family. Also, this patch fixes some other bugs and incorrect behavior, for example, incorrect comparison for "column <= ''" which evaluates to constant True for all purposes before this patch.
198 lines
7.5 KiB
Plaintext
198 lines
7.5 KiB
Plaintext
DROP DATABASE IF EXISTS mcs63_db;
|
|
CREATE DATABASE mcs63_db;
|
|
USE mcs63_db;
|
|
CREATE USER IF NOT EXISTS'cejuser'@'localhost' IDENTIFIED BY 'Vagrant1|0000001';
|
|
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;
|
|
INSERT INTO t1 VALUES (NULL,''),(1,'aaa'),(2,'bbb'),(3,'ccc'),(4,'ddd'),(5,'eee'),(6,'fff'),(7,'gggg');
|
|
INSERT INTO t2 VALUES (NULL,''),(1,'hhh'),(3,'iii'),(5,'jjj'),(7,'llll'),(9,'kkkk'),(11,'mm'),(13,'n');
|
|
CREATE VIEW v0 AS SELECT * FROM t1, t2 WHERE t1.t1_int = t2.t2_int;
|
|
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v0' AND TABLE_SCHEMA='mcs63_db';
|
|
VIEW_DEFINITION
|
|
select `mcs63_db`.`t1`.`t1_int` AS `t1_int`,`mcs63_db`.`t1`.`t1_char` AS `t1_char`,`mcs63_db`.`t2`.`t2_int` AS `t2_int`,`mcs63_db`.`t2`.`t2_char` AS `t2_char` from `mcs63_db`.`t1` join `mcs63_db`.`t2` where `mcs63_db`.`t1`.`t1_int` = `mcs63_db`.`t2`.`t2_int`
|
|
SELECT * FROM v0;
|
|
t1_int t1_char t2_int t2_char
|
|
1 aaa 1 hhh
|
|
3 ccc 3 iii
|
|
5 eee 5 jjj
|
|
7 gggg 7 llll
|
|
CREATE VIEW v1 AS SELECT t1.t1_int, t2.t2_int, t1.t1_char, t2.t2_char FROM t1, t2 WHERE t1.t1_int = t2.t2_int;
|
|
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1' AND TABLE_SCHEMA='mcs63_db';
|
|
VIEW_DEFINITION
|
|
select `mcs63_db`.`t1`.`t1_int` AS `t1_int`,`mcs63_db`.`t2`.`t2_int` AS `t2_int`,`mcs63_db`.`t1`.`t1_char` AS `t1_char`,`mcs63_db`.`t2`.`t2_char` AS `t2_char` from `mcs63_db`.`t1` join `mcs63_db`.`t2` where `mcs63_db`.`t1`.`t1_int` = `mcs63_db`.`t2`.`t2_int`
|
|
SELECT * FROM v1;
|
|
t1_int t2_int t1_char t2_char
|
|
1 1 aaa hhh
|
|
3 3 ccc iii
|
|
5 5 eee jjj
|
|
7 7 gggg llll
|
|
CREATE VIEW v2 AS SELECT * FROM t1 LEFT JOIN t2 ON t1.t1_int = t2.t2_int;
|
|
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v2' AND TABLE_SCHEMA='mcs63_db';
|
|
VIEW_DEFINITION
|
|
select `mcs63_db`.`t1`.`t1_int` AS `t1_int`,`mcs63_db`.`t1`.`t1_char` AS `t1_char`,`mcs63_db`.`t2`.`t2_int` AS `t2_int`,`mcs63_db`.`t2`.`t2_char` AS `t2_char` from (`mcs63_db`.`t1` left join `mcs63_db`.`t2` on(`mcs63_db`.`t1`.`t1_int` = `mcs63_db`.`t2`.`t2_int`))
|
|
SELECT * FROM v2;
|
|
t1_int t1_char t2_int t2_char
|
|
1 aaa 1 hhh
|
|
3 ccc 3 iii
|
|
5 eee 5 jjj
|
|
7 gggg 7 llll
|
|
NULL NULL NULL
|
|
2 bbb NULL NULL
|
|
4 ddd NULL NULL
|
|
6 fff NULL NULL
|
|
CREATE VIEW v3 AS SELECT t1.t1_int, t2.t2_int FROM t1 LEFT JOIN t2 ON t1.t1_int = t2.t2_int;
|
|
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v3' AND TABLE_SCHEMA='mcs63_db';
|
|
VIEW_DEFINITION
|
|
select `mcs63_db`.`t1`.`t1_int` AS `t1_int`,`mcs63_db`.`t2`.`t2_int` AS `t2_int` from (`mcs63_db`.`t1` left join `mcs63_db`.`t2` on(`mcs63_db`.`t1`.`t1_int` = `mcs63_db`.`t2`.`t2_int`))
|
|
SELECT * FROM v3;
|
|
t1_int t2_int
|
|
1 1
|
|
3 3
|
|
5 5
|
|
7 7
|
|
NULL NULL
|
|
2 NULL
|
|
4 NULL
|
|
6 NULL
|
|
CREATE VIEW v4 AS SELECT * FROM t1 LEFT JOIN t2 ON t1.t1_int = t2.t2_int AND t1.t1_int=1;
|
|
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v4' AND TABLE_SCHEMA='mcs63_db';
|
|
VIEW_DEFINITION
|
|
select `mcs63_db`.`t1`.`t1_int` AS `t1_int`,`mcs63_db`.`t1`.`t1_char` AS `t1_char`,`mcs63_db`.`t2`.`t2_int` AS `t2_int`,`mcs63_db`.`t2`.`t2_char` AS `t2_char` from (`mcs63_db`.`t1` left join `mcs63_db`.`t2` on(`mcs63_db`.`t1`.`t1_int` = `mcs63_db`.`t2`.`t2_int` and `mcs63_db`.`t1`.`t1_int` = 1))
|
|
SELECT * FROM v4;
|
|
t1_int t1_char t2_int t2_char
|
|
1 aaa 1 hhh
|
|
NULL NULL NULL
|
|
2 bbb NULL NULL
|
|
3 ccc NULL NULL
|
|
4 ddd NULL NULL
|
|
5 eee NULL NULL
|
|
6 fff NULL NULL
|
|
7 gggg NULL NULL
|
|
CREATE VIEW v5 AS SELECT * FROM t1 RIGHT JOIN t2 ON t1.t1_int = t2.t2_int;
|
|
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v5' AND TABLE_SCHEMA='mcs63_db';
|
|
VIEW_DEFINITION
|
|
select `mcs63_db`.`t1`.`t1_int` AS `t1_int`,`mcs63_db`.`t1`.`t1_char` AS `t1_char`,`mcs63_db`.`t2`.`t2_int` AS `t2_int`,`mcs63_db`.`t2`.`t2_char` AS `t2_char` from (`mcs63_db`.`t2` left join `mcs63_db`.`t1` on(`mcs63_db`.`t1`.`t1_int` = `mcs63_db`.`t2`.`t2_int`))
|
|
SELECT * FROM v5;
|
|
t1_int t1_char t2_int t2_char
|
|
NULL NULL NULL
|
|
1 aaa 1 hhh
|
|
3 ccc 3 iii
|
|
5 eee 5 jjj
|
|
7 gggg 7 llll
|
|
NULL NULL 9 kkkk
|
|
NULL NULL 11 mm
|
|
NULL NULL 13 n
|
|
CREATE VIEW v6 AS SELECT t1.t1_char, t2.t2_char FROM t1 RIGHT JOIN t2 ON t1.t1_int = t2.t2_int;
|
|
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v6' AND TABLE_SCHEMA='mcs63_db';
|
|
VIEW_DEFINITION
|
|
select `mcs63_db`.`t1`.`t1_char` AS `t1_char`,`mcs63_db`.`t2`.`t2_char` AS `t2_char` from (`mcs63_db`.`t2` left join `mcs63_db`.`t1` on(`mcs63_db`.`t1`.`t1_int` = `mcs63_db`.`t2`.`t2_int`))
|
|
SELECT * FROM v6;
|
|
t1_char t2_char
|
|
NULL
|
|
aaa hhh
|
|
ccc iii
|
|
eee jjj
|
|
gggg llll
|
|
NULL kkkk
|
|
NULL mm
|
|
NULL n
|
|
CREATE VIEW v7 AS SELECT * FROM t1 RIGHT JOIN t2 ON t1.t1_int = t2.t2_int AND t2.t2_int=5;
|
|
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v7' AND TABLE_SCHEMA='mcs63_db';
|
|
VIEW_DEFINITION
|
|
select `mcs63_db`.`t1`.`t1_int` AS `t1_int`,`mcs63_db`.`t1`.`t1_char` AS `t1_char`,`mcs63_db`.`t2`.`t2_int` AS `t2_int`,`mcs63_db`.`t2`.`t2_char` AS `t2_char` from (`mcs63_db`.`t2` left join `mcs63_db`.`t1` on(`mcs63_db`.`t1`.`t1_int` = `mcs63_db`.`t2`.`t2_int` and `mcs63_db`.`t2`.`t2_int` = 5))
|
|
SELECT * FROM v7;
|
|
t1_int t1_char t2_int t2_char
|
|
NULL NULL NULL
|
|
NULL NULL 1 hhh
|
|
NULL NULL 3 iii
|
|
5 eee 5 jjj
|
|
NULL NULL 7 llll
|
|
NULL NULL 9 kkkk
|
|
NULL NULL 11 mm
|
|
NULL NULL 13 n
|
|
DROP VIEW v0, v1, v2, v3, v4, v5, v6, v7;
|
|
DROP TABLE t1, t2;
|
|
#
|
|
# MCOL-4687 Insert from view regression
|
|
#
|
|
CREATE TABLE t1 (id INT, fname VARCHAR(20)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1,'Greg');
|
|
CREATE VIEW v1 as SELECT * FROM t1;
|
|
SELECT * FROM v1;
|
|
id fname
|
|
1 Greg
|
|
CREATE TABLE t2 (id INT, fname VARCHAR(20)) ENGINE=Columnstore;
|
|
INSERT INTO t2 SELECT * FROM (SELECT * FROM v1) t;
|
|
SELECT * FROM t2;
|
|
id fname
|
|
1 Greg
|
|
INSERT INTO t2 SELECT * FROM v1;
|
|
SELECT * FROM t2;
|
|
id fname
|
|
1 Greg
|
|
1 Greg
|
|
DROP TABLE t2;
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (id INT, fname VARCHAR(20)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1,'Greg');
|
|
INSERT INTO t1 VALUES (1,'Roman');
|
|
CREATE TABLE tt (id INT, fname VARCHAR(20)) ENGINE=Columnstore;
|
|
CREATE VIEW v1 as SELECT id, MAX(fname) FROM t1 GROUP BY id;
|
|
CREATE VIEW v2 as SELECT MIN(id), GROUP_CONCAT(fname) FROM t1;
|
|
INSERT INTO tt SELECT * FROM v1;
|
|
SELECT * FROM tt;
|
|
id fname
|
|
1 Roman
|
|
TRUNCATE TABLE tt;
|
|
INSERT INTO tt SELECT * FROM v2;
|
|
SELECT * FROM tt;
|
|
id fname
|
|
1 Greg,Roman
|
|
DROP VIEW v1,v2;
|
|
DROP TABLE tt,t1;
|
|
CREATE TABLE t1 (id INT, fname VARCHAR(20)) ENGINE=ColumnStore;
|
|
INSERT INTO t1 VALUES (1,'Greg');
|
|
INSERT INTO t1 VALUES (1,'Roman');
|
|
CREATE TABLE tt (id INT, fname VARCHAR(20)) ENGINE=Columnstore;
|
|
CREATE VIEW v1 as SELECT id, MAX(fname) FROM t1 GROUP BY id;
|
|
CREATE VIEW v2 as SELECT MIN(id), GROUP_CONCAT(fname) FROM t1;
|
|
INSERT INTO tt SELECT * FROM v1;
|
|
SELECT * FROM tt;
|
|
id fname
|
|
1 Roman
|
|
TRUNCATE TABLE tt;
|
|
INSERT INTO tt SELECT * FROM v2;
|
|
SELECT * FROM tt;
|
|
id fname
|
|
1 Greg,Roman
|
|
DROP VIEW v1,v2;
|
|
DROP TABLE tt,t1;
|
|
CREATE TABLE t1 (id INT, fname VARCHAR(20)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1,'One'),(2,'Two');
|
|
CREATE TABLE t2 (id INT, fname VARCHAR(20)) ENGINE=ColumnStore;
|
|
INSERT INTO t2 VALUES (1,'Uno'),(2,'Due');
|
|
CREATE VIEW v1 AS SELECT t1.id*100+t2.id,CONCAT(t1.fname,'-',t2.fname) FROM t1,t2 WHERE t1.id=t2.id;
|
|
CREATE TABLE tt (id INT, fname VARCHAR(20)) ENGINE=ColumnStore;
|
|
INSERT INTO tt SELECT * FROM v1;
|
|
SELECT * FROM tt;
|
|
id fname
|
|
101 One-Uno
|
|
202 Two-Due
|
|
DROP VIEW v1;
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
|
INSERT INTO tt SELECT v1.id*100+v1.id, CONCAT(v1.fname,'+',v2.fname) FROM v1,v2 WHERE v1.id=v2.id;
|
|
SELECT * FROM tt;
|
|
id fname
|
|
101 One-Uno
|
|
202 Two-Due
|
|
101 One+Uno
|
|
202 Two+Due
|
|
DROP VIEW v1,v2;
|
|
DROP TABLE tt,t2,t1;
|
|
DROP USER 'cejuser'@'localhost';
|
|
DROP DATABASE mcs63_db;
|