should be it
This commit is contained in:
17
external/duckdb/test/sql/pg_catalog/pg_attribute.test
vendored
Normal file
17
external/duckdb/test/sql/pg_catalog/pg_attribute.test
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# name: test/sql/pg_catalog/pg_attribute.test
|
||||
# description: Test pg_attribute function
|
||||
# group: [pg_catalog]
|
||||
|
||||
query IIIIII nosort pg_attribute
|
||||
SELECT * FROM pg_attribute
|
||||
|
||||
query IIIIII nosort pg_attribute
|
||||
SELECT * FROM pg_catalog.pg_attribute
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i integer)
|
||||
|
||||
query III
|
||||
select relname, attname, attnum from pg_attribute join pg_class on (pg_attribute.attrelid=pg_class.oid) where relname='integers' and attnum>=0;
|
||||
----
|
||||
integers i 1
|
||||
25
external/duckdb/test/sql/pg_catalog/pg_constraint.test
vendored
Normal file
25
external/duckdb/test/sql/pg_catalog/pg_constraint.test
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
# name: test/sql/pg_catalog/pg_constraint.test
|
||||
# description: Test pg_constraint function
|
||||
# group: [pg_catalog]
|
||||
|
||||
query IIIIII nosort pg_constraint
|
||||
SELECT * FROM pg_constraint
|
||||
|
||||
statement ok
|
||||
create table a (id int , primary key (id));
|
||||
|
||||
statement ok
|
||||
create table b (id int , foreign_a int, foreign key (foreign_a) references a);
|
||||
|
||||
statement ok
|
||||
insert into a (id) values (0);
|
||||
|
||||
statement ok
|
||||
insert into b (id, foreign_a) VALUES (0, 0);
|
||||
|
||||
query IIIIIIIIIIIIIIIIIIIIII
|
||||
SELECT * EXCLUDE (OID, CONRELID, connamespace) FROM pg_catalog.pg_constraint
|
||||
----
|
||||
PRIMARY KEY(id) p false false true 0 0 0 0 NULL NULL NULL true 0 false [0] NULL NULL NULL NULL NULL NULL
|
||||
NOT NULL x false false true 0 0 0 0 NULL NULL NULL true 0 false [0] NULL NULL NULL NULL NULL NULL
|
||||
FOREIGN KEY (foreign_a) REFERENCES a(id) f false false true 0 0 0 0 NULL NULL NULL true 0 false [1] NULL NULL NULL NULL NULL NULL
|
||||
9
external/duckdb/test/sql/pg_catalog/pg_database.test
vendored
Normal file
9
external/duckdb/test/sql/pg_catalog/pg_database.test
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# name: test/sql/pg_catalog/pg_database.test
|
||||
# description: Test pg_database function
|
||||
# group: [pg_catalog]
|
||||
|
||||
query II nosort pg_dbase
|
||||
SELECT * FROM pg_database
|
||||
|
||||
query II nosort pg_dbase
|
||||
SELECT * FROM pg_catalog.pg_database
|
||||
9
external/duckdb/test/sql/pg_catalog/pg_depend.test
vendored
Normal file
9
external/duckdb/test/sql/pg_catalog/pg_depend.test
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# name: test/sql/pg_catalog/pg_depend.test
|
||||
# description: Test pg_depend function
|
||||
# group: [pg_catalog]
|
||||
|
||||
query IIIIII nosort pg_depend
|
||||
SELECT * FROM pg_depend ORDER BY ALL
|
||||
|
||||
query IIIIII nosort pg_depend
|
||||
SELECT * FROM pg_catalog.pg_depend ORDER BY ALL
|
||||
9
external/duckdb/test/sql/pg_catalog/pg_enum.test
vendored
Normal file
9
external/duckdb/test/sql/pg_catalog/pg_enum.test
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# name: test/sql/pg_catalog/pg_enum.test
|
||||
# description: Test pg_enum function
|
||||
# group: [pg_catalog]
|
||||
|
||||
query IIIIII nosort pg_enum
|
||||
SELECT * FROM pg_enum
|
||||
|
||||
query IIIIII nosort pg_enum
|
||||
SELECT * FROM pg_catalog.pg_enum
|
||||
21
external/duckdb/test/sql/pg_catalog/pg_index.test
vendored
Normal file
21
external/duckdb/test/sql/pg_catalog/pg_index.test
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
# name: test/sql/pg_catalog/pg_index.test
|
||||
# description: Test pg_index function
|
||||
# group: [pg_catalog]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i INTEGER, j INTEGER, k INTEGER)
|
||||
|
||||
statement ok
|
||||
CREATE INDEX i_index ON integers((j + 1), k)
|
||||
|
||||
query IIIIII nosort pg_index
|
||||
SELECT * FROM pg_index
|
||||
|
||||
query IIIIII nosort pg_index
|
||||
SELECT * FROM pg_catalog.pg_index
|
||||
|
||||
query IIIIII nosort pg_indexes
|
||||
SELECT * FROM pg_indexes
|
||||
|
||||
query IIIIII nosort pg_indexes
|
||||
SELECT * FROM pg_catalog.pg_indexes
|
||||
41
external/duckdb/test/sql/pg_catalog/pg_namespace.test
vendored
Normal file
41
external/duckdb/test/sql/pg_catalog/pg_namespace.test
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
# name: test/sql/pg_catalog/pg_namespace.test
|
||||
# description: Test pg_namespace function
|
||||
# group: [pg_catalog]
|
||||
|
||||
require skip_reload
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM pg_namespace WHERE nspname='myschema'
|
||||
----
|
||||
0
|
||||
|
||||
statement ok
|
||||
CREATE SCHEMA myschema
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM pg_namespace WHERE nspname='myschema'
|
||||
----
|
||||
1
|
||||
|
||||
# can query through the "pg_catalog" namespace
|
||||
query IIII nosort pgnamespace
|
||||
SELECT * FROM pg_namespace
|
||||
|
||||
query IIII nosort pgnamespace
|
||||
SELECT * FROM pg_catalog.pg_namespace
|
||||
|
||||
# oid of an entry does not change even after adding new entries
|
||||
query I nosort pgmyschema
|
||||
SELECT * FROM pg_namespace WHERE nspname='myschema'
|
||||
|
||||
statement ok
|
||||
CREATE SCHEMA bla
|
||||
|
||||
statement ok
|
||||
CREATE SCHEMA test
|
||||
|
||||
statement ok
|
||||
CREATE SCHEMA myschema33
|
||||
|
||||
query I nosort pgmyschema
|
||||
SELECT * FROM pg_namespace WHERE nspname='myschema'
|
||||
25
external/duckdb/test/sql/pg_catalog/pg_prepared_statements.test
vendored
Normal file
25
external/duckdb/test/sql/pg_catalog/pg_prepared_statements.test
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
# name: test/sql/pg_catalog/pg_prepared_statements.test
|
||||
# group: [pg_catalog]
|
||||
|
||||
statement ok
|
||||
prepare p1 as select 42;
|
||||
|
||||
statement ok
|
||||
create table tbl(a varchar);
|
||||
|
||||
statement ok
|
||||
prepare p2 as insert into tbl values ('test');
|
||||
|
||||
statement ok
|
||||
prepare p3 as select 21, $1, $2
|
||||
|
||||
statement ok
|
||||
prepare p4 as select $name, $other_name
|
||||
|
||||
query IIIIIIII
|
||||
select * from pg_prepared_statements order by name;
|
||||
----
|
||||
p1 SELECT 42 NULL NULL [INTEGER] NULL NULL NULL
|
||||
p2 INSERT INTO tbl (VALUES ('test')) NULL NULL [BIGINT] NULL NULL NULL
|
||||
p3 SELECT 21, $1, $2 NULL [UNKNOWN, UNKNOWN] NULL NULL NULL NULL
|
||||
p4 SELECT $name, $other_name NULL [UNKNOWN, UNKNOWN] NULL NULL NULL NULL
|
||||
22
external/duckdb/test/sql/pg_catalog/pg_privilege.test
vendored
Normal file
22
external/duckdb/test/sql/pg_catalog/pg_privilege.test
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
# name: test/sql/pg_catalog/pg_privilege.test
|
||||
# description: Test Postgres compatibility privilege functions
|
||||
# group: [pg_catalog]
|
||||
|
||||
foreach function has_any_column_privilege has_database_privilege has_foreign_data_wrapper_privilege has_function_privilege has_language_privilege has_schema_privilege has_sequence_privilege has_server_privilege has_table_privilege has_tablespace_privilege
|
||||
|
||||
query I
|
||||
SELECT ${function}('main', 'test')
|
||||
----
|
||||
true
|
||||
|
||||
query I
|
||||
SELECT ${function}(current_user, 'main', 'test')
|
||||
----
|
||||
true
|
||||
|
||||
endloop
|
||||
|
||||
query II
|
||||
SELECT has_column_privilege('main', 'test', 'col'), has_column_privilege(current_user, 'main', 'test', 'col')
|
||||
----
|
||||
true true
|
||||
43
external/duckdb/test/sql/pg_catalog/pg_proc.test_slow
vendored
Normal file
43
external/duckdb/test/sql/pg_catalog/pg_proc.test_slow
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
# name: test/sql/pg_catalog/pg_proc.test_slow
|
||||
# description: Test pg_proc function
|
||||
# group: [pg_catalog]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
SELECT * FROM pg_proc;
|
||||
|
||||
statement ok
|
||||
CREATE MACRO add_default1(a := 3, b := 5) AS a + b
|
||||
|
||||
statement ok
|
||||
CREATE MACRO add_default2(a, b := 5) AS a + b
|
||||
|
||||
statement ok
|
||||
SELECT * FROM pg_proc;
|
||||
|
||||
query I
|
||||
select distinct proname from pg_proc where proname='sqrt';
|
||||
----
|
||||
sqrt
|
||||
|
||||
query IIIIII
|
||||
select proisagg, prorettype, proargtypes, proargnames, pronargs, provolatile FROM pg_proc WHERE proname='corr';
|
||||
----
|
||||
true DOUBLE [DOUBLE, DOUBLE] [y, x] 2 i
|
||||
|
||||
query IIII
|
||||
select provariadic, prorettype, proargtypes, proargnames FROM pg_proc WHERE proname='printf';
|
||||
----
|
||||
ANY VARCHAR [VARCHAR] [format]
|
||||
|
||||
query II
|
||||
SELECT prokind, provolatile FROM pg_proc WHERE proname = 'random'
|
||||
----
|
||||
f v
|
||||
|
||||
query I
|
||||
SELECT length(prosqlbody) > 0 FROM pg_proc WHERE proname = 'add_default1'
|
||||
----
|
||||
true
|
||||
17
external/duckdb/test/sql/pg_catalog/pg_sequence.test
vendored
Normal file
17
external/duckdb/test/sql/pg_catalog/pg_sequence.test
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# name: test/sql/pg_catalog/pg_sequence.test
|
||||
# description: Test pg_sequence function
|
||||
# group: [pg_catalog]
|
||||
|
||||
statement ok
|
||||
CREATE SEQUENCE seq
|
||||
|
||||
query IIIIII nosort pg_seq
|
||||
SELECT * FROM pg_sequence
|
||||
|
||||
query IIIIII nosort pg_seq
|
||||
SELECT * FROM pg_catalog.pg_sequence
|
||||
|
||||
query IIIII
|
||||
SELECT seqstart, seqincrement, seqmax, seqmin, seqcycle FROM pg_sequence
|
||||
----
|
||||
1 1 9223372036854775807 1 False
|
||||
17
external/duckdb/test/sql/pg_catalog/pg_sequences.test
vendored
Normal file
17
external/duckdb/test/sql/pg_catalog/pg_sequences.test
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# name: test/sql/pg_catalog/pg_sequences.test
|
||||
# description: Test pg_sequences function
|
||||
# group: [pg_catalog]
|
||||
|
||||
statement ok
|
||||
CREATE SEQUENCE seq
|
||||
|
||||
query IIIIII nosort pg_seq
|
||||
SELECT * FROM pg_sequences
|
||||
|
||||
query IIIIII nosort pg_seq
|
||||
SELECT * FROM pg_catalog.pg_sequences
|
||||
|
||||
query IIIII
|
||||
SELECT sequencename, min_value, max_value, start_value, cycle FROM pg_sequences
|
||||
----
|
||||
seq 1 9223372036854775807 1 False
|
||||
22
external/duckdb/test/sql/pg_catalog/pg_settings.test
vendored
Normal file
22
external/duckdb/test/sql/pg_catalog/pg_settings.test
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
# name: test/sql/pg_catalog/pg_settings.test
|
||||
# description: Test pg_settings function
|
||||
# group: [pg_catalog]
|
||||
|
||||
statement ok
|
||||
SET default_null_order='nulls_first';
|
||||
|
||||
statement ok
|
||||
SELECT * FROM pg_settings;
|
||||
|
||||
query II
|
||||
SELECT name, setting FROM pg_settings WHERE name='default_null_order';
|
||||
----
|
||||
default_null_order NULLS_FIRST
|
||||
|
||||
statement ok
|
||||
SET default_null_order='nulls_last'
|
||||
|
||||
query II
|
||||
SELECT name, setting FROM pg_settings WHERE name='default_null_order';
|
||||
----
|
||||
default_null_order NULLS_LAST
|
||||
9
external/duckdb/test/sql/pg_catalog/pg_tablespace.test
vendored
Normal file
9
external/duckdb/test/sql/pg_catalog/pg_tablespace.test
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# name: test/sql/pg_catalog/pg_tablespace.test
|
||||
# description: Test pg_tablespace function
|
||||
# group: [pg_catalog]
|
||||
|
||||
query IIIIII nosort pg_tspace
|
||||
SELECT * FROM pg_tablespace
|
||||
|
||||
query IIIIII nosort pg_tspace
|
||||
SELECT * FROM pg_catalog.pg_tablespace
|
||||
117
external/duckdb/test/sql/pg_catalog/pg_type.test
vendored
Normal file
117
external/duckdb/test/sql/pg_catalog/pg_type.test
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
# name: test/sql/pg_catalog/pg_type.test
|
||||
# description: Test pg_type function
|
||||
# group: [pg_catalog]
|
||||
|
||||
statement ok
|
||||
CREATE TYPE greeting AS ENUM('hi', 'bonjour', 'konnichiwa', 'howdy')
|
||||
|
||||
statement ok
|
||||
SELECT * FROM pg_type
|
||||
|
||||
statement ok
|
||||
SELECT * FROM pg_catalog.pg_type
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'int8' AND oid IS NOT NULL
|
||||
----
|
||||
20
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'bytea' AND oid IS NOT NULL
|
||||
----
|
||||
17
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'bit' AND oid IS NOT NULL
|
||||
----
|
||||
1560
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'bool' AND oid IS NOT NULL
|
||||
----
|
||||
16
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'varchar' AND oid IS NOT NULL
|
||||
----
|
||||
1043
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'date' AND oid IS NOT NULL
|
||||
----
|
||||
1082
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'float8' AND oid IS NOT NULL
|
||||
----
|
||||
701
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'float4' AND oid IS NOT NULL
|
||||
----
|
||||
700
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'uuid' AND oid IS NOT NULL
|
||||
----
|
||||
2950
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'int4' AND oid IS NOT NULL
|
||||
----
|
||||
23
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'int2' AND oid IS NOT NULL
|
||||
----
|
||||
21
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'interval' AND oid IS NOT NULL
|
||||
----
|
||||
1186
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'time' AND oid IS NOT NULL
|
||||
----
|
||||
1083
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'timestamp' AND oid IS NOT NULL
|
||||
----
|
||||
1114
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'timestamptz' AND oid IS NOT NULL
|
||||
----
|
||||
1184
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'timetz' AND oid IS NOT NULL
|
||||
----
|
||||
1266
|
||||
|
||||
query I
|
||||
SELECT count(*) FROM pg_type where typname = 'greeting'
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT oid FROM pg_type WHERE typname = 'numeric' AND oid IS NOT NULL
|
||||
----
|
||||
1700
|
||||
|
||||
query I
|
||||
SELECT count(*) FROM pg_type where typname = 'enum' AND oid is NOT NULL
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT pg_catalog.format_pg_type('DECIMAL', 'test');
|
||||
----
|
||||
numeric
|
||||
|
||||
query I
|
||||
SELECT pg_catalog.format_pg_type('decimal', 'test');
|
||||
----
|
||||
numeric
|
||||
17
external/duckdb/test/sql/pg_catalog/pg_views.test
vendored
Normal file
17
external/duckdb/test/sql/pg_catalog/pg_views.test
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# name: test/sql/pg_catalog/pg_views.test
|
||||
# description: Test pg_views function
|
||||
# group: [pg_catalog]
|
||||
|
||||
statement ok
|
||||
CREATE VIEW v1 AS SELECT 42
|
||||
|
||||
query IIIIII nosort pg_view
|
||||
SELECT * FROM pg_views
|
||||
|
||||
query IIIIII nosort pg_view
|
||||
SELECT * FROM pg_catalog.pg_views
|
||||
|
||||
query II
|
||||
SELECT viewname, viewowner FROM pg_views WHERE viewname='v1'
|
||||
----
|
||||
v1 duckdb
|
||||
378
external/duckdb/test/sql/pg_catalog/sqlalchemy.test
vendored
Normal file
378
external/duckdb/test/sql/pg_catalog/sqlalchemy.test
vendored
Normal file
@@ -0,0 +1,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'
|
||||
98
external/duckdb/test/sql/pg_catalog/system_functions.test
vendored
Normal file
98
external/duckdb/test/sql/pg_catalog/system_functions.test
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
# name: test/sql/pg_catalog/system_functions.test
|
||||
# description: Test various postgres' system functions (https://www.postgresql.org/docs/9.1/functions-info.html)
|
||||
# group: [pg_catalog]
|
||||
|
||||
# avoid loading a storage database because it changes the initial database name
|
||||
query I
|
||||
SELECT CURRENT_USER
|
||||
----
|
||||
duckdb
|
||||
|
||||
query I
|
||||
SELECT CURRENT_CATALOG
|
||||
----
|
||||
memory
|
||||
|
||||
query I
|
||||
SELECT CURRENT_DATABASE()
|
||||
----
|
||||
memory
|
||||
|
||||
query I
|
||||
SELECT pg_catalog.CURRENT_DATABASE()
|
||||
----
|
||||
memory
|
||||
|
||||
query I
|
||||
SELECT USER
|
||||
----
|
||||
duckdb
|
||||
|
||||
query I
|
||||
SELECT SESSION_USER
|
||||
----
|
||||
duckdb
|
||||
|
||||
statement ok
|
||||
SELECT version();
|
||||
|
||||
query I
|
||||
SELECT current_query();
|
||||
----
|
||||
SELECT current_query();
|
||||
|
||||
query I
|
||||
SELECT pg_catalog.current_query();
|
||||
----
|
||||
SELECT pg_catalog.current_query();
|
||||
|
||||
query IIII
|
||||
SELECT 1, 2, 3, current_query();
|
||||
----
|
||||
1 2 3 SELECT 1, 2, 3, current_query();
|
||||
|
||||
query I
|
||||
SELECT current_schema();
|
||||
----
|
||||
main
|
||||
|
||||
query I
|
||||
SELECT current_schemas(true);
|
||||
----
|
||||
[main, main, main, pg_catalog]
|
||||
|
||||
query I
|
||||
SELECT current_schemas(false);
|
||||
----
|
||||
[]
|
||||
|
||||
query IIII
|
||||
SELECT inet_client_addr(), inet_client_port(), inet_server_addr(), inet_server_port();
|
||||
----
|
||||
NULL NULL NULL NULL
|
||||
|
||||
statement ok
|
||||
select pg_postmaster_start_time();
|
||||
|
||||
query I
|
||||
SELECT pg_is_other_temp_schema(33)
|
||||
----
|
||||
false
|
||||
|
||||
query III
|
||||
SELECT col_description(0, 0), obj_description(0, 'duckdb'), shobj_description(0, 'duckdb');
|
||||
----
|
||||
NULL NULL NULL
|
||||
|
||||
statement ok
|
||||
select txid_current();
|
||||
|
||||
query I
|
||||
select pg_typeof(1);
|
||||
----
|
||||
integer
|
||||
|
||||
statement error
|
||||
SELECT temp.current_user()
|
||||
----
|
||||
main.current_user
|
||||
Reference in New Issue
Block a user