File: sqlalchemy.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 (378 lines) | stat: -rw-r--r-- 8,681 bytes parent folder | download | duplicates (3)
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
# name: test/sql/pg_catalog/sqlalchemy.test
# description: Test postgres catalog queries from SQL Alchemy to test postgres compatibility on this frnot
# group: [pg_catalog]

# https://github.com/sqlalchemy/sqlalchemy/blob/master/lib/sqlalchemy/dialects/postgresql/base.py

statement ok
CREATE TYPE greeting AS ENUM('hi', 'bonjour', 'konnichiwa', 'howdy')

statement ok
CREATE TABLE integral_values (
    j smallint,
    k integer,
    l bigint,
    i real,
    z double precision,
    m DECIMAL(4, 1),
    n DECIMAL(9, 2),
    o DECIMAL(18, 4),
    p DECIMAL(37, 2),
    q varchar,
    r bytea,
    s date,
    t time,
    u timestamp,
	v date[],
	w greeting
);

# has_schema
query I
select distinct nspname from pg_namespace " "where lower(nspname)='main'
----
main

# has_table
query I
select relname from pg_class c join pg_namespace n on
n.oid=c.relnamespace where
pg_catalog.pg_table_is_visible(c.oid)
and relname='integral_values'
----
integral_values

query I
select relname from pg_class c join pg_namespace n on
n.oid=c.relnamespace where
pg_catalog.pg_table_is_visible(c.oid)
and relname='f'
----


# has_table with an explicit schema
query I
select relname from pg_class c join pg_namespace n on
n.oid=c.relnamespace where n.nspname='main' and
relname='integral_values'
----
integral_values

query I
select relname from pg_class c join pg_namespace n on
n.oid=c.relnamespace where n.nspname='main' and
relname='f'
----

# has_sequence
statement ok
CREATE SEQUENCE seq

query I
SELECT relname FROM pg_class c join pg_namespace n on
n.oid=c.relnamespace where relkind='S' and
n.nspname='main' and relname='seq'
----
seq

query I
SELECT relname FROM pg_class c join pg_namespace n on
n.oid=c.relnamespace where relkind='S' and
n.nspname='main' and relname='f'
----

# has_type
query I
SELECT EXISTS (
	SELECT * FROM pg_catalog.pg_type t, pg_catalog.pg_namespace n
	WHERE t.typnamespace = n.oid
	AND t.typname = 'integer'
	AND n.nspname = 'main'
	)
----
false

query I
SELECT EXISTS (
	SELECT * FROM pg_catalog.pg_type t, pg_catalog.pg_namespace n
	WHERE t.typnamespace = n.oid
	AND t.typname = 'int4'
	AND n.nspname = 'main'
	)
----
true

# get_table_oid
query I
SELECT COUNT(c.oid)
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE (pg_catalog.pg_table_is_visible(c.oid))
AND c.relname = 'integral_values' AND c.relkind in
('r', 'v', 'm', 'f', 'p')
----
1

# get_schema_names
statement ok
SELECT nspname FROM pg_namespace
WHERE nspname NOT LIKE 'pg_%'
ORDER BY nspname

# get_table_names
query I
SELECT c.relname FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'main' AND c.relkind in ('r', 'p')
----
integral_values

# _get_foreign_table_names
statement ok
SELECT c.relname FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'main' AND c.relkind = 'f'

# get_view_names
statement ok
CREATE SCHEMA myschema

statement ok
CREATE VIEW myschema.v1 AS SELECT 42;

query I
SELECT c.relname FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'myschema' AND c.relkind IN ('v', 'm')
----
v1

# get_sequence_names
query I
SELECT relname FROM pg_class c join pg_namespace n on
n.oid=c.relnamespace where relkind='S' and
n.nspname='main'
----
seq

# get_view_definition
query I
SELECT string_split_regex(pg_get_viewdef(c.oid), '\n')[1] view_def FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'myschema' AND c.relname = 'v1'
AND c.relkind IN ('v', 'm')
----
CREATE VIEW myschema.v1 AS SELECT 42;

# get_columns
query IIII
SELECT a.attname,
	pg_catalog.format_type(a.atttypid, a.atttypmod),
	(
	SELECT pg_catalog.pg_get_expr(d.adbin, d.adrelid)
	FROM pg_catalog.pg_attrdef d
	WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum
	AND a.atthasdef
	) AS DEFAULT,
	a.attnotnull
FROM pg_catalog.pg_attribute a
LEFT JOIN pg_catalog.pg_description pgd ON (
	pgd.objoid = a.attrelid AND pgd.objsubid = a.attnum)
WHERE a.attrelid = (SELECT MIN(oid) FROM pg_class WHERE relname='integral_values')
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum;
----
j	int2	NULL	false
k	int4	NULL	false
l	int8	NULL	false
i	float4	NULL	false
z	float8	NULL	false
m	numeric(4,1)	NULL	false
n	numeric(9,2)	NULL	false
o	numeric(18,4)	NULL	false
p	numeric(37,2)	NULL	false
q	varchar	NULL	false
r	bytea	NULL	false
s	date	NULL	false
t	time	NULL	false
u	timestamp	NULL	false
v	list	NULL	false
w	enum	NULL	false


# get_pk_constraint
statement ok
SELECT a.attname
FROM
	pg_class t
	join pg_index ix on t.oid = ix.indrelid
	join pg_attribute a
		on t.oid=a.attrelid
	WHERE
	t.oid = (SELECT MIN(table_oid) FROM duckdb_tables) and ix.indisprimary = 't'
ORDER BY a.attnum


# get_pk_constraint, >= v8.4
statement ok
SELECT a.attname
FROM pg_attribute a JOIN (
	SELECT unnest(ix.indkey) attnum,
			generate_subscripts(ix.indkey, 1) ord
	FROM pg_index ix
	WHERE ix.indrelid = (SELECT MIN(table_oid) FROM duckdb_tables) AND ix.indisprimary
	) k ON a.attnum=k.attnum
WHERE a.attrelid = (SELECT MIN(table_oid) FROM duckdb_tables)
ORDER BY k.ord

# get_foreign_keys
statement ok
SELECT r.conname,
	pg_catalog.pg_get_constraintdef(r.oid, true) as condef,
	n.nspname as conschema
FROM  pg_catalog.pg_constraint r,
	pg_namespace n,
	pg_class c
WHERE r.conrelid = (SELECT MIN(table_oid) FROM duckdb_tables) AND
	r.contype = 'f' AND
	c.oid = confrelid AND
	n.oid = c.relnamespace
ORDER BY 1

# get_unique_constraints
statement ok
SELECT
	cons.conname as name,
	cons.conkey as key,
	a.attnum as col_num,
	a.attname as col_name
FROM
	pg_catalog.pg_constraint cons
	join pg_attribute a
		on cons.conrelid = a.attrelid AND
		a.attnum = ANY(cons.conkey)
WHERE
	cons.conrelid = (SELECT MIN(table_oid) FROM duckdb_tables) AND
	cons.contype = 'u'

# get_indexes
statement ok
SELECT
	i.relname as relname,
	ix.indisunique, ix.indexprs, ix.indpred,
	a.attname, a.attnum, NULL, ix.indkey,
	am.amname,
	NULL as indnkeyatts
FROM
	pg_class t
		join pg_index ix on t.oid = ix.indrelid
		join pg_class i on i.oid = ix.indexrelid
		left outer join
			pg_attribute a
			on t.oid = a.attrelid
		left outer join
			pg_am am
			on i.relam = am.oid
WHERE
	t.relkind IN ('r', 'v', 'f', 'm')
	and t.oid = (SELECT MIN(table_oid) FROM duckdb_tables)
	and ix.indisprimary = 'f'
ORDER BY
	t.relname,
	i.relname

mode skip
# FIXME: ANY(list) in left outer join
# this will be fixed by either allowing subqueries in left-outer joins
# or by modifying ANY(list) to be a function instead of a rewrite to a subquery

statement ok
SELECT
	i.relname as relname,
	ix.indisunique, ix.indexprs,
	a.attname, a.attnum, c.conrelid, ix.indkey::varchar,
	ix.indoption::varchar, i.reloptions, am.amname,
	pg_get_expr(ix.indpred, ix.indrelid)
FROM
	pg_class t
		join pg_index ix on t.oid = ix.indrelid
		join pg_class i on i.oid = ix.indexrelid
		left outer join
			pg_attribute a
			on t.oid = a.attrelid and a.attnum = ANY(ix.indkey)
		left outer join
			pg_constraint c
			on (ix.indrelid = c.conrelid and
				ix.indexrelid = c.conindid and
				c.contype in ('p', 'u', 'x'))
		left outer join
			pg_am am
			on i.relam = am.oid
WHERE
	t.relkind IN ('r', 'v', 'f', 'm', 'p')
	and t.oid = (SELECT MIN(table_oid) FROM duckdb_tables)
	and ix.indisprimary = 'f'
ORDER BY
	t.relname,
	i.relname

mode unskip

# get_table_comment
statement ok
SELECT
	pgd.description as table_comment
FROM
	pg_catalog.pg_description pgd
WHERE
	pgd.objsubid = 0 AND
	pgd.objoid = (SELECT MIN(table_oid) FROM duckdb_tables)


statement ok
CREATE TABLE check_constraint_tbl (
	i INTEGER CHECK (i < 42)
);

# get_check_constraints
query II
SELECT
	cons.conname as name,
	pg_get_constraintdef(cons.oid) as src
FROM
	pg_catalog.pg_constraint cons
WHERE
	cons.contype = 'c'
----
CHECK((i < 42))	CHECK((i < 42))

# load_enums
query IIII
SELECT t.typname as "name",
	-- no enum defaults in 8.4 at least
	-- t.typdefault as "default",
	pg_catalog.pg_type_is_visible(t.oid) as "visible",
	n.nspname as "schema",
	e.enumlabel as "label"
FROM pg_catalog.pg_type t
		LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
		LEFT JOIN pg_catalog.pg_enum e ON t.oid = e.enumtypid
WHERE t.typtype = 'e' AND e.enumlabel IS NOT NULL
ORDER BY e.enumsortorder
----
greeting	true	main	hi
greeting	true	main	bonjour
greeting	true	main	konnichiwa
greeting	true	main	howdy

# load domains
statement ok
SELECT t.typname as "name",
	pg_catalog.format_type(t.typbasetype, t.typtypmod) as "attype",
	not t.typnotnull as "nullable",
	t.typdefault as "default",
	pg_catalog.pg_type_is_visible(t.oid) as "visible",
	n.nspname as "schema"
FROM pg_catalog.pg_type t
	LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE t.typtype = 'd'