1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-05-28 13:01:26 +03:00
mariadb-columnstore-engine/mysql-test/columnstore/basic/r/mcs63_crossengine_views.result
Sergey Zefirov b53c231ca6 MCOL-271 empty strings should not be NULLs (#2794)
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.
2023-03-30 21:18:29 +03:00

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;