1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
# name: test/sql/binder/separate_schema_tables.test
# description: Test tables in different schemas with the same name
# group: [binder]
statement ok
PRAGMA enable_verification
statement ok
CREATE SCHEMA IF NOT EXISTS s1;
statement ok
CREATE SCHEMA IF NOT EXISTS s2;
statement ok
CREATE SCHEMA IF NOT EXISTS s3;
statement ok
CREATE TABLE s1.tbl(i INT);
statement ok
CREATE TABLE s2.tbl(i INT);
statement ok
CREATE TABLE s3.tbl(i INT);
statement ok
CREATE TABLE tbl(i INT);
statement ok
INSERT INTO s1.tbl VALUES (10);
statement ok
INSERT INTO s2.tbl VALUES (100);
statement ok
INSERT INTO s3.tbl VALUES (1000);
statement ok
INSERT INTO tbl VALUES (1);
query III
SELECT * FROM tbl, s1.tbl, s2.tbl
----
1 10 100
query IIII
SELECT * FROM tbl, s1.tbl, s2.tbl, s3.tbl
----
1 10 100 1000
statement error
SELECT tbl.i FROM s1.tbl, s2.tbl
----
s1.tbl or s2.tbl
statement error
SELECT tbl.i FROM s1.tbl, s2.tbl, s3.tbl
----
s1.tbl, s2.tbl or s3.tbl
# struct pack
query III
SELECT s1.tbl, s2.tbl, s3.tbl FROM s1.tbl, s2.tbl, s3.tbl
----
{'i': 10} {'i': 100} {'i': 1000}
# test joins
statement ok
CREATE TABLE s1.t AS SELECT 1 id, 's1.t' payload UNION ALL SELECT 10 id, 'AAA' payload
statement ok
CREATE TABLE s2.t AS SELECT 1 id, 's2.t' payload2 UNION ALL SELECT 100 id, 'BBB' payload2
statement ok
CREATE TABLE s3.t AS SELECT 1 id, 's3.t' payload3 UNION ALL SELECT 1000 id, 'CCC' payload3
# USING
query IIII
SELECT * FROM s1.t JOIN s2.t USING (id) JOIN s3.t USING (id)
----
1 s1.t s2.t s3.t
# explicit column reference to using column
query I
SELECT id FROM s1.t JOIN s2.t USING (id) JOIN s3.t USING (id)
----
1
# natural join
query IIII
SELECT * FROM s1.t NATURAL JOIN s2.t NATURAL JOIN s3.t
----
1 s1.t s2.t s3.t
# left join
query IIIIIII
SELECT id, s1.t.id, s2.t.id, s3.t.id, s1.t.payload, s2.t.payload2, s3.t.payload3
FROM s1.t LEFT JOIN s2.t USING (id) LEFT JOIN s3.t USING (id)
ORDER BY ALL
----
1 1 1 1 s1.t s2.t s3.t
10 10 NULL NULL AAA NULL NULL
# right join
query IIIIIII
SELECT id, s1.t.id, s2.t.id, s3.t.id, s1.t.payload, s2.t.payload2, s3.t.payload3
FROM s1.t RIGHT JOIN s2.t USING (id) RIGHT JOIN s3.t USING (id)
ORDER BY ALL
----
1 1 1 1 s1.t s2.t s3.t
1000 NULL NULL 1000 NULL NULL CCC
# full outer join
query IIIIIII
SELECT id, s1.t.id, s2.t.id, s3.t.id, s1.t.payload, s2.t.payload2, s3.t.payload3
FROM s1.t FULL OUTER JOIN s2.t USING (id) FULL OUTER JOIN s3.t USING (id)
ORDER BY ALL
----
1 1 1 1 s1.t s2.t s3.t
10 10 NULL NULL AAA NULL NULL
100 NULL 100 NULL NULL BBB NULL
1000 NULL NULL 1000 NULL NULL CCC
# now do the same with identifiers that differ in case only
statement ok
CREATE OR REPLACE TABLE s1.tbl(col INT);
statement ok
CREATE OR REPLACE TABLE s2.TBL(COL INT);
statement ok
CREATE OR REPLACE TABLE s3.Tbl(Col INT);
statement ok
INSERT INTO s1.tbl VALUES (10);
statement ok
INSERT INTO s2.tbl VALUES (100);
statement ok
INSERT INTO s3.tbl VALUES (1000);
query IIII
SELECT * FROM tbl, s1.tbl, s2.tbl, s3.tbl
----
1 10 100 1000
statement error
SELECT tbl.col FROM s1.tbl, s2.tbl
----
s1.tbl or s2.TBL
statement error
SELECT tbl.col FROM s1.tbl, s2.tbl, s3.tbl
----
s1.tbl, s2.TBL or s3.Tbl
# struct pack
query III
SELECT s1.tbl, s2.tbl, s3.tbl FROM s1.tbl, s2.tbl, s3.tbl
----
{'col': 10} {'COL': 100} {'Col': 1000}
|