File: separate_schema_tables.test

package info (click to toggle)
duckdb 1.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 558
file content (163 lines) | stat: -rw-r--r-- 3,274 bytes parent folder | download | duplicates (4)
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}