aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarsaly <marsaly@ydb.tech>2023-12-11 19:37:42 +0300
committermarsaly <marsaly@ydb.tech>2023-12-11 20:26:14 +0300
commit0725824b3155b061fb8801cc4b1ca50e50edfa93 (patch)
tree2aa0947fa0d9cfefc9d94c781d5876625ab06c50
parente032a9d10c50b991ce08b32590bbaf15089ff059 (diff)
downloadydb-0725824b3155b061fb8801cc4b1ca50e50edfa93.tar.gz
pg-make-test saves stderr
Output executed SQL statement's text into stderr
-rw-r--r--ydb/library/yql/tests/postgresql/cases/aggregates.err168
-rw-r--r--ydb/library/yql/tests/postgresql/cases/alter_table.err268
-rw-r--r--ydb/library/yql/tests/postgresql/cases/arrays.err127
-rw-r--r--ydb/library/yql/tests/postgresql/cases/bit.err43
-rw-r--r--ydb/library/yql/tests/postgresql/cases/boolean.err513
-rw-r--r--ydb/library/yql/tests/postgresql/cases/case.err75
-rw-r--r--ydb/library/yql/tests/postgresql/cases/comments.err49
-rw-r--r--ydb/library/yql/tests/postgresql/cases/create_misc.err598
-rw-r--r--ydb/library/yql/tests/postgresql/cases/create_table.err2965
-rw-r--r--ydb/library/yql/tests/postgresql/cases/date.err74
-rw-r--r--ydb/library/yql/tests/postgresql/cases/dbsize.err259
-rw-r--r--ydb/library/yql/tests/postgresql/cases/delete.err45
-rw-r--r--ydb/library/yql/tests/postgresql/cases/expressions.err586
-rw-r--r--ydb/library/yql/tests/postgresql/cases/float4.err517
-rw-r--r--ydb/library/yql/tests/postgresql/cases/float8.err1266
-rw-r--r--ydb/library/yql/tests/postgresql/cases/functional_deps.err655
-rw-r--r--ydb/library/yql/tests/postgresql/cases/functional_deps.out20
-rw-r--r--ydb/library/yql/tests/postgresql/cases/functional_deps.sql20
-rw-r--r--ydb/library/yql/tests/postgresql/cases/horology.err1845
-rw-r--r--ydb/library/yql/tests/postgresql/cases/insert.err131
-rw-r--r--ydb/library/yql/tests/postgresql/cases/insert.out20
-rw-r--r--ydb/library/yql/tests/postgresql/cases/insert.sql20
-rw-r--r--ydb/library/yql/tests/postgresql/cases/int2.err304
-rw-r--r--ydb/library/yql/tests/postgresql/cases/int4.err458
-rw-r--r--ydb/library/yql/tests/postgresql/cases/int8.err124
-rw-r--r--ydb/library/yql/tests/postgresql/cases/interval.err1018
-rw-r--r--ydb/library/yql/tests/postgresql/cases/join.err117
-rw-r--r--ydb/library/yql/tests/postgresql/cases/json.err1046
-rw-r--r--ydb/library/yql/tests/postgresql/cases/json_encoding.err337
-rw-r--r--ydb/library/yql/tests/postgresql/cases/jsonb.err848
-rw-r--r--ydb/library/yql/tests/postgresql/cases/jsonb_jsonpath.err32
-rw-r--r--ydb/library/yql/tests/postgresql/cases/jsonpath.err743
-rw-r--r--ydb/library/yql/tests/postgresql/cases/jsonpath_encoding.err278
-rw-r--r--ydb/library/yql/tests/postgresql/cases/limit.err716
-rw-r--r--ydb/library/yql/tests/postgresql/cases/name.err320
-rw-r--r--ydb/library/yql/tests/postgresql/cases/numeric.err2311
-rw-r--r--ydb/library/yql/tests/postgresql/cases/numerology.err158
-rw-r--r--ydb/library/yql/tests/postgresql/cases/oid.err176
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select.err363
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_distinct.err388
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_distinct_on.err42
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_having.err65
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_having.err.165
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_having.err.265
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_implicit.err59
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_implicit.err.159
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_implicit.err.259
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_into.err531
-rw-r--r--ydb/library/yql/tests/postgresql/cases/strings.err284
-rw-r--r--ydb/library/yql/tests/postgresql/cases/subselect.err48
-rw-r--r--ydb/library/yql/tests/postgresql/cases/text.err35
-rw-r--r--ydb/library/yql/tests/postgresql/cases/time.err58
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timestamp.err346
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timestamptz.err465
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timetz.err71
-rw-r--r--ydb/library/yql/tests/postgresql/cases/truncate.err27
-rw-r--r--ydb/library/yql/tests/postgresql/cases/unicode.err125
-rw-r--r--ydb/library/yql/tests/postgresql/cases/union.err9
-rw-r--r--ydb/library/yql/tests/postgresql/cases/update.err39
-rw-r--r--ydb/library/yql/tests/postgresql/cases/update.out33
-rw-r--r--ydb/library/yql/tests/postgresql/cases/update.sql33
-rw-r--r--ydb/library/yql/tests/postgresql/cases/window.err330
-rw-r--r--ydb/library/yql/tests/postgresql/cases/xml.err32
-rw-r--r--ydb/library/yql/tests/postgresql/cases/xml.err.132
-rw-r--r--ydb/library/yql/tests/postgresql/cases/xml.err.232
-rw-r--r--ydb/library/yql/tests/postgresql/pg_tests.csv78
-rw-r--r--ydb/library/yql/tools/pg-make-test/__main__.py5
-rw-r--r--ydb/library/yql/tools/pgrun/pgrun.cpp2
68 files changed, 22920 insertions, 110 deletions
diff --git a/ydb/library/yql/tests/postgresql/cases/aggregates.err b/ydb/library/yql/tests/postgresql/cases/aggregates.err
new file mode 100644
index 0000000000..6915806ab1
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/aggregates.err
@@ -0,0 +1,168 @@
+<sql-statement>
+--
+-- AGGREGATES
+--
+-- avoid bit-exact output here because operations may not be bit-exact.
+SET extra_float_digits = 0;
+</sql-statement>
+<sql-statement>
+SELECT avg(four) AS avg_1 FROM onek;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+-- In 7.1, avg(float4) is computed using float8 arithmetic.
+-- Round the result to 3 digits to avoid platform-specific results.
+SELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT avg(gpa) AS avg_3_4 FROM ONLY student;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.student
+
+<sql-statement>
+SELECT sum(four) AS sum_1500 FROM onek;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT sum(a) AS sum_198 FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT sum(b) AS avg_431_773 FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT sum(gpa) AS avg_6_8 FROM ONLY student;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.student
+
+<sql-statement>
+SELECT max(four) AS max_3 FROM onek;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT max(a) AS max_100 FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT max(aggtest.b) AS max_324_78 FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT max(student.gpa) AS max_3_7 FROM student;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.student
+
+<sql-statement>
+SELECT stddev_pop(b) FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT stddev_samp(b) FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT var_pop(b) FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT var_samp(b) FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT stddev_pop(b::numeric) FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT stddev_samp(b::numeric) FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT var_pop(b::numeric) FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+SELECT var_samp(b::numeric) FROM aggtest;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.aggtest
+
+<sql-statement>
+-- population variance is defined for a single tuple, sample variance
+-- is not
+SELECT var_pop(1.0::float8), var_samp(2.0::float8);
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F8A03C29D90)
+__libc_start_main+128 (0x7F8A03C29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/alter_table.err b/ydb/library/yql/tests/postgresql/cases/alter_table.err
new file mode 100644
index 0000000000..12ee740cab
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/alter_table.err
@@ -0,0 +1,268 @@
+<sql-statement>
+--
+-- ALTER_TABLE
+--
+-- Clean up in case a prior regression run failed
+SET client_min_messages TO 'warning';
+</sql-statement>
+<sql-statement>
+DROP ROLE IF EXISTS regress_alter_table_user1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 287
+ DROP ROLE IF EXISTS regress_alter_table_user1;
+ ^
+<sql-statement>
+RESET client_min_messages;
+</sql-statement>
+<sql-statement>
+CREATE USER regress_alter_table_user1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 285
+ CREATE USER regress_alter_table_user1;
+ ^
+<sql-statement>
+--
+-- add attribute
+--
+CREATE TABLE attmp (initial int4);
+</sql-statement>
+<sql-statement>
+COMMENT ON TABLE attmp_wrong IS 'table comment';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258
+ COMMENT ON TABLE attmp_wrong IS 'table comment';
+ ^
+<sql-statement>
+COMMENT ON TABLE attmp IS 'table comment';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258
+ COMMENT ON TABLE attmp IS 'table comment';
+ ^
+<sql-statement>
+COMMENT ON TABLE attmp IS NULL;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258
+ COMMENT ON TABLE attmp IS NULL;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN xmin integer; -- fails
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN xmin integer; -- fails
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN a int4 default 3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN a int4 default 3;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN b name;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN b name;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN c text;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN c text;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN d float8;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN d float8;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN e float4;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN e float4;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN f int2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN f int2;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN g polygon;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN g polygon;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN i char;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN i char;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN k int4;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN k int4;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN l tid;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN l tid;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN m xid;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN m xid;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN n oidvector;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN n oidvector;
+ ^
+<sql-statement>
+--ALTER TABLE attmp ADD COLUMN o lock;
+ALTER TABLE attmp ADD COLUMN p boolean;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ --ALTER TABLE attmp ADD COLUMN o lock;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN q point;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN q point;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN r lseg;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN r lseg;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN s path;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN s path;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN t box;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN t box;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN v timestamp;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN v timestamp;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN w interval;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN w interval;
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN x float8[];
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN x float8[];
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN y float4[];
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN y float4[];
+ ^
+<sql-statement>
+ALTER TABLE attmp ADD COLUMN z int2[];
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE attmp ADD COLUMN z int2[];
+ ^
+<sql-statement>
+INSERT INTO attmp (a, b, c, d, e, f, g, i, k, l, m, n, p, q, r, s, t,
+ v, w, x, y, z)
+ VALUES (4, 'name', 'text', 4.1, 4.1, 2, '(4.1,4.1,3.1,3.1)',
+ 'c',
+ 314159, '(1,1)', '512',
+ '1 2 3 4 5 6 7 8', true, '(1.1,1.1)', '(4.1,4.1,3.1,3.1)',
+ '(0,2,4.1,4.1,3.1,3.1)', '(4.1,4.1,3.1,3.1)',
+ 'epoch', '01:00:10', '{1.0,2.0,3.0,4.0}', '{1.0,2.0,3.0,4.0}', '{1,2,3,4}');
+</sql-statement>
+<sql-statement>
+SELECT * FROM attmp;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F12C4229D90)
+__libc_start_main+128 (0x7F12C4229E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/arrays.err b/ydb/library/yql/tests/postgresql/cases/arrays.err
new file mode 100644
index 0000000000..020782c11d
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/arrays.err
@@ -0,0 +1,127 @@
+<sql-statement>
+--
+-- ARRAYS
+--
+CREATE TABLE arrtest (
+ a int2[],
+ b int4[][][],
+ c name[],
+ d text[][],
+ e float8[],
+ f char(5)[],
+ g varchar(5)[]
+);
+</sql-statement>
+<sql-statement>
+--
+-- only the 'e' array is 0-based, the others are 1-based.
+--
+INSERT INTO arrtest (a[1:5], b[1:1][1:2][1:2], c, d, f, g)
+ VALUES ('{1,2,3,4,5}', '{{{0,0},{1,2}}}', '{}', '{}', '{}', '{}');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ --
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "{1,2,3,4,5}"
+
+ --
+ ^
+<sql-statement>
+UPDATE arrtest SET e[0] = '1.1';
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+UPDATE arrtest SET e[1] = '2.2';
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO arrtest (f)
+ VALUES ('{"too long"}');
+</sql-statement>
+<sql-statement>
+INSERT INTO arrtest (a, b[1:2][1:2], c, d, e, f, g)
+ VALUES ('{11,12,23}', '{{3,4},{4,5}}', '{"foobar"}',
+ '{{"elt1", "elt2"}}', '{"3.4", "6.7"}',
+ '{"abc","abcde"}', '{"abc","abcde"}');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO arrtest (a, b[1:2][1:2], c, d, e, f, g)
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "{11,12,23}"
+
+ INSERT INTO arrtest (a, b[1:2][1:2], c, d, e, f, g)
+ ^
+<sql-statement>
+INSERT INTO arrtest (a, b[1:2], c, d[1:2])
+ VALUES ('{}', '{3,4}', '{foo,bar}', '{bar,foo}');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO arrtest (a, b[1:2], c, d[1:2])
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "{}"
+
+ INSERT INTO arrtest (a, b[1:2], c, d[1:2])
+ ^
+<sql-statement>
+INSERT INTO arrtest (b[2]) VALUES(now()); -- error, type mismatch
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: YtWriteTable!
+ INSERT INTO arrtest (b[2]) VALUES(now()); -- error, type mismatch
+ ^
+ -stdin-:<main>:1:1: Error: Failed to convert type: List<Struct<'b':pgtimestamptz>> to List<Struct<'a':pgint2,'b':pgint4,'c':pgname,'d':pgtext,'e':pgfloat8,'f':pgbpchar,'g':pgvarchar>>
+ INSERT INTO arrtest (b[2]) VALUES(now()); -- error, type mismatch
+ ^
+ -stdin-:<main>:1:1: Error: Failed to convert 'b': pgtimestamptz to pgint4
+ INSERT INTO arrtest (b[2]) VALUES(now()); -- error, type mismatch
+ ^
+ -stdin-:<main>:1:1: Error: Table "arrtest" row type differs from the written row type: Struct<-a:pgint2,b:pgint4!=pgtimestamptz,-c:pgname,-d:pgtext,-e:pgfloat8,-f:pgbpchar,-g:pgvarchar>
+ INSERT INTO arrtest (b[2]) VALUES(now()); -- error, type mismatch
+ ^
+<sql-statement>
+INSERT INTO arrtest (b[1:2]) VALUES(now()); -- error, type mismatch
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: YtWriteTable!
+ INSERT INTO arrtest (b[1:2]) VALUES(now()); -- error, type mismatch
+ ^
+ -stdin-:<main>:1:1: Error: Failed to convert type: List<Struct<'b':pgtimestamptz>> to List<Struct<'a':pgint2,'b':pgint4,'c':pgname,'d':pgtext,'e':pgfloat8,'f':pgbpchar,'g':pgvarchar>>
+ INSERT INTO arrtest (b[1:2]) VALUES(now()); -- error, type mismatch
+ ^
+ -stdin-:<main>:1:1: Error: Failed to convert 'b': pgtimestamptz to pgint4
+ INSERT INTO arrtest (b[1:2]) VALUES(now()); -- error, type mismatch
+ ^
+ -stdin-:<main>:1:1: Error: Table "arrtest" row type differs from the written row type: Struct<-a:pgint2,b:pgint4!=pgtimestamptz,-c:pgname,-d:pgtext,-e:pgfloat8,-f:pgbpchar,-g:pgvarchar>
+ INSERT INTO arrtest (b[1:2]) VALUES(now()); -- error, type mismatch
+ ^
+<sql-statement>
+SELECT * FROM arrtest;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FE693C29D90)
+__libc_start_main+128 (0x7FE693C29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/bit.err b/ydb/library/yql/tests/postgresql/cases/bit.err
new file mode 100644
index 0000000000..b5874dec07
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/bit.err
@@ -0,0 +1,43 @@
+<sql-statement>
+--
+-- BIT types
+--
+--
+-- Build tables for testing
+--
+CREATE TABLE BIT_TABLE(b BIT(11));
+</sql-statement>
+<sql-statement>
+INSERT INTO BIT_TABLE VALUES (B'10'); -- too short
+</sql-statement>
+<sql-statement>
+INSERT INTO BIT_TABLE VALUES (B'00000000000');
+</sql-statement>
+<sql-statement>
+INSERT INTO BIT_TABLE VALUES (B'11011000000');
+</sql-statement>
+<sql-statement>
+INSERT INTO BIT_TABLE VALUES (B'01010101010');
+</sql-statement>
+<sql-statement>
+INSERT INTO BIT_TABLE VALUES (B'101011111010'); -- too long
+</sql-statement>
+<sql-statement>
+--INSERT INTO BIT_TABLE VALUES ('X554');
+--INSERT INTO BIT_TABLE VALUES ('X555');
+SELECT * FROM BIT_TABLE;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FDE59429D90)
+__libc_start_main+128 (0x7FDE59429E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/boolean.err b/ydb/library/yql/tests/postgresql/cases/boolean.err
new file mode 100644
index 0000000000..6738da8d5a
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/boolean.err
@@ -0,0 +1,513 @@
+<sql-statement>
+--
+-- BOOLEAN
+--
+--
+-- sanity check - if this fails go insane!
+--
+SELECT 1 AS one;
+</sql-statement>
+<sql-statement>
+-- ******************testing built-in type bool********************
+-- check bool input syntax
+SELECT true AS true;
+</sql-statement>
+<sql-statement>
+SELECT false AS false;
+</sql-statement>
+<sql-statement>
+SELECT bool 't' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool ' f ' AS false;
+</sql-statement>
+<sql-statement>
+SELECT bool 'true' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 'test' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool 'test' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "test"
+
+ SELECT bool 'test' AS error;
+ ^
+<sql-statement>
+SELECT bool 'false' AS false;
+</sql-statement>
+<sql-statement>
+SELECT bool 'foo' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool 'foo' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "foo"
+
+ SELECT bool 'foo' AS error;
+ ^
+<sql-statement>
+SELECT bool 'y' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 'yes' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 'yeah' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool 'yeah' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "yeah"
+
+ SELECT bool 'yeah' AS error;
+ ^
+<sql-statement>
+SELECT bool 'n' AS false;
+</sql-statement>
+<sql-statement>
+SELECT bool 'no' AS false;
+</sql-statement>
+<sql-statement>
+SELECT bool 'nay' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool 'nay' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "nay"
+
+ SELECT bool 'nay' AS error;
+ ^
+<sql-statement>
+SELECT bool 'on' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 'off' AS false;
+</sql-statement>
+<sql-statement>
+SELECT bool 'of' AS false;
+</sql-statement>
+<sql-statement>
+SELECT bool 'o' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool 'o' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "o"
+
+ SELECT bool 'o' AS error;
+ ^
+<sql-statement>
+SELECT bool 'on_' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool 'on_' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "on_"
+
+ SELECT bool 'on_' AS error;
+ ^
+<sql-statement>
+SELECT bool 'off_' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool 'off_' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "off_"
+
+ SELECT bool 'off_' AS error;
+ ^
+<sql-statement>
+SELECT bool '1' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool '11' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool '11' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "11"
+
+ SELECT bool '11' AS error;
+ ^
+<sql-statement>
+SELECT bool '0' AS false;
+</sql-statement>
+<sql-statement>
+SELECT bool '000' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool '000' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "000"
+
+ SELECT bool '000' AS error;
+ ^
+<sql-statement>
+SELECT bool '' AS error;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT bool '' AS error;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: ""
+
+ SELECT bool '' AS error;
+ ^
+<sql-statement>
+-- and, or, not in qualifications
+SELECT bool 't' or bool 'f' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 't' and bool 'f' AS false;
+</sql-statement>
+<sql-statement>
+SELECT not bool 'f' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 't' = bool 'f' AS false;
+</sql-statement>
+<sql-statement>
+SELECT bool 't' <> bool 'f' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 't' > bool 'f' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 't' >= bool 'f' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 'f' < bool 't' AS true;
+</sql-statement>
+<sql-statement>
+SELECT bool 'f' <= bool 't' AS true;
+</sql-statement>
+<sql-statement>
+-- explicit casts to/from text
+SELECT 'TrUe'::text::boolean AS true, 'fAlse'::text::boolean AS false;
+</sql-statement>
+<sql-statement>
+SELECT ' true '::text::boolean AS true,
+ ' FALSE'::text::boolean AS false;
+</sql-statement>
+<sql-statement>
+SELECT true::boolean::text AS true, false::boolean::text AS false;
+</sql-statement>
+<sql-statement>
+SELECT ' tru e '::text::boolean AS invalid; -- error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ' tru e '::text::boolean AS invalid; -- error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: " tru e "
+
+ SELECT ' tru e '::text::boolean AS invalid; -- error
+ ^
+<sql-statement>
+SELECT ''::text::boolean AS invalid; -- error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ''::text::boolean AS invalid; -- error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: ""
+
+ SELECT ''::text::boolean AS invalid; -- error
+ ^
+<sql-statement>
+CREATE TABLE BOOLTBL1 (f1 bool);
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 't');
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 'True');
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 'true');
+</sql-statement>
+<sql-statement>
+-- BOOLTBL1 should be full of true's at this point
+SELECT BOOLTBL1.* FROM BOOLTBL1;
+</sql-statement>
+<sql-statement>
+SELECT BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE f1 = bool 'true';
+</sql-statement>
+<sql-statement>
+SELECT BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE f1 <> bool 'false';
+</sql-statement>
+<sql-statement>
+SELECT BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE booleq(bool 'false', f1);
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL1 (f1) VALUES (bool 'f');
+</sql-statement>
+<sql-statement>
+SELECT BOOLTBL1.*
+ FROM BOOLTBL1
+ WHERE f1 = bool 'false';
+</sql-statement>
+<sql-statement>
+CREATE TABLE BOOLTBL2 (f1 bool);
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'f');
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'false');
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'False');
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL2 (f1) VALUES (bool 'FALSE');
+</sql-statement>
+<sql-statement>
+-- This is now an invalid expression
+-- For pre-v6.3 this evaluated to false - thomas 1997-10-23
+INSERT INTO BOOLTBL2 (f1)
+ VALUES (bool 'XXX');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- This is now an invalid expression
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type boolean: "XXX"
+
+ -- This is now an invalid expression
+ ^
+<sql-statement>
+-- BOOLTBL2 should be full of false's at this point
+SELECT BOOLTBL2.* FROM BOOLTBL2;
+</sql-statement>
+<sql-statement>
+SELECT BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE BOOLTBL2.f1 <> BOOLTBL1.f1;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT BOOLTBL1.*, BOOLTBL2.*
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: f1
+ SELECT BOOLTBL1.*, BOOLTBL2.*
+ ^
+<sql-statement>
+SELECT BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE boolne(BOOLTBL2.f1,BOOLTBL1.f1);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT BOOLTBL1.*, BOOLTBL2.*
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: f1
+ SELECT BOOLTBL1.*, BOOLTBL2.*
+ ^
+<sql-statement>
+SELECT BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE BOOLTBL2.f1 = BOOLTBL1.f1 and BOOLTBL1.f1 = bool 'false';
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT BOOLTBL1.*, BOOLTBL2.*
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: f1
+ SELECT BOOLTBL1.*, BOOLTBL2.*
+ ^
+<sql-statement>
+SELECT BOOLTBL1.*, BOOLTBL2.*
+ FROM BOOLTBL1, BOOLTBL2
+ WHERE BOOLTBL2.f1 = BOOLTBL1.f1 or BOOLTBL1.f1 = bool 'true'
+ ORDER BY BOOLTBL1.f1, BOOLTBL2.f1;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT BOOLTBL1.*, BOOLTBL2.*
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: f1
+ SELECT BOOLTBL1.*, BOOLTBL2.*
+ ^
+<sql-statement>
+--
+-- SQL syntax
+-- Try all combinations to ensure that we get nothing when we expect nothing
+-- - thomas 2000-01-04
+--
+SELECT f1
+ FROM BOOLTBL1
+ WHERE f1 IS TRUE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 145
+ --
+ ^
+<sql-statement>
+SELECT f1
+ FROM BOOLTBL1
+ WHERE f1 IS NOT FALSE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 145
+ SELECT f1
+ ^
+<sql-statement>
+SELECT f1
+ FROM BOOLTBL1
+ WHERE f1 IS FALSE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 145
+ SELECT f1
+ ^
+<sql-statement>
+SELECT f1
+ FROM BOOLTBL1
+ WHERE f1 IS NOT TRUE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 145
+ SELECT f1
+ ^
+<sql-statement>
+SELECT f1
+ FROM BOOLTBL2
+ WHERE f1 IS TRUE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 145
+ SELECT f1
+ ^
+<sql-statement>
+SELECT f1
+ FROM BOOLTBL2
+ WHERE f1 IS NOT FALSE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 145
+ SELECT f1
+ ^
+<sql-statement>
+SELECT f1
+ FROM BOOLTBL2
+ WHERE f1 IS FALSE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 145
+ SELECT f1
+ ^
+<sql-statement>
+SELECT f1
+ FROM BOOLTBL2
+ WHERE f1 IS NOT TRUE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 145
+ SELECT f1
+ ^
+<sql-statement>
+--
+-- Tests for BooleanTest
+--
+CREATE TABLE BOOLTBL3 (d text, b bool, o int);
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL3 (d, b, o) VALUES ('true', true, 1);
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL3 (d, b, o) VALUES ('false', false, 2);
+</sql-statement>
+<sql-statement>
+INSERT INTO BOOLTBL3 (d, b, o) VALUES ('null', null, 3);
+</sql-statement>
+<sql-statement>
+SELECT
+ d,
+ b IS TRUE AS istrue,
+ b IS NOT TRUE AS isnottrue,
+ b IS FALSE AS isfalse,
+ b IS NOT FALSE AS isnotfalse,
+ b IS UNKNOWN AS isunknown,
+ b IS NOT UNKNOWN AS isnotunknown
+FROM booltbl3 ORDER BY o;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 145
+ SELECT
+ ^
+<sql-statement>
+-- Test to make sure short-circuiting and NULL handling is
+-- correct. Use a table as source to prevent constant simplification
+-- to interfer.
+CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool);
+</sql-statement>
+<sql-statement>
+INSERT INTO booltbl4 VALUES (false, true, null);
+</sql-statement>
+<sql-statement>
+\pset null '(null)'
+</sql-statement>
+Metacommand \pset null '(null)' is not supported
+<sql-statement>
+-- AND expression need to return null if there's any nulls and not all
+-- of the value are true
+SELECT istrue AND isnul AND istrue FROM booltbl4;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F870C429D90)
+__libc_start_main+128 (0x7F870C429E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/case.err b/ydb/library/yql/tests/postgresql/cases/case.err
new file mode 100644
index 0000000000..77ebf09e85
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/case.err
@@ -0,0 +1,75 @@
+<sql-statement>
+--
+-- CASE
+-- Test the case statement
+--
+CREATE TABLE CASE_TBL (
+ i integer,
+ f double precision
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE CASE2_TBL (
+ i integer,
+ j integer
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE_TBL VALUES (1, 10.1);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE_TBL VALUES (2, 20.2);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE_TBL VALUES (3, -30.3);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE_TBL VALUES (4, NULL);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE2_TBL VALUES (1, -1);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE2_TBL VALUES (2, -2);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE2_TBL VALUES (3, -3);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE2_TBL VALUES (2, -4);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE2_TBL VALUES (1, NULL);
+</sql-statement>
+<sql-statement>
+INSERT INTO CASE2_TBL VALUES (NULL, -6);
+</sql-statement>
+<sql-statement>
+--
+-- Simplest examples without tables
+--
+SELECT '3' AS "One",
+ CASE
+ WHEN 1 < 2 THEN 3
+ END AS "Simple WHEN";
+</sql-statement>
+<sql-statement>
+SELECT '<NULL>' AS "One",
+ CASE
+ WHEN 1 > 2 THEN 3
+ END AS "Simple default";
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F062DE29D90)
+__libc_start_main+128 (0x7F062DE29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/comments.err b/ydb/library/yql/tests/postgresql/cases/comments.err
new file mode 100644
index 0000000000..3918f6e171
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/comments.err
@@ -0,0 +1,49 @@
+<sql-statement>
+--
+-- COMMENTS
+--
+SELECT 'trailing' AS first; -- trailing single line
+</sql-statement>
+<sql-statement>
+SELECT /* embedded single line */ 'embedded' AS second;
+</sql-statement>
+<sql-statement>
+SELECT /* both embedded and trailing single line */ 'both' AS third; -- trailing single line
+</sql-statement>
+<sql-statement>
+SELECT 'before multi-line' AS fourth;
+</sql-statement>
+<sql-statement>
+/* This is an example of SQL which should not execute:
+ * select 'multi-line';
+ */
+SELECT 'after multi-line' AS fifth;
+</sql-statement>
+<sql-statement>
+--
+-- Nested comments
+--
+/*
+SELECT 'trailing' as x1; -- inside block comment
+*/
+/* This block comment surrounds a query which itself has a block comment...
+SELECT /* embedded single line */ 'embedded' AS x2;
+*/
+SELECT -- continued after the following block comments...
+/* Deeply nested comment.
+ This includes a single apostrophe to make sure we aren't decoding this part as a string.
+SELECT 'deep nest' AS n1;
+/* Second level of nesting...
+SELECT 'deeper nest' as n2;
+/* Third level of nesting...
+SELECT 'deepest nest' as n3;
+*/
+Hoo boy. Still two deep...
+*/
+Now just one deep...
+*/
+'deeply nested example' AS sixth;
+</sql-statement>
+<sql-statement>
+/* and this is the end of the file */
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/create_misc.err b/ydb/library/yql/tests/postgresql/cases/create_misc.err
new file mode 100644
index 0000000000..8e5d0aebd7
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/create_misc.err
@@ -0,0 +1,598 @@
+<sql-statement>
+--
+-- CREATE_MISC
+--
+-- CLASS POPULATION
+-- (any resemblance to real life is purely coincidental)
+--
+INSERT INTO tenk2 SELECT * FROM tenk1;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+CREATE TABLE onek2 AS SELECT * FROM onek;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE onek2 AS SELECT * FROM onek;
+ ^
+<sql-statement>
+INSERT INTO fast_emp4000 SELECT * FROM slow_emp4000;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.fast_emp4000
+
+<sql-statement>
+SELECT *
+ INTO TABLE Bprime
+ FROM tenk1
+ WHERE unique2 < 1000;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: SelectStmt: not supported intoClause
+ SELECT *
+ ^
+<sql-statement>
+INSERT INTO hobbies_r (name, person)
+ SELECT 'posthacking', p.name
+ FROM person* p
+ WHERE p.name = 'mike' or p.name = 'jeff';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.person
+
+<sql-statement>
+INSERT INTO hobbies_r (name, person)
+ SELECT 'basketball', p.name
+ FROM person p
+ WHERE p.name = 'joe' or p.name = 'sally';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.person
+
+<sql-statement>
+INSERT INTO hobbies_r (name) VALUES ('skywalking');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.hobbies_r
+
+<sql-statement>
+INSERT INTO equipment_r (name, hobby) VALUES ('advil', 'posthacking');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.equipment_r
+
+<sql-statement>
+INSERT INTO equipment_r (name, hobby) VALUES ('peet''s coffee', 'posthacking');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.equipment_r
+
+<sql-statement>
+INSERT INTO equipment_r (name, hobby) VALUES ('hightops', 'basketball');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.equipment_r
+
+<sql-statement>
+INSERT INTO equipment_r (name, hobby) VALUES ('guts', 'skywalking');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.equipment_r
+
+<sql-statement>
+INSERT INTO city VALUES
+('Podunk', '(1,2),(3,4)', '100,127,1000'),
+('Gotham', '(1000,34),(1100,334)', '123456,127,-1000,6789');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.city
+
+<sql-statement>
+TABLE city;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.city
+
+<sql-statement>
+SELECT *
+ INTO TABLE ramp
+ FROM road
+ WHERE name ~ '.*Ramp';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: SelectStmt: not supported intoClause
+ SELECT *
+ ^
+<sql-statement>
+INSERT INTO ihighway
+ SELECT *
+ FROM road
+ WHERE name ~ 'I- .*';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.road
+
+<sql-statement>
+INSERT INTO shighway
+ SELECT *
+ FROM road
+ WHERE name ~ 'State Hwy.*';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.road
+
+<sql-statement>
+UPDATE shighway
+ SET surface = 'asphalt';
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO a_star (class, a) VALUES ('a', 1);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.a_star
+
+<sql-statement>
+INSERT INTO a_star (class, a) VALUES ('a', 2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.a_star
+
+<sql-statement>
+INSERT INTO a_star (class) VALUES ('a');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.a_star
+
+<sql-statement>
+INSERT INTO b_star (class, a, b) VALUES ('b', 3, 'mumble'::text);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.b_star
+
+<sql-statement>
+INSERT INTO b_star (class, a) VALUES ('b', 4);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.b_star
+
+<sql-statement>
+INSERT INTO b_star (class, b) VALUES ('b', 'bumble'::text);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.b_star
+
+<sql-statement>
+INSERT INTO b_star (class) VALUES ('b');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.b_star
+
+<sql-statement>
+INSERT INTO c_star (class, a, c) VALUES ('c', 5, 'hi mom'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.c_star
+
+<sql-statement>
+INSERT INTO c_star (class, a) VALUES ('c', 6);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.c_star
+
+<sql-statement>
+INSERT INTO c_star (class, c) VALUES ('c', 'hi paul'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.c_star
+
+<sql-statement>
+INSERT INTO c_star (class) VALUES ('c');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.c_star
+
+<sql-statement>
+INSERT INTO d_star (class, a, b, c, d)
+ VALUES ('d', 7, 'grumble'::text, 'hi sunita'::name, '0.0'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, a, b, c)
+ VALUES ('d', 8, 'stumble'::text, 'hi koko'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, a, b, d)
+ VALUES ('d', 9, 'rumble'::text, '1.1'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, a, c, d)
+ VALUES ('d', 10, 'hi kristin'::name, '10.01'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, b, c, d)
+ VALUES ('d', 'crumble'::text, 'hi boris'::name, '100.001'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, a, b)
+ VALUES ('d', 11, 'fumble'::text);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, a, c)
+ VALUES ('d', 12, 'hi avi'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, a, d)
+ VALUES ('d', 13, '1000.0001'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, b, c)
+ VALUES ('d', 'tumble'::text, 'hi andrew'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, b, d)
+ VALUES ('d', 'humble'::text, '10000.00001'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, c, d)
+ VALUES ('d', 'hi ginger'::name, '100000.000001'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, a) VALUES ('d', 14);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, b) VALUES ('d', 'jumble'::text);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, c) VALUES ('d', 'hi jolly'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class, d) VALUES ('d', '1000000.0000001'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO d_star (class) VALUES ('d');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.d_star
+
+<sql-statement>
+INSERT INTO e_star (class, a, c, e)
+ VALUES ('e', 15, 'hi carol'::name, '-1'::int2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.e_star
+
+<sql-statement>
+INSERT INTO e_star (class, a, c)
+ VALUES ('e', 16, 'hi bob'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.e_star
+
+<sql-statement>
+INSERT INTO e_star (class, a, e)
+ VALUES ('e', 17, '-2'::int2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.e_star
+
+<sql-statement>
+INSERT INTO e_star (class, c, e)
+ VALUES ('e', 'hi michelle'::name, '-3'::int2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.e_star
+
+<sql-statement>
+INSERT INTO e_star (class, a)
+ VALUES ('e', 18);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.e_star
+
+<sql-statement>
+INSERT INTO e_star (class, c)
+ VALUES ('e', 'hi elisa'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.e_star
+
+<sql-statement>
+INSERT INTO e_star (class, e)
+ VALUES ('e', '-4'::int2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.e_star
+
+<sql-statement>
+INSERT INTO f_star (class, a, c, e, f)
+ VALUES ('f', 19, 'hi claire'::name, '-5'::int2, '(1,3),(2,4)'::polygon);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, a, c, e)
+ VALUES ('f', 20, 'hi mike'::name, '-6'::int2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, a, c, f)
+ VALUES ('f', 21, 'hi marcel'::name, '(11,44),(22,55),(33,66)'::polygon);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, a, e, f)
+ VALUES ('f', 22, '-7'::int2, '(111,555),(222,666),(333,777),(444,888)'::polygon);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, c, e, f)
+ VALUES ('f', 'hi keith'::name, '-8'::int2,
+ '(1111,3333),(2222,4444)'::polygon);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, a, c)
+ VALUES ('f', 24, 'hi marc'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, a, e)
+ VALUES ('f', 25, '-9'::int2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, a, f)
+ VALUES ('f', 26, '(11111,33333),(22222,44444)'::polygon);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, c, e)
+ VALUES ('f', 'hi allison'::name, '-10'::int2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, c, f)
+ VALUES ('f', 'hi jeff'::name,
+ '(111111,333333),(222222,444444)'::polygon);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, e, f)
+ VALUES ('f', '-11'::int2, '(1111111,3333333),(2222222,4444444)'::polygon);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, a) VALUES ('f', 27);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, c) VALUES ('f', 'hi carl'::name);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, e) VALUES ('f', '-12'::int2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class, f)
+ VALUES ('f', '(11111111,33333333),(22222222,44444444)'::polygon);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+INSERT INTO f_star (class) VALUES ('f');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.f_star
+
+<sql-statement>
+-- Analyze the X_star tables for better plan stability in later tests
+ANALYZE a_star;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ -- Analyze the X_star tables for better plan stability in later tests
+ ^
+<sql-statement>
+ANALYZE b_star;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ ANALYZE b_star;
+ ^
+<sql-statement>
+ANALYZE c_star;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ ANALYZE c_star;
+ ^
+<sql-statement>
+ANALYZE d_star;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ ANALYZE d_star;
+ ^
+<sql-statement>
+ANALYZE e_star;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ ANALYZE e_star;
+ ^
+<sql-statement>
+ANALYZE f_star;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ ANALYZE f_star;
+ ^
+<sql-statement>
+--
+-- for internal portal (cursor) tests
+--
+CREATE TABLE iportaltest (
+ i int4,
+ d float4,
+ p polygon
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO iportaltest (i, d, p)
+ VALUES (1, 3.567, '(3.0,1.0),(4.0,2.0)'::polygon);
+</sql-statement>
+<sql-statement>
+INSERT INTO iportaltest (i, d, p)
+ VALUES (2, 89.05, '(4.0,2.0),(3.0,1.0)'::polygon);
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/create_table.err b/ydb/library/yql/tests/postgresql/cases/create_table.err
new file mode 100644
index 0000000000..678b0ceadb
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/create_table.err
@@ -0,0 +1,2965 @@
+<sql-statement>
+--
+-- CREATE_TABLE
+--
+--
+-- CLASS DEFINITIONS
+--
+CREATE TABLE hobbies_r (
+ name text,
+ person text
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE equipment_r (
+ name text,
+ hobby text
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE onek (
+ unique1 int4,
+ unique2 int4,
+ two int4,
+ four int4,
+ ten int4,
+ twenty int4,
+ hundred int4,
+ thousand int4,
+ twothousand int4,
+ fivethous int4,
+ tenthous int4,
+ odd int4,
+ even int4,
+ stringu1 name,
+ stringu2 name,
+ string4 name
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE tenk1 (
+ unique1 int4,
+ unique2 int4,
+ two int4,
+ four int4,
+ ten int4,
+ twenty int4,
+ hundred int4,
+ thousand int4,
+ twothousand int4,
+ fivethous int4,
+ tenthous int4,
+ odd int4,
+ even int4,
+ stringu1 name,
+ stringu2 name,
+ string4 name
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE tenk2 (
+ unique1 int4,
+ unique2 int4,
+ two int4,
+ four int4,
+ ten int4,
+ twenty int4,
+ hundred int4,
+ thousand int4,
+ twothousand int4,
+ fivethous int4,
+ tenthous int4,
+ odd int4,
+ even int4,
+ stringu1 name,
+ stringu2 name,
+ string4 name
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE person (
+ name text,
+ age int4,
+ location point
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE emp (
+ salary int4,
+ manager name
+) INHERITS (person);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE emp (
+ ^
+<sql-statement>
+CREATE TABLE student (
+ gpa float8
+) INHERITS (person);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE student (
+ ^
+<sql-statement>
+CREATE TABLE stud_emp (
+ percent int4
+) INHERITS (emp, student);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE stud_emp (
+ ^
+<sql-statement>
+CREATE TABLE city (
+ name name,
+ location box,
+ budget city_budget
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE dept (
+ dname name,
+ mgrname text
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE slow_emp4000 (
+ home_base box
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE fast_emp4000 (
+ home_base box
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE road (
+ name text,
+ thepath path
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE ihighway () INHERITS (road);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE ihighway () INHERITS (road);
+ ^
+<sql-statement>
+CREATE TABLE shighway (
+ surface text
+) INHERITS (road);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE shighway (
+ ^
+<sql-statement>
+CREATE TABLE real_city (
+ pop int4,
+ cname text,
+ outline path
+);
+</sql-statement>
+<sql-statement>
+--
+-- test the "star" operators a bit more thoroughly -- this time,
+-- throw in lots of NULL fields...
+--
+-- a is the type root
+-- b and c inherit from a (one-level single inheritance)
+-- d inherits from b and c (two-level multiple inheritance)
+-- e inherits from c (two-level single inheritance)
+-- f inherits from e (three-level single inheritance)
+--
+CREATE TABLE a_star (
+ class char,
+ a int4
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE b_star (
+ b text
+) INHERITS (a_star);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE b_star (
+ ^
+<sql-statement>
+CREATE TABLE c_star (
+ c name
+) INHERITS (a_star);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE c_star (
+ ^
+<sql-statement>
+CREATE TABLE d_star (
+ d float8
+) INHERITS (b_star, c_star);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE d_star (
+ ^
+<sql-statement>
+CREATE TABLE e_star (
+ e int2
+) INHERITS (c_star);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE e_star (
+ ^
+<sql-statement>
+CREATE TABLE f_star (
+ f polygon
+) INHERITS (e_star);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE f_star (
+ ^
+<sql-statement>
+CREATE TABLE aggtest (
+ a int2,
+ b float4
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE hash_i4_heap (
+ seqno int4,
+ random int4
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE hash_name_heap (
+ seqno int4,
+ random name
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE hash_txt_heap (
+ seqno int4,
+ random text
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE hash_f8_heap (
+ seqno int4,
+ random float8
+);
+</sql-statement>
+<sql-statement>
+-- don't include the hash_ovfl_heap stuff in the distribution
+-- the data set is too large for what it's worth
+--
+-- CREATE TABLE hash_ovfl_heap (
+-- x int4,
+-- y int4
+-- );
+CREATE TABLE bt_i4_heap (
+ seqno int4,
+ random int4
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE bt_name_heap (
+ seqno name,
+ random int4
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE bt_txt_heap (
+ seqno text,
+ random int4
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE bt_f8_heap (
+ seqno float8,
+ random int4
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE array_op_test (
+ seqno int4,
+ i int4[],
+ t text[]
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE array_index_op_test (
+ seqno int4,
+ i int4[],
+ t text[]
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE testjsonb (
+ j jsonb
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE unknowntab (
+ u unknown -- fail
+);
+</sql-statement>
+<sql-statement>
+CREATE TYPE unknown_comptype AS (
+ u unknown -- fail
+);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314
+ CREATE TYPE unknown_comptype AS (
+ ^
+<sql-statement>
+CREATE TABLE IF NOT EXISTS test_tsvector(
+ t text,
+ a tsvector
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE IF NOT EXISTS test_tsvector(
+ t text
+);
+</sql-statement>
+<sql-statement>
+-- invalid: non-lowercase quoted reloptions identifiers
+CREATE TABLE tas_case WITH ("Fillfactor" = 10) AS SELECT 1 a;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ -- invalid: non-lowercase quoted reloptions identifiers
+ ^
+<sql-statement>
+CREATE TEMP TABLE explicitly_temp (a int primary key); -- also OK
+</sql-statement>
+<sql-statement>
+CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
+ ^
+<sql-statement>
+CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
+ ^
+<sql-statement>
+CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
+ ^
+<sql-statement>
+DROP TABLE as_select1;
+</sql-statement>
+<sql-statement>
+PREPARE select1 AS SELECT 1 as a;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 301
+ PREPARE select1 AS SELECT 1 as a;
+ ^
+<sql-statement>
+CREATE TABLE as_select1 AS EXECUTE select1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE as_select1 AS EXECUTE select1;
+ ^
+<sql-statement>
+CREATE TABLE as_select1 AS EXECUTE select1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE as_select1 AS EXECUTE select1;
+ ^
+<sql-statement>
+SELECT * FROM as_select1;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.as_select1
+
+<sql-statement>
+CREATE TABLE IF NOT EXISTS as_select1 AS EXECUTE select1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE IF NOT EXISTS as_select1 AS EXECUTE select1;
+ ^
+<sql-statement>
+DROP TABLE as_select1;
+</sql-statement>
+<sql-statement>
+DEALLOCATE select1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 303
+ DEALLOCATE select1;
+ ^
+<sql-statement>
+-- create an extra wide table to test for issues related to that
+-- (temporarily hide query, to avoid the long CREATE TABLE stmt)
+\set ECHO none
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:3:1: Error: ERROR: syntax error at or near "\"
+
+ \set ECHO none
+ ^
+<sql-statement>
+SELECT 'CREATE TABLE extra_wide_table(firstc text, '|| array_to_string(array_agg('c'||i||' bool'),',')||', lastc text);'
+FROM generate_series(1, 1100) g(i)
+\gexec
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:3:1: Error: ERROR: syntax error at or near "\"
+
+ \gexec
+ ^
+<sql-statement>
+\set ECHO all
+</sql-statement>
+Metacommand \set ECHO all is not supported
+<sql-statement>
+INSERT INTO extra_wide_table(firstc, lastc) VALUES('first col', 'last col');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.extra_wide_table
+
+<sql-statement>
+SELECT firstc, lastc FROM extra_wide_table;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.extra_wide_table
+
+<sql-statement>
+-- check that tables with oids cannot be created anymore
+CREATE TABLE withoid() WITH OIDS;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:29: Error: ERROR: syntax error at or near "OIDS"
+
+ CREATE TABLE withoid() WITH OIDS;
+ ^
+<sql-statement>
+CREATE TABLE withoid() WITH (oids);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table options not supported
+ CREATE TABLE withoid() WITH (oids);
+ ^
+<sql-statement>
+CREATE TABLE withoid() WITH (oids = true);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table options not supported
+ CREATE TABLE withoid() WITH (oids = true);
+ ^
+<sql-statement>
+-- but explicitly not adding oids is still supported
+CREATE TEMP TABLE withoutoid() WITHOUT OIDS;
+</sql-statement>
+<sql-statement>
+DROP TABLE withoutoid;
+</sql-statement>
+<sql-statement>
+CREATE TEMP TABLE withoutoid() WITH (oids = false);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table options not supported
+ CREATE TEMP TABLE withoutoid() WITH (oids = false);
+ ^
+<sql-statement>
+DROP TABLE withoutoid;
+</sql-statement>
+<sql-statement>
+-- check restriction with default expressions
+-- invalid use of column reference in default expressions
+CREATE TABLE default_expr_column (id int DEFAULT (id));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:3:51: Error: Columns are not allowed in: DEFAULT
+ CREATE TABLE default_expr_column (id int DEFAULT (id));
+ ^
+<sql-statement>
+CREATE TABLE default_expr_column (id int DEFAULT (bar.id));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:51: Error: Columns are not allowed in: DEFAULT
+ CREATE TABLE default_expr_column (id int DEFAULT (bar.id));
+ ^
+<sql-statement>
+CREATE TABLE default_expr_agg_column (id int DEFAULT (avg(id)));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:55: Error: Aggregate functions are not allowed in: DEFAULT
+ CREATE TABLE default_expr_agg_column (id int DEFAULT (avg(id)));
+ ^
+<sql-statement>
+-- invalid column definition
+CREATE TABLE default_expr_non_column (a int DEFAULT (avg(non_existent)));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:54: Error: Aggregate functions are not allowed in: DEFAULT
+ CREATE TABLE default_expr_non_column (a int DEFAULT (avg(non_existent)));
+ ^
+<sql-statement>
+-- invalid use of aggregate
+CREATE TABLE default_expr_agg (a int DEFAULT (avg(1)));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:47: Error: Aggregate functions are not allowed in: DEFAULT
+ CREATE TABLE default_expr_agg (a int DEFAULT (avg(1)));
+ ^
+<sql-statement>
+-- invalid use of subquery
+CREATE TABLE default_expr_agg (a int DEFAULT (select 1));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:46: Error: SubLinks are not allowed in: DEFAULT
+ CREATE TABLE default_expr_agg (a int DEFAULT (select 1));
+ ^
+<sql-statement>
+-- invalid use of set-returning function
+CREATE TABLE default_expr_agg (a int DEFAULT (generate_series(1,3)));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:47: Error: Generator functions are not allowed in: DEFAULT
+ CREATE TABLE default_expr_agg (a int DEFAULT (generate_series(1,3)));
+ ^
+<sql-statement>
+-- Verify that subtransaction rollback restores rd_createSubid.
+BEGIN;
+</sql-statement>
+<sql-statement>
+CREATE TABLE remember_create_subid (c int);
+</sql-statement>
+<sql-statement>
+SAVEPOINT q;
+</sql-statement>
+<sql-statement>
+DROP TABLE remember_create_subid;
+</sql-statement>
+<sql-statement>
+ROLLBACK TO q;
+</sql-statement>
+<sql-statement>
+COMMIT;
+</sql-statement>
+<sql-statement>
+DROP TABLE remember_create_subid;
+</sql-statement>
+<sql-statement>
+-- Verify that subtransaction rollback restores rd_firstRelfilenodeSubid.
+CREATE TABLE remember_node_subid (c int);
+</sql-statement>
+<sql-statement>
+BEGIN;
+</sql-statement>
+<sql-statement>
+ALTER TABLE remember_node_subid ALTER c TYPE bigint;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE remember_node_subid ALTER c TYPE bigint;
+ ^
+<sql-statement>
+SAVEPOINT q;
+</sql-statement>
+<sql-statement>
+DROP TABLE remember_node_subid;
+</sql-statement>
+<sql-statement>
+ROLLBACK TO q;
+</sql-statement>
+<sql-statement>
+COMMIT;
+</sql-statement>
+<sql-statement>
+DROP TABLE remember_node_subid;
+</sql-statement>
+<sql-statement>
+--
+-- Partitioned tables
+--
+-- cannot combine INHERITS and PARTITION BY (although grammar allows)
+CREATE TABLE partitioned (
+ a int
+) INHERITS (some_table) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ --
+ ^
+<sql-statement>
+-- cannot use more than 1 column as partition key for list partitioned table
+CREATE TABLE partitioned (
+ a1 int,
+ a2 int
+) PARTITION BY LIST (a1, a2); -- fail
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- cannot use more than 1 column as partition key for list partitioned table
+ ^
+<sql-statement>
+-- unsupported constraint type for partitioned tables
+CREATE TABLE partitioned (
+ a int,
+ EXCLUDE USING gist (a WITH &&)
+) PARTITION BY RANGE (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- unsupported constraint type for partitioned tables
+ ^
+<sql-statement>
+-- prevent using prohibited expressions in the key
+CREATE FUNCTION retset (a int) RETURNS SETOF int AS $$ SELECT 1; $$ LANGUAGE SQL IMMUTABLE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ -- prevent using prohibited expressions in the key
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a int
+) PARTITION BY RANGE (retset(a));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+DROP FUNCTION retset(int);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386
+ DROP FUNCTION retset(int);
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a int
+) PARTITION BY RANGE ((avg(a)));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a int,
+ b int
+) PARTITION BY RANGE ((avg(a) OVER (PARTITION BY b)));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a int
+) PARTITION BY LIST ((a LIKE (SELECT 1)));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a int
+) PARTITION BY RANGE ((42));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+CREATE FUNCTION const_func () RETURNS int AS $$ SELECT 1; $$ LANGUAGE SQL IMMUTABLE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ CREATE FUNCTION const_func () RETURNS int AS $$ SELECT 1; $$ LANGUAGE SQL IMMUTABLE;
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a int
+) PARTITION BY RANGE (const_func());
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+DROP FUNCTION const_func();
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386
+ DROP FUNCTION const_func();
+ ^
+<sql-statement>
+-- only accept valid partitioning strategy
+CREATE TABLE partitioned (
+ a int
+) PARTITION BY MAGIC (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- only accept valid partitioning strategy
+ ^
+<sql-statement>
+-- specified column must be present in the table
+CREATE TABLE partitioned (
+ a int
+) PARTITION BY RANGE (b);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- specified column must be present in the table
+ ^
+<sql-statement>
+-- cannot use system columns in partition key
+CREATE TABLE partitioned (
+ a int
+) PARTITION BY RANGE (xmin);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- cannot use system columns in partition key
+ ^
+<sql-statement>
+-- cannot use pseudotypes
+CREATE TABLE partitioned (
+ a int,
+ b int
+) PARTITION BY RANGE (((a, b)));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- cannot use pseudotypes
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a int,
+ b int
+) PARTITION BY RANGE (a, ('unknown'));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+-- functions in key must be immutable
+CREATE FUNCTION immut_func (a int) RETURNS int AS $$ SELECT a + random()::int; $$ LANGUAGE SQL;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ -- functions in key must be immutable
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a int
+) PARTITION BY RANGE (immut_func(a));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+DROP FUNCTION immut_func(int);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386
+ DROP FUNCTION immut_func(int);
+ ^
+<sql-statement>
+-- prevent using columns of unsupported types in key (type must have a btree operator class)
+CREATE TABLE partitioned (
+ a point
+) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- prevent using columns of unsupported types in key (type must have a btree operator class)
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a point
+) PARTITION BY LIST (a point_ops);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a point
+) PARTITION BY RANGE (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a point
+) PARTITION BY RANGE (a point_ops);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+-- cannot add NO INHERIT constraints to partitioned tables
+CREATE TABLE partitioned (
+ a int,
+ CONSTRAINT check_a CHECK (a > 0) NO INHERIT
+) PARTITION BY RANGE (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- cannot add NO INHERIT constraints to partitioned tables
+ ^
+<sql-statement>
+-- some checks after successful creation of a partitioned table
+CREATE FUNCTION plusone(a int) RETURNS INT AS $$ SELECT a+1; $$ LANGUAGE SQL;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ -- some checks after successful creation of a partitioned table
+ ^
+<sql-statement>
+CREATE TABLE partitioned (
+ a int,
+ b int,
+ c text,
+ d text
+) PARTITION BY RANGE (a oid_ops, plusone(b), c collate "default", d collate "C");
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partitioned (
+ ^
+<sql-statement>
+-- check relkind
+SELECT relkind FROM pg_class WHERE relname = 'partitioned';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.pg_class
+
+<sql-statement>
+-- prevent a function referenced in partition key from being dropped
+DROP FUNCTION plusone(int);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386
+ -- prevent a function referenced in partition key from being dropped
+ ^
+<sql-statement>
+-- partitioned table cannot participate in regular inheritance
+CREATE TABLE partitioned2 (
+ a int,
+ b text
+) PARTITION BY RANGE ((a+1), substr(b, 1, 5));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- partitioned table cannot participate in regular inheritance
+ ^
+<sql-statement>
+CREATE TABLE fail () INHERITS (partitioned2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail () INHERITS (partitioned2);
+ ^
+<sql-statement>
+-- Partition key in describe output
+\d partitioned
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:1: Error: ERROR: syntax error at or near "\"
+
+ \d partitioned
+ ^
+<sql-statement>
+\d+ partitioned2
+</sql-statement>
+Metacommand \d+ partitioned2 is not supported
+<sql-statement>
+INSERT INTO partitioned2 VALUES (1, 'hello');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.partitioned2
+
+<sql-statement>
+CREATE TABLE part2_1 PARTITION OF partitioned2 FOR VALUES FROM (-1, 'aaaaa') TO (100, 'ccccc');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part2_1 PARTITION OF partitioned2 FOR VALUES FROM (-1, 'aaaaa') TO (100, 'ccccc');
+ ^
+<sql-statement>
+\d+ part2_1
+</sql-statement>
+Metacommand \d+ part2_1 is not supported
+<sql-statement>
+DROP TABLE partitioned, partitioned2;
+</sql-statement>
+<sql-statement>
+-- check reference to partitioned table's rowtype in partition descriptor
+create table partitioned (a int, b int)
+ partition by list ((row(a, b)::partitioned));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check reference to partitioned table's rowtype in partition descriptor
+ ^
+<sql-statement>
+create table partitioned1
+ partition of partitioned for values in ('(1,2)'::partitioned);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table partitioned1
+ ^
+<sql-statement>
+create table partitioned2
+ partition of partitioned for values in ('(2,4)'::partitioned);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table partitioned2
+ ^
+<sql-statement>
+explain (costs off)
+select * from partitioned where row(a,b)::partitioned = '(1,2)'::partitioned;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (costs off)
+ ^
+<sql-statement>
+drop table partitioned;
+</sql-statement>
+<sql-statement>
+-- whole-row Var in partition key works too
+create table partitioned (a int, b int)
+ partition by list ((partitioned));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- whole-row Var in partition key works too
+ ^
+<sql-statement>
+create table partitioned1
+ partition of partitioned for values in ('(1,2)');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table partitioned1
+ ^
+<sql-statement>
+create table partitioned2
+ partition of partitioned for values in ('(2,4)');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table partitioned2
+ ^
+<sql-statement>
+explain (costs off)
+select * from partitioned where partitioned = '(1,2)'::partitioned;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (costs off)
+ ^
+<sql-statement>
+\d+ partitioned1
+</sql-statement>
+Metacommand \d+ partitioned1 is not supported
+<sql-statement>
+drop table partitioned;
+</sql-statement>
+<sql-statement>
+-- check that dependencies of partition columns are handled correctly
+create domain intdom1 as int;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 272
+ -- check that dependencies of partition columns are handled correctly
+ ^
+<sql-statement>
+create table partitioned (
+ a intdom1,
+ b text
+) partition by range (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ create table partitioned (
+ ^
+<sql-statement>
+alter table partitioned drop column a; -- fail
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ alter table partitioned drop column a; -- fail
+ ^
+<sql-statement>
+drop domain intdom1; -- fail, requires cascade
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373
+ drop domain intdom1; -- fail, requires cascade
+ ^
+<sql-statement>
+drop domain intdom1 cascade;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373
+ drop domain intdom1 cascade;
+ ^
+<sql-statement>
+table partitioned; -- gone
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.partitioned
+
+<sql-statement>
+-- likewise for columns used in partition expressions
+create domain intdom1 as int;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 272
+ -- likewise for columns used in partition expressions
+ ^
+<sql-statement>
+create table partitioned (
+ a intdom1,
+ b text
+) partition by range (plusone(a));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ create table partitioned (
+ ^
+<sql-statement>
+alter table partitioned drop column a; -- fail
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ alter table partitioned drop column a; -- fail
+ ^
+<sql-statement>
+drop domain intdom1; -- fail, requires cascade
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373
+ drop domain intdom1; -- fail, requires cascade
+ ^
+<sql-statement>
+drop domain intdom1 cascade;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373
+ drop domain intdom1 cascade;
+ ^
+<sql-statement>
+table partitioned; -- gone
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.partitioned
+
+<sql-statement>
+--
+-- Partitions
+--
+-- check partition bound syntax
+CREATE TABLE list_parted (
+ a int
+) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ --
+ ^
+<sql-statement>
+CREATE TABLE part_p1 PARTITION OF list_parted FOR VALUES IN ('1');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_p1 PARTITION OF list_parted FOR VALUES IN ('1');
+ ^
+<sql-statement>
+CREATE TABLE part_p2 PARTITION OF list_parted FOR VALUES IN (2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_p2 PARTITION OF list_parted FOR VALUES IN (2);
+ ^
+<sql-statement>
+CREATE TABLE part_p3 PARTITION OF list_parted FOR VALUES IN ((2+1));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_p3 PARTITION OF list_parted FOR VALUES IN ((2+1));
+ ^
+<sql-statement>
+CREATE TABLE part_null PARTITION OF list_parted FOR VALUES IN (null);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_null PARTITION OF list_parted FOR VALUES IN (null);
+ ^
+<sql-statement>
+\d+ list_parted
+</sql-statement>
+Metacommand \d+ list_parted is not supported
+<sql-statement>
+-- forbidden expressions for partition bound with list partitioned table
+CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (somename);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- forbidden expressions for partition bound with list partitioned table
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (somename.somename);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (somename.somename);
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (a);
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (sum(a));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (sum(a));
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (sum(somename));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (sum(somename));
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (sum(1));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (sum(1));
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN ((select 1));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN ((select 1));
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (generate_series(4, 6));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN (generate_series(4, 6));
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN ((1+1) collate "POSIX");
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF list_parted FOR VALUES IN ((1+1) collate "POSIX");
+ ^
+<sql-statement>
+-- syntax does not allow empty list of values for list partitions
+CREATE TABLE fail_part PARTITION OF list_parted FOR VALUES IN ();
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:64: Error: ERROR: syntax error at or near ")"
+
+ CREATE TABLE fail_part PARTITION OF list_parted FOR VALUES IN ();
+ ^
+<sql-statement>
+-- trying to specify range for list partitioned table
+CREATE TABLE fail_part PARTITION OF list_parted FOR VALUES FROM (1) TO (2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- trying to specify range for list partitioned table
+ ^
+<sql-statement>
+-- trying to specify modulus and remainder for list partitioned table
+CREATE TABLE fail_part PARTITION OF list_parted FOR VALUES WITH (MODULUS 10, REMAINDER 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:66: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF list_parted FOR VALUES WITH (MODULUS 10, REMAINDER 1);
+ ^
+<sql-statement>
+-- check default partition cannot be created more than once
+CREATE TABLE part_default PARTITION OF list_parted DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- check default partition cannot be created more than once
+ ^
+<sql-statement>
+CREATE TABLE fail_default_part PARTITION OF list_parted DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_default_part PARTITION OF list_parted DEFAULT;
+ ^
+<sql-statement>
+-- specified literal can't be cast to the partition column data type
+CREATE TABLE bools (
+ a bool
+) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- specified literal can't be cast to the partition column data type
+ ^
+<sql-statement>
+CREATE TABLE bools_true PARTITION OF bools FOR VALUES IN (1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE bools_true PARTITION OF bools FOR VALUES IN (1);
+ ^
+<sql-statement>
+DROP TABLE bools;
+</sql-statement>
+<sql-statement>
+-- specified literal can be cast, and the cast might not be immutable
+CREATE TABLE moneyp (
+ a money
+) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- specified literal can be cast, and the cast might not be immutable
+ ^
+<sql-statement>
+CREATE TABLE moneyp_10 PARTITION OF moneyp FOR VALUES IN (10);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE moneyp_10 PARTITION OF moneyp FOR VALUES IN (10);
+ ^
+<sql-statement>
+CREATE TABLE moneyp_11 PARTITION OF moneyp FOR VALUES IN ('11');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE moneyp_11 PARTITION OF moneyp FOR VALUES IN ('11');
+ ^
+<sql-statement>
+CREATE TABLE moneyp_12 PARTITION OF moneyp FOR VALUES IN (to_char(12, '99')::int);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE moneyp_12 PARTITION OF moneyp FOR VALUES IN (to_char(12, '99')::int);
+ ^
+<sql-statement>
+DROP TABLE moneyp;
+</sql-statement>
+<sql-statement>
+-- cast is immutable
+CREATE TABLE bigintp (
+ a bigint
+) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- cast is immutable
+ ^
+<sql-statement>
+CREATE TABLE bigintp_10 PARTITION OF bigintp FOR VALUES IN (10);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE bigintp_10 PARTITION OF bigintp FOR VALUES IN (10);
+ ^
+<sql-statement>
+-- fails due to overlap:
+CREATE TABLE bigintp_10_2 PARTITION OF bigintp FOR VALUES IN ('10');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- fails due to overlap:
+ ^
+<sql-statement>
+DROP TABLE bigintp;
+</sql-statement>
+<sql-statement>
+CREATE TABLE range_parted (
+ a date
+) PARTITION BY RANGE (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE range_parted (
+ ^
+<sql-statement>
+-- forbidden expressions for partition bounds with range partitioned table
+CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ FOR VALUES FROM (somename) TO ('2019-01-01');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- forbidden expressions for partition bounds with range partitioned table
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ FOR VALUES FROM (somename.somename) TO ('2019-01-01');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ FOR VALUES FROM (a) TO ('2019-01-01');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ FOR VALUES FROM (max(a)) TO ('2019-01-01');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ FOR VALUES FROM (max(somename)) TO ('2019-01-01');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ FOR VALUES FROM (max('2019-02-01'::date)) TO ('2019-01-01');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ FOR VALUES FROM ((select 1)) TO ('2019-01-01');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ ^
+<sql-statement>
+CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ FOR VALUES FROM (generate_series(1, 3)) TO ('2019-01-01');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_bogus_expr_fail PARTITION OF range_parted
+ ^
+<sql-statement>
+-- trying to specify list for range partitioned table
+CREATE TABLE fail_part PARTITION OF range_parted FOR VALUES IN ('a');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- trying to specify list for range partitioned table
+ ^
+<sql-statement>
+-- trying to specify modulus and remainder for range partitioned table
+CREATE TABLE fail_part PARTITION OF range_parted FOR VALUES WITH (MODULUS 10, REMAINDER 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:67: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF range_parted FOR VALUES WITH (MODULUS 10, REMAINDER 1);
+ ^
+<sql-statement>
+-- each of start and end bounds must have same number of values as the
+-- length of the partition key
+CREATE TABLE fail_part PARTITION OF range_parted FOR VALUES FROM ('a', 1) TO ('z');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- each of start and end bounds must have same number of values as the
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF range_parted FOR VALUES FROM ('a') TO ('z', 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF range_parted FOR VALUES FROM ('a') TO ('z', 1);
+ ^
+<sql-statement>
+-- cannot specify null values in range bounds
+CREATE TABLE fail_part PARTITION OF range_parted FOR VALUES FROM (null) TO (maxvalue);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- cannot specify null values in range bounds
+ ^
+<sql-statement>
+-- trying to specify modulus and remainder for range partitioned table
+CREATE TABLE fail_part PARTITION OF range_parted FOR VALUES WITH (MODULUS 10, REMAINDER 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:67: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF range_parted FOR VALUES WITH (MODULUS 10, REMAINDER 1);
+ ^
+<sql-statement>
+-- check partition bound syntax for the hash partition
+CREATE TABLE hash_parted (
+ a int
+) PARTITION BY HASH (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check partition bound syntax for the hash partition
+ ^
+<sql-statement>
+CREATE TABLE hpart_1 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 0);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:65: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE hpart_1 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 0);
+ ^
+<sql-statement>
+CREATE TABLE hpart_2 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 50, REMAINDER 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:65: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE hpart_2 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 50, REMAINDER 1);
+ ^
+<sql-statement>
+CREATE TABLE hpart_3 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 200, REMAINDER 2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:65: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE hpart_3 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 200, REMAINDER 2);
+ ^
+<sql-statement>
+CREATE TABLE hpart_4 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 3);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:65: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE hpart_4 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 10, REMAINDER 3);
+ ^
+<sql-statement>
+-- modulus 25 is factor of modulus of 50 but 10 is not a factor of 25.
+CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 25, REMAINDER 3);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:66: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 25, REMAINDER 3);
+ ^
+<sql-statement>
+-- previous modulus 50 is factor of 150 but this modulus is not a factor of next modulus 200.
+CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 150, REMAINDER 3);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:66: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 150, REMAINDER 3);
+ ^
+<sql-statement>
+-- overlapping remainders
+CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 100, REMAINDER 3);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:66: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES WITH (MODULUS 100, REMAINDER 3);
+ ^
+<sql-statement>
+-- trying to specify range for the hash partitioned table
+CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES FROM ('a', 1) TO ('z');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- trying to specify range for the hash partitioned table
+ ^
+<sql-statement>
+-- trying to specify list value for the hash partitioned table
+CREATE TABLE fail_part PARTITION OF hash_parted FOR VALUES IN (1000);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- trying to specify list value for the hash partitioned table
+ ^
+<sql-statement>
+-- trying to create default partition for the hash partitioned table
+CREATE TABLE fail_default_part PARTITION OF hash_parted DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- trying to create default partition for the hash partitioned table
+ ^
+<sql-statement>
+-- check if compatible with the specified parent
+-- cannot create as partition of a non-partitioned table
+CREATE TABLE unparted (
+ a int
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF unparted FOR VALUES IN ('a');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF unparted FOR VALUES IN ('a');
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF unparted FOR VALUES WITH (MODULUS 2, REMAINDER 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:64: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF unparted FOR VALUES WITH (MODULUS 2, REMAINDER 1);
+ ^
+<sql-statement>
+DROP TABLE unparted;
+</sql-statement>
+<sql-statement>
+-- cannot create a permanent rel as partition of a temp rel
+CREATE TEMP TABLE temp_parted (
+ a int
+) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- cannot create a permanent rel as partition of a temp rel
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF temp_parted FOR VALUES IN ('a');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF temp_parted FOR VALUES IN ('a');
+ ^
+<sql-statement>
+DROP TABLE temp_parted;
+</sql-statement>
+<sql-statement>
+-- check for partition bound overlap and other invalid specifications
+CREATE TABLE list_parted2 (
+ a varchar
+) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check for partition bound overlap and other invalid specifications
+ ^
+<sql-statement>
+CREATE TABLE part_null_z PARTITION OF list_parted2 FOR VALUES IN (null, 'z');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_null_z PARTITION OF list_parted2 FOR VALUES IN (null, 'z');
+ ^
+<sql-statement>
+CREATE TABLE part_ab PARTITION OF list_parted2 FOR VALUES IN ('a', 'b');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_ab PARTITION OF list_parted2 FOR VALUES IN ('a', 'b');
+ ^
+<sql-statement>
+CREATE TABLE list_parted2_def PARTITION OF list_parted2 DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE list_parted2_def PARTITION OF list_parted2 DEFAULT;
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF list_parted2 FOR VALUES IN (null);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF list_parted2 FOR VALUES IN (null);
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF list_parted2 FOR VALUES IN ('b', 'c');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF list_parted2 FOR VALUES IN ('b', 'c');
+ ^
+<sql-statement>
+-- check default partition overlap
+INSERT INTO list_parted2 VALUES('X');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.list_parted2
+
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF list_parted2 FOR VALUES IN ('W', 'X', 'Y');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF list_parted2 FOR VALUES IN ('W', 'X', 'Y');
+ ^
+<sql-statement>
+CREATE TABLE range_parted2 (
+ a int
+) PARTITION BY RANGE (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE range_parted2 (
+ ^
+<sql-statement>
+-- trying to create range partition with empty range
+CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (1) TO (0);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- trying to create range partition with empty range
+ ^
+<sql-statement>
+-- note that the range '[1, 1)' has no elements
+CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (1) TO (1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- note that the range '[1, 1)' has no elements
+ ^
+<sql-statement>
+CREATE TABLE part0 PARTITION OF range_parted2 FOR VALUES FROM (minvalue) TO (1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part0 PARTITION OF range_parted2 FOR VALUES FROM (minvalue) TO (1);
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (minvalue) TO (2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (minvalue) TO (2);
+ ^
+<sql-statement>
+CREATE TABLE part1 PARTITION OF range_parted2 FOR VALUES FROM (1) TO (10);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part1 PARTITION OF range_parted2 FOR VALUES FROM (1) TO (10);
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (-1) TO (1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (-1) TO (1);
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (9) TO (maxvalue);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (9) TO (maxvalue);
+ ^
+<sql-statement>
+CREATE TABLE part2 PARTITION OF range_parted2 FOR VALUES FROM (20) TO (30);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part2 PARTITION OF range_parted2 FOR VALUES FROM (20) TO (30);
+ ^
+<sql-statement>
+CREATE TABLE part3 PARTITION OF range_parted2 FOR VALUES FROM (30) TO (40);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part3 PARTITION OF range_parted2 FOR VALUES FROM (30) TO (40);
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (10) TO (30);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (10) TO (30);
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (10) TO (50);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (10) TO (50);
+ ^
+<sql-statement>
+-- Create a default partition for range partitioned table
+CREATE TABLE range2_default PARTITION OF range_parted2 DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- Create a default partition for range partitioned table
+ ^
+<sql-statement>
+-- More than one default partition is not allowed, so this should give error
+CREATE TABLE fail_default_part PARTITION OF range_parted2 DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- More than one default partition is not allowed, so this should give error
+ ^
+<sql-statement>
+-- Check if the range for default partitions overlap
+INSERT INTO range_parted2 VALUES (85);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.range_parted2
+
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (80) TO (90);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF range_parted2 FOR VALUES FROM (80) TO (90);
+ ^
+<sql-statement>
+CREATE TABLE part4 PARTITION OF range_parted2 FOR VALUES FROM (90) TO (100);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part4 PARTITION OF range_parted2 FOR VALUES FROM (90) TO (100);
+ ^
+<sql-statement>
+-- now check for multi-column range partition key
+CREATE TABLE range_parted3 (
+ a int,
+ b int
+) PARTITION BY RANGE (a, (b+1));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- now check for multi-column range partition key
+ ^
+<sql-statement>
+CREATE TABLE part00 PARTITION OF range_parted3 FOR VALUES FROM (0, minvalue) TO (0, maxvalue);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part00 PARTITION OF range_parted3 FOR VALUES FROM (0, minvalue) TO (0, maxvalue);
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF range_parted3 FOR VALUES FROM (0, minvalue) TO (0, 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF range_parted3 FOR VALUES FROM (0, minvalue) TO (0, 1);
+ ^
+<sql-statement>
+CREATE TABLE part10 PARTITION OF range_parted3 FOR VALUES FROM (1, minvalue) TO (1, 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part10 PARTITION OF range_parted3 FOR VALUES FROM (1, minvalue) TO (1, 1);
+ ^
+<sql-statement>
+CREATE TABLE part11 PARTITION OF range_parted3 FOR VALUES FROM (1, 1) TO (1, 10);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part11 PARTITION OF range_parted3 FOR VALUES FROM (1, 1) TO (1, 10);
+ ^
+<sql-statement>
+CREATE TABLE part12 PARTITION OF range_parted3 FOR VALUES FROM (1, 10) TO (1, maxvalue);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part12 PARTITION OF range_parted3 FOR VALUES FROM (1, 10) TO (1, maxvalue);
+ ^
+<sql-statement>
+CREATE TABLE fail_part PARTITION OF range_parted3 FOR VALUES FROM (1, 10) TO (1, 20);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE fail_part PARTITION OF range_parted3 FOR VALUES FROM (1, 10) TO (1, 20);
+ ^
+<sql-statement>
+CREATE TABLE range3_default PARTITION OF range_parted3 DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE range3_default PARTITION OF range_parted3 DEFAULT;
+ ^
+<sql-statement>
+-- cannot create a partition that says column b is allowed to range
+-- from -infinity to +infinity, while there exist partitions that have
+-- more specific ranges
+CREATE TABLE fail_part PARTITION OF range_parted3 FOR VALUES FROM (1, minvalue) TO (1, maxvalue);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- cannot create a partition that says column b is allowed to range
+ ^
+<sql-statement>
+-- check for partition bound overlap and other invalid specifications for the hash partition
+CREATE TABLE hash_parted2 (
+ a varchar
+) PARTITION BY HASH (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check for partition bound overlap and other invalid specifications for the hash partition
+ ^
+<sql-statement>
+CREATE TABLE h2part_1 PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 4, REMAINDER 2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:67: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE h2part_1 PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 4, REMAINDER 2);
+ ^
+<sql-statement>
+CREATE TABLE h2part_2 PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 8, REMAINDER 0);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:67: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE h2part_2 PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 8, REMAINDER 0);
+ ^
+<sql-statement>
+CREATE TABLE h2part_3 PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 8, REMAINDER 4);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:67: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE h2part_3 PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 8, REMAINDER 4);
+ ^
+<sql-statement>
+CREATE TABLE h2part_4 PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 8, REMAINDER 5);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:67: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE h2part_4 PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 8, REMAINDER 5);
+ ^
+<sql-statement>
+-- overlap with part_4
+CREATE TABLE fail_part PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 2, REMAINDER 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:67: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 2, REMAINDER 1);
+ ^
+<sql-statement>
+-- modulus must be greater than zero
+CREATE TABLE fail_part PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 0, REMAINDER 1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:67: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 0, REMAINDER 1);
+ ^
+<sql-statement>
+-- remainder must be greater than or equal to zero and less than modulus
+CREATE TABLE fail_part PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 8, REMAINDER 8);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:67: Error: ERROR: unrecognized hash partition bound specification "MODULUS"
+
+ CREATE TABLE fail_part PARTITION OF hash_parted2 FOR VALUES WITH (MODULUS 8, REMAINDER 8);
+ ^
+<sql-statement>
+-- check schema propagation from parent
+CREATE TABLE parted (
+ a text,
+ b int NOT NULL DEFAULT 0,
+ CONSTRAINT check_a CHECK (length(a) > 0)
+) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check schema propagation from parent
+ ^
+<sql-statement>
+CREATE TABLE part_a PARTITION OF parted FOR VALUES IN ('a');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_a PARTITION OF parted FOR VALUES IN ('a');
+ ^
+<sql-statement>
+-- able to specify column default, column constraint, and table constraint
+-- first check the "column specified more than once" error
+CREATE TABLE part_b PARTITION OF parted (
+ b NOT NULL,
+ b DEFAULT 1,
+ b CHECK (b >= 0),
+ CONSTRAINT check_a CHECK (length(a) > 0)
+) FOR VALUES IN ('b');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- able to specify column default, column constraint, and table constraint
+ ^
+<sql-statement>
+CREATE TABLE part_b PARTITION OF parted (
+ b NOT NULL DEFAULT 1,
+ CONSTRAINT check_a CHECK (length(a) > 0),
+ CONSTRAINT check_b CHECK (b >= 0)
+) FOR VALUES IN ('b');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_b PARTITION OF parted (
+ ^
+<sql-statement>
+-- conislocal should be false for any merged constraints, true otherwise
+SELECT conislocal, coninhcount FROM pg_constraint WHERE conrelid = 'part_b'::regclass ORDER BY conislocal, coninhcount;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.pg_constraint
+
+<sql-statement>
+-- Once check_b is added to the parent, it should be made non-local for part_b
+ALTER TABLE parted ADD CONSTRAINT check_b CHECK (b >= 0);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ -- Once check_b is added to the parent, it should be made non-local for part_b
+ ^
+<sql-statement>
+SELECT conislocal, coninhcount FROM pg_constraint WHERE conrelid = 'part_b'::regclass;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.pg_constraint
+
+<sql-statement>
+-- Neither check_a nor check_b are droppable from part_b
+ALTER TABLE part_b DROP CONSTRAINT check_a;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ -- Neither check_a nor check_b are droppable from part_b
+ ^
+<sql-statement>
+ALTER TABLE part_b DROP CONSTRAINT check_b;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE part_b DROP CONSTRAINT check_b;
+ ^
+<sql-statement>
+-- And dropping it from parted should leave no trace of them on part_b, unlike
+-- traditional inheritance where they will be left behind, because they would
+-- be local constraints.
+ALTER TABLE parted DROP CONSTRAINT check_a, DROP CONSTRAINT check_b;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ -- And dropping it from parted should leave no trace of them on part_b, unlike
+ ^
+<sql-statement>
+SELECT conislocal, coninhcount FROM pg_constraint WHERE conrelid = 'part_b'::regclass;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.pg_constraint
+
+<sql-statement>
+-- specify PARTITION BY for a partition
+CREATE TABLE fail_part_col_not_found PARTITION OF parted FOR VALUES IN ('c') PARTITION BY RANGE (c);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- specify PARTITION BY for a partition
+ ^
+<sql-statement>
+CREATE TABLE part_c PARTITION OF parted (b WITH OPTIONS NOT NULL DEFAULT 0) FOR VALUES IN ('c') PARTITION BY RANGE ((b));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE part_c PARTITION OF parted (b WITH OPTIONS NOT NULL DEFAULT 0) FOR VALUES IN ('c') PARTITION BY RANGE ((b));
+ ^
+<sql-statement>
+-- create a level-2 partition
+CREATE TABLE part_c_1_10 PARTITION OF part_c FOR VALUES FROM (1) TO (10);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- create a level-2 partition
+ ^
+<sql-statement>
+-- check that NOT NULL and default value are inherited correctly
+create table parted_notnull_inh_test (a int default 1, b int not null default 0) partition by list (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check that NOT NULL and default value are inherited correctly
+ ^
+<sql-statement>
+create table parted_notnull_inh_test1 partition of parted_notnull_inh_test (a not null, b default 1) for values in (1);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table parted_notnull_inh_test1 partition of parted_notnull_inh_test (a not null, b default 1) for values in (1);
+ ^
+<sql-statement>
+insert into parted_notnull_inh_test (b) values (null);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.parted_notnull_inh_test
+
+<sql-statement>
+-- note that while b's default is overriden, a's default is preserved
+\d parted_notnull_inh_test1
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:1: Error: ERROR: syntax error at or near "\"
+
+ \d parted_notnull_inh_test1
+ ^
+<sql-statement>
+drop table parted_notnull_inh_test;
+</sql-statement>
+<sql-statement>
+-- check that collations are assigned in partition bound expressions
+create table parted_boolean_col (a bool, b text) partition by list(a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check that collations are assigned in partition bound expressions
+ ^
+<sql-statement>
+create table parted_boolean_less partition of parted_boolean_col
+ for values in ('foo' < 'bar');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table parted_boolean_less partition of parted_boolean_col
+ ^
+<sql-statement>
+create table parted_boolean_greater partition of parted_boolean_col
+ for values in ('foo' > 'bar');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table parted_boolean_greater partition of parted_boolean_col
+ ^
+<sql-statement>
+drop table parted_boolean_col;
+</sql-statement>
+<sql-statement>
+-- check for a conflicting COLLATE clause
+create table parted_collate_must_match (a text collate "C", b text collate "C")
+ partition by range (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check for a conflicting COLLATE clause
+ ^
+<sql-statement>
+-- on the partition key
+create table parted_collate_must_match1 partition of parted_collate_must_match
+ (a collate "POSIX") for values from ('a') to ('m');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- on the partition key
+ ^
+<sql-statement>
+-- on another column
+create table parted_collate_must_match2 partition of parted_collate_must_match
+ (b collate "POSIX") for values from ('m') to ('z');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- on another column
+ ^
+<sql-statement>
+drop table parted_collate_must_match;
+</sql-statement>
+<sql-statement>
+-- check that non-matching collations for partition bound
+-- expressions are coerced to the right collation
+create table test_part_coll_posix (a text) partition by range (a collate "POSIX");
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check that non-matching collations for partition bound
+ ^
+<sql-statement>
+-- ok, collation is implicitly coerced
+create table test_part_coll partition of test_part_coll_posix for values from ('a' collate "C") to ('g');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- ok, collation is implicitly coerced
+ ^
+<sql-statement>
+-- ok
+create table test_part_coll2 partition of test_part_coll_posix for values from ('g') to ('m');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- ok
+ ^
+<sql-statement>
+-- ok, collation is implicitly coerced
+create table test_part_coll_cast partition of test_part_coll_posix for values from (name 'm' collate "C") to ('s');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- ok, collation is implicitly coerced
+ ^
+<sql-statement>
+-- ok; partition collation silently overrides the default collation of type 'name'
+create table test_part_coll_cast2 partition of test_part_coll_posix for values from (name 's') to ('z');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ -- ok; partition collation silently overrides the default collation of type 'name'
+ ^
+<sql-statement>
+drop table test_part_coll_posix;
+</sql-statement>
+<sql-statement>
+-- Partition bound in describe output
+\d+ part_b
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:1: Error: ERROR: syntax error at or near "\"
+
+ \d+ part_b
+ ^
+<sql-statement>
+-- Both partition bound and partition key in describe output
+\d+ part_c
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:1: Error: ERROR: syntax error at or near "\"
+
+ \d+ part_c
+ ^
+<sql-statement>
+-- a level-2 partition's constraint will include the parent's expressions
+\d+ part_c_1_10
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:1: Error: ERROR: syntax error at or near "\"
+
+ \d+ part_c_1_10
+ ^
+<sql-statement>
+-- Show partition count in the parent's describe output
+-- Tempted to include \d+ output listing partitions with bound info but
+-- output could vary depending on the order in which partition oids are
+-- returned.
+\d parted
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:5:1: Error: ERROR: syntax error at or near "\"
+
+ \d parted
+ ^
+<sql-statement>
+\d hash_parted
+</sql-statement>
+Metacommand \d hash_parted is not supported
+<sql-statement>
+-- check that we get the expected partition constraints
+CREATE TABLE range_parted4 (a int, b int, c int) PARTITION BY RANGE (abs(a), abs(b), c);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check that we get the expected partition constraints
+ ^
+<sql-statement>
+CREATE TABLE unbounded_range_part PARTITION OF range_parted4 FOR VALUES FROM (MINVALUE, MINVALUE, MINVALUE) TO (MAXVALUE, MAXVALUE, MAXVALUE);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE unbounded_range_part PARTITION OF range_parted4 FOR VALUES FROM (MINVALUE, MINVALUE, MINVALUE) TO (MAXVALUE, MAXVALUE, MAXVALUE);
+ ^
+<sql-statement>
+\d+ unbounded_range_part
+</sql-statement>
+Metacommand \d+ unbounded_range_part is not supported
+<sql-statement>
+DROP TABLE unbounded_range_part;
+</sql-statement>
+<sql-statement>
+CREATE TABLE range_parted4_1 PARTITION OF range_parted4 FOR VALUES FROM (MINVALUE, MINVALUE, MINVALUE) TO (1, MAXVALUE, MAXVALUE);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE range_parted4_1 PARTITION OF range_parted4 FOR VALUES FROM (MINVALUE, MINVALUE, MINVALUE) TO (1, MAXVALUE, MAXVALUE);
+ ^
+<sql-statement>
+\d+ range_parted4_1
+</sql-statement>
+Metacommand \d+ range_parted4_1 is not supported
+<sql-statement>
+CREATE TABLE range_parted4_2 PARTITION OF range_parted4 FOR VALUES FROM (3, 4, 5) TO (6, 7, MAXVALUE);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE range_parted4_2 PARTITION OF range_parted4 FOR VALUES FROM (3, 4, 5) TO (6, 7, MAXVALUE);
+ ^
+<sql-statement>
+\d+ range_parted4_2
+</sql-statement>
+Metacommand \d+ range_parted4_2 is not supported
+<sql-statement>
+CREATE TABLE range_parted4_3 PARTITION OF range_parted4 FOR VALUES FROM (6, 8, MINVALUE) TO (9, MAXVALUE, MAXVALUE);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE range_parted4_3 PARTITION OF range_parted4 FOR VALUES FROM (6, 8, MINVALUE) TO (9, MAXVALUE, MAXVALUE);
+ ^
+<sql-statement>
+\d+ range_parted4_3
+</sql-statement>
+Metacommand \d+ range_parted4_3 is not supported
+<sql-statement>
+DROP TABLE range_parted4;
+</sql-statement>
+<sql-statement>
+-- user-defined operator class in partition key
+CREATE FUNCTION my_int4_sort(int4,int4) RETURNS int LANGUAGE sql
+ AS $$ SELECT CASE WHEN $1 = $2 THEN 0 WHEN $1 > $2 THEN 1 ELSE -1 END; $$;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ -- user-defined operator class in partition key
+ ^
+<sql-statement>
+CREATE OPERATOR CLASS test_int4_ops FOR TYPE int4 USING btree AS
+ OPERATOR 1 < (int4,int4), OPERATOR 2 <= (int4,int4),
+ OPERATOR 3 = (int4,int4), OPERATOR 4 >= (int4,int4),
+ OPERATOR 5 > (int4,int4), FUNCTION 1 my_int4_sort(int4,int4);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 298
+ CREATE OPERATOR CLASS test_int4_ops FOR TYPE int4 USING btree AS
+ ^
+<sql-statement>
+CREATE TABLE partkey_t (a int4) PARTITION BY RANGE (a test_int4_ops);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ CREATE TABLE partkey_t (a int4) PARTITION BY RANGE (a test_int4_ops);
+ ^
+<sql-statement>
+CREATE TABLE partkey_t_1 PARTITION OF partkey_t FOR VALUES FROM (0) TO (1000);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE partkey_t_1 PARTITION OF partkey_t FOR VALUES FROM (0) TO (1000);
+ ^
+<sql-statement>
+INSERT INTO partkey_t VALUES (100);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.partkey_t
+
+<sql-statement>
+INSERT INTO partkey_t VALUES (200);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.partkey_t
+
+<sql-statement>
+-- cleanup
+DROP TABLE parted, list_parted, range_parted, list_parted2, range_parted2, range_parted3;
+</sql-statement>
+<sql-statement>
+DROP TABLE partkey_t, hash_parted, hash_parted2;
+</sql-statement>
+<sql-statement>
+DROP OPERATOR CLASS test_int4_ops USING btree;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: Not supported object type for DROP
+ DROP OPERATOR CLASS test_int4_ops USING btree;
+ ^
+<sql-statement>
+DROP FUNCTION my_int4_sort(int4,int4);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386
+ DROP FUNCTION my_int4_sort(int4,int4);
+ ^
+<sql-statement>
+-- comments on partitioned tables columns
+CREATE TABLE parted_col_comment (a int, b text) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- comments on partitioned tables columns
+ ^
+<sql-statement>
+COMMENT ON TABLE parted_col_comment IS 'Am partitioned table';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258
+ COMMENT ON TABLE parted_col_comment IS 'Am partitioned table';
+ ^
+<sql-statement>
+COMMENT ON COLUMN parted_col_comment.a IS 'Partition key';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258
+ COMMENT ON COLUMN parted_col_comment.a IS 'Partition key';
+ ^
+<sql-statement>
+SELECT obj_description('parted_col_comment'::regclass);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT obj_description('parted_col_comment'::regclass);
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT obj_description('parted_col_comment'::regclass);
+ ^
+ -stdin-:<main>:1:8: Error: No such proc: obj_description
+ SELECT obj_description('parted_col_comment'::regclass);
+ ^
+<sql-statement>
+\d+ parted_col_comment
+</sql-statement>
+Metacommand \d+ parted_col_comment is not supported
+<sql-statement>
+DROP TABLE parted_col_comment;
+</sql-statement>
+<sql-statement>
+-- list partitioning on array type column
+CREATE TABLE arrlp (a int[]) PARTITION BY LIST (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- list partitioning on array type column
+ ^
+<sql-statement>
+CREATE TABLE arrlp12 PARTITION OF arrlp FOR VALUES IN ('{1}', '{2}');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ CREATE TABLE arrlp12 PARTITION OF arrlp FOR VALUES IN ('{1}', '{2}');
+ ^
+<sql-statement>
+\d+ arrlp12
+</sql-statement>
+Metacommand \d+ arrlp12 is not supported
+<sql-statement>
+DROP TABLE arrlp;
+</sql-statement>
+<sql-statement>
+-- partition on boolean column
+create table boolspart (a bool) partition by list (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- partition on boolean column
+ ^
+<sql-statement>
+create table boolspart_t partition of boolspart for values in (true);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table boolspart_t partition of boolspart for values in (true);
+ ^
+<sql-statement>
+create table boolspart_f partition of boolspart for values in (false);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table boolspart_f partition of boolspart for values in (false);
+ ^
+<sql-statement>
+\d+ boolspart
+</sql-statement>
+Metacommand \d+ boolspart is not supported
+<sql-statement>
+drop table boolspart;
+</sql-statement>
+<sql-statement>
+-- partitions mixing temporary and permanent relations
+create table perm_parted (a int) partition by list (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- partitions mixing temporary and permanent relations
+ ^
+<sql-statement>
+create temporary table temp_parted (a int) partition by list (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ create temporary table temp_parted (a int) partition by list (a);
+ ^
+<sql-statement>
+create table perm_part partition of temp_parted default; -- error
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table perm_part partition of temp_parted default; -- error
+ ^
+<sql-statement>
+create temp table temp_part partition of perm_parted default; -- error
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create temp table temp_part partition of perm_parted default; -- error
+ ^
+<sql-statement>
+create temp table temp_part partition of temp_parted default; -- ok
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create temp table temp_part partition of temp_parted default; -- ok
+ ^
+<sql-statement>
+drop table perm_parted cascade;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: CASCADE is not implemented
+ drop table perm_parted cascade;
+ ^
+<sql-statement>
+drop table temp_parted cascade;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: CASCADE is not implemented
+ drop table temp_parted cascade;
+ ^
+<sql-statement>
+-- check that adding partitions to a table while it is being used is prevented
+create table tab_part_create (a int) partition by list (a);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- check that adding partitions to a table while it is being used is prevented
+ ^
+<sql-statement>
+create or replace function func_part_create() returns trigger
+ language plpgsql as $$
+ begin
+ execute 'create table tab_part_create_1 partition of tab_part_create for values in (1)';
+ return null;
+ end $$;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ create or replace function func_part_create() returns trigger
+ ^
+<sql-statement>
+create trigger trig_part_create before insert on tab_part_create
+ for each statement execute procedure func_part_create();
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 283
+ create trigger trig_part_create before insert on tab_part_create
+ ^
+<sql-statement>
+insert into tab_part_create values (1);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tab_part_create
+
+<sql-statement>
+drop table tab_part_create;
+</sql-statement>
+<sql-statement>
+drop function func_part_create();
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386
+ drop function func_part_create();
+ ^
+<sql-statement>
+-- test using a volatile expression as partition bound
+create table volatile_partbound_test (partkey timestamp) partition by range (partkey);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- test using a volatile expression as partition bound
+ ^
+<sql-statement>
+create table volatile_partbound_test1 partition of volatile_partbound_test for values from (minvalue) to (current_timestamp);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table volatile_partbound_test1 partition of volatile_partbound_test for values from (minvalue) to (current_timestamp);
+ ^
+<sql-statement>
+create table volatile_partbound_test2 partition of volatile_partbound_test for values from (current_timestamp) to (maxvalue);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table volatile_partbound_test2 partition of volatile_partbound_test for values from (current_timestamp) to (maxvalue);
+ ^
+<sql-statement>
+-- this should go into the partition volatile_partbound_test2
+insert into volatile_partbound_test values (current_timestamp);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.volatile_partbound_test
+
+<sql-statement>
+select tableoid::regclass from volatile_partbound_test;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.volatile_partbound_test
+
+<sql-statement>
+drop table volatile_partbound_test;
+</sql-statement>
+<sql-statement>
+-- test the case where a check constraint on default partition allows
+-- to avoid scanning it when adding a new partition
+create table defcheck (a int, b int) partition by list (b);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- test the case where a check constraint on default partition allows
+ ^
+<sql-statement>
+create table defcheck_def (a int, c int, b int);
+</sql-statement>
+<sql-statement>
+alter table defcheck_def drop c;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ alter table defcheck_def drop c;
+ ^
+<sql-statement>
+alter table defcheck attach partition defcheck_def default;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ alter table defcheck attach partition defcheck_def default;
+ ^
+<sql-statement>
+alter table defcheck_def add check (b <= 0 and b is not null);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ alter table defcheck_def add check (b <= 0 and b is not null);
+ ^
+<sql-statement>
+create table defcheck_1 partition of defcheck for values in (1, null);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table defcheck_1 partition of defcheck for values in (1, null);
+ ^
+<sql-statement>
+-- test that complex default partition constraints are enforced correctly
+insert into defcheck_def values (0, 0);
+</sql-statement>
+<sql-statement>
+create table defcheck_0 partition of defcheck for values in (0);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table defcheck_0 partition of defcheck for values in (0);
+ ^
+<sql-statement>
+drop table defcheck;
+</sql-statement>
+<sql-statement>
+-- tests of column drop with partition tables and indexes using
+-- predicates and expressions.
+create table part_column_drop (
+ useless_1 int,
+ id int,
+ useless_2 int,
+ d int,
+ b int,
+ useless_3 int
+) partition by range (id);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: PARTITION BY clause not supported
+ -- tests of column drop with partition tables and indexes using
+ ^
+<sql-statement>
+alter table part_column_drop drop column useless_1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ alter table part_column_drop drop column useless_1;
+ ^
+<sql-statement>
+alter table part_column_drop drop column useless_2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ alter table part_column_drop drop column useless_2;
+ ^
+<sql-statement>
+alter table part_column_drop drop column useless_3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ alter table part_column_drop drop column useless_3;
+ ^
+<sql-statement>
+create index part_column_drop_b_pred on part_column_drop(b) where b = 1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: partial index is not supported yet
+ create index part_column_drop_b_pred on part_column_drop(b) where b = 1;
+ ^
+<sql-statement>
+create index part_column_drop_b_expr on part_column_drop((b = 1));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: index expression is not supported yet
+ create index part_column_drop_b_expr on part_column_drop((b = 1));
+ ^
+<sql-statement>
+create index part_column_drop_d_pred on part_column_drop(d) where d = 2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: partial index is not supported yet
+ create index part_column_drop_d_pred on part_column_drop(d) where d = 2;
+ ^
+<sql-statement>
+create index part_column_drop_d_expr on part_column_drop((d = 2));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: index expression is not supported yet
+ create index part_column_drop_d_expr on part_column_drop((d = 2));
+ ^
+<sql-statement>
+create table part_column_drop_1_10 partition of
+ part_column_drop for values from (1) to (10);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: table inheritance not supported
+ create table part_column_drop_1_10 partition of
+ ^
+<sql-statement>
+\d part_column_drop
+</sql-statement>
+Metacommand \d part_column_drop is not supported
+<sql-statement>
+\d part_column_drop_1_10
+</sql-statement>
+Metacommand \d part_column_drop_1_10 is not supported
+<sql-statement>
+drop table part_column_drop;
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/date.err b/ydb/library/yql/tests/postgresql/cases/date.err
new file mode 100644
index 0000000000..b36609644e
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/date.err
@@ -0,0 +1,74 @@
+<sql-statement>
+--
+-- DATE
+--
+CREATE TABLE DATE_TBL (f1 date);
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1957-04-09');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1957-06-13');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1996-02-28');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1996-02-29');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1996-03-01');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1996-03-02');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1997-02-28');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1997-02-29');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1997-03-01');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('1997-03-02');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('2000-04-01');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('2000-04-02');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('2000-04-03');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('2038-04-08');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('2039-04-09');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('2040-04-10');
+</sql-statement>
+<sql-statement>
+INSERT INTO DATE_TBL VALUES ('2040-04-10 BC');
+</sql-statement>
+<sql-statement>
+SELECT f1 FROM DATE_TBL;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FCE85229D90)
+__libc_start_main+128 (0x7FCE85229E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/dbsize.err b/ydb/library/yql/tests/postgresql/cases/dbsize.err
new file mode 100644
index 0000000000..7002f903c4
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/dbsize.err
@@ -0,0 +1,259 @@
+<sql-statement>
+SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
+ (VALUES (10::bigint), (1000::bigint), (1000000::bigint),
+ (1000000000::bigint), (1000000000000::bigint),
+ (1000000000000000::bigint)) x(size);
+</sql-statement>
+<sql-statement>
+SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
+ (VALUES (10::numeric), (1000::numeric), (1000000::numeric),
+ (1000000000::numeric), (1000000000000::numeric),
+ (1000000000000000::numeric),
+ (10.5::numeric), (1000.5::numeric), (1000000.5::numeric),
+ (1000000000.5::numeric), (1000000000000.5::numeric),
+ (1000000000000000.5::numeric)) x(size);
+</sql-statement>
+<sql-statement>
+-- test where units change up
+SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
+ (VALUES (10239::bigint), (10240::bigint),
+ (10485247::bigint), (10485248::bigint),
+ (10736893951::bigint), (10736893952::bigint),
+ (10994579406847::bigint), (10994579406848::bigint),
+ (11258449312612351::bigint), (11258449312612352::bigint)) x(size);
+</sql-statement>
+<sql-statement>
+SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
+ (VALUES (10239::numeric), (10240::numeric),
+ (10485247::numeric), (10485248::numeric),
+ (10736893951::numeric), (10736893952::numeric),
+ (10994579406847::numeric), (10994579406848::numeric),
+ (11258449312612351::numeric), (11258449312612352::numeric)) x(size);
+</sql-statement>
+<sql-statement>
+-- pg_size_bytes() tests
+SELECT size, pg_size_bytes(size) FROM
+ (VALUES ('1'), ('123bytes'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '),
+ ('1TB'), ('3000 TB'), ('1e6 MB')) x(size);
+</sql-statement>
+<sql-statement>
+-- case-insensitive units are supported
+SELECT size, pg_size_bytes(size) FROM
+ (VALUES ('1'), ('123bYteS'), ('1kb'), ('1mb'), (' 1 Gb'), ('1.5 gB '),
+ ('1tb'), ('3000 tb'), ('1e6 mb')) x(size);
+</sql-statement>
+<sql-statement>
+-- negative numbers are supported
+SELECT size, pg_size_bytes(size) FROM
+ (VALUES ('-1'), ('-123bytes'), ('-1kb'), ('-1mb'), (' -1 Gb'), ('-1.5 gB '),
+ ('-1tb'), ('-3000 TB'), ('-10e-1 MB')) x(size);
+</sql-statement>
+<sql-statement>
+-- different cases with allowed points
+SELECT size, pg_size_bytes(size) FROM
+ (VALUES ('-1.'), ('-1.kb'), ('-1. kb'), ('-0. gb'),
+ ('-.1'), ('-.1kb'), ('-.1 kb'), ('-.0 gb')) x(size);
+</sql-statement>
+<sql-statement>
+-- invalid inputs
+SELECT pg_size_bytes('1 AB');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- invalid inputs
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "1 AB"
+DETAIL: Invalid size unit: "AB".
+HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+
+ -- invalid inputs
+ ^
+<sql-statement>
+SELECT pg_size_bytes('1 AB A');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('1 AB A');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "1 AB A"
+DETAIL: Invalid size unit: "AB A".
+HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+
+ SELECT pg_size_bytes('1 AB A');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('1 AB A ');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('1 AB A ');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "1 AB A "
+DETAIL: Invalid size unit: "AB A".
+HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+
+ SELECT pg_size_bytes('1 AB A ');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('9223372036854775807.9');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('9223372036854775807.9');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: bigint out of range
+
+ SELECT pg_size_bytes('9223372036854775807.9');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('1e100');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('1e100');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: bigint out of range
+
+ SELECT pg_size_bytes('1e100');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('1e1000000000000000000');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('1e1000000000000000000');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value overflows numeric format
+
+ SELECT pg_size_bytes('1e1000000000000000000');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('1 byte'); -- the singular "byte" is not supported
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('1 byte'); -- the singular "byte" is not supported
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "1 byte"
+DETAIL: Invalid size unit: "byte".
+HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+
+ SELECT pg_size_bytes('1 byte'); -- the singular "byte" is not supported
+ ^
+<sql-statement>
+SELECT pg_size_bytes('');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: ""
+
+ SELECT pg_size_bytes('');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('kb');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('kb');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "kb"
+
+ SELECT pg_size_bytes('kb');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('..');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('..');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: ".."
+
+ SELECT pg_size_bytes('..');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('-.');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('-.');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "-."
+
+ SELECT pg_size_bytes('-.');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('-.kb');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('-.kb');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "-.kb"
+
+ SELECT pg_size_bytes('-.kb');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('-. kb');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('-. kb');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "-. kb"
+
+ SELECT pg_size_bytes('-. kb');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('.+912');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('.+912');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: ".+912"
+
+ SELECT pg_size_bytes('.+912');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('+912+ kB');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('+912+ kB');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "+912+ kB"
+DETAIL: Invalid size unit: "+ kB".
+HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+
+ SELECT pg_size_bytes('+912+ kB');
+ ^
+<sql-statement>
+SELECT pg_size_bytes('++123 kB');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT pg_size_bytes('++123 kB');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid size: "++123 kB"
+
+ SELECT pg_size_bytes('++123 kB');
+ ^
diff --git a/ydb/library/yql/tests/postgresql/cases/delete.err b/ydb/library/yql/tests/postgresql/cases/delete.err
new file mode 100644
index 0000000000..f8a2281d3e
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/delete.err
@@ -0,0 +1,45 @@
+<sql-statement>
+CREATE TABLE delete_test (
+ id SERIAL PRIMARY KEY,
+ a INT,
+ b text
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO delete_test (a) VALUES (10);
+</sql-statement>
+<sql-statement>
+INSERT INTO delete_test (a, b) VALUES (50, repeat('x', 10000));
+</sql-statement>
+<sql-statement>
+INSERT INTO delete_test (a) VALUES (100);
+</sql-statement>
+<sql-statement>
+-- allow an alias to be specified for DELETE's target table
+DELETE FROM delete_test AS dt WHERE dt.a > 75;
+</sql-statement>
+VERIFY failed (2023-12-07T19:23:19.174482+0300):
+ ydb/library/yql/ast/yql_ast.h:163
+ NewList(): requirement poolChildren[index] failed
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+FormatBackTrace(IOutputStream*)+32 (0x140343A0)
+PrintBackTrace()+17 (0x140343F1)
+NPrivate::InternalPanicImpl(int, char const*, char const*, int, int, int, TBasicStringBuf<char, std::__y1::char_traits<char> >, char const*, unsigned long)+995 (0x1407A6A3)
+NPrivate::Panic(NPrivate::TStaticBuf const&, int, char const*, char const*, char const*, ...)+418 (0x1406D812)
+NYql::TAstNode::NewList(NYql::TPosition, NYql::TAstNode**, unsigned int, TMemoryPool&)+329 (0x149F4389)
+NYql::TAstNode* NSQLTranslationPG::TConverter::L<NYql::TAstNode*, NYql::TAstNode*, NYql::TAstNode*, NYql::TAstNode*, NYql::TAstNode*, NYql::TAstNode*>(NYql::TAstNode*, NYql::TAstNode*, NYql::TAstNode*, NYql::TAstNode*, NYql::TAstNode*, NYql::TAstNode*)+276 (0x15564054)
+NSQLTranslationPG::TConverter::ParseDeleteStmt(DeleteStmt const*)+6165 (0x15559BE5)
+NSQLTranslationPG::TConverter::ParseRawStmt(RawStmt const*)+1054 (0x1554AFBE)
+NSQLTranslationPG::TConverter::ParseResult(List const*)+1256 (0x155494D8)
+NSQLTranslationPG::TConverter::OnResult(List const*)+83 (0x155468F3)
+NYql::PGParse(TBasicString<char, std::__y1::char_traits<char> > const&, NYql::IPGParseEvents&)+1043 (0x1B72E0F3)
+NSQLTranslationPG::PGToYql(TBasicString<char, std::__y1::char_traits<char> > const&, NSQLTranslation::TTranslationSettings const&)+131 (0x15545223)
+NSQLTranslation::SqlToYql(TBasicString<char, std::__y1::char_traits<char> > const&, NSQLTranslation::TTranslationSettings const&, TVector<NYql::TWarningRule, std::__y1::allocator<NYql::TWarningRule> >*, unsigned short*)+749 (0x155413DD)
+NYql::TProgram::ParseSql(NSQLTranslation::TTranslationSettings const&)+676 (0x16BB7634)
+Main(int, char**)+3099 (0x13EC055B)
+main+273 (0x13EC2761)
+??+0 (0x7F1696829D90)
+__libc_start_main+128 (0x7F1696829E40)
+??+0 (0x13E4C029)
+pthread_kill at ./nptl/./nptl/pthread_kill.c:43:17
+?? at ??:0:0
diff --git a/ydb/library/yql/tests/postgresql/cases/expressions.err b/ydb/library/yql/tests/postgresql/cases/expressions.err
new file mode 100644
index 0000000000..69cea1bc26
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/expressions.err
@@ -0,0 +1,586 @@
+<sql-statement>
+--
+-- expression evaluation tests that don't fit into a more specific file
+--
+--
+-- Tests for SQLVAlueFunction
+--
+-- current_date (always matches because of transactional behaviour)
+SELECT date(now())::text = current_date::text;
+</sql-statement>
+<sql-statement>
+-- current_time / localtime
+SELECT now()::timetz::text = current_time::text;
+</sql-statement>
+<sql-statement>
+SELECT now()::timetz(4)::text = current_time(4)::text;
+</sql-statement>
+<sql-statement>
+SELECT now()::time::text = localtime::text;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:28: Error: Usupported SQLValueFunction: 5
+ SELECT now()::time::text = localtime::text;
+ ^
+<sql-statement>
+SELECT now()::time(3)::text = localtime(3)::text;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:31: Error: Usupported SQLValueFunction: 6
+ SELECT now()::time(3)::text = localtime(3)::text;
+ ^
+<sql-statement>
+-- current_timestamp / localtimestamp (always matches because of transactional behaviour)
+SELECT current_timestamp = NOW();
+</sql-statement>
+<sql-statement>
+-- precision
+SELECT length(current_timestamp::text) >= length(current_timestamp(0)::text);
+</sql-statement>
+<sql-statement>
+-- localtimestamp
+SELECT now()::timestamp::text = localtimestamp::text;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:33: Error: Usupported SQLValueFunction: 7
+ SELECT now()::timestamp::text = localtimestamp::text;
+ ^
+<sql-statement>
+-- current_role/user/user is tested in rolnames.sql
+-- current database / catalog
+SELECT current_catalog = current_database();
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:3:8: Error: Usupported SQLValueFunction: 13
+ SELECT current_catalog = current_database();
+ ^
+<sql-statement>
+-- current_schema
+SELECT current_schema;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:8: Error: Usupported SQLValueFunction: 14
+ SELECT current_schema;
+ ^
+<sql-statement>
+SET search_path = 'notme';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: search_path
+ SET search_path = 'notme';
+ ^
+<sql-statement>
+SELECT current_schema;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Usupported SQLValueFunction: 14
+ SELECT current_schema;
+ ^
+<sql-statement>
+SET search_path = 'pg_catalog';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: search_path
+ SET search_path = 'pg_catalog';
+ ^
+<sql-statement>
+SELECT current_schema;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Usupported SQLValueFunction: 14
+ SELECT current_schema;
+ ^
+<sql-statement>
+RESET search_path;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET search_path;
+ ^
+<sql-statement>
+--
+-- Tests for BETWEEN
+--
+explain (costs off)
+select count(*) from date_tbl
+ where f1 between '1997-01-01' and '1998-01-01';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ --
+ ^
+<sql-statement>
+select count(*) from date_tbl
+ where f1 between '1997-01-01' and '1998-01-01';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.date_tbl
+
+<sql-statement>
+explain (costs off)
+select count(*) from date_tbl
+ where f1 not between '1997-01-01' and '1998-01-01';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (costs off)
+ ^
+<sql-statement>
+select count(*) from date_tbl
+ where f1 not between '1997-01-01' and '1998-01-01';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.date_tbl
+
+<sql-statement>
+explain (costs off)
+select count(*) from date_tbl
+ where f1 between symmetric '1997-01-01' and '1998-01-01';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (costs off)
+ ^
+<sql-statement>
+select count(*) from date_tbl
+ where f1 between symmetric '1997-01-01' and '1998-01-01';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.date_tbl
+
+<sql-statement>
+explain (costs off)
+select count(*) from date_tbl
+ where f1 not between symmetric '1997-01-01' and '1998-01-01';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (costs off)
+ ^
+<sql-statement>
+select count(*) from date_tbl
+ where f1 not between symmetric '1997-01-01' and '1998-01-01';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.date_tbl
+
+<sql-statement>
+--
+-- Test parsing of a no-op cast to a type with unspecified typmod
+--
+begin;
+</sql-statement>
+<sql-statement>
+create table numeric_tbl (f1 numeric(18,3), f2 numeric);
+</sql-statement>
+<sql-statement>
+create view numeric_view as
+ select
+ f1, f1::numeric(16,4) as f1164, f1::numeric as f1n,
+ f2, f2::numeric(16,4) as f2164, f2::numeric as f2n
+ from numeric_tbl;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ create view numeric_view as
+ ^
+<sql-statement>
+\d+ numeric_view
+</sql-statement>
+Metacommand \d+ numeric_view is not supported
+<sql-statement>
+explain (verbose, costs off) select * from numeric_view;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (verbose, costs off) select * from numeric_view;
+ ^
+<sql-statement>
+-- bpchar, lacking planner support for its length coercion function,
+-- could behave differently
+create table bpchar_tbl (f1 character(16) unique, f2 bpchar);
+</sql-statement>
+<sql-statement>
+create view bpchar_view as
+ select
+ f1, f1::character(14) as f114, f1::bpchar as f1n,
+ f2, f2::character(14) as f214, f2::bpchar as f2n
+ from bpchar_tbl;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ create view bpchar_view as
+ ^
+<sql-statement>
+\d+ bpchar_view
+</sql-statement>
+Metacommand \d+ bpchar_view is not supported
+<sql-statement>
+explain (verbose, costs off) select * from bpchar_view
+ where f1::bpchar = 'foo';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (verbose, costs off) select * from bpchar_view
+ ^
+<sql-statement>
+rollback;
+</sql-statement>
+<sql-statement>
+--
+-- Ordinarily, IN/NOT IN can be converted to a ScalarArrayOpExpr
+-- with a suitably-chosen array type.
+--
+explain (verbose, costs off)
+select random() IN (1, 4, 8.0);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ --
+ ^
+<sql-statement>
+explain (verbose, costs off)
+select random()::int IN (1, 4, 8.0);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (verbose, costs off)
+ ^
+<sql-statement>
+-- However, if there's not a common supertype for the IN elements,
+-- we should instead try to produce "x = v1 OR x = v2 OR ...".
+-- In most cases that'll fail for lack of all the requisite = operators,
+-- but it can succeed sometimes. So this should complain about lack of
+-- an = operator, not about cast failure.
+select '(0,0)'::point in ('(0,0,0,0)'::box, point(0,0));
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ -- However, if there's not a common supertype for the IN elements,
+ ^
+ -stdin-:<main>:6:23: Error: At function: PgIn, At function: AsList
+ select '(0,0)'::point in ('(0,0,0,0)'::box, point(0,0));
+ ^
+ -stdin-:<main>:6:23: Error: Cannot infer common type for box and point
+ select '(0,0)'::point in ('(0,0,0,0)'::box, point(0,0));
+ ^
+<sql-statement>
+--
+-- Tests for ScalarArrayOpExpr with a hashfn
+--
+-- create a stable function so that the tests below are not
+-- evaluated using the planner's constant folding.
+begin;
+</sql-statement>
+<sql-statement>
+create function return_int_input(int) returns int as $$
+begin
+ return $1;
+end;
+$$ language plpgsql stable;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ create function return_int_input(int) returns int as $$
+ ^
+<sql-statement>
+create function return_text_input(text) returns text as $$
+begin
+ return $1;
+end;
+$$ language plpgsql stable;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ create function return_text_input(text) returns text as $$
+ ^
+<sql-statement>
+select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+ ^
+ -stdin-:<main>:1:28: Error: At function: PgIn
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+ ^
+ -stdin-:<main>:1:8: Error: No such proc: return_int_input
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+ ^
+<sql-statement>
+select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+ ^
+ -stdin-:<main>:1:28: Error: At function: PgIn
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+ ^
+ -stdin-:<main>:1:8: Error: No such proc: return_int_input
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+ ^
+<sql-statement>
+select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null);
+ ^
+ -stdin-:<main>:1:28: Error: At function: PgIn
+ select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null);
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null);
+ ^
+ -stdin-:<main>:1:8: Error: No such proc: return_int_input
+ select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null);
+ ^
+<sql-statement>
+select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null);
+ ^
+ -stdin-:<main>:1:28: Error: At function: PgIn
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null);
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null);
+ ^
+ -stdin-:<main>:1:8: Error: No such proc: return_int_input
+ select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null);
+ ^
+<sql-statement>
+select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+ ^
+ -stdin-:<main>:1:36: Error: At function: PgIn
+ select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+ ^
+ -stdin-:<main>:1:8: Error: No such proc: return_int_input
+ select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
+ ^
+<sql-statement>
+select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+ ^
+ -stdin-:<main>:1:36: Error: At function: PgIn
+ select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+ ^
+ -stdin-:<main>:1:8: Error: No such proc: return_int_input
+ select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
+ ^
+<sql-statement>
+select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');
+ ^
+ -stdin-:<main>:1:31: Error: At function: PgIn
+ select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');
+ ^
+ -stdin-:<main>:1:8: Error: No such proc: return_text_input
+ select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');
+ ^
+<sql-statement>
+rollback;
+</sql-statement>
+<sql-statement>
+-- Test with non-strict equality function.
+-- We need to create our own type for this.
+begin;
+</sql-statement>
+<sql-statement>
+create type myint;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255
+ create type myint;
+ ^
+<sql-statement>
+create function myintin(cstring) returns myint strict immutable language
+ internal as 'int4in';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ create function myintin(cstring) returns myint strict immutable language
+ ^
+<sql-statement>
+create function myintout(myint) returns cstring strict immutable language
+ internal as 'int4out';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ create function myintout(myint) returns cstring strict immutable language
+ ^
+<sql-statement>
+create function myinthash(myint) returns integer strict immutable language
+ internal as 'hashint4';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ create function myinthash(myint) returns integer strict immutable language
+ ^
+<sql-statement>
+create type myint (input = myintin, output = myintout, like = int4);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255
+ create type myint (input = myintin, output = myintout, like = int4);
+ ^
+<sql-statement>
+create cast (int4 as myint) without function;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 297
+ create cast (int4 as myint) without function;
+ ^
+<sql-statement>
+create cast (myint as int4) without function;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 297
+ create cast (myint as int4) without function;
+ ^
+<sql-statement>
+create function myinteq(myint, myint) returns bool as $$
+begin
+ if $1 is null and $2 is null then
+ return true;
+ else
+ return $1::int = $2::int;
+ end if;
+end;
+$$ language plpgsql immutable;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ create function myinteq(myint, myint) returns bool as $$
+ ^
+<sql-statement>
+create operator = (
+ leftarg = myint,
+ rightarg = myint,
+ commutator = =,
+ negator = <>,
+ procedure = myinteq,
+ restrict = eqsel,
+ join = eqjoinsel,
+ merges
+);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255
+ create operator = (
+ ^
+<sql-statement>
+create operator class myint_ops
+default for type myint using hash as
+ operator 1 = (myint, myint),
+ function 1 myinthash(myint);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 298
+ create operator class myint_ops
+ ^
+<sql-statement>
+create table inttest (a myint);
+</sql-statement>
+<sql-statement>
+insert into inttest values(1::myint),(null);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:31: Error: Unknown type: myint
+ insert into inttest values(1::myint),(null);
+ ^
+<sql-statement>
+-- try an array with enough elements to cause hashing
+select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:38: Error: Unknown type: myint
+ select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null);
+ ^
+<sql-statement>
+-- ensure the result matched with the non-hashed version. We simply remove
+-- some array elements so that we don't reach the hashing threshold.
+select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:3:38: Error: Unknown type: myint
+ select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null);
+ ^
+<sql-statement>
+rollback;
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/float4.err b/ydb/library/yql/tests/postgresql/cases/float4.err
new file mode 100644
index 0000000000..47781da2fa
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/float4.err
@@ -0,0 +1,517 @@
+<sql-statement>
+--
+-- FLOAT4
+--
+CREATE TABLE FLOAT4_TBL (f1 float4);
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES (' 0.0');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30 ');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES (' -34.84 ');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');
+</sql-statement>
+<sql-statement>
+-- test for over and under flow
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- test for over and under flow
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "10e70" is out of range for type real
+
+ -- test for over and under flow
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "-10e70" is out of range for type real
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "10e-70" is out of range for type real
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "-10e-70" is out of range for type real
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value out of range: overflow
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8);
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value out of range: overflow
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8);
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value out of range: underflow
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8);
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value out of range: underflow
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8);
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e400');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e400');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "10e400" is out of range for type real
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e400');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "-10e400" is out of range for type real
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "10e-400" is out of range for type real
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "-10e-400" is out of range for type real
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400');
+ ^
+<sql-statement>
+-- bad input
+INSERT INTO FLOAT4_TBL(f1) VALUES ('');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- bad input
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: ""
+
+ -- bad input
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES (' ');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES (' ');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: " "
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES (' ');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: "xyz"
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: "5.0.0"
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: "5 . 0"
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: "5. 0"
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: " - 3.0"
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0');
+ ^
+<sql-statement>
+INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: "123 5"
+
+ INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5');
+ ^
+<sql-statement>
+-- special inputs
+SELECT 'NaN'::float4;
+</sql-statement>
+<sql-statement>
+SELECT 'nan'::float4;
+</sql-statement>
+<sql-statement>
+SELECT ' NAN '::float4;
+</sql-statement>
+<sql-statement>
+SELECT 'infinity'::float4;
+</sql-statement>
+<sql-statement>
+SELECT ' -INFINiTY '::float4;
+</sql-statement>
+<sql-statement>
+-- bad special inputs
+SELECT 'N A N'::float4;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- bad special inputs
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: "N A N"
+
+ -- bad special inputs
+ ^
+<sql-statement>
+SELECT 'NaN x'::float4;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'NaN x'::float4;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: "NaN x"
+
+ SELECT 'NaN x'::float4;
+ ^
+<sql-statement>
+SELECT ' INFINITY x'::float4;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ' INFINITY x'::float4;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type real: " INFINITY x"
+
+ SELECT ' INFINITY x'::float4;
+ ^
+<sql-statement>
+SELECT 'Infinity'::float4 + 100.0;
+</sql-statement>
+<sql-statement>
+SELECT 'Infinity'::float4 / 'Infinity'::float4;
+</sql-statement>
+<sql-statement>
+SELECT '42'::float4 / 'Infinity'::float4;
+</sql-statement>
+<sql-statement>
+SELECT 'nan'::float4 / 'nan'::float4;
+</sql-statement>
+<sql-statement>
+SELECT 'nan'::float4 / '0'::float4;
+</sql-statement>
+<sql-statement>
+SELECT 'nan'::numeric::float4;
+</sql-statement>
+<sql-statement>
+SELECT * FROM FLOAT4_TBL;
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3';
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3';
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1;
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 < '1004.3';
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1;
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 <= '1004.3';
+</sql-statement>
+<sql-statement>
+SELECT f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+SELECT f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+SELECT f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+SELECT f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+-- test divide by zero
+SELECT f.f1 / '0.0' from FLOAT4_TBL f;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ -- test divide by zero
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ -- test divide by zero
+ ^
+<sql-statement>
+SELECT * FROM FLOAT4_TBL;
+</sql-statement>
+<sql-statement>
+-- test the unary float4abs operator
+SELECT f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f;
+</sql-statement>
+<sql-statement>
+UPDATE FLOAT4_TBL
+ SET f1 = FLOAT4_TBL.f1 * '-1'
+ WHERE FLOAT4_TBL.f1 > '0.0';
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+SELECT * FROM FLOAT4_TBL;
+</sql-statement>
+<sql-statement>
+-- test edge-case coercions to integer
+SELECT '32767.4'::float4::int2;
+</sql-statement>
+<sql-statement>
+SELECT '32767.6'::float4::int2;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '32767.6'::float4::int2;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: smallint out of range
+
+ SELECT '32767.6'::float4::int2;
+ ^
+<sql-statement>
+SELECT '-32768.4'::float4::int2;
+</sql-statement>
+<sql-statement>
+SELECT '-32768.6'::float4::int2;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-32768.6'::float4::int2;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: smallint out of range
+
+ SELECT '-32768.6'::float4::int2;
+ ^
+<sql-statement>
+SELECT '2147483520'::float4::int4;
+</sql-statement>
+<sql-statement>
+SELECT '2147483647'::float4::int4;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '2147483647'::float4::int4;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT '2147483647'::float4::int4;
+ ^
+<sql-statement>
+SELECT '-2147483648.5'::float4::int4;
+</sql-statement>
+<sql-statement>
+SELECT '-2147483900'::float4::int4;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-2147483900'::float4::int4;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT '-2147483900'::float4::int4;
+ ^
+<sql-statement>
+SELECT '9223369837831520256'::float4::int8;
+</sql-statement>
+<sql-statement>
+SELECT '9223372036854775807'::float4::int8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '9223372036854775807'::float4::int8;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: bigint out of range
+
+ SELECT '9223372036854775807'::float4::int8;
+ ^
+<sql-statement>
+SELECT '-9223372036854775808.5'::float4::int8;
+</sql-statement>
+<sql-statement>
+SELECT '-9223380000000000000'::float4::int8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-9223380000000000000'::float4::int8;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: bigint out of range
+
+ SELECT '-9223380000000000000'::float4::int8;
+ ^
+<sql-statement>
+-- Test for correct input rounding in edge cases.
+-- These lists are from Paxson 1991, excluding subnormals and
+-- inputs of over 9 sig. digits.
+SELECT float4send('5e-20'::float4);
+</sql-statement>
+<sql-statement>
+SELECT float4send('67e14'::float4);
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F9FF2A29D90)
+__libc_start_main+128 (0x7F9FF2A29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type list_node
diff --git a/ydb/library/yql/tests/postgresql/cases/float8.err b/ydb/library/yql/tests/postgresql/cases/float8.err
new file mode 100644
index 0000000000..97ee41b417
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/float8.err
@@ -0,0 +1,1266 @@
+<sql-statement>
+--
+-- FLOAT8
+--
+CREATE TABLE FLOAT8_TBL(f1 float8);
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES (' 0.0 ');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30 ');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES (' -34.84');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');
+</sql-statement>
+<sql-statement>
+-- test for underflow and overflow handling
+SELECT '10e400'::float8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- test for underflow and overflow handling
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "10e400" is out of range for type double precision
+
+ -- test for underflow and overflow handling
+ ^
+<sql-statement>
+SELECT '-10e400'::float8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-10e400'::float8;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "-10e400" is out of range for type double precision
+
+ SELECT '-10e400'::float8;
+ ^
+<sql-statement>
+SELECT '10e-400'::float8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '10e-400'::float8;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "10e-400" is out of range for type double precision
+
+ SELECT '10e-400'::float8;
+ ^
+<sql-statement>
+SELECT '-10e-400'::float8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-10e-400'::float8;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "-10e-400" is out of range for type double precision
+
+ SELECT '-10e-400'::float8;
+ ^
+<sql-statement>
+-- test smallest normalized input
+SELECT float8send('2.2250738585072014E-308'::float8);
+</sql-statement>
+<sql-statement>
+-- bad input
+INSERT INTO FLOAT8_TBL(f1) VALUES ('');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- bad input
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: ""
+
+ -- bad input
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: " "
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: "xyz"
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: "5.0.0"
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: "5 . 0"
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: "5. 0"
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: " - 3"
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: "123 5"
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
+ ^
+<sql-statement>
+-- special inputs
+SELECT 'NaN'::float8;
+</sql-statement>
+<sql-statement>
+SELECT 'nan'::float8;
+</sql-statement>
+<sql-statement>
+SELECT ' NAN '::float8;
+</sql-statement>
+<sql-statement>
+SELECT 'infinity'::float8;
+</sql-statement>
+<sql-statement>
+SELECT ' -INFINiTY '::float8;
+</sql-statement>
+<sql-statement>
+-- bad special inputs
+SELECT 'N A N'::float8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- bad special inputs
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: "N A N"
+
+ -- bad special inputs
+ ^
+<sql-statement>
+SELECT 'NaN x'::float8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'NaN x'::float8;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: "NaN x"
+
+ SELECT 'NaN x'::float8;
+ ^
+<sql-statement>
+SELECT ' INFINITY x'::float8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ' INFINITY x'::float8;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type double precision: " INFINITY x"
+
+ SELECT ' INFINITY x'::float8;
+ ^
+<sql-statement>
+SELECT 'Infinity'::float8 + 100.0;
+</sql-statement>
+<sql-statement>
+SELECT 'Infinity'::float8 / 'Infinity'::float8;
+</sql-statement>
+<sql-statement>
+SELECT '42'::float8 / 'Infinity'::float8;
+</sql-statement>
+<sql-statement>
+SELECT 'nan'::float8 / 'nan'::float8;
+</sql-statement>
+<sql-statement>
+SELECT 'nan'::float8 / '0'::float8;
+</sql-statement>
+<sql-statement>
+SELECT 'nan'::numeric::float8;
+</sql-statement>
+<sql-statement>
+SELECT * FROM FLOAT8_TBL;
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 < '1004.3';
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;
+</sql-statement>
+<sql-statement>
+SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <= '1004.3';
+</sql-statement>
+<sql-statement>
+SELECT f.f1, f.f1 * '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+SELECT f.f1, f.f1 + '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+SELECT f.f1, f.f1 / '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+SELECT f.f1, f.f1 - '-10' AS x
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+SELECT f.f1 ^ '2.0' AS square_f1
+ FROM FLOAT8_TBL f where f.f1 = '1004.3';
+</sql-statement>
+<sql-statement>
+-- absolute value
+SELECT f.f1, @f.f1 AS abs_f1
+ FROM FLOAT8_TBL f;
+</sql-statement>
+<sql-statement>
+-- truncate
+SELECT f.f1, trunc(f.f1) AS trunc_f1
+ FROM FLOAT8_TBL f;
+</sql-statement>
+<sql-statement>
+-- round
+SELECT f.f1, round(f.f1) AS round_f1
+ FROM FLOAT8_TBL f;
+</sql-statement>
+<sql-statement>
+-- ceil / ceiling
+select ceil(f1) as ceil_f1 from float8_tbl f;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.float8_tbl
+
+<sql-statement>
+select ceiling(f1) as ceiling_f1 from float8_tbl f;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.float8_tbl
+
+<sql-statement>
+-- floor
+select floor(f1) as floor_f1 from float8_tbl f;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.float8_tbl
+
+<sql-statement>
+-- sign
+select sign(f1) as sign_f1 from float8_tbl f;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.float8_tbl
+
+<sql-statement>
+-- avoid bit-exact output here because operations may not be bit-exact.
+SET extra_float_digits = 0;
+</sql-statement>
+<sql-statement>
+-- square root
+SELECT sqrt(float8 '64') AS eight;
+</sql-statement>
+<sql-statement>
+SELECT |/ float8 '64' AS eight;
+</sql-statement>
+<sql-statement>
+SELECT f.f1, |/f.f1 AS sqrt_f1
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+-- power
+SELECT power(float8 '144', float8 '0.5');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 'NaN', float8 '0.5');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '144', float8 'NaN');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 'NaN', float8 'NaN');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-1', float8 'NaN');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '1', float8 'NaN');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 'NaN', float8 '0');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 'inf', float8 '0');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-inf', float8 '0');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '0', float8 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '0', float8 '-inf');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT power(float8 '0', float8 '-inf');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: zero raised to a negative power is undefined
+
+ SELECT power(float8 '0', float8 '-inf');
+ ^
+<sql-statement>
+SELECT power(float8 '1', float8 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '1', float8 '-inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-1', float8 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-1', float8 '-inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '0.1', float8 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-0.1', float8 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '1.1', float8 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-1.1', float8 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '0.1', float8 '-inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-0.1', float8 '-inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '1.1', float8 '-inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-1.1', float8 '-inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 'inf', float8 '-2');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 'inf', float8 '2');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 'inf', float8 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 'inf', float8 '-inf');
+</sql-statement>
+<sql-statement>
+-- Intel's icc misoptimizes the code that controls the sign of this result,
+-- even with -mp1. Pending a fix for that, only test for "is it zero".
+SELECT power(float8 '-inf', float8 '-2') = '0';
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-inf', float8 '-3');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-inf', float8 '2');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-inf', float8 '3');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-inf', float8 '3.5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT power(float8 '-inf', float8 '3.5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: a negative number raised to a non-integer power yields a complex result
+
+ SELECT power(float8 '-inf', float8 '3.5');
+ ^
+<sql-statement>
+SELECT power(float8 '-inf', float8 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power(float8 '-inf', float8 '-inf');
+</sql-statement>
+<sql-statement>
+-- take exp of ln(f.f1)
+SELECT f.f1, exp(ln(f.f1)) AS exp_ln_f1
+ FROM FLOAT8_TBL f
+ WHERE f.f1 > '0.0';
+</sql-statement>
+<sql-statement>
+-- check edge cases for exp
+SELECT exp('inf'::float8), exp('-inf'::float8), exp('nan'::float8);
+</sql-statement>
+<sql-statement>
+-- cube root
+SELECT ||/ float8 '27' AS three;
+</sql-statement>
+<sql-statement>
+SELECT f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;
+</sql-statement>
+<sql-statement>
+SELECT * FROM FLOAT8_TBL;
+</sql-statement>
+<sql-statement>
+UPDATE FLOAT8_TBL
+ SET f1 = FLOAT8_TBL.f1 * '-1'
+ WHERE FLOAT8_TBL.f1 > '0.0';
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+SELECT f.f1 * '1e200' from FLOAT8_TBL f;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT f.f1 * '1e200' from FLOAT8_TBL f;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value out of range: overflow
+
+ SELECT f.f1 * '1e200' from FLOAT8_TBL f;
+ ^
+<sql-statement>
+SELECT f.f1 ^ '1e200' from FLOAT8_TBL f;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT f.f1 ^ '1e200' from FLOAT8_TBL f;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value out of range: overflow
+
+ SELECT f.f1 ^ '1e200' from FLOAT8_TBL f;
+ ^
+<sql-statement>
+SELECT 0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5;
+</sql-statement>
+<sql-statement>
+SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of zero
+
+ SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
+ ^
+<sql-statement>
+SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of a negative number
+
+ SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
+ ^
+<sql-statement>
+SELECT exp(f.f1) from FLOAT8_TBL f;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT exp(f.f1) from FLOAT8_TBL f;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value out of range: overflow
+
+ SELECT exp(f.f1) from FLOAT8_TBL f;
+ ^
+<sql-statement>
+SELECT f.f1 / '0.0' from FLOAT8_TBL f;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT f.f1 / '0.0' from FLOAT8_TBL f;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT f.f1 / '0.0' from FLOAT8_TBL f;
+ ^
+<sql-statement>
+SELECT * FROM FLOAT8_TBL;
+</sql-statement>
+<sql-statement>
+-- hyperbolic functions
+-- we run these with extra_float_digits = 0 too, since different platforms
+-- tend to produce results that vary in the last place.
+SELECT sinh(float8 '1');
+</sql-statement>
+<sql-statement>
+SELECT cosh(float8 '1');
+</sql-statement>
+<sql-statement>
+SELECT tanh(float8 '1');
+</sql-statement>
+<sql-statement>
+SELECT asinh(float8 '1');
+</sql-statement>
+<sql-statement>
+SELECT acosh(float8 '2');
+</sql-statement>
+<sql-statement>
+SELECT atanh(float8 '0.5');
+</sql-statement>
+<sql-statement>
+-- test Inf/NaN cases for hyperbolic functions
+SELECT sinh(float8 'infinity');
+</sql-statement>
+<sql-statement>
+SELECT sinh(float8 '-infinity');
+</sql-statement>
+<sql-statement>
+SELECT sinh(float8 'nan');
+</sql-statement>
+<sql-statement>
+SELECT cosh(float8 'infinity');
+</sql-statement>
+<sql-statement>
+SELECT cosh(float8 '-infinity');
+</sql-statement>
+<sql-statement>
+SELECT cosh(float8 'nan');
+</sql-statement>
+<sql-statement>
+SELECT tanh(float8 'infinity');
+</sql-statement>
+<sql-statement>
+SELECT tanh(float8 '-infinity');
+</sql-statement>
+<sql-statement>
+SELECT tanh(float8 'nan');
+</sql-statement>
+<sql-statement>
+SELECT asinh(float8 'infinity');
+</sql-statement>
+<sql-statement>
+SELECT asinh(float8 '-infinity');
+</sql-statement>
+<sql-statement>
+SELECT asinh(float8 'nan');
+</sql-statement>
+<sql-statement>
+-- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test
+-- SELECT acosh(float8 'infinity');
+SELECT acosh(float8 '-infinity');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: input is out of range
+
+ -- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test
+ ^
+<sql-statement>
+SELECT acosh(float8 'nan');
+</sql-statement>
+<sql-statement>
+SELECT atanh(float8 'infinity');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT atanh(float8 'infinity');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: input is out of range
+
+ SELECT atanh(float8 'infinity');
+ ^
+<sql-statement>
+SELECT atanh(float8 '-infinity');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT atanh(float8 '-infinity');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: input is out of range
+
+ SELECT atanh(float8 '-infinity');
+ ^
+<sql-statement>
+SELECT atanh(float8 'nan');
+</sql-statement>
+<sql-statement>
+RESET extra_float_digits;
+</sql-statement>
+<sql-statement>
+-- test for over- and underflow
+INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- test for over- and underflow
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "10e400" is out of range for type double precision
+
+ -- test for over- and underflow
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "-10e400" is out of range for type double precision
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "10e-400" is out of range for type double precision
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
+ ^
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: "-10e-400" is out of range for type double precision
+
+ INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
+ ^
+<sql-statement>
+-- maintain external table consistency across platforms
+-- delete all values and reinsert well-behaved ones
+DELETE FROM FLOAT8_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');
+</sql-statement>
+<sql-statement>
+INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');
+</sql-statement>
+<sql-statement>
+SELECT * FROM FLOAT8_TBL;
+</sql-statement>
+<sql-statement>
+-- test edge-case coercions to integer
+SELECT '32767.4'::float8::int2;
+</sql-statement>
+<sql-statement>
+SELECT '32767.6'::float8::int2;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '32767.6'::float8::int2;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: smallint out of range
+
+ SELECT '32767.6'::float8::int2;
+ ^
+<sql-statement>
+SELECT '-32768.4'::float8::int2;
+</sql-statement>
+<sql-statement>
+SELECT '-32768.6'::float8::int2;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-32768.6'::float8::int2;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: smallint out of range
+
+ SELECT '-32768.6'::float8::int2;
+ ^
+<sql-statement>
+SELECT '2147483647.4'::float8::int4;
+</sql-statement>
+<sql-statement>
+SELECT '2147483647.6'::float8::int4;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '2147483647.6'::float8::int4;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT '2147483647.6'::float8::int4;
+ ^
+<sql-statement>
+SELECT '-2147483648.4'::float8::int4;
+</sql-statement>
+<sql-statement>
+SELECT '-2147483648.6'::float8::int4;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-2147483648.6'::float8::int4;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT '-2147483648.6'::float8::int4;
+ ^
+<sql-statement>
+SELECT '9223372036854773760'::float8::int8;
+</sql-statement>
+<sql-statement>
+SELECT '9223372036854775807'::float8::int8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '9223372036854775807'::float8::int8;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: bigint out of range
+
+ SELECT '9223372036854775807'::float8::int8;
+ ^
+<sql-statement>
+SELECT '-9223372036854775808.5'::float8::int8;
+</sql-statement>
+<sql-statement>
+SELECT '-9223372036854780000'::float8::int8;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-9223372036854780000'::float8::int8;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: bigint out of range
+
+ SELECT '-9223372036854780000'::float8::int8;
+ ^
+<sql-statement>
+-- test exact cases for trigonometric functions in degrees
+SELECT x,
+ sind(x),
+ sind(x) IN (-1,-0.5,0,0.5,1) AS sind_exact
+FROM (VALUES (0), (30), (90), (150), (180),
+ (210), (270), (330), (360)) AS t(x);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ -- test exact cases for trigonometric functions in degrees
+ ^
+ -stdin-:<main>:4:16: Error: At function: PgIn, At function: AsList
+ sind(x) IN (-1,-0.5,0,0.5,1) AS sind_exact
+ ^
+ -stdin-:<main>:4:16: Error: Cannot infer common type for int4 and numeric
+ sind(x) IN (-1,-0.5,0,0.5,1) AS sind_exact
+ ^
+ -stdin-:<main>:4:16: Error: Cannot infer common type for numeric and int4
+ sind(x) IN (-1,-0.5,0,0.5,1) AS sind_exact
+ ^
+<sql-statement>
+SELECT x,
+ cosd(x),
+ cosd(x) IN (-1,-0.5,0,0.5,1) AS cosd_exact
+FROM (VALUES (0), (60), (90), (120), (180),
+ (240), (270), (300), (360)) AS t(x);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT x,
+ ^
+ -stdin-:<main>:3:16: Error: At function: PgIn, At function: AsList
+ cosd(x) IN (-1,-0.5,0,0.5,1) AS cosd_exact
+ ^
+ -stdin-:<main>:3:16: Error: Cannot infer common type for int4 and numeric
+ cosd(x) IN (-1,-0.5,0,0.5,1) AS cosd_exact
+ ^
+ -stdin-:<main>:3:16: Error: Cannot infer common type for numeric and int4
+ cosd(x) IN (-1,-0.5,0,0.5,1) AS cosd_exact
+ ^
+<sql-statement>
+SELECT x,
+ tand(x),
+ tand(x) IN ('-Infinity'::float8,-1,0,
+ 1,'Infinity'::float8) AS tand_exact,
+ cotd(x),
+ cotd(x) IN ('-Infinity'::float8,-1,0,
+ 1,'Infinity'::float8) AS cotd_exact
+FROM (VALUES (0), (45), (90), (135), (180),
+ (225), (270), (315), (360)) AS t(x);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT x,
+ ^
+ -stdin-:<main>:1:1: Error: At function: PgResultItem
+ SELECT x,
+ ^
+ -stdin-:<main>:3:16: Error: At function: PgIn, At function: AsList
+ tand(x) IN ('-Infinity'::float8,-1,0,
+ ^
+ -stdin-:<main>:3:16: Error: Cannot infer common type for float8 and int4
+ tand(x) IN ('-Infinity'::float8,-1,0,
+ ^
+ -stdin-:<main>:3:16: Error: Cannot infer common type for int4 and float8
+ tand(x) IN ('-Infinity'::float8,-1,0,
+ ^
+ -stdin-:<main>:1:1: Error: At function: PgResultItem
+ SELECT x,
+ ^
+ -stdin-:<main>:6:16: Error: At function: PgIn, At function: AsList
+ cotd(x) IN ('-Infinity'::float8,-1,0,
+ ^
+ -stdin-:<main>:6:16: Error: Cannot infer common type for float8 and int4
+ cotd(x) IN ('-Infinity'::float8,-1,0,
+ ^
+ -stdin-:<main>:6:16: Error: Cannot infer common type for int4 and float8
+ cotd(x) IN ('-Infinity'::float8,-1,0,
+ ^
+<sql-statement>
+SELECT x,
+ asind(x),
+ asind(x) IN (-90,-30,0,30,90) AS asind_exact,
+ acosd(x),
+ acosd(x) IN (0,60,90,120,180) AS acosd_exact
+FROM (VALUES (-1), (-0.5), (0), (0.5), (1)) AS t(x);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT x,
+ ^
+ -stdin-:<main>:1:1: Error: At function: PgResultItem
+ SELECT x,
+ ^
+ -stdin-:<main>:3:17: Error: At function: PgIn
+ asind(x) IN (-90,-30,0,30,90) AS asind_exact,
+ ^
+ -stdin-:<main>:3:17: Error: Mismatch of types in IN expressions: float8 is not equal to int4
+ asind(x) IN (-90,-30,0,30,90) AS asind_exact,
+ ^
+ -stdin-:<main>:1:1: Error: At function: PgResultItem
+ SELECT x,
+ ^
+ -stdin-:<main>:5:17: Error: At function: PgIn
+ acosd(x) IN (0,60,90,120,180) AS acosd_exact
+ ^
+ -stdin-:<main>:5:17: Error: Mismatch of types in IN expressions: float8 is not equal to int4
+ acosd(x) IN (0,60,90,120,180) AS acosd_exact
+ ^
+<sql-statement>
+SELECT x,
+ atand(x),
+ atand(x) IN (-90,-45,0,45,90) AS atand_exact
+FROM (VALUES ('-Infinity'::float8), (-1), (0), (1),
+ ('Infinity'::float8)) AS t(x);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT x,
+ ^
+ -stdin-:<main>:3:17: Error: At function: PgIn
+ atand(x) IN (-90,-45,0,45,90) AS atand_exact
+ ^
+ -stdin-:<main>:3:17: Error: Mismatch of types in IN expressions: float8 is not equal to int4
+ atand(x) IN (-90,-45,0,45,90) AS atand_exact
+ ^
+<sql-statement>
+SELECT x, y,
+ atan2d(y, x),
+ atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact
+FROM (SELECT 10*cosd(a), 10*sind(a)
+ FROM generate_series(0, 360, 90) AS t(a)) AS t(x,y);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT x, y,
+ ^
+ -stdin-:<main>:3:21: Error: At function: PgIn
+ atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact
+ ^
+ -stdin-:<main>:3:21: Error: Mismatch of types in IN expressions: float8 is not equal to int4
+ atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact
+ ^
+<sql-statement>
+--
+-- test output (and round-trip safety) of various values.
+-- To ensure we're testing what we think we're testing, start with
+-- float values specified by bit patterns (as a useful side effect,
+-- this means we'll fail on non-IEEE platforms).
+create type xfloat8;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255
+ --
+ ^
+<sql-statement>
+create function xfloat8in(cstring) returns xfloat8 immutable strict
+ language internal as 'int8in';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ create function xfloat8in(cstring) returns xfloat8 immutable strict
+ ^
+<sql-statement>
+create function xfloat8out(xfloat8) returns cstring immutable strict
+ language internal as 'int8out';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ create function xfloat8out(xfloat8) returns cstring immutable strict
+ ^
+<sql-statement>
+create type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255
+ create type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);
+ ^
+<sql-statement>
+create cast (xfloat8 as float8) without function;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 297
+ create cast (xfloat8 as float8) without function;
+ ^
+<sql-statement>
+create cast (float8 as xfloat8) without function;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 297
+ create cast (float8 as xfloat8) without function;
+ ^
+<sql-statement>
+create cast (xfloat8 as bigint) without function;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 297
+ create cast (xfloat8 as bigint) without function;
+ ^
+<sql-statement>
+create cast (bigint as xfloat8) without function;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 297
+ create cast (bigint as xfloat8) without function;
+ ^
+<sql-statement>
+-- float8: seeeeeee eeeeeeee eeeeeeee mmmmmmmm mmmmmmmm(x4)
+-- we don't care to assume the platform's strtod() handles subnormals
+-- correctly; those are "use at your own risk". However we do test
+-- subnormal outputs, since those are under our control.
+with testdata(bits) as (values
+ -- small subnormals
+ (x'0000000000000001'),
+ (x'0000000000000002'), (x'0000000000000003'),
+ (x'0000000000001000'), (x'0000000100000000'),
+ (x'0000010000000000'), (x'0000010100000000'),
+ (x'0000400000000000'), (x'0000400100000000'),
+ (x'0000800000000000'), (x'0000800000000001'),
+ -- these values taken from upstream testsuite
+ (x'00000000000f4240'),
+ (x'00000000016e3600'),
+ (x'0000008cdcdea440'),
+ -- borderline between subnormal and normal
+ (x'000ffffffffffff0'), (x'000ffffffffffff1'),
+ (x'000ffffffffffffe'), (x'000fffffffffffff'))
+select float8send(flt) as ibits,
+ flt
+ from (select bits::bigint::xfloat8::float8 as flt
+ from testdata
+ offset 0) s;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:22:30: Error: Unknown type: xfloat8
+ from (select bits::bigint::xfloat8::float8 as flt
+ ^
+<sql-statement>
+-- round-trip tests
+with testdata(bits) as (values
+ (x'0000000000000000'),
+ -- smallest normal values
+ (x'0010000000000000'), (x'0010000000000001'),
+ (x'0010000000000002'), (x'0018000000000000'),
+ --
+ (x'3ddb7cdfd9d7bdba'), (x'3ddb7cdfd9d7bdbb'), (x'3ddb7cdfd9d7bdbc'),
+ (x'3e112e0be826d694'), (x'3e112e0be826d695'), (x'3e112e0be826d696'),
+ (x'3e45798ee2308c39'), (x'3e45798ee2308c3a'), (x'3e45798ee2308c3b'),
+ (x'3e7ad7f29abcaf47'), (x'3e7ad7f29abcaf48'), (x'3e7ad7f29abcaf49'),
+ (x'3eb0c6f7a0b5ed8c'), (x'3eb0c6f7a0b5ed8d'), (x'3eb0c6f7a0b5ed8e'),
+ (x'3ee4f8b588e368ef'), (x'3ee4f8b588e368f0'), (x'3ee4f8b588e368f1'),
+ (x'3f1a36e2eb1c432c'), (x'3f1a36e2eb1c432d'), (x'3f1a36e2eb1c432e'),
+ (x'3f50624dd2f1a9fb'), (x'3f50624dd2f1a9fc'), (x'3f50624dd2f1a9fd'),
+ (x'3f847ae147ae147a'), (x'3f847ae147ae147b'), (x'3f847ae147ae147c'),
+ (x'3fb9999999999999'), (x'3fb999999999999a'), (x'3fb999999999999b'),
+ -- values very close to 1
+ (x'3feffffffffffff0'), (x'3feffffffffffff1'), (x'3feffffffffffff2'),
+ (x'3feffffffffffff3'), (x'3feffffffffffff4'), (x'3feffffffffffff5'),
+ (x'3feffffffffffff6'), (x'3feffffffffffff7'), (x'3feffffffffffff8'),
+ (x'3feffffffffffff9'), (x'3feffffffffffffa'), (x'3feffffffffffffb'),
+ (x'3feffffffffffffc'), (x'3feffffffffffffd'), (x'3feffffffffffffe'),
+ (x'3fefffffffffffff'),
+ (x'3ff0000000000000'),
+ (x'3ff0000000000001'), (x'3ff0000000000002'), (x'3ff0000000000003'),
+ (x'3ff0000000000004'), (x'3ff0000000000005'), (x'3ff0000000000006'),
+ (x'3ff0000000000007'), (x'3ff0000000000008'), (x'3ff0000000000009'),
+ --
+ (x'3ff921fb54442d18'),
+ (x'4005bf0a8b14576a'),
+ (x'400921fb54442d18'),
+ --
+ (x'4023ffffffffffff'), (x'4024000000000000'), (x'4024000000000001'),
+ (x'4058ffffffffffff'), (x'4059000000000000'), (x'4059000000000001'),
+ (x'408f3fffffffffff'), (x'408f400000000000'), (x'408f400000000001'),
+ (x'40c387ffffffffff'), (x'40c3880000000000'), (x'40c3880000000001'),
+ (x'40f869ffffffffff'), (x'40f86a0000000000'), (x'40f86a0000000001'),
+ (x'412e847fffffffff'), (x'412e848000000000'), (x'412e848000000001'),
+ (x'416312cfffffffff'), (x'416312d000000000'), (x'416312d000000001'),
+ (x'4197d783ffffffff'), (x'4197d78400000000'), (x'4197d78400000001'),
+ (x'41cdcd64ffffffff'), (x'41cdcd6500000000'), (x'41cdcd6500000001'),
+ (x'4202a05f1fffffff'), (x'4202a05f20000000'), (x'4202a05f20000001'),
+ (x'42374876e7ffffff'), (x'42374876e8000000'), (x'42374876e8000001'),
+ (x'426d1a94a1ffffff'), (x'426d1a94a2000000'), (x'426d1a94a2000001'),
+ (x'42a2309ce53fffff'), (x'42a2309ce5400000'), (x'42a2309ce5400001'),
+ (x'42d6bcc41e8fffff'), (x'42d6bcc41e900000'), (x'42d6bcc41e900001'),
+ (x'430c6bf52633ffff'), (x'430c6bf526340000'), (x'430c6bf526340001'),
+ (x'4341c37937e07fff'), (x'4341c37937e08000'), (x'4341c37937e08001'),
+ (x'4376345785d89fff'), (x'4376345785d8a000'), (x'4376345785d8a001'),
+ (x'43abc16d674ec7ff'), (x'43abc16d674ec800'), (x'43abc16d674ec801'),
+ (x'43e158e460913cff'), (x'43e158e460913d00'), (x'43e158e460913d01'),
+ (x'4415af1d78b58c3f'), (x'4415af1d78b58c40'), (x'4415af1d78b58c41'),
+ (x'444b1ae4d6e2ef4f'), (x'444b1ae4d6e2ef50'), (x'444b1ae4d6e2ef51'),
+ (x'4480f0cf064dd591'), (x'4480f0cf064dd592'), (x'4480f0cf064dd593'),
+ (x'44b52d02c7e14af5'), (x'44b52d02c7e14af6'), (x'44b52d02c7e14af7'),
+ (x'44ea784379d99db3'), (x'44ea784379d99db4'), (x'44ea784379d99db5'),
+ (x'45208b2a2c280290'), (x'45208b2a2c280291'), (x'45208b2a2c280292'),
+ --
+ (x'7feffffffffffffe'), (x'7fefffffffffffff'),
+ -- round to even tests (+ve)
+ (x'4350000000000002'),
+ (x'4350000000002e06'),
+ (x'4352000000000003'),
+ (x'4352000000000004'),
+ (x'4358000000000003'),
+ (x'4358000000000004'),
+ (x'435f000000000020'),
+ -- round to even tests (-ve)
+ (x'c350000000000002'),
+ (x'c350000000002e06'),
+ (x'c352000000000003'),
+ (x'c352000000000004'),
+ (x'c358000000000003'),
+ (x'c358000000000004'),
+ (x'c35f000000000020'),
+ -- exercise fixed-point memmoves
+ (x'42dc12218377de66'),
+ (x'42a674e79c5fe51f'),
+ (x'4271f71fb04cb74c'),
+ (x'423cbe991a145879'),
+ (x'4206fee0e1a9e061'),
+ (x'41d26580b487e6b4'),
+ (x'419d6f34540ca453'),
+ (x'41678c29dcd6e9dc'),
+ (x'4132d687e3df217d'),
+ (x'40fe240c9fcb68c8'),
+ (x'40c81cd6e63c53d3'),
+ (x'40934a4584fd0fdc'),
+ (x'405edd3c07fb4c93'),
+ (x'4028b0fcd32f7076'),
+ (x'3ff3c0ca428c59f8'),
+ -- these cases come from the upstream's testsuite
+ -- LotsOfTrailingZeros)
+ (x'3e60000000000000'),
+ -- Regression
+ (x'c352bd2668e077c4'),
+ (x'434018601510c000'),
+ (x'43d055dc36f24000'),
+ (x'43e052961c6f8000'),
+ (x'3ff3c0ca2a5b1d5d'),
+ -- LooksLikePow5
+ (x'4830f0cf064dd592'),
+ (x'4840f0cf064dd592'),
+ (x'4850f0cf064dd592'),
+ -- OutputLength
+ (x'3ff3333333333333'),
+ (x'3ff3ae147ae147ae'),
+ (x'3ff3be76c8b43958'),
+ (x'3ff3c083126e978d'),
+ (x'3ff3c0c1fc8f3238'),
+ (x'3ff3c0c9539b8887'),
+ (x'3ff3c0ca2a5b1d5d'),
+ (x'3ff3c0ca4283de1b'),
+ (x'3ff3c0ca43db770a'),
+ (x'3ff3c0ca428abd53'),
+ (x'3ff3c0ca428c1d2b'),
+ (x'3ff3c0ca428c51f2'),
+ (x'3ff3c0ca428c58fc'),
+ (x'3ff3c0ca428c59dd'),
+ (x'3ff3c0ca428c59f8'),
+ (x'3ff3c0ca428c59fb'),
+ -- 32-bit chunking
+ (x'40112e0be8047a7d'),
+ (x'40112e0be815a889'),
+ (x'40112e0be826d695'),
+ (x'40112e0be83804a1'),
+ (x'40112e0be84932ad'),
+ -- MinMaxShift
+ (x'0040000000000000'),
+ (x'007fffffffffffff'),
+ (x'0290000000000000'),
+ (x'029fffffffffffff'),
+ (x'4350000000000000'),
+ (x'435fffffffffffff'),
+ (x'1330000000000000'),
+ (x'133fffffffffffff'),
+ (x'3a6fa7161a4d6e0c')
+select float8send(flt) as ibits,
+ flt,
+ flt::text::float8 as r_flt,
+ float8send(flt::text::float8) as obits,
+ float8send(flt::text::float8) = float8send(flt) as correct
+ from (select bits::bigint::xfloat8::float8 as flt
+ from testdata
+ offset 0) s;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:139:1: Error: ERROR: syntax error at or near "select"
+
+ select float8send(flt) as ibits,
+ ^
+<sql-statement>
+-- clean up, lest opr_sanity complain
+drop type xfloat8 cascade;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373
+ -- clean up, lest opr_sanity complain
+ ^
diff --git a/ydb/library/yql/tests/postgresql/cases/functional_deps.err b/ydb/library/yql/tests/postgresql/cases/functional_deps.err
new file mode 100644
index 0000000000..f375d08dea
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/functional_deps.err
@@ -0,0 +1,655 @@
+<sql-statement>
+-- from http://www.depesz.com/index.php/2010/04/19/getting-unique-elements/
+CREATE TEMP TABLE articles (
+ id int CONSTRAINT articles_pkey PRIMARY KEY,
+ keywords text,
+ title text UNIQUE NOT NULL,
+ body text UNIQUE,
+ created date
+);
+</sql-statement>
+<sql-statement>
+CREATE TEMP TABLE articles_in_category (
+ article_id int,
+ category_id int,
+ changed date,
+ PRIMARY KEY (article_id, category_id)
+);
+</sql-statement>
+<sql-statement>
+-- test functional dependencies based on primary keys/unique constraints
+-- base tables
+-- group by primary key (OK)
+SELECT id, keywords, title, body, created
+FROM articles
+GROUP BY id;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap
+ -- test functional dependencies based on primary keys/unique constraints
+ ^
+ -stdin-:<main>:1:1: Error: At function: AsStruct
+ -- test functional dependencies based on primary keys/unique constraints
+ ^
+ -stdin-:<main>:4:12: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:4:12: Error: Member not found: _alias_articles.keywords
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:4:22: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:4:22: Error: Member not found: _alias_articles.title
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:4:29: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:4:29: Error: Member not found: _alias_articles.body
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:4:35: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:4:35: Error: Member not found: _alias_articles.created
+ SELECT id, keywords, title, body, created
+ ^
+<sql-statement>
+-- group by unique not null (fail/todo)
+SELECT id, keywords, title, body, created
+FROM articles
+GROUP BY title;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap
+ -- group by unique not null (fail/todo)
+ ^
+ -stdin-:<main>:1:1: Error: At function: AsStruct
+ -- group by unique not null (fail/todo)
+ ^
+ -stdin-:<main>:2:8: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:8: Error: Member not found: _alias_articles.id
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:12: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:12: Error: Member not found: _alias_articles.keywords
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:29: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:29: Error: Member not found: _alias_articles.body
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:35: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:35: Error: Member not found: _alias_articles.created
+ SELECT id, keywords, title, body, created
+ ^
+<sql-statement>
+-- group by unique nullable (fail)
+SELECT id, keywords, title, body, created
+FROM articles
+GROUP BY body;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap
+ -- group by unique nullable (fail)
+ ^
+ -stdin-:<main>:1:1: Error: At function: AsStruct
+ -- group by unique nullable (fail)
+ ^
+ -stdin-:<main>:2:8: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:8: Error: Member not found: _alias_articles.id
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:12: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:12: Error: Member not found: _alias_articles.keywords
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:22: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:22: Error: Member not found: _alias_articles.title
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:35: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:35: Error: Member not found: _alias_articles.created
+ SELECT id, keywords, title, body, created
+ ^
+<sql-statement>
+-- group by something else (fail)
+SELECT id, keywords, title, body, created
+FROM articles
+GROUP BY keywords;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap
+ -- group by something else (fail)
+ ^
+ -stdin-:<main>:1:1: Error: At function: AsStruct
+ -- group by something else (fail)
+ ^
+ -stdin-:<main>:2:8: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:8: Error: Member not found: _alias_articles.id
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:22: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:22: Error: Member not found: _alias_articles.title
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:29: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:29: Error: Member not found: _alias_articles.body
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:35: Error: At function: Member
+ SELECT id, keywords, title, body, created
+ ^
+ -stdin-:<main>:2:35: Error: Member not found: _alias_articles.created
+ SELECT id, keywords, title, body, created
+ ^
+<sql-statement>
+-- multiple tables
+-- group by primary key (OK)
+SELECT a.id, a.keywords, a.title, a.body, a.created
+FROM articles AS a, articles_in_category AS aic
+WHERE a.id = aic.article_id AND aic.category_id in (14,62,70,53,138)
+GROUP BY a.id;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap
+ -- multiple tables
+ ^
+ -stdin-:<main>:1:1: Error: At function: AsStruct
+ -- multiple tables
+ ^
+ -stdin-:<main>:3:14: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:14: Error: Member not found: _alias_a.keywords
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:26: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:26: Error: Member not found: _alias_a.title
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:35: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:35: Error: Member not found: _alias_a.body
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:43: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:43: Error: Member not found: _alias_a.created
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+<sql-statement>
+-- group by something else (fail)
+SELECT a.id, a.keywords, a.title, a.body, a.created
+FROM articles AS a, articles_in_category AS aic
+WHERE a.id = aic.article_id AND aic.category_id in (14,62,70,53,138)
+GROUP BY aic.article_id, aic.category_id;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap
+ -- group by something else (fail)
+ ^
+ -stdin-:<main>:1:1: Error: At function: AsStruct
+ -- group by something else (fail)
+ ^
+ -stdin-:<main>:2:8: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:8: Error: Member not found: _alias_a.id
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:14: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:14: Error: Member not found: _alias_a.keywords
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:26: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:26: Error: Member not found: _alias_a.title
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:35: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:35: Error: Member not found: _alias_a.body
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:43: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:43: Error: Member not found: _alias_a.created
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+<sql-statement>
+-- JOIN syntax
+-- group by left table's primary key (OK)
+SELECT a.id, a.keywords, a.title, a.body, a.created
+FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id
+WHERE aic.category_id in (14,62,70,53,138)
+GROUP BY a.id;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap
+ -- JOIN syntax
+ ^
+ -stdin-:<main>:1:1: Error: At function: AsStruct
+ -- JOIN syntax
+ ^
+ -stdin-:<main>:3:14: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:14: Error: Member not found: _alias_a.keywords
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:26: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:26: Error: Member not found: _alias_a.title
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:35: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:35: Error: Member not found: _alias_a.body
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:43: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:3:43: Error: Member not found: _alias_a.created
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+<sql-statement>
+-- group by something else (fail)
+SELECT a.id, a.keywords, a.title, a.body, a.created
+FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id
+WHERE aic.category_id in (14,62,70,53,138)
+GROUP BY aic.article_id, aic.category_id;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap
+ -- group by something else (fail)
+ ^
+ -stdin-:<main>:1:1: Error: At function: AsStruct
+ -- group by something else (fail)
+ ^
+ -stdin-:<main>:2:8: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:8: Error: Member not found: _alias_a.id
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:14: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:14: Error: Member not found: _alias_a.keywords
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:26: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:26: Error: Member not found: _alias_a.title
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:35: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:35: Error: Member not found: _alias_a.body
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:43: Error: At function: Member
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+ -stdin-:<main>:2:43: Error: Member not found: _alias_a.created
+ SELECT a.id, a.keywords, a.title, a.body, a.created
+ ^
+<sql-statement>
+-- group by right table's (composite) primary key (OK)
+SELECT aic.changed
+FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id
+WHERE aic.category_id in (14,62,70,53,138)
+GROUP BY aic.category_id, aic.article_id;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap, At function: AsStruct
+ -- group by right table's (composite) primary key (OK)
+ ^
+ -stdin-:<main>:2:8: Error: At function: Member
+ SELECT aic.changed
+ ^
+ -stdin-:<main>:2:8: Error: Member not found: _alias_aic.changed
+ SELECT aic.changed
+ ^
+<sql-statement>
+-- group by right table's partial primary key (fail)
+SELECT aic.changed
+FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id
+WHERE aic.category_id in (14,62,70,53,138)
+GROUP BY aic.article_id;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap, At function: AsStruct
+ -- group by right table's partial primary key (fail)
+ ^
+ -stdin-:<main>:2:8: Error: At function: Member
+ SELECT aic.changed
+ ^
+ -stdin-:<main>:2:8: Error: Member not found: _alias_aic.changed
+ SELECT aic.changed
+ ^
+<sql-statement>
+-- example from documentation
+CREATE TEMP TABLE products (product_id int, name text, price numeric);
+</sql-statement>
+<sql-statement>
+CREATE TEMP TABLE sales (product_id int, units int);
+</sql-statement>
+<sql-statement>
+-- OK
+SELECT product_id, p.name, (sum(s.units) * p.price) AS sales
+ FROM products p LEFT JOIN sales s USING (product_id)
+ GROUP BY product_id, p.name, p.price;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: JoinExpr: unsupported using
+ -- OK
+ ^
+<sql-statement>
+-- fail
+SELECT product_id, p.name, (sum(s.units) * p.price) AS sales
+ FROM products p LEFT JOIN sales s USING (product_id)
+ GROUP BY product_id;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: JoinExpr: unsupported using
+ -- fail
+ ^
+<sql-statement>
+ALTER TABLE products ADD PRIMARY KEY (product_id);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE products ADD PRIMARY KEY (product_id);
+ ^
+<sql-statement>
+-- OK now
+SELECT product_id, p.name, (sum(s.units) * p.price) AS sales
+ FROM products p LEFT JOIN sales s USING (product_id)
+ GROUP BY product_id;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: JoinExpr: unsupported using
+ -- OK now
+ ^
+<sql-statement>
+-- Drupal example, http://drupal.org/node/555530
+CREATE TEMP TABLE node (
+ nid SERIAL,
+ vid integer NOT NULL default '0',
+ type varchar(32) NOT NULL default '',
+ title varchar(128) NOT NULL default '',
+ uid integer NOT NULL default '0',
+ status integer NOT NULL default '1',
+ created integer NOT NULL default '0',
+ -- snip
+ PRIMARY KEY (nid, vid)
+);
+</sql-statement>
+<sql-statement>
+CREATE TEMP TABLE users (
+ uid integer NOT NULL default '0',
+ name varchar(60) NOT NULL default '',
+ pass varchar(32) NOT NULL default '',
+ -- snip
+ PRIMARY KEY (uid),
+ UNIQUE (name)
+);
+</sql-statement>
+<sql-statement>
+-- OK
+SELECT u.uid, u.name FROM node n
+INNER JOIN users u ON u.uid = n.uid
+WHERE n.type = 'blog' AND n.status = 1
+GROUP BY u.uid, u.name;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap, At function: UnionAll, At function: Aggregate
+ -- OK
+ ^
+ -stdin-:<main>:1:1: Error: Expected hashable and equatable type for key column: _alias_u.name, but got: pgvarchar
+ -- OK
+ ^
+<sql-statement>
+-- OK
+SELECT u.uid, u.name FROM node n
+INNER JOIN users u ON u.uid = n.uid
+WHERE n.type = 'blog' AND n.status = 1
+GROUP BY u.uid;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap, At function: AsStruct
+ -- OK
+ ^
+ -stdin-:<main>:2:15: Error: At function: Member
+ SELECT u.uid, u.name FROM node n
+ ^
+ -stdin-:<main>:2:15: Error: Member not found: _alias_u.name
+ SELECT u.uid, u.name FROM node n
+ ^
+<sql-statement>
+-- Check views and dependencies
+-- fail
+CREATE TEMP VIEW fdv1 AS
+SELECT id, keywords, title, body, created
+FROM articles
+GROUP BY body;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ -- Check views and dependencies
+ ^
+<sql-statement>
+-- OK
+CREATE TEMP VIEW fdv1 AS
+SELECT id, keywords, title, body, created
+FROM articles
+GROUP BY id;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ -- OK
+ ^
+<sql-statement>
+-- fail
+ALTER TABLE articles DROP CONSTRAINT articles_pkey RESTRICT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ -- fail
+ ^
+<sql-statement>
+DROP VIEW fdv1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: View not found: 'fdv1'
+ DROP VIEW fdv1;
+ ^
+<sql-statement>
+-- multiple dependencies
+CREATE TEMP VIEW fdv2 AS
+SELECT a.id, a.keywords, a.title, aic.category_id, aic.changed
+FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id
+WHERE aic.category_id in (14,62,70,53,138)
+GROUP BY a.id, aic.category_id, aic.article_id;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ -- multiple dependencies
+ ^
+<sql-statement>
+ALTER TABLE articles DROP CONSTRAINT articles_pkey RESTRICT; -- fail
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE articles DROP CONSTRAINT articles_pkey RESTRICT; -- fail
+ ^
+<sql-statement>
+ALTER TABLE articles_in_category DROP CONSTRAINT articles_in_category_pkey RESTRICT; --fail
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE articles_in_category DROP CONSTRAINT articles_in_category_pkey RESTRICT; --fail
+ ^
+<sql-statement>
+DROP VIEW fdv2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: View not found: 'fdv2'
+ DROP VIEW fdv2;
+ ^
+<sql-statement>
+-- nested queries
+CREATE TEMP VIEW fdv3 AS
+SELECT id, keywords, title, body, created
+FROM articles
+GROUP BY id
+UNION
+SELECT id, keywords, title, body, created
+FROM articles
+GROUP BY id;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ -- nested queries
+ ^
+<sql-statement>
+ALTER TABLE articles DROP CONSTRAINT articles_pkey RESTRICT; -- fail
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE articles DROP CONSTRAINT articles_pkey RESTRICT; -- fail
+ ^
+<sql-statement>
+DROP VIEW fdv3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: View not found: 'fdv3'
+ DROP VIEW fdv3;
+ ^
+<sql-statement>
+CREATE TEMP VIEW fdv4 AS
+SELECT * FROM articles WHERE title IN (SELECT title FROM articles GROUP BY id);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ CREATE TEMP VIEW fdv4 AS
+ ^
+<sql-statement>
+ALTER TABLE articles DROP CONSTRAINT articles_pkey RESTRICT; -- fail
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE articles DROP CONSTRAINT articles_pkey RESTRICT; -- fail
+ ^
+<sql-statement>
+DROP VIEW fdv4;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: View not found: 'fdv4'
+ DROP VIEW fdv4;
+ ^
+<sql-statement>
+-- prepared query plans: this results in failure on reuse
+PREPARE foo AS
+ SELECT id, keywords, title, body, created
+ FROM articles
+ GROUP BY id;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 301
+ -- prepared query plans: this results in failure on reuse
+ ^
+<sql-statement>
+EXECUTE foo;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 302
+ EXECUTE foo;
+ ^
+<sql-statement>
+ALTER TABLE articles DROP CONSTRAINT articles_pkey RESTRICT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244
+ ALTER TABLE articles DROP CONSTRAINT articles_pkey RESTRICT;
+ ^
+<sql-statement>
+EXECUTE foo; -- fail
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 302
+ EXECUTE foo; -- fail
+ ^
diff --git a/ydb/library/yql/tests/postgresql/cases/functional_deps.out b/ydb/library/yql/tests/postgresql/cases/functional_deps.out
index bea079082e..3f1fb1b9b0 100644
--- a/ydb/library/yql/tests/postgresql/cases/functional_deps.out
+++ b/ydb/library/yql/tests/postgresql/cases/functional_deps.out
@@ -15,3 +15,23 @@ CREATE TEMP TABLE articles_in_category (
-- example from documentation
CREATE TEMP TABLE products (product_id int, name text, price numeric);
CREATE TEMP TABLE sales (product_id int, units int);
+-- Drupal example, http://drupal.org/node/555530
+CREATE TEMP TABLE node (
+ nid SERIAL,
+ vid integer NOT NULL default '0',
+ type varchar(32) NOT NULL default '',
+ title varchar(128) NOT NULL default '',
+ uid integer NOT NULL default '0',
+ status integer NOT NULL default '1',
+ created integer NOT NULL default '0',
+ -- snip
+ PRIMARY KEY (nid, vid)
+);
+CREATE TEMP TABLE users (
+ uid integer NOT NULL default '0',
+ name varchar(60) NOT NULL default '',
+ pass varchar(32) NOT NULL default '',
+ -- snip
+ PRIMARY KEY (uid),
+ UNIQUE (name)
+);
diff --git a/ydb/library/yql/tests/postgresql/cases/functional_deps.sql b/ydb/library/yql/tests/postgresql/cases/functional_deps.sql
index bea079082e..3f1fb1b9b0 100644
--- a/ydb/library/yql/tests/postgresql/cases/functional_deps.sql
+++ b/ydb/library/yql/tests/postgresql/cases/functional_deps.sql
@@ -15,3 +15,23 @@ CREATE TEMP TABLE articles_in_category (
-- example from documentation
CREATE TEMP TABLE products (product_id int, name text, price numeric);
CREATE TEMP TABLE sales (product_id int, units int);
+-- Drupal example, http://drupal.org/node/555530
+CREATE TEMP TABLE node (
+ nid SERIAL,
+ vid integer NOT NULL default '0',
+ type varchar(32) NOT NULL default '',
+ title varchar(128) NOT NULL default '',
+ uid integer NOT NULL default '0',
+ status integer NOT NULL default '1',
+ created integer NOT NULL default '0',
+ -- snip
+ PRIMARY KEY (nid, vid)
+);
+CREATE TEMP TABLE users (
+ uid integer NOT NULL default '0',
+ name varchar(60) NOT NULL default '',
+ pass varchar(32) NOT NULL default '',
+ -- snip
+ PRIMARY KEY (uid),
+ UNIQUE (name)
+);
diff --git a/ydb/library/yql/tests/postgresql/cases/horology.err b/ydb/library/yql/tests/postgresql/cases/horology.err
new file mode 100644
index 0000000000..1e88f5817d
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/horology.err
@@ -0,0 +1,1845 @@
+<sql-statement>
+--
+-- HOROLOGY
+--
+SET DateStyle = 'Postgres, MDY';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ --
+ ^
+<sql-statement>
+SHOW TimeZone; -- Many of these tests depend on the prevailing setting
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unrecognized configuration parameter "timezone"
+ SHOW TimeZone; -- Many of these tests depend on the prevailing setting
+ ^
+<sql-statement>
+--
+-- Test various input formats
+--
+SELECT timestamp with time zone '20011227 040506+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '20011227 040506-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '20011227 040506.789+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '20011227 040506.789-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '20011227T040506+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '20011227T040506-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '20011227T040506.789+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '20011227T040506.789-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '2001-12-27 04:05:06.789-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '2001.12.27 04:05:06.789-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '2001/12/27 04:05:06.789-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '12/27/2001 04:05:06.789-08';
+</sql-statement>
+<sql-statement>
+-- should fail in mdy mode:
+SELECT timestamp with time zone '27/12/2001 04:05:06.789-08';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- should fail in mdy mode:
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "27/12/2001 04:05:06.789-08"
+HINT: Perhaps you need a different "datestyle" setting.
+
+ -- should fail in mdy mode:
+ ^
+<sql-statement>
+set datestyle to dmy;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: datestyle
+ set datestyle to dmy;
+ ^
+<sql-statement>
+SELECT timestamp with time zone '27/12/2001 04:05:06.789-08';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT timestamp with time zone '27/12/2001 04:05:06.789-08';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "27/12/2001 04:05:06.789-08"
+HINT: Perhaps you need a different "datestyle" setting.
+
+ SELECT timestamp with time zone '27/12/2001 04:05:06.789-08';
+ ^
+<sql-statement>
+reset datestyle;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ reset datestyle;
+ ^
+<sql-statement>
+SELECT timestamp with time zone 'Y2001M12D27H04M05S06.789+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'Y2001M12D27H04M05S06.789-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'Y2001M12D27H04MM05S06.789+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'Y2001M12D27H04MM05S06.789-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271.5+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271.5-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271 04:05:06+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271 04:05:06-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271T040506+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271T040506-08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271T040506.789+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone 'J2452271T040506.789-08';
+</sql-statement>
+<sql-statement>
+-- German/European-style dates with periods as delimiters
+SELECT timestamp with time zone '12.27.2001 04:05:06.789+08';
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '12.27.2001 04:05:06.789-08';
+</sql-statement>
+<sql-statement>
+SET DateStyle = 'German';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ SET DateStyle = 'German';
+ ^
+<sql-statement>
+SELECT timestamp with time zone '27.12.2001 04:05:06.789+08';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT timestamp with time zone '27.12.2001 04:05:06.789+08';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "27.12.2001 04:05:06.789+08"
+HINT: Perhaps you need a different "datestyle" setting.
+
+ SELECT timestamp with time zone '27.12.2001 04:05:06.789+08';
+ ^
+<sql-statement>
+SELECT timestamp with time zone '27.12.2001 04:05:06.789-08';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT timestamp with time zone '27.12.2001 04:05:06.789-08';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "27.12.2001 04:05:06.789-08"
+HINT: Perhaps you need a different "datestyle" setting.
+
+ SELECT timestamp with time zone '27.12.2001 04:05:06.789-08';
+ ^
+<sql-statement>
+SET DateStyle = 'ISO';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ SET DateStyle = 'ISO';
+ ^
+<sql-statement>
+-- As of 7.4, allow time without time zone having a time zone specified
+SELECT time without time zone '040506.789+08';
+</sql-statement>
+<sql-statement>
+SELECT time without time zone '040506.789-08';
+</sql-statement>
+<sql-statement>
+SELECT time without time zone 'T040506.789+08';
+</sql-statement>
+<sql-statement>
+SELECT time without time zone 'T040506.789-08';
+</sql-statement>
+<sql-statement>
+SELECT time with time zone '040506.789+08';
+</sql-statement>
+<sql-statement>
+SELECT time with time zone '040506.789-08';
+</sql-statement>
+<sql-statement>
+SELECT time with time zone 'T040506.789+08';
+</sql-statement>
+<sql-statement>
+SELECT time with time zone 'T040506.789-08';
+</sql-statement>
+<sql-statement>
+SELECT time with time zone 'T040506.789 +08';
+</sql-statement>
+<sql-statement>
+SELECT time with time zone 'T040506.789 -08';
+</sql-statement>
+<sql-statement>
+SET DateStyle = 'Postgres, MDY';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ SET DateStyle = 'Postgres, MDY';
+ ^
+<sql-statement>
+-- Check Julian dates BC
+SELECT date 'J1520447' AS "Confucius' Birthday";
+</sql-statement>
+<sql-statement>
+SELECT date 'J0' AS "Julian Epoch";
+</sql-statement>
+<sql-statement>
+--
+-- date, time arithmetic
+--
+SELECT date '1981-02-03' + time '04:05:06' AS "Date + Time";
+</sql-statement>
+<sql-statement>
+SELECT date '1991-02-03' + time with time zone '04:05:06 PST' AS "Date + Time PST";
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT date '1991-02-03' + time with time zone '04:05:06 PST' AS "Date + Time PST";
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "04:05:06 PST"
+
+ SELECT date '1991-02-03' + time with time zone '04:05:06 PST' AS "Date + Time PST";
+ ^
+<sql-statement>
+SELECT date '2001-02-03' + time with time zone '04:05:06 UTC' AS "Date + Time UTC";
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT date '2001-02-03' + time with time zone '04:05:06 UTC' AS "Date + Time UTC";
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "04:05:06 UTC"
+
+ SELECT date '2001-02-03' + time with time zone '04:05:06 UTC' AS "Date + Time UTC";
+ ^
+<sql-statement>
+SELECT date '1991-02-03' + interval '2 years' AS "Add Two Years";
+</sql-statement>
+<sql-statement>
+SELECT date '2001-12-13' - interval '2 years' AS "Subtract Two Years";
+</sql-statement>
+<sql-statement>
+-- subtract time from date should not make sense; use interval instead
+SELECT date '1991-02-03' - time '04:05:06' AS "Subtract Time";
+</sql-statement>
+<sql-statement>
+SELECT date '1991-02-03' - time with time zone '04:05:06 UTC' AS "Subtract Time UTC";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT date '1991-02-03' - time with time zone '04:05:06 UTC' AS "Subtract Time UTC";
+ ^
+ -stdin-:<main>:1:26: Error: At function: PgOp
+ SELECT date '1991-02-03' - time with time zone '04:05:06 UTC' AS "Subtract Time UTC";
+ ^
+ -stdin-:<main>:1:26: Error: Unable to find an overload for operator - with given argument type(s): (date,timetz)
+ SELECT date '1991-02-03' - time with time zone '04:05:06 UTC' AS "Subtract Time UTC";
+ ^
+<sql-statement>
+--
+-- timestamp, interval arithmetic
+--
+SELECT timestamp without time zone '1996-03-01' - interval '1 second' AS "Feb 29";
+</sql-statement>
+<sql-statement>
+SELECT timestamp without time zone '1999-03-01' - interval '1 second' AS "Feb 28";
+</sql-statement>
+<sql-statement>
+SELECT timestamp without time zone '2000-03-01' - interval '1 second' AS "Feb 29";
+</sql-statement>
+<sql-statement>
+SELECT timestamp without time zone '1999-12-01' + interval '1 month - 1 second' AS "Dec 31";
+</sql-statement>
+<sql-statement>
+SELECT timestamp without time zone 'Jan 1, 4713 BC' + interval '106000000 days' AS "Feb 23, 285506";
+</sql-statement>
+<sql-statement>
+SELECT timestamp without time zone 'Jan 1, 4713 BC' + interval '107000000 days' AS "Jan 20, 288244";
+</sql-statement>
+<sql-statement>
+SELECT timestamp without time zone 'Jan 1, 4713 BC' + interval '109203489 days' AS "Dec 31, 294276";
+</sql-statement>
+<sql-statement>
+SELECT timestamp without time zone '12/31/294276' - timestamp without time zone '12/23/1999' AS "106751991 Days";
+</sql-statement>
+<sql-statement>
+-- Shorthand values
+-- Not directly usable for regression testing since these are not constants.
+-- So, just try to test parser and hope for the best - thomas 97/04/26
+SELECT (timestamp without time zone 'today' = (timestamp without time zone 'yesterday' + interval '1 day')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone 'today' = (timestamp without time zone 'tomorrow' - interval '1 day')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone 'today 10:30' = (timestamp without time zone 'yesterday' + interval '1 day 10 hr 30 min')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone '10:30 today' = (timestamp without time zone 'yesterday' + interval '1 day 10 hr 30 min')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone 'tomorrow' = (timestamp without time zone 'yesterday' + interval '2 days')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone 'tomorrow 16:00:00' = (timestamp without time zone 'today' + interval '1 day 16 hours')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone '16:00:00 tomorrow' = (timestamp without time zone 'today' + interval '1 day 16 hours')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone 'yesterday 12:34:56' = (timestamp without time zone 'tomorrow' - interval '2 days - 12:34:56')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone '12:34:56 yesterday' = (timestamp without time zone 'tomorrow' - interval '2 days - 12:34:56')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone 'tomorrow' > 'now') as "True";
+</sql-statement>
+<sql-statement>
+-- Convert from date and time to timestamp
+-- This test used to be timestamp(date,time) but no longer allowed by grammar
+-- to enable support for SQL99 timestamp type syntax.
+SELECT date '1994-01-01' + time '11:00' AS "Jan_01_1994_11am";
+</sql-statement>
+<sql-statement>
+SELECT date '1994-01-01' + time '10:00' AS "Jan_01_1994_10am";
+</sql-statement>
+<sql-statement>
+SELECT date '1994-01-01' + timetz '11:00-5' AS "Jan_01_1994_8am";
+</sql-statement>
+<sql-statement>
+SELECT timestamptz(date '1994-01-01', time with time zone '11:00-5') AS "Jan_01_1994_8am";
+</sql-statement>
+<sql-statement>
+SELECT d1 + interval '1 year' AS one_year FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SELECT d1 - interval '1 year' AS one_year FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SELECT timestamp with time zone '1996-03-01' - interval '1 second' AS "Feb 29";
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '1999-03-01' - interval '1 second' AS "Feb 28";
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '2000-03-01' - interval '1 second' AS "Feb 29";
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '1999-12-01' + interval '1 month - 1 second' AS "Dec 31";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp with time zone 'today' = (timestamp with time zone 'yesterday' + interval '1 day')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp with time zone 'today' = (timestamp with time zone 'tomorrow' - interval '1 day')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp with time zone 'tomorrow' = (timestamp with time zone 'yesterday' + interval '2 days')) as "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp with time zone 'tomorrow' > 'now') as "True";
+</sql-statement>
+<sql-statement>
+-- timestamp with time zone, interval arithmetic around DST change
+-- (just for fun, let's use an intentionally nonstandard POSIX zone spec)
+SET TIME ZONE 'CST7CDT,M4.1.0,M10.5.0';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: timezone
+ -- timestamp with time zone, interval arithmetic around DST change
+ ^
+<sql-statement>
+SELECT timestamp with time zone '2005-04-02 12:00-07' + interval '1 day' as "Apr 3, 12:00";
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '2005-04-02 12:00-07' + interval '24 hours' as "Apr 3, 13:00";
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '2005-04-03 12:00-06' - interval '1 day' as "Apr 2, 12:00";
+</sql-statement>
+<sql-statement>
+SELECT timestamp with time zone '2005-04-03 12:00-06' - interval '24 hours' as "Apr 2, 11:00";
+</sql-statement>
+<sql-statement>
+RESET TIME ZONE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET TIME ZONE;
+ ^
+<sql-statement>
+SELECT timestamptz(date '1994-01-01', time '11:00') AS "Jan_01_1994_10am";
+</sql-statement>
+<sql-statement>
+SELECT timestamptz(date '1994-01-01', time '10:00') AS "Jan_01_1994_9am";
+</sql-statement>
+<sql-statement>
+SELECT timestamptz(date '1994-01-01', time with time zone '11:00-8') AS "Jan_01_1994_11am";
+</sql-statement>
+<sql-statement>
+SELECT timestamptz(date '1994-01-01', time with time zone '10:00-8') AS "Jan_01_1994_10am";
+</sql-statement>
+<sql-statement>
+SELECT timestamptz(date '1994-01-01', time with time zone '11:00-5') AS "Jan_01_1994_8am";
+</sql-statement>
+<sql-statement>
+SELECT d1 + interval '1 year' AS one_year FROM TIMESTAMPTZ_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMPTZ_TBL
+
+<sql-statement>
+SELECT d1 - interval '1 year' AS one_year FROM TIMESTAMPTZ_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMPTZ_TBL
+
+<sql-statement>
+--
+-- time, interval arithmetic
+--
+SELECT CAST(time '01:02' AS interval) AS "+01:02";
+</sql-statement>
+<sql-statement>
+SELECT CAST(interval '02:03' AS time) AS "02:03:00";
+</sql-statement>
+<sql-statement>
+SELECT time '01:30' + interval '02:01' AS "03:31:00";
+</sql-statement>
+<sql-statement>
+SELECT time '01:30' - interval '02:01' AS "23:29:00";
+</sql-statement>
+<sql-statement>
+SELECT time '02:30' + interval '36:01' AS "14:31:00";
+</sql-statement>
+<sql-statement>
+SELECT time '03:30' + interval '1 month 04:01' AS "07:31:00";
+</sql-statement>
+<sql-statement>
+SELECT CAST(time with time zone '01:02-08' AS interval) AS "+00:01";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT CAST(time with time zone '01:02-08' AS interval) AS "+00:01";
+ ^
+ -stdin-:<main>:1:47: Error: At function: PgCast
+ SELECT CAST(time with time zone '01:02-08' AS interval) AS "+00:01";
+ ^
+ -stdin-:<main>:1:47: Error: Cannot cast type timetz into type interval
+ SELECT CAST(time with time zone '01:02-08' AS interval) AS "+00:01";
+ ^
+<sql-statement>
+SELECT CAST(interval '02:03' AS time with time zone) AS "02:03:00-08";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT CAST(interval '02:03' AS time with time zone) AS "02:03:00-08";
+ ^
+ -stdin-:<main>:1:33: Error: At function: PgCast
+ SELECT CAST(interval '02:03' AS time with time zone) AS "02:03:00-08";
+ ^
+ -stdin-:<main>:1:33: Error: Cannot cast type interval into type timetz
+ SELECT CAST(interval '02:03' AS time with time zone) AS "02:03:00-08";
+ ^
+<sql-statement>
+SELECT time with time zone '01:30-08' - interval '02:01' AS "23:29:00-08";
+</sql-statement>
+<sql-statement>
+SELECT time with time zone '02:30-08' + interval '36:01' AS "14:31:00-08";
+</sql-statement>
+<sql-statement>
+-- These two tests cannot be used because they default to current timezone,
+-- which may be either -08 or -07 depending on the time of year.
+-- SELECT time with time zone '01:30' + interval '02:01' AS "03:31:00-08";
+-- SELECT time with time zone '03:30' + interval '1 month 04:01' AS "07:31:00-08";
+-- Try the following two tests instead, as a poor substitute
+SELECT CAST(CAST(date 'today' + time with time zone '05:30'
+ + interval '02:01' AS time with time zone) AS time) AS "07:31:00";
+</sql-statement>
+<sql-statement>
+SELECT CAST(cast(date 'today' + time with time zone '03:30'
+ + interval '1 month 04:01' as timestamp without time zone) AS time) AS "07:31:00";
+</sql-statement>
+<sql-statement>
+SELECT t.d1 AS t, i.f1 AS i, t.d1 + i.f1 AS "add", t.d1 - i.f1 AS "subtract"
+ FROM TIMESTAMP_TBL t, INTERVAL_TBL i
+ WHERE t.d1 BETWEEN '1990-01-01' AND '2001-01-01'
+ AND i.f1 BETWEEN '00:00' AND '23:00'
+ ORDER BY 1,2;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SELECT t.f1 AS t, i.f1 AS i, t.f1 + i.f1 AS "add", t.f1 - i.f1 AS "subtract"
+ FROM TIME_TBL t, INTERVAL_TBL i
+ ORDER BY 1,2;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIME_TBL
+
+<sql-statement>
+SELECT t.f1 AS t, i.f1 AS i, t.f1 + i.f1 AS "add", t.f1 - i.f1 AS "subtract"
+ FROM TIMETZ_TBL t, INTERVAL_TBL i
+ ORDER BY 1,2;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.INTERVAL_TBL
+
+<sql-statement>
+-- SQL9x OVERLAPS operator
+-- test with time zone
+SELECT (timestamp with time zone '2000-11-27', timestamp with time zone '2000-11-28')
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', timestamp with time zone '2000-11-30') AS "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp with time zone '2000-11-26', timestamp with time zone '2000-11-27')
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', timestamp with time zone '2000-11-30') AS "False";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp with time zone '2000-11-27', timestamp with time zone '2000-11-28')
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', interval '1 day') AS "True";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (timestamp with time zone '2000-11-27', timestamp with time zone '2000-11-28')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', interval '1 day') AS "True";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (timestamptz,timestamptz,timestamptz,interval)
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', interval '1 day') AS "True";
+ ^
+<sql-statement>
+SELECT (timestamp with time zone '2000-11-27', interval '12 hours')
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', timestamp with time zone '2000-11-30') AS "False";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (timestamp with time zone '2000-11-27', interval '12 hours')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', timestamp with time zone '2000-11-30') AS "False";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (timestamptz,interval,timestamptz,timestamptz)
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', timestamp with time zone '2000-11-30') AS "False";
+ ^
+<sql-statement>
+SELECT (timestamp with time zone '2000-11-27', interval '12 hours')
+ OVERLAPS (timestamp with time zone '2000-11-27', interval '12 hours') AS "True";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (timestamp with time zone '2000-11-27', interval '12 hours')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (timestamp with time zone '2000-11-27', interval '12 hours') AS "True";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (timestamptz,interval,timestamptz,interval)
+ OVERLAPS (timestamp with time zone '2000-11-27', interval '12 hours') AS "True";
+ ^
+<sql-statement>
+SELECT (timestamp with time zone '2000-11-27', interval '12 hours')
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', interval '12 hours') AS "False";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (timestamp with time zone '2000-11-27', interval '12 hours')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', interval '12 hours') AS "False";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (timestamptz,interval,timestamptz,interval)
+ OVERLAPS (timestamp with time zone '2000-11-27 12:00', interval '12 hours') AS "False";
+ ^
+<sql-statement>
+-- test without time zone
+SELECT (timestamp without time zone '2000-11-27', timestamp without time zone '2000-11-28')
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', timestamp without time zone '2000-11-30') AS "True";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone '2000-11-26', timestamp without time zone '2000-11-27')
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', timestamp without time zone '2000-11-30') AS "False";
+</sql-statement>
+<sql-statement>
+SELECT (timestamp without time zone '2000-11-27', timestamp without time zone '2000-11-28')
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', interval '1 day') AS "True";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (timestamp without time zone '2000-11-27', timestamp without time zone '2000-11-28')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', interval '1 day') AS "True";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (timestamp,timestamp,timestamp,interval)
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', interval '1 day') AS "True";
+ ^
+<sql-statement>
+SELECT (timestamp without time zone '2000-11-27', interval '12 hours')
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', timestamp without time zone '2000-11-30') AS "False";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (timestamp without time zone '2000-11-27', interval '12 hours')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', timestamp without time zone '2000-11-30') AS "False";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (timestamp,interval,timestamp,timestamp)
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', timestamp without time zone '2000-11-30') AS "False";
+ ^
+<sql-statement>
+SELECT (timestamp without time zone '2000-11-27', interval '12 hours')
+ OVERLAPS (timestamp without time zone '2000-11-27', interval '12 hours') AS "True";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (timestamp without time zone '2000-11-27', interval '12 hours')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (timestamp without time zone '2000-11-27', interval '12 hours') AS "True";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (timestamp,interval,timestamp,interval)
+ OVERLAPS (timestamp without time zone '2000-11-27', interval '12 hours') AS "True";
+ ^
+<sql-statement>
+SELECT (timestamp without time zone '2000-11-27', interval '12 hours')
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', interval '12 hours') AS "False";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (timestamp without time zone '2000-11-27', interval '12 hours')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', interval '12 hours') AS "False";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (timestamp,interval,timestamp,interval)
+ OVERLAPS (timestamp without time zone '2000-11-27 12:00', interval '12 hours') AS "False";
+ ^
+<sql-statement>
+-- test time and interval
+SELECT (time '00:00', time '01:00')
+ OVERLAPS (time '00:30', time '01:30') AS "True";
+</sql-statement>
+<sql-statement>
+SELECT (time '00:00', interval '1 hour')
+ OVERLAPS (time '00:30', interval '1 hour') AS "True";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (time '00:00', interval '1 hour')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (time '00:30', interval '1 hour') AS "True";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (time,interval,time,interval)
+ OVERLAPS (time '00:30', interval '1 hour') AS "True";
+ ^
+<sql-statement>
+SELECT (time '00:00', interval '1 hour')
+ OVERLAPS (time '01:30', interval '1 hour') AS "False";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT (time '00:00', interval '1 hour')
+ ^
+ -stdin-:<main>:2:3: Error: At function: PgCall
+ OVERLAPS (time '01:30', interval '1 hour') AS "False";
+ ^
+ -stdin-:<main>:2:3: Error: Unable to find an overload for proc overlaps with given argument types: (time,interval,time,interval)
+ OVERLAPS (time '01:30', interval '1 hour') AS "False";
+ ^
+<sql-statement>
+-- SQL99 seems to want this to be false (and we conform to the spec).
+-- istm that this *should* return true, on the theory that time
+-- intervals can wrap around the day boundary - thomas 2001-09-25
+SELECT (time '00:00', interval '1 hour')
+ OVERLAPS (time '01:30', interval '1 day') AS "False";
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ -- SQL99 seems to want this to be false (and we conform to the spec).
+ ^
+ -stdin-:<main>:5:3: Error: At function: PgCall
+ OVERLAPS (time '01:30', interval '1 day') AS "False";
+ ^
+ -stdin-:<main>:5:3: Error: Unable to find an overload for proc overlaps with given argument types: (time,interval,time,interval)
+ OVERLAPS (time '01:30', interval '1 day') AS "False";
+ ^
+<sql-statement>
+CREATE TABLE TEMP_TIMESTAMP (f1 timestamp with time zone);
+</sql-statement>
+<sql-statement>
+-- get some candidate input values
+INSERT INTO TEMP_TIMESTAMP (f1)
+ SELECT d1 FROM TIMESTAMP_TBL
+ WHERE d1 BETWEEN '13-jun-1957' AND '1-jan-1997'
+ OR d1 BETWEEN '1-jan-1999' AND '1-jan-2010';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SELECT f1 AS "timestamp"
+ FROM TEMP_TIMESTAMP
+ ORDER BY "timestamp";
+</sql-statement>
+<sql-statement>
+SELECT d.f1 AS "timestamp", t.f1 AS "interval", d.f1 + t.f1 AS plus
+ FROM TEMP_TIMESTAMP d, INTERVAL_TBL t
+ ORDER BY plus, "timestamp", "interval";
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.INTERVAL_TBL
+
+<sql-statement>
+SELECT d.f1 AS "timestamp", t.f1 AS "interval", d.f1 - t.f1 AS minus
+ FROM TEMP_TIMESTAMP d, INTERVAL_TBL t
+ WHERE isfinite(d.f1)
+ ORDER BY minus, "timestamp", "interval";
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.INTERVAL_TBL
+
+<sql-statement>
+SELECT d.f1 AS "timestamp",
+ timestamp with time zone '1980-01-06 00:00 GMT' AS gpstime_zero,
+ d.f1 - timestamp with time zone '1980-01-06 00:00 GMT' AS difference
+ FROM TEMP_TIMESTAMP d
+ ORDER BY difference;
+</sql-statement>
+<sql-statement>
+SELECT d1.f1 AS timestamp1, d2.f1 AS timestamp2, d1.f1 - d2.f1 AS difference
+ FROM TEMP_TIMESTAMP d1, TEMP_TIMESTAMP d2
+ ORDER BY timestamp1, timestamp2, difference;
+</sql-statement>
+<sql-statement>
+--
+-- Conversions
+--
+SELECT f1 AS "timestamp", date(f1) AS date
+ FROM TEMP_TIMESTAMP
+ WHERE f1 <> timestamp 'now'
+ ORDER BY date, "timestamp";
+</sql-statement>
+<sql-statement>
+DROP TABLE TEMP_TIMESTAMP;
+</sql-statement>
+<sql-statement>
+--
+-- Comparisons between datetime types, especially overflow cases
+---
+SELECT '2202020-10-05'::date::timestamp; -- fail
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ --
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date out of range for timestamp
+
+ --
+ ^
+<sql-statement>
+SELECT '2202020-10-05'::date > '2020-10-05'::timestamp as t;
+</sql-statement>
+<sql-statement>
+SELECT '2020-10-05'::timestamp > '2202020-10-05'::date as f;
+</sql-statement>
+<sql-statement>
+SELECT '2202020-10-05'::date::timestamptz; -- fail
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '2202020-10-05'::date::timestamptz; -- fail
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date out of range for timestamp
+
+ SELECT '2202020-10-05'::date::timestamptz; -- fail
+ ^
+<sql-statement>
+SELECT '2202020-10-05'::date > '2020-10-05'::timestamptz as t;
+</sql-statement>
+<sql-statement>
+SELECT '2020-10-05'::timestamptz > '2202020-10-05'::date as f;
+</sql-statement>
+<sql-statement>
+-- This conversion may work depending on timezone
+SELECT '4714-11-24 BC'::date::timestamptz;
+</sql-statement>
+<sql-statement>
+SET TimeZone = 'UTC-2';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: TimeZone
+ SET TimeZone = 'UTC-2';
+ ^
+<sql-statement>
+SELECT '4714-11-24 BC'::date::timestamptz; -- fail
+</sql-statement>
+<sql-statement>
+SELECT '4714-11-24 BC'::date < '2020-10-05'::timestamptz as t;
+</sql-statement>
+<sql-statement>
+SELECT '2020-10-05'::timestamptz >= '4714-11-24 BC'::date as t;
+</sql-statement>
+<sql-statement>
+SELECT '4714-11-24 BC'::timestamp < '2020-10-05'::timestamptz as t;
+</sql-statement>
+<sql-statement>
+SELECT '2020-10-05'::timestamptz >= '4714-11-24 BC'::timestamp as t;
+</sql-statement>
+<sql-statement>
+RESET TimeZone;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET TimeZone;
+ ^
+<sql-statement>
+--
+-- Formats
+--
+SET DateStyle TO 'US,Postgres';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ --
+ ^
+<sql-statement>
+SHOW DateStyle;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unrecognized configuration parameter "datestyle"
+ SHOW DateStyle;
+ ^
+<sql-statement>
+SELECT d1 AS us_postgres FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SET DateStyle TO 'US,ISO';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ SET DateStyle TO 'US,ISO';
+ ^
+<sql-statement>
+SELECT d1 AS us_iso FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SET DateStyle TO 'US,SQL';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ SET DateStyle TO 'US,SQL';
+ ^
+<sql-statement>
+SHOW DateStyle;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unrecognized configuration parameter "datestyle"
+ SHOW DateStyle;
+ ^
+<sql-statement>
+SELECT d1 AS us_sql FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SET DateStyle TO 'European,Postgres';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ SET DateStyle TO 'European,Postgres';
+ ^
+<sql-statement>
+SHOW DateStyle;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unrecognized configuration parameter "datestyle"
+ SHOW DateStyle;
+ ^
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES('13/06/1957');
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SELECT count(*) as one FROM TIMESTAMP_TBL WHERE d1 = 'Jun 13 1957';
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SELECT d1 AS european_postgres FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SET DateStyle TO 'European,ISO';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ SET DateStyle TO 'European,ISO';
+ ^
+<sql-statement>
+SHOW DateStyle;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unrecognized configuration parameter "datestyle"
+ SHOW DateStyle;
+ ^
+<sql-statement>
+SELECT d1 AS european_iso FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+SET DateStyle TO 'European,SQL';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DateStyle
+ SET DateStyle TO 'European,SQL';
+ ^
+<sql-statement>
+SHOW DateStyle;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unrecognized configuration parameter "datestyle"
+ SHOW DateStyle;
+ ^
+<sql-statement>
+SELECT d1 AS european_sql FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.TIMESTAMP_TBL
+
+<sql-statement>
+RESET DateStyle;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET DateStyle;
+ ^
+<sql-statement>
+--
+-- to_timestamp()
+--
+SELECT to_timestamp('0097/Feb/16 --> 08:14:30', 'YYYY/Mon/DD --> HH:MI:SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('97/2/16 8:14:30', 'FMYYYY/FMMM/FMDD FMHH:FMMI:FMSS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011$03!18 23_38_15', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('1985 January 12', 'YYYY FMMonth DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('1985 FMMonth 12', 'YYYY "FMMonth" DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('1985 \ 12', 'YYYY \\ DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('My birthday-> Year: 1976, Month: May, Day: 16',
+ '"My birthday-> Year:" YYYY, "Month:" FMMonth, "Day:" DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('1,582nd VIII 21', 'Y,YYYth FMRM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('15 "text between quote marks" 98 54 45',
+ E'HH24 "\\"text between quote marks\\"" YY MI SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('05121445482000', 'MMDDHH24MISSYYYY');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2000January09Sunday', 'YYYYFMMonthDDFMDay');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('97/Feb/16', 'YYMonDD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('97/Feb/16', 'YYMonDD');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid value "/Feb/16" for "Mon"
+DETAIL: The given value did not match any of the allowed values for this field.
+
+ SELECT to_timestamp('97/Feb/16', 'YYMonDD');
+ ^
+<sql-statement>
+SELECT to_timestamp('97/Feb/16', 'YY:Mon:DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('97/Feb/16', 'FXYY:Mon:DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('97/Feb/16', 'FXYY/Mon/DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('19971116', 'YYYYMMDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('20000-1116', 'YYYY-MMDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('1997 AD 11 16', 'YYYY BC MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('1997 BC 11 16', 'YYYY BC MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('1997 A.D. 11 16', 'YYYY B.C. MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('1997 B.C. 11 16', 'YYYY B.C. MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('9-1116', 'Y-MMDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('95-1116', 'YY-MMDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('995-1116', 'YYY-MMDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2005426', 'YYYYWWD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2005300', 'YYYYDDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2005527', 'IYYYIWID');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('005527', 'IYYIWID');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('05527', 'IYIWID');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('5527', 'IIWID');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2005364', 'IYYYIDDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('20050302', 'YYYYMMDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2005 03 02', 'YYYYMMDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp(' 2005 03 02', 'YYYYMMDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp(' 20050302', 'YYYYMMDD');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 AM', 'YYYY-MM-DD HH12:MI PM');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 PM', 'YYYY-MM-DD HH12:MI PM');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 A.M.', 'YYYY-MM-DD HH12:MI P.M.');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 P.M.', 'YYYY-MM-DD HH12:MI P.M.');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 +05', 'YYYY-MM-DD HH12:MI TZH');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 -05', 'YYYY-MM-DD HH12:MI TZH');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 +05:20', 'YYYY-MM-DD HH12:MI TZH:TZM');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 -05:20', 'YYYY-MM-DD HH12:MI TZH:TZM');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 20', 'YYYY-MM-DD HH12:MI TZM');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 11:38 PST', 'YYYY-MM-DD HH12:MI TZ'); -- NYI
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2011-12-18 11:38 PST', 'YYYY-MM-DD HH12:MI TZ'); -- NYI
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: formatting field "TZ" is only supported in to_char
+
+ SELECT to_timestamp('2011-12-18 11:38 PST', 'YYYY-MM-DD HH12:MI TZ'); -- NYI
+ ^
+<sql-statement>
+SELECT to_timestamp('2018-11-02 12:34:56.025', 'YYYY-MM-DD HH24:MI:SS.MS');
+</sql-statement>
+<sql-statement>
+SELECT i, to_timestamp('2018-11-02 12:34:56', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT i, to_timestamp('2018-11-02 12:34:56', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:11: Error: At function: PgCall
+ SELECT i, to_timestamp('2018-11-02 12:34:56', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:74: Error: At function: PgOp
+ SELECT i, to_timestamp('2018-11-02 12:34:56', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:74: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
+ SELECT i, to_timestamp('2018-11-02 12:34:56', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+<sql-statement>
+SELECT i, to_timestamp('2018-11-02 12:34:56.1', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT i, to_timestamp('2018-11-02 12:34:56.1', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:11: Error: At function: PgCall
+ SELECT i, to_timestamp('2018-11-02 12:34:56.1', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:76: Error: At function: PgOp
+ SELECT i, to_timestamp('2018-11-02 12:34:56.1', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:76: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
+ SELECT i, to_timestamp('2018-11-02 12:34:56.1', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+<sql-statement>
+SELECT i, to_timestamp('2018-11-02 12:34:56.12', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT i, to_timestamp('2018-11-02 12:34:56.12', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:11: Error: At function: PgCall
+ SELECT i, to_timestamp('2018-11-02 12:34:56.12', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:77: Error: At function: PgOp
+ SELECT i, to_timestamp('2018-11-02 12:34:56.12', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:77: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
+ SELECT i, to_timestamp('2018-11-02 12:34:56.12', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+<sql-statement>
+SELECT i, to_timestamp('2018-11-02 12:34:56.123', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:11: Error: At function: PgCall
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:78: Error: At function: PgOp
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:78: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+<sql-statement>
+SELECT i, to_timestamp('2018-11-02 12:34:56.1234', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT i, to_timestamp('2018-11-02 12:34:56.1234', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:11: Error: At function: PgCall
+ SELECT i, to_timestamp('2018-11-02 12:34:56.1234', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:79: Error: At function: PgOp
+ SELECT i, to_timestamp('2018-11-02 12:34:56.1234', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:79: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
+ SELECT i, to_timestamp('2018-11-02 12:34:56.1234', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+<sql-statement>
+SELECT i, to_timestamp('2018-11-02 12:34:56.12345', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT i, to_timestamp('2018-11-02 12:34:56.12345', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:11: Error: At function: PgCall
+ SELECT i, to_timestamp('2018-11-02 12:34:56.12345', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:80: Error: At function: PgOp
+ SELECT i, to_timestamp('2018-11-02 12:34:56.12345', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:80: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
+ SELECT i, to_timestamp('2018-11-02 12:34:56.12345', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+<sql-statement>
+SELECT i, to_timestamp('2018-11-02 12:34:56.123456', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123456', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:11: Error: At function: PgCall
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123456', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:81: Error: At function: PgOp
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123456', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:81: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123456', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+<sql-statement>
+SELECT i, to_timestamp('2018-11-02 12:34:56.123456789', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123456789', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:11: Error: At function: PgCall
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123456789', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:84: Error: At function: PgOp
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123456789', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+ -stdin-:<main>:1:84: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
+ SELECT i, to_timestamp('2018-11-02 12:34:56.123456789', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
+ ^
+<sql-statement>
+SELECT to_date('1 4 1902', 'Q MM YYYY'); -- Q is ignored
+</sql-statement>
+<sql-statement>
+SELECT to_date('3 4 21 01', 'W MM CC YY');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2458872', 'J');
+</sql-statement>
+<sql-statement>
+--
+-- Check handling of BC dates
+--
+SELECT to_date('44-02-01 BC','YYYY-MM-DD BC');
+</sql-statement>
+<sql-statement>
+SELECT to_date('-44-02-01','YYYY-MM-DD');
+</sql-statement>
+<sql-statement>
+SELECT to_date('-44-02-01 BC','YYYY-MM-DD BC');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('44-02-01 11:12:13 BC','YYYY-MM-DD HH24:MI:SS BC');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('-44-02-01 11:12:13','YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('-44-02-01 11:12:13 BC','YYYY-MM-DD HH24:MI:SS BC');
+</sql-statement>
+<sql-statement>
+--
+-- Check handling of multiple spaces in format and/or input
+--
+SELECT to_timestamp('2011-12-18 23:38:15', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 23:38:15', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 23:38:15', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 23:38:15', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 23:38:15', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2011-12-18 23:38:15', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2000+ JUN', 'YYYY/MON');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp(' 2000 +JUN', 'YYYY/MON');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp(' 2000 +JUN', 'YYYY//MON');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2000 +JUN', 'YYYY//MON');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2000 + JUN', 'YYYY MON');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2000 ++ JUN', 'YYYY MON');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2000 + + JUN', 'YYYY MON');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2000 + + JUN', 'YYYY MON');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid value "+" for "MON"
+DETAIL: The given value did not match any of the allowed values for this field.
+
+ SELECT to_timestamp('2000 + + JUN', 'YYYY MON');
+ ^
+<sql-statement>
+SELECT to_timestamp('2000 + + JUN', 'YYYY MON');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2000 -10', 'YYYY TZH');
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2000 -10', 'YYYY TZH');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2011 12 18', 'YYYY MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2011 12 18', 'YYYY MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2011 12 18', 'YYYY MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2011 12 18', 'YYYY MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2011 12 18', 'YYYY MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2011 12 18', 'YYYY MM DD');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2011 12 18', 'YYYYxMMxDD');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2011x 12x 18', 'YYYYxMMxDD');
+</sql-statement>
+<sql-statement>
+SELECT to_date('2011 x12 x18', 'YYYYxMMxDD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_date('2011 x12 x18', 'YYYYxMMxDD');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid value "x1" for "MM"
+DETAIL: Value must be an integer.
+
+ SELECT to_date('2011 x12 x18', 'YYYYxMMxDD');
+ ^
+<sql-statement>
+--
+-- Check errors for some incorrect usages of to_timestamp() and to_date()
+--
+-- Mixture of date conventions (ISO week and Gregorian):
+SELECT to_timestamp('2005527', 'YYYYIWID');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ --
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid combination of date conventions
+HINT: Do not mix Gregorian and ISO week date conventions in a formatting template.
+
+ --
+ ^
+<sql-statement>
+-- Insufficient characters in the source string:
+SELECT to_timestamp('19971', 'YYYYMMDD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- Insufficient characters in the source string:
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: source string too short for "MM" formatting field
+DETAIL: Field requires 2 characters, but only 1 remain.
+HINT: If your source string is not fixed-width, try using the "FM" modifier.
+
+ -- Insufficient characters in the source string:
+ ^
+<sql-statement>
+-- Insufficient digit characters for a single node:
+SELECT to_timestamp('19971)24', 'YYYYMMDD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- Insufficient digit characters for a single node:
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid value "1)" for "MM"
+DETAIL: Field requires 2 characters, but only 1 could be parsed.
+HINT: If your source string is not fixed-width, try using the "FM" modifier.
+
+ -- Insufficient digit characters for a single node:
+ ^
+<sql-statement>
+-- We don't accept full-length day or month names if short form is specified:
+SELECT to_timestamp('Friday 1-January-1999', 'DY DD MON YYYY');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- We don't accept full-length day or month names if short form is specified:
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid value "da" for "DD"
+DETAIL: Value must be an integer.
+
+ -- We don't accept full-length day or month names if short form is specified:
+ ^
+<sql-statement>
+SELECT to_timestamp('Fri 1-January-1999', 'DY DD MON YYYY');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('Fri 1-January-1999', 'DY DD MON YYYY');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid value "uary" for "YYYY"
+DETAIL: Value must be an integer.
+
+ SELECT to_timestamp('Fri 1-January-1999', 'DY DD MON YYYY');
+ ^
+<sql-statement>
+SELECT to_timestamp('Fri 1-Jan-1999', 'DY DD MON YYYY'); -- ok
+</sql-statement>
+<sql-statement>
+-- Value clobbering:
+SELECT to_timestamp('1997-11-Jan-16', 'YYYY-MM-Mon-DD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- Value clobbering:
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: conflicting values for "Mon" field in formatting string
+DETAIL: This value contradicts a previous setting for the same field type.
+
+ -- Value clobbering:
+ ^
+<sql-statement>
+-- Non-numeric input:
+SELECT to_timestamp('199711xy', 'YYYYMMDD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- Non-numeric input:
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid value "xy" for "DD"
+DETAIL: Value must be an integer.
+
+ -- Non-numeric input:
+ ^
+<sql-statement>
+-- Input that doesn't fit in an int:
+SELECT to_timestamp('10000000000', 'FMYYYY');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- Input that doesn't fit in an int:
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value for "YYYY" in source string is out of range
+DETAIL: Value must be in the range -2147483648 to 2147483647.
+
+ -- Input that doesn't fit in an int:
+ ^
+<sql-statement>
+-- Out-of-range and not-quite-out-of-range fields:
+SELECT to_timestamp('2016-06-13 25:00:00', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- Out-of-range and not-quite-out-of-range fields:
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2016-06-13 25:00:00"
+
+ -- Out-of-range and not-quite-out-of-range fields:
+ ^
+<sql-statement>
+SELECT to_timestamp('2016-06-13 15:60:00', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2016-06-13 15:60:00', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2016-06-13 15:60:00"
+
+ SELECT to_timestamp('2016-06-13 15:60:00', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+<sql-statement>
+SELECT to_timestamp('2016-06-13 15:50:60', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2016-06-13 15:50:60', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2016-06-13 15:50:60"
+
+ SELECT to_timestamp('2016-06-13 15:50:60', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+<sql-statement>
+SELECT to_timestamp('2016-06-13 15:50:55', 'YYYY-MM-DD HH24:MI:SS'); -- ok
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2016-06-13 15:50:55', 'YYYY-MM-DD HH:MI:SS');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2016-06-13 15:50:55', 'YYYY-MM-DD HH:MI:SS');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: hour "15" is invalid for the 12-hour clock
+HINT: Use the 24-hour clock, or give an hour between 1 and 12.
+
+ SELECT to_timestamp('2016-06-13 15:50:55', 'YYYY-MM-DD HH:MI:SS');
+ ^
+<sql-statement>
+SELECT to_timestamp('2016-13-01 15:50:55', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2016-13-01 15:50:55', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2016-13-01 15:50:55"
+
+ SELECT to_timestamp('2016-13-01 15:50:55', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+<sql-statement>
+SELECT to_timestamp('2016-02-30 15:50:55', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2016-02-30 15:50:55', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2016-02-30 15:50:55"
+
+ SELECT to_timestamp('2016-02-30 15:50:55', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+<sql-statement>
+SELECT to_timestamp('2016-02-29 15:50:55', 'YYYY-MM-DD HH24:MI:SS'); -- ok
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2015-02-29 15:50:55', 'YYYY-MM-DD HH24:MI:SS');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2015-02-29 15:50:55', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2015-02-29 15:50:55"
+
+ SELECT to_timestamp('2015-02-29 15:50:55', 'YYYY-MM-DD HH24:MI:SS');
+ ^
+<sql-statement>
+SELECT to_timestamp('2015-02-11 86000', 'YYYY-MM-DD SSSS'); -- ok
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2015-02-11 86400', 'YYYY-MM-DD SSSS');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2015-02-11 86400', 'YYYY-MM-DD SSSS');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2015-02-11 86400"
+
+ SELECT to_timestamp('2015-02-11 86400', 'YYYY-MM-DD SSSS');
+ ^
+<sql-statement>
+SELECT to_timestamp('2015-02-11 86000', 'YYYY-MM-DD SSSSS'); -- ok
+</sql-statement>
+<sql-statement>
+SELECT to_timestamp('2015-02-11 86400', 'YYYY-MM-DD SSSSS');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_timestamp('2015-02-11 86400', 'YYYY-MM-DD SSSSS');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2015-02-11 86400"
+
+ SELECT to_timestamp('2015-02-11 86400', 'YYYY-MM-DD SSSSS');
+ ^
+<sql-statement>
+SELECT to_date('2016-13-10', 'YYYY-MM-DD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_date('2016-13-10', 'YYYY-MM-DD');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2016-13-10"
+
+ SELECT to_date('2016-13-10', 'YYYY-MM-DD');
+ ^
+<sql-statement>
+SELECT to_date('2016-02-30', 'YYYY-MM-DD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_date('2016-02-30', 'YYYY-MM-DD');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2016-02-30"
+
+ SELECT to_date('2016-02-30', 'YYYY-MM-DD');
+ ^
+<sql-statement>
+SELECT to_date('2016-02-29', 'YYYY-MM-DD'); -- ok
+</sql-statement>
+<sql-statement>
+SELECT to_date('2015-02-29', 'YYYY-MM-DD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_date('2015-02-29', 'YYYY-MM-DD');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2015-02-29"
+
+ SELECT to_date('2015-02-29', 'YYYY-MM-DD');
+ ^
+<sql-statement>
+SELECT to_date('2015 365', 'YYYY DDD'); -- ok
+</sql-statement>
+<sql-statement>
+SELECT to_date('2015 366', 'YYYY DDD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_date('2015 366', 'YYYY DDD');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2015 366"
+
+ SELECT to_date('2015 366', 'YYYY DDD');
+ ^
+<sql-statement>
+SELECT to_date('2016 365', 'YYYY DDD'); -- ok
+</sql-statement>
+<sql-statement>
+SELECT to_date('2016 366', 'YYYY DDD'); -- ok
+</sql-statement>
+<sql-statement>
+SELECT to_date('2016 367', 'YYYY DDD');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT to_date('2016 367', 'YYYY DDD');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "2016 367"
+
+ SELECT to_date('2016 367', 'YYYY DDD');
+ ^
+<sql-statement>
+SELECT to_date('0000-02-01','YYYY-MM-DD'); -- allowed, though it shouldn't be
+</sql-statement>
+<sql-statement>
+--
+-- Check behavior with SQL-style fixed-GMT-offset time zone (cf bug #8572)
+--
+SET TIME ZONE 'America/New_York';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: timezone
+ --
+ ^
+<sql-statement>
+SET TIME ZONE '-1.5';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: timezone
+ SET TIME ZONE '-1.5';
+ ^
+<sql-statement>
+SHOW TIME ZONE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unrecognized configuration parameter "timezone"
+ SHOW TIME ZONE;
+ ^
+<sql-statement>
+SELECT '2012-12-12 12:00'::timestamptz;
+</sql-statement>
+<sql-statement>
+SELECT '2012-12-12 12:00 America/New_York'::timestamptz;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '2012-12-12 12:00 America/New_York'::timestamptz;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized
+
+ SELECT '2012-12-12 12:00 America/New_York'::timestamptz;
+ ^
+<sql-statement>
+SELECT to_char('2012-12-12 12:00'::timestamptz, 'YYYY-MM-DD HH:MI:SS TZ');
+</sql-statement>
+<sql-statement>
+SELECT to_char('2012-12-12 12:00'::timestamptz, 'YYYY-MM-DD SSSS');
+</sql-statement>
+<sql-statement>
+SELECT to_char('2012-12-12 12:00'::timestamptz, 'YYYY-MM-DD SSSSS');
+</sql-statement>
+<sql-statement>
+RESET TIME ZONE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET TIME ZONE;
+ ^
diff --git a/ydb/library/yql/tests/postgresql/cases/insert.err b/ydb/library/yql/tests/postgresql/cases/insert.err
new file mode 100644
index 0000000000..58f169fcdc
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/insert.err
@@ -0,0 +1,131 @@
+<sql-statement>
+--
+-- insert with DEFAULT in the target_list
+--
+create table inserttest (col1 int4, col2 int4 NOT NULL, col3 text default 'testing');
+</sql-statement>
+<sql-statement>
+insert into inserttest (col1, col2, col3) values (DEFAULT, DEFAULT, DEFAULT);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148
+ insert into inserttest (col1, col2, col3) values (DEFAULT, DEFAULT, DEFAULT);
+ ^
+<sql-statement>
+insert into inserttest (col2, col3) values (3, DEFAULT);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148
+ insert into inserttest (col2, col3) values (3, DEFAULT);
+ ^
+<sql-statement>
+insert into inserttest (col1, col2, col3) values (DEFAULT, 5, DEFAULT);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148
+ insert into inserttest (col1, col2, col3) values (DEFAULT, 5, DEFAULT);
+ ^
+<sql-statement>
+insert into inserttest values (DEFAULT, 5, 'test');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148
+ insert into inserttest values (DEFAULT, 5, 'test');
+ ^
+<sql-statement>
+insert into inserttest values (DEFAULT, 7);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148
+ insert into inserttest values (DEFAULT, 7);
+ ^
+<sql-statement>
+select * from inserttest;
+</sql-statement>
+<sql-statement>
+--
+-- insert with similar expression / target_list values (all fail)
+--
+insert into inserttest (col1, col2, col3) values (DEFAULT, DEFAULT);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148
+ --
+ ^
+<sql-statement>
+insert into inserttest (col1, col2, col3) values (1, 2);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ insert into inserttest (col1, col2, col3) values (1, 2);
+ ^
+ -stdin-:<main>:1:1: Error: values and target_columns sizes do not match
+ insert into inserttest (col1, col2, col3) values (1, 2);
+ ^
+<sql-statement>
+insert into inserttest (col1) values (1, 2);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ insert into inserttest (col1) values (1, 2);
+ ^
+ -stdin-:<main>:1:1: Error: values and target_columns sizes do not match
+ insert into inserttest (col1) values (1, 2);
+ ^
+<sql-statement>
+insert into inserttest (col1) values (DEFAULT, DEFAULT);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148
+ insert into inserttest (col1) values (DEFAULT, DEFAULT);
+ ^
+<sql-statement>
+select * from inserttest;
+</sql-statement>
+<sql-statement>
+--
+-- VALUES test
+--
+insert into inserttest values(10, 20, '40'), (-1, 2, DEFAULT),
+ ((select 2), (select i from (values(3)) as foo (i)), 'values are fun!');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148
+ --
+ ^
+<sql-statement>
+select * from inserttest;
+</sql-statement>
+<sql-statement>
+--
+-- TOASTed value test
+--
+insert into inserttest values(30, 50, repeat('x', 10000));
+</sql-statement>
+<sql-statement>
+select col1, col2, char_length(col3) from inserttest;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F6115629D90)
+__libc_start_main+128 (0x7F6115629E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/insert.out b/ydb/library/yql/tests/postgresql/cases/insert.out
index 5159fb1def..406f83de96 100644
--- a/ydb/library/yql/tests/postgresql/cases/insert.out
+++ b/ydb/library/yql/tests/postgresql/cases/insert.out
@@ -1,12 +1,8 @@
-create table inserttest (f1 int, f2 int[],
- f3 insert_test_type, f4 insert_test_type[]);
--- also check reverse-listing
-create table inserttest2 (f1 bigint, f2 text);
-drop table inserttest2;
-drop table inserttest;
-create table mlparted2 (b int not null, a int not null);
-create table mlparted5a (a int not null, c text, b int not null);
-create table mlparted5_b (d int, b int, c text, a int);
-create table donothingbrtrig_test1 (b text, a int);
-create table donothingbrtrig_test2 (c text, b text, a int);
-create table returningwrtest2 (b text, c int, a int);
+--
+-- insert with DEFAULT in the target_list
+--
+create table inserttest (col1 int4, col2 int4 NOT NULL, col3 text default 'testing');
+--
+-- TOASTed value test
+--
+insert into inserttest values(30, 50, repeat('x', 10000));
diff --git a/ydb/library/yql/tests/postgresql/cases/insert.sql b/ydb/library/yql/tests/postgresql/cases/insert.sql
index 5159fb1def..406f83de96 100644
--- a/ydb/library/yql/tests/postgresql/cases/insert.sql
+++ b/ydb/library/yql/tests/postgresql/cases/insert.sql
@@ -1,12 +1,8 @@
-create table inserttest (f1 int, f2 int[],
- f3 insert_test_type, f4 insert_test_type[]);
--- also check reverse-listing
-create table inserttest2 (f1 bigint, f2 text);
-drop table inserttest2;
-drop table inserttest;
-create table mlparted2 (b int not null, a int not null);
-create table mlparted5a (a int not null, c text, b int not null);
-create table mlparted5_b (d int, b int, c text, a int);
-create table donothingbrtrig_test1 (b text, a int);
-create table donothingbrtrig_test2 (c text, b text, a int);
-create table returningwrtest2 (b text, c int, a int);
+--
+-- insert with DEFAULT in the target_list
+--
+create table inserttest (col1 int4, col2 int4 NOT NULL, col3 text default 'testing');
+--
+-- TOASTed value test
+--
+insert into inserttest values(30, 50, repeat('x', 10000));
diff --git a/ydb/library/yql/tests/postgresql/cases/int2.err b/ydb/library/yql/tests/postgresql/cases/int2.err
new file mode 100644
index 0000000000..b5372d1b62
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/int2.err
@@ -0,0 +1,304 @@
+<sql-statement>
+--
+-- INT2
+--
+CREATE TABLE INT2_TBL(f1 int2);
+</sql-statement>
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES ('0 ');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES (' 1234 ');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES (' -1234');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES ('34.5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT2_TBL(f1) VALUES ('34.5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "34.5"
+
+ INSERT INTO INT2_TBL(f1) VALUES ('34.5');
+ ^
+<sql-statement>
+-- largest and smallest values
+INSERT INTO INT2_TBL(f1) VALUES ('32767');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES ('-32767');
+</sql-statement>
+<sql-statement>
+-- bad input values -- should give errors
+INSERT INTO INT2_TBL(f1) VALUES ('100000');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- bad input values -- should give errors
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value "100000" is out of range for type smallint
+
+ -- bad input values -- should give errors
+ ^
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES ('asdf');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT2_TBL(f1) VALUES ('asdf');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "asdf"
+
+ INSERT INTO INT2_TBL(f1) VALUES ('asdf');
+ ^
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES (' ');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT2_TBL(f1) VALUES (' ');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: " "
+
+ INSERT INTO INT2_TBL(f1) VALUES (' ');
+ ^
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "- 1234"
+
+ INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
+ ^
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES ('4 444');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT2_TBL(f1) VALUES ('4 444');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "4 444"
+
+ INSERT INTO INT2_TBL(f1) VALUES ('4 444');
+ ^
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "123 dt"
+
+ INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
+ ^
+<sql-statement>
+INSERT INTO INT2_TBL(f1) VALUES ('');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT2_TBL(f1) VALUES ('');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: ""
+
+ INSERT INTO INT2_TBL(f1) VALUES ('');
+ ^
+<sql-statement>
+SELECT * FROM INT2_TBL;
+</sql-statement>
+<sql-statement>
+SELECT * FROM INT2_TBL AS f(a, b);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT * FROM INT2_TBL AS f(a, b);
+ ^
+ -stdin-:<main>:1:1: Error: Wrong number of columns, expected: 1, got: 2
+ SELECT * FROM INT2_TBL AS f(a, b);
+ ^
+<sql-statement>
+SELECT * FROM (TABLE int2_tbl) AS s (a, b);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.int2_tbl
+
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 = int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 = int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 < int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 < int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 > int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 > int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0';
+</sql-statement>
+<sql-statement>
+-- positive odds
+SELECT i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1';
+</sql-statement>
+<sql-statement>
+-- any evens
+SELECT i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: smallint out of range
+
+ SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i;
+ ^
+<sql-statement>
+SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
+WHERE abs(f1) < 16384;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: smallint out of range
+
+ SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i;
+ ^
+<sql-statement>
+SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
+WHERE f1 < 32766;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: smallint out of range
+
+ SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i;
+ ^
+<sql-statement>
+SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
+WHERE f1 > -32767;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i;
+</sql-statement>
+<sql-statement>
+-- corner cases
+SELECT (-1::int2<<15)::text;
+</sql-statement>
+<sql-statement>
+SELECT ((-1::int2<<15)+1::int2)::text;
+</sql-statement>
+<sql-statement>
+-- check sane handling of INT16_MIN overflow cases
+SELECT (-32768)::int2 * (-1)::int2;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- check sane handling of INT16_MIN overflow cases
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: smallint out of range
+
+ -- check sane handling of INT16_MIN overflow cases
+ ^
+<sql-statement>
+SELECT (-32768)::int2 / (-1)::int2;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT (-32768)::int2 / (-1)::int2;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: smallint out of range
+
+ SELECT (-32768)::int2 / (-1)::int2;
+ ^
+<sql-statement>
+SELECT (-32768)::int2 % (-1)::int2;
+</sql-statement>
+<sql-statement>
+-- check rounding when casting from float
+SELECT x, x::int2 AS int2_value
+FROM (VALUES (-2.5::float8),
+ (-1.5::float8),
+ (-0.5::float8),
+ (0.0::float8),
+ (0.5::float8),
+ (1.5::float8),
+ (2.5::float8)) t(x);
+</sql-statement>
+<sql-statement>
+-- check rounding when casting from numeric
+SELECT x, x::int2 AS int2_value
+FROM (VALUES (-2.5::numeric),
+ (-1.5::numeric),
+ (-0.5::numeric),
+ (0.0::numeric),
+ (0.5::numeric),
+ (1.5::numeric),
+ (2.5::numeric)) t(x);
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/int4.err b/ydb/library/yql/tests/postgresql/cases/int4.err
new file mode 100644
index 0000000000..1a6e809b3a
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/int4.err
@@ -0,0 +1,458 @@
+<sql-statement>
+--
+-- INT4
+--
+CREATE TABLE INT4_TBL(f1 int4);
+</sql-statement>
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES (' 0 ');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES ('123456 ');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES (' -123456');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES ('34.5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT4_TBL(f1) VALUES ('34.5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "34.5"
+
+ INSERT INTO INT4_TBL(f1) VALUES ('34.5');
+ ^
+<sql-statement>
+-- largest and smallest values
+INSERT INTO INT4_TBL(f1) VALUES ('2147483647');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES ('-2147483647');
+</sql-statement>
+<sql-statement>
+-- bad input values -- should give errors
+INSERT INTO INT4_TBL(f1) VALUES ('1000000000000');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- bad input values -- should give errors
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value "1000000000000" is out of range for type integer
+
+ -- bad input values -- should give errors
+ ^
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES ('asdf');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT4_TBL(f1) VALUES ('asdf');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "asdf"
+
+ INSERT INTO INT4_TBL(f1) VALUES ('asdf');
+ ^
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES (' ');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT4_TBL(f1) VALUES (' ');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: " "
+
+ INSERT INTO INT4_TBL(f1) VALUES (' ');
+ ^
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES (' asdf ');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT4_TBL(f1) VALUES (' asdf ');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: " asdf "
+
+ INSERT INTO INT4_TBL(f1) VALUES (' asdf ');
+ ^
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES ('- 1234');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT4_TBL(f1) VALUES ('- 1234');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "- 1234"
+
+ INSERT INTO INT4_TBL(f1) VALUES ('- 1234');
+ ^
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES ('123 5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT4_TBL(f1) VALUES ('123 5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "123 5"
+
+ INSERT INTO INT4_TBL(f1) VALUES ('123 5');
+ ^
+<sql-statement>
+INSERT INTO INT4_TBL(f1) VALUES ('');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT4_TBL(f1) VALUES ('');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: ""
+
+ INSERT INTO INT4_TBL(f1) VALUES ('');
+ ^
+<sql-statement>
+SELECT * FROM INT4_TBL;
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 = int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 = int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 < int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 < int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 > int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 > int4 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0';
+</sql-statement>
+<sql-statement>
+-- positive odds
+SELECT i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1';
+</sql-statement>
+<sql-statement>
+-- any evens
+SELECT i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;
+ ^
+<sql-statement>
+SELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i
+WHERE abs(f1) < 1073741824;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;
+ ^
+<sql-statement>
+SELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i
+WHERE abs(f1) < 1073741824;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;
+ ^
+<sql-statement>
+SELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i
+WHERE f1 < 2147483646;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;
+ ^
+<sql-statement>
+SELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i
+WHERE f1 < 2147483646;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;
+ ^
+<sql-statement>
+SELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i
+WHERE f1 > -2147483647;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMap!
+ SELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;
+ ^
+<sql-statement>
+SELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i
+WHERE f1 > -2147483647;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i;
+</sql-statement>
+<sql-statement>
+SELECT i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i;
+</sql-statement>
+<sql-statement>
+--
+-- more complex expressions
+--
+-- variations on unary minus parsing
+SELECT -2+3 AS one;
+</sql-statement>
+<sql-statement>
+SELECT 4-2 AS two;
+</sql-statement>
+<sql-statement>
+SELECT 2- -1 AS three;
+</sql-statement>
+<sql-statement>
+SELECT 2 - -2 AS four;
+</sql-statement>
+<sql-statement>
+SELECT int2 '2' * int2 '2' = int2 '16' / int2 '4' AS true;
+</sql-statement>
+<sql-statement>
+SELECT int4 '2' * int2 '2' = int2 '16' / int4 '4' AS true;
+</sql-statement>
+<sql-statement>
+SELECT int2 '2' * int4 '2' = int4 '16' / int2 '4' AS true;
+</sql-statement>
+<sql-statement>
+SELECT int4 '1000' < int4 '999' AS false;
+</sql-statement>
+<sql-statement>
+SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS ten;
+</sql-statement>
+<sql-statement>
+SELECT 2 + 2 / 2 AS three;
+</sql-statement>
+<sql-statement>
+SELECT (2 + 2) / 2 AS two;
+</sql-statement>
+<sql-statement>
+-- corner case
+SELECT (-1::int4<<31)::text;
+</sql-statement>
+<sql-statement>
+SELECT ((-1::int4<<31)+1)::text;
+</sql-statement>
+<sql-statement>
+-- check sane handling of INT_MIN overflow cases
+SELECT (-2147483648)::int4 * (-1)::int4;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- check sane handling of INT_MIN overflow cases
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ -- check sane handling of INT_MIN overflow cases
+ ^
+<sql-statement>
+SELECT (-2147483648)::int4 / (-1)::int4;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT (-2147483648)::int4 / (-1)::int4;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT (-2147483648)::int4 / (-1)::int4;
+ ^
+<sql-statement>
+SELECT (-2147483648)::int4 % (-1)::int4;
+</sql-statement>
+<sql-statement>
+SELECT (-2147483648)::int4 * (-1)::int2;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT (-2147483648)::int4 * (-1)::int2;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT (-2147483648)::int4 * (-1)::int2;
+ ^
+<sql-statement>
+SELECT (-2147483648)::int4 / (-1)::int2;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT (-2147483648)::int4 / (-1)::int2;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT (-2147483648)::int4 / (-1)::int2;
+ ^
+<sql-statement>
+SELECT (-2147483648)::int4 % (-1)::int2;
+</sql-statement>
+<sql-statement>
+-- check rounding when casting from float
+SELECT x, x::int4 AS int4_value
+FROM (VALUES (-2.5::float8),
+ (-1.5::float8),
+ (-0.5::float8),
+ (0.0::float8),
+ (0.5::float8),
+ (1.5::float8),
+ (2.5::float8)) t(x);
+</sql-statement>
+<sql-statement>
+-- check rounding when casting from numeric
+SELECT x, x::int4 AS int4_value
+FROM (VALUES (-2.5::numeric),
+ (-1.5::numeric),
+ (-0.5::numeric),
+ (0.0::numeric),
+ (0.5::numeric),
+ (1.5::numeric),
+ (2.5::numeric)) t(x);
+</sql-statement>
+<sql-statement>
+-- test gcd()
+SELECT a, b, gcd(a, b), gcd(a, -b), gcd(b, a), gcd(-b, a)
+FROM (VALUES (0::int4, 0::int4),
+ (0::int4, 6410818::int4),
+ (61866666::int4, 6410818::int4),
+ (-61866666::int4, 6410818::int4),
+ ((-2147483648)::int4, 1::int4),
+ ((-2147483648)::int4, 2147483647::int4),
+ ((-2147483648)::int4, 1073741824::int4)) AS v(a, b);
+</sql-statement>
+<sql-statement>
+SELECT gcd((-2147483648)::int4, 0::int4); -- overflow
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT gcd((-2147483648)::int4, 0::int4); -- overflow
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT gcd((-2147483648)::int4, 0::int4); -- overflow
+ ^
+<sql-statement>
+SELECT gcd((-2147483648)::int4, (-2147483648)::int4); -- overflow
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT gcd((-2147483648)::int4, (-2147483648)::int4); -- overflow
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT gcd((-2147483648)::int4, (-2147483648)::int4); -- overflow
+ ^
+<sql-statement>
+-- test lcm()
+SELECT a, b, lcm(a, b), lcm(a, -b), lcm(b, a), lcm(-b, a)
+FROM (VALUES (0::int4, 0::int4),
+ (0::int4, 42::int4),
+ (42::int4, 42::int4),
+ (330::int4, 462::int4),
+ (-330::int4, 462::int4),
+ ((-2147483648)::int4, 0::int4)) AS v(a, b);
+</sql-statement>
+<sql-statement>
+SELECT lcm((-2147483648)::int4, 1::int4); -- overflow
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT lcm((-2147483648)::int4, 1::int4); -- overflow
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT lcm((-2147483648)::int4, 1::int4); -- overflow
+ ^
+<sql-statement>
+SELECT lcm(2147483647::int4, 2147483646::int4); -- overflow
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT lcm(2147483647::int4, 2147483646::int4); -- overflow
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: integer out of range
+
+ SELECT lcm(2147483647::int4, 2147483646::int4); -- overflow
+ ^
diff --git a/ydb/library/yql/tests/postgresql/cases/int8.err b/ydb/library/yql/tests/postgresql/cases/int8.err
new file mode 100644
index 0000000000..4d5c813a65
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/int8.err
@@ -0,0 +1,124 @@
+<sql-statement>
+--
+-- INT8
+-- Test int8 64-bit integers.
+--
+CREATE TABLE INT8_TBL(q1 int8, q2 int8);
+</sql-statement>
+<sql-statement>
+INSERT INTO INT8_TBL VALUES(' 123 ',' 456');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT8_TBL VALUES('123 ','4567890123456789');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT8_TBL VALUES('4567890123456789','123');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');
+</sql-statement>
+<sql-statement>
+INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');
+</sql-statement>
+<sql-statement>
+-- bad inputs
+INSERT INTO INT8_TBL(q1) VALUES (' ');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- bad inputs
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type bigint: " "
+
+ -- bad inputs
+ ^
+<sql-statement>
+INSERT INTO INT8_TBL(q1) VALUES ('xxx');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT8_TBL(q1) VALUES ('xxx');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type bigint: "xxx"
+
+ INSERT INTO INT8_TBL(q1) VALUES ('xxx');
+ ^
+<sql-statement>
+INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value "3908203590239580293850293850329485" is out of range for type bigint
+
+ INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
+ ^
+<sql-statement>
+INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value "-1204982019841029840928340329840934" is out of range for type bigint
+
+ INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
+ ^
+<sql-statement>
+INSERT INTO INT8_TBL(q1) VALUES ('- 123');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT8_TBL(q1) VALUES ('- 123');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type bigint: "- 123"
+
+ INSERT INTO INT8_TBL(q1) VALUES ('- 123');
+ ^
+<sql-statement>
+INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type bigint: " 345 5"
+
+ INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
+ ^
+<sql-statement>
+INSERT INTO INT8_TBL(q1) VALUES ('');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INT8_TBL(q1) VALUES ('');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type bigint: ""
+
+ INSERT INTO INT8_TBL(q1) VALUES ('');
+ ^
+<sql-statement>
+SELECT * FROM INT8_TBL;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F273A829D90)
+__libc_start_main+128 (0x7F273A829E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/interval.err b/ydb/library/yql/tests/postgresql/cases/interval.err
new file mode 100644
index 0000000000..2bf4682183
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/interval.err
@@ -0,0 +1,1018 @@
+<sql-statement>
+--
+-- INTERVAL
+--
+SET DATESTYLE = 'ISO';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DATESTYLE
+ --
+ ^
+<sql-statement>
+SET IntervalStyle to postgres;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ SET IntervalStyle to postgres;
+ ^
+<sql-statement>
+-- check acceptance of "time zone style"
+SELECT INTERVAL '01:00' AS "One hour";
+</sql-statement>
+<sql-statement>
+SELECT INTERVAL '+02:00' AS "Two hours";
+</sql-statement>
+<sql-statement>
+SELECT INTERVAL '-08:00' AS "Eight hours";
+</sql-statement>
+<sql-statement>
+SELECT INTERVAL '-1 +02:03' AS "22 hours ago...";
+</sql-statement>
+<sql-statement>
+SELECT INTERVAL '-1 days +02:03' AS "22 hours ago...";
+</sql-statement>
+<sql-statement>
+SELECT INTERVAL '1.5 weeks' AS "Ten days twelve hours";
+</sql-statement>
+<sql-statement>
+SELECT INTERVAL '1.5 months' AS "One month 15 days";
+</sql-statement>
+<sql-statement>
+SELECT INTERVAL '10 years -11 month -12 days +13:14' AS "9 years...";
+</sql-statement>
+<sql-statement>
+CREATE TABLE INTERVAL_TBL (f1 interval);
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 1 minute');
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 5 hour');
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 10 day');
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 34 year');
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 3 months');
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 14 seconds ago');
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('1 day 2 hours 3 minutes 4 seconds');
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('6 years');
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('5 months');
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('5 months 12 hours');
+</sql-statement>
+<sql-statement>
+-- badly formatted interval
+INSERT INTO INTERVAL_TBL (f1) VALUES ('badly formatted interval');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- badly formatted interval
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "badly formatted interval"
+
+ -- badly formatted interval
+ ^
+<sql-statement>
+INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 30 eons ago');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 30 eons ago');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "@ 30 eons ago"
+
+ INSERT INTO INTERVAL_TBL (f1) VALUES ('@ 30 eons ago');
+ ^
+<sql-statement>
+-- test interval operators
+SELECT * FROM INTERVAL_TBL;
+</sql-statement>
+<sql-statement>
+SELECT * FROM INTERVAL_TBL
+ WHERE INTERVAL_TBL.f1 <> interval '@ 10 days';
+</sql-statement>
+<sql-statement>
+SELECT * FROM INTERVAL_TBL
+ WHERE INTERVAL_TBL.f1 <= interval '@ 5 hours';
+</sql-statement>
+<sql-statement>
+SELECT * FROM INTERVAL_TBL
+ WHERE INTERVAL_TBL.f1 < interval '@ 1 day';
+</sql-statement>
+<sql-statement>
+SELECT * FROM INTERVAL_TBL
+ WHERE INTERVAL_TBL.f1 = interval '@ 34 years';
+</sql-statement>
+<sql-statement>
+SELECT * FROM INTERVAL_TBL
+ WHERE INTERVAL_TBL.f1 >= interval '@ 1 month';
+</sql-statement>
+<sql-statement>
+SELECT * FROM INTERVAL_TBL
+ WHERE INTERVAL_TBL.f1 > interval '@ 3 seconds ago';
+</sql-statement>
+<sql-statement>
+SELECT r1.*, r2.*
+ FROM INTERVAL_TBL r1, INTERVAL_TBL r2
+ WHERE r1.f1 > r2.f1
+ ORDER BY r1.f1, r2.f1;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT r1.*, r2.*
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: f1
+ SELECT r1.*, r2.*
+ ^
+<sql-statement>
+-- Test intervals that are large enough to overflow 64 bits in comparisons
+CREATE TEMP TABLE INTERVAL_TBL_OF (f1 interval);
+</sql-statement>
+<sql-statement>
+INSERT INTO INTERVAL_TBL_OF (f1) VALUES
+ ('2147483647 days 2147483647 months'),
+ ('2147483647 days -2147483648 months'),
+ ('1 year'),
+ ('-2147483648 days 2147483647 months'),
+ ('-2147483648 days -2147483648 months');
+</sql-statement>
+<sql-statement>
+-- these should fail as out-of-range
+INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('2147483648 days');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- these should fail as out-of-range
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: interval field value out of range: "2147483648 days"
+
+ -- these should fail as out-of-range
+ ^
+<sql-statement>
+INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('-2147483649 days');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('-2147483649 days');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: interval field value out of range: "-2147483649 days"
+
+ INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('-2147483649 days');
+ ^
+<sql-statement>
+INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('2147483647 years');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('2147483647 years');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: interval out of range
+
+ INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('2147483647 years');
+ ^
+<sql-statement>
+INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('-2147483648 years');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('-2147483648 years');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: interval out of range
+
+ INSERT INTO INTERVAL_TBL_OF (f1) VALUES ('-2147483648 years');
+ ^
+<sql-statement>
+-- Test edge-case overflow detection in interval multiplication
+select extract(epoch from '256 microseconds'::interval * (2^55)::float8);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- Test edge-case overflow detection in interval multiplication
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: interval out of range
+
+ -- Test edge-case overflow detection in interval multiplication
+ ^
+<sql-statement>
+SELECT r1.*, r2.*
+ FROM INTERVAL_TBL_OF r1, INTERVAL_TBL_OF r2
+ WHERE r1.f1 > r2.f1
+ ORDER BY r1.f1, r2.f1;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT r1.*, r2.*
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: f1
+ SELECT r1.*, r2.*
+ ^
+<sql-statement>
+CREATE INDEX ON INTERVAL_TBL_OF USING btree (f1);
+</sql-statement>
+<sql-statement>
+SET enable_seqscan TO false;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_seqscan
+ SET enable_seqscan TO false;
+ ^
+<sql-statement>
+EXPLAIN (COSTS OFF)
+SELECT f1 FROM INTERVAL_TBL_OF r1 ORDER BY f1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (COSTS OFF)
+ ^
+<sql-statement>
+SELECT f1 FROM INTERVAL_TBL_OF r1 ORDER BY f1;
+</sql-statement>
+<sql-statement>
+RESET enable_seqscan;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET enable_seqscan;
+ ^
+<sql-statement>
+DROP TABLE INTERVAL_TBL_OF;
+</sql-statement>
+<sql-statement>
+-- Test multiplication and division with intervals.
+-- Floating point arithmetic rounding errors can lead to unexpected results,
+-- though the code attempts to do the right thing and round up to days and
+-- minutes to avoid results such as '3 days 24:00 hours' or '14:20:60'.
+-- Note that it is expected for some day components to be greater than 29 and
+-- some time components be greater than 23:59:59 due to how intervals are
+-- stored internally.
+CREATE TABLE INTERVAL_MULDIV_TBL (span interval);
+</sql-statement>
+<sql-statement>
+COPY INTERVAL_MULDIV_TBL FROM STDIN;
+41 mon 12 days 360:00
+-41 mon -12 days +360:00
+-12 days
+9 mon -27 days 12:34:56
+-3 years 482 days 76:54:32.189
+4 mon
+14 mon
+999 mon 999 days
+\.
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:1: Error: ERROR: syntax error at or near "41"
+
+ 41 mon 12 days 360:00
+ ^
+<sql-statement>
+SELECT span * 0.3 AS product
+FROM INTERVAL_MULDIV_TBL;
+</sql-statement>
+<sql-statement>
+SELECT span * 8.2 AS product
+FROM INTERVAL_MULDIV_TBL;
+</sql-statement>
+<sql-statement>
+SELECT span / 10 AS quotient
+FROM INTERVAL_MULDIV_TBL;
+</sql-statement>
+<sql-statement>
+SELECT span / 100 AS quotient
+FROM INTERVAL_MULDIV_TBL;
+</sql-statement>
+<sql-statement>
+DROP TABLE INTERVAL_MULDIV_TBL;
+</sql-statement>
+<sql-statement>
+SET DATESTYLE = 'postgres';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DATESTYLE
+ SET DATESTYLE = 'postgres';
+ ^
+<sql-statement>
+SET IntervalStyle to postgres_verbose;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ SET IntervalStyle to postgres_verbose;
+ ^
+<sql-statement>
+SELECT * FROM INTERVAL_TBL;
+</sql-statement>
+<sql-statement>
+-- test avg(interval), which is somewhat fragile since people have been
+-- known to change the allowed input syntax for type interval without
+-- updating pg_aggregate.agginitval
+select avg(f1) from interval_tbl;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.interval_tbl
+
+<sql-statement>
+-- test long interval input
+select '4 millenniums 5 centuries 4 decades 1 year 4 months 4 days 17 minutes 31 seconds'::interval;
+</sql-statement>
+<sql-statement>
+-- test long interval output
+-- Note: the actual maximum length of the interval output is longer,
+-- but we need the test to work for both integer and floating-point
+-- timestamps.
+select '100000000y 10mon -1000000000d -100000h -10min -10.000001s ago'::interval;
+</sql-statement>
+<sql-statement>
+-- test justify_hours() and justify_days()
+SELECT justify_hours(interval '6 months 3 days 52 hours 3 minutes 2 seconds') as "6 mons 5 days 4 hours 3 mins 2 seconds";
+</sql-statement>
+<sql-statement>
+SELECT justify_days(interval '6 months 36 days 5 hours 4 minutes 3 seconds') as "7 mons 6 days 5 hours 4 mins 3 seconds";
+</sql-statement>
+<sql-statement>
+-- test justify_interval()
+SELECT justify_interval(interval '1 month -1 hour') as "1 month -1 hour";
+</sql-statement>
+<sql-statement>
+-- test fractional second input, and detection of duplicate units
+SET DATESTYLE = 'ISO';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: DATESTYLE
+ -- test fractional second input, and detection of duplicate units
+ ^
+<sql-statement>
+SET IntervalStyle TO postgres;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ SET IntervalStyle TO postgres;
+ ^
+<sql-statement>
+SELECT '1 millisecond'::interval, '1 microsecond'::interval,
+ '500 seconds 99 milliseconds 51 microseconds'::interval;
+</sql-statement>
+<sql-statement>
+SELECT '3 days 5 milliseconds'::interval;
+</sql-statement>
+<sql-statement>
+SELECT '1 second 2 seconds'::interval; -- error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '1 second 2 seconds'::interval; -- error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 second 2 seconds"
+
+ SELECT '1 second 2 seconds'::interval; -- error
+ ^
+<sql-statement>
+SELECT '10 milliseconds 20 milliseconds'::interval; -- error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '10 milliseconds 20 milliseconds'::interval; -- error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "10 milliseconds 20 milliseconds"
+
+ SELECT '10 milliseconds 20 milliseconds'::interval; -- error
+ ^
+<sql-statement>
+SELECT '5.5 seconds 3 milliseconds'::interval; -- error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '5.5 seconds 3 milliseconds'::interval; -- error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "5.5 seconds 3 milliseconds"
+
+ SELECT '5.5 seconds 3 milliseconds'::interval; -- error
+ ^
+<sql-statement>
+SELECT '1:20:05 5 microseconds'::interval; -- error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '1:20:05 5 microseconds'::interval; -- error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1:20:05 5 microseconds"
+
+ SELECT '1:20:05 5 microseconds'::interval; -- error
+ ^
+<sql-statement>
+SELECT '1 day 1 day'::interval; -- error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '1 day 1 day'::interval; -- error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 day 1 day"
+
+ SELECT '1 day 1 day'::interval; -- error
+ ^
+<sql-statement>
+SELECT interval '1-2'; -- SQL year-month literal
+</sql-statement>
+<sql-statement>
+SELECT interval '999' second; -- oversize leading field is ok
+</sql-statement>
+<sql-statement>
+SELECT interval '999' minute;
+</sql-statement>
+<sql-statement>
+SELECT interval '999' hour;
+</sql-statement>
+<sql-statement>
+SELECT interval '999' day;
+</sql-statement>
+<sql-statement>
+SELECT interval '999' month;
+</sql-statement>
+<sql-statement>
+-- test SQL-spec syntaxes for restricted field sets
+SELECT interval '1' year;
+</sql-statement>
+<sql-statement>
+SELECT interval '2' month;
+</sql-statement>
+<sql-statement>
+SELECT interval '3' day;
+</sql-statement>
+<sql-statement>
+SELECT interval '4' hour;
+</sql-statement>
+<sql-statement>
+SELECT interval '5' minute;
+</sql-statement>
+<sql-statement>
+SELECT interval '6' second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1' year to month;
+</sql-statement>
+<sql-statement>
+SELECT interval '1-2' year to month;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2' day to hour;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03' day to hour;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03:04' day to hour;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2' day to minute;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '1 2' day to minute;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 2"
+
+ SELECT interval '1 2' day to minute;
+ ^
+<sql-statement>
+SELECT interval '1 2:03' day to minute;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03:04' day to minute;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2' day to second;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '1 2' day to second;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 2"
+
+ SELECT interval '1 2' day to second;
+ ^
+<sql-statement>
+SELECT interval '1 2:03' day to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03:04' day to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2' hour to minute;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '1 2' hour to minute;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 2"
+
+ SELECT interval '1 2' hour to minute;
+ ^
+<sql-statement>
+SELECT interval '1 2:03' hour to minute;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03:04' hour to minute;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2' hour to second;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '1 2' hour to second;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 2"
+
+ SELECT interval '1 2' hour to second;
+ ^
+<sql-statement>
+SELECT interval '1 2:03' hour to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03:04' hour to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2' minute to second;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '1 2' minute to second;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 2"
+
+ SELECT interval '1 2' minute to second;
+ ^
+<sql-statement>
+SELECT interval '1 2:03' minute to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03:04' minute to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 +2:03' minute to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 +2:03:04' minute to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 -2:03' minute to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1 -2:03:04' minute to second;
+</sql-statement>
+<sql-statement>
+SELECT interval '123 11' day to hour; -- ok
+</sql-statement>
+<sql-statement>
+SELECT interval '123 11' day; -- not ok
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '123 11' day; -- not ok
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "123 11"
+
+ SELECT interval '123 11' day; -- not ok
+ ^
+<sql-statement>
+SELECT interval '123 11'; -- not ok, too ambiguous
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '123 11'; -- not ok, too ambiguous
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "123 11"
+
+ SELECT interval '123 11'; -- not ok, too ambiguous
+ ^
+<sql-statement>
+SELECT interval '123 2:03 -2:04'; -- not ok, redundant hh:mm fields
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '123 2:03 -2:04'; -- not ok, redundant hh:mm fields
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "123 2:03 -2:04"
+
+ SELECT interval '123 2:03 -2:04'; -- not ok, redundant hh:mm fields
+ ^
+<sql-statement>
+-- test syntaxes for restricted precision
+SELECT interval(0) '1 day 01:23:45.6789';
+</sql-statement>
+<sql-statement>
+SELECT interval(2) '1 day 01:23:45.6789';
+</sql-statement>
+<sql-statement>
+SELECT interval '12:34.5678' minute to second(2); -- per SQL spec
+</sql-statement>
+<sql-statement>
+SELECT interval '1.234' second;
+</sql-statement>
+<sql-statement>
+SELECT interval '1.234' second(2);
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2.345' day to second(2);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '1 2.345' day to second(2);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 2.345"
+
+ SELECT interval '1 2.345' day to second(2);
+ ^
+<sql-statement>
+SELECT interval '1 2:03' day to second(2);
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03.4567' day to second(2);
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03:04.5678' day to second(2);
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2.345' hour to second(2);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '1 2.345' hour to second(2);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 2.345"
+
+ SELECT interval '1 2.345' hour to second(2);
+ ^
+<sql-statement>
+SELECT interval '1 2:03.45678' hour to second(2);
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03:04.5678' hour to second(2);
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2.3456' minute to second(2);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT interval '1 2.3456' minute to second(2);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type interval: "1 2.3456"
+
+ SELECT interval '1 2.3456' minute to second(2);
+ ^
+<sql-statement>
+SELECT interval '1 2:03.5678' minute to second(2);
+</sql-statement>
+<sql-statement>
+SELECT interval '1 2:03:04.5678' minute to second(2);
+</sql-statement>
+<sql-statement>
+-- test casting to restricted precision (bug #14479)
+SELECT f1, f1::INTERVAL DAY TO MINUTE AS "minutes",
+ (f1 + INTERVAL '1 month')::INTERVAL MONTH::INTERVAL YEAR AS "years"
+ FROM interval_tbl;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.interval_tbl
+
+<sql-statement>
+-- test inputting and outputting SQL standard interval literals
+SET IntervalStyle TO sql_standard;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ -- test inputting and outputting SQL standard interval literals
+ ^
+<sql-statement>
+SELECT interval '0' AS "zero",
+ interval '1-2' year to month AS "year-month",
+ interval '1 2:03:04' day to second AS "day-time",
+ - interval '1-2' AS "negative year-month",
+ - interval '1 2:03:04' AS "negative day-time";
+</sql-statement>
+<sql-statement>
+-- test input of some not-quite-standard interval values in the sql style
+SET IntervalStyle TO postgres;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ -- test input of some not-quite-standard interval values in the sql style
+ ^
+<sql-statement>
+SELECT interval '+1 -1:00:00',
+ interval '-1 +1:00:00',
+ interval '+1-2 -3 +4:05:06.789',
+ interval '-1-2 +3 -4:05:06.789';
+</sql-statement>
+<sql-statement>
+-- test output of couple non-standard interval values in the sql style
+SET IntervalStyle TO sql_standard;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ -- test output of couple non-standard interval values in the sql style
+ ^
+<sql-statement>
+SELECT interval '1 day -1 hours',
+ interval '-1 days +1 hours',
+ interval '1 years 2 months -3 days 4 hours 5 minutes 6.789 seconds',
+ - interval '1 years 2 months -3 days 4 hours 5 minutes 6.789 seconds';
+</sql-statement>
+<sql-statement>
+-- test outputting iso8601 intervals
+SET IntervalStyle to iso_8601;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ -- test outputting iso8601 intervals
+ ^
+<sql-statement>
+select interval '0' AS "zero",
+ interval '1-2' AS "a year 2 months",
+ interval '1 2:03:04' AS "a bit over a day",
+ interval '2:03:04.45679' AS "a bit over 2 hours",
+ (interval '1-2' + interval '3 4:05:06.7') AS "all fields",
+ (interval '1-2' - interval '3 4:05:06.7') AS "mixed sign",
+ (- interval '1-2' + interval '3 4:05:06.7') AS "negative";
+</sql-statement>
+<sql-statement>
+-- test inputting ISO 8601 4.4.2.1 "Format With Time Unit Designators"
+SET IntervalStyle to sql_standard;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ -- test inputting ISO 8601 4.4.2.1 "Format With Time Unit Designators"
+ ^
+<sql-statement>
+select interval 'P0Y' AS "zero",
+ interval 'P1Y2M' AS "a year 2 months",
+ interval 'P1W' AS "a week",
+ interval 'P1DT2H3M4S' AS "a bit over a day",
+ interval 'P1Y2M3DT4H5M6.7S' AS "all fields",
+ interval 'P-1Y-2M-3DT-4H-5M-6.7S' AS "negative",
+ interval 'PT-0.1S' AS "fractional second";
+</sql-statement>
+<sql-statement>
+-- test inputting ISO 8601 4.4.2.2 "Alternative Format"
+SET IntervalStyle to postgres;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ -- test inputting ISO 8601 4.4.2.2 "Alternative Format"
+ ^
+<sql-statement>
+select interval 'P00021015T103020' AS "ISO8601 Basic Format",
+ interval 'P0002-10-15T10:30:20' AS "ISO8601 Extended Format";
+</sql-statement>
+<sql-statement>
+-- Make sure optional ISO8601 alternative format fields are optional.
+select interval 'P0002' AS "year only",
+ interval 'P0002-10' AS "year month",
+ interval 'P0002-10-15' AS "year month day",
+ interval 'P0002T1S' AS "year only plus time",
+ interval 'P0002-10T1S' AS "year month plus time",
+ interval 'P0002-10-15T1S' AS "year month day plus time",
+ interval 'PT10' AS "hour only",
+ interval 'PT10:30' AS "hour minute";
+</sql-statement>
+<sql-statement>
+-- test a couple rounding cases that changed since 8.3 w/ HAVE_INT64_TIMESTAMP.
+SET IntervalStyle to postgres_verbose;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: IntervalStyle
+ -- test a couple rounding cases that changed since 8.3 w/ HAVE_INT64_TIMESTAMP.
+ ^
+<sql-statement>
+select interval '-10 mons -3 days +03:55:06.70';
+</sql-statement>
+<sql-statement>
+select interval '1 year 2 mons 3 days 04:05:06.699999';
+</sql-statement>
+<sql-statement>
+select interval '0:0:0.7', interval '@ 0.70 secs', interval '0.7 seconds';
+</sql-statement>
+<sql-statement>
+-- check that '30 days' equals '1 month' according to the hash function
+select '30 days'::interval = '1 month'::interval as t;
+</sql-statement>
+<sql-statement>
+select interval_hash('30 days'::interval) = interval_hash('1 month'::interval) as t;
+</sql-statement>
+<sql-statement>
+-- numeric constructor
+select make_interval(years := 2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:8: Error: alternative is not implemented yet : 118
+ select make_interval(years := 2);
+ ^
+<sql-statement>
+select make_interval(years := 1, months := 6);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 118
+ select make_interval(years := 1, months := 6);
+ ^
+<sql-statement>
+select make_interval(years := 1, months := -1, weeks := 5, days := -7, hours := 25, mins := -180);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 118
+ select make_interval(years := 1, months := -1, weeks := 5, days := -7, hours := 25, mins := -180);
+ ^
+<sql-statement>
+select make_interval() = make_interval(years := 0, months := 0, weeks := 0, days := 0, mins := 0, secs := 0.0);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:26: Error: alternative is not implemented yet : 118
+ select make_interval() = make_interval(years := 0, months := 0, weeks := 0, days := 0, mins := 0, secs := 0.0);
+ ^
+<sql-statement>
+select make_interval(hours := -2, mins := -10, secs := -25.3);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 118
+ select make_interval(hours := -2, mins := -10, secs := -25.3);
+ ^
+<sql-statement>
+select make_interval(years := 'inf'::float::int);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 118
+ select make_interval(years := 'inf'::float::int);
+ ^
+<sql-statement>
+select make_interval(months := 'NaN'::float::int);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 118
+ select make_interval(months := 'NaN'::float::int);
+ ^
+<sql-statement>
+select make_interval(secs := 'inf');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 118
+ select make_interval(secs := 'inf');
+ ^
+<sql-statement>
+select make_interval(secs := 'NaN');
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 118
+ select make_interval(secs := 'NaN');
+ ^
+<sql-statement>
+select make_interval(secs := 7e12);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 118
+ select make_interval(secs := 7e12);
+ ^
+<sql-statement>
+--
+-- test EXTRACT
+--
+SELECT f1,
+ EXTRACT(MICROSECOND FROM f1) AS MICROSECOND,
+ EXTRACT(MILLISECOND FROM f1) AS MILLISECOND,
+ EXTRACT(SECOND FROM f1) AS SECOND,
+ EXTRACT(MINUTE FROM f1) AS MINUTE,
+ EXTRACT(HOUR FROM f1) AS HOUR,
+ EXTRACT(DAY FROM f1) AS DAY,
+ EXTRACT(MONTH FROM f1) AS MONTH,
+ EXTRACT(QUARTER FROM f1) AS QUARTER,
+ EXTRACT(YEAR FROM f1) AS YEAR,
+ EXTRACT(DECADE FROM f1) AS DECADE,
+ EXTRACT(CENTURY FROM f1) AS CENTURY,
+ EXTRACT(MILLENNIUM FROM f1) AS MILLENNIUM,
+ EXTRACT(EPOCH FROM f1) AS EPOCH
+ FROM INTERVAL_TBL;
+</sql-statement>
+<sql-statement>
+SELECT EXTRACT(FORTNIGHT FROM INTERVAL '2 days'); -- error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT EXTRACT(FORTNIGHT FROM INTERVAL '2 days'); -- error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: interval units "fortnight" not recognized
+
+ SELECT EXTRACT(FORTNIGHT FROM INTERVAL '2 days'); -- error
+ ^
+<sql-statement>
+SELECT EXTRACT(TIMEZONE FROM INTERVAL '2 days'); -- error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT EXTRACT(TIMEZONE FROM INTERVAL '2 days'); -- error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: interval units "timezone" not supported
+
+ SELECT EXTRACT(TIMEZONE FROM INTERVAL '2 days'); -- error
+ ^
+<sql-statement>
+SELECT EXTRACT(DECADE FROM INTERVAL '100 y');
+</sql-statement>
+<sql-statement>
+SELECT EXTRACT(DECADE FROM INTERVAL '99 y');
+</sql-statement>
+<sql-statement>
+SELECT EXTRACT(DECADE FROM INTERVAL '-99 y');
+</sql-statement>
+<sql-statement>
+SELECT EXTRACT(DECADE FROM INTERVAL '-100 y');
+</sql-statement>
+<sql-statement>
+SELECT EXTRACT(CENTURY FROM INTERVAL '100 y');
+</sql-statement>
+<sql-statement>
+SELECT EXTRACT(CENTURY FROM INTERVAL '99 y');
+</sql-statement>
+<sql-statement>
+SELECT EXTRACT(CENTURY FROM INTERVAL '-99 y');
+</sql-statement>
+<sql-statement>
+SELECT EXTRACT(CENTURY FROM INTERVAL '-100 y');
+</sql-statement>
+<sql-statement>
+-- date_part implementation is mostly the same as extract, so only
+-- test a few cases for additional coverage.
+SELECT f1,
+ date_part('microsecond', f1) AS microsecond,
+ date_part('millisecond', f1) AS millisecond,
+ date_part('second', f1) AS second,
+ date_part('epoch', f1) AS epoch
+ FROM INTERVAL_TBL;
+</sql-statement>
+<sql-statement>
+-- internal overflow test case
+SELECT extract(epoch from interval '1000000000 days');
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/join.err b/ydb/library/yql/tests/postgresql/cases/join.err
new file mode 100644
index 0000000000..ffcc47b020
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/join.err
@@ -0,0 +1,117 @@
+<sql-statement>
+--
+-- JOIN
+-- Test JOIN clauses
+--
+CREATE TABLE J1_TBL (
+ i integer,
+ j integer,
+ t text
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE J2_TBL (
+ i integer,
+ k integer
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (1, 4, 'one');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (2, 3, 'two');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (3, 2, 'three');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (4, 1, 'four');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (5, 0, 'five');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (6, 6, 'six');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (7, 7, 'seven');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (8, 8, 'eight');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (0, NULL, 'zero');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (NULL, NULL, 'null');
+</sql-statement>
+<sql-statement>
+INSERT INTO J1_TBL VALUES (NULL, 0, 'zero');
+</sql-statement>
+<sql-statement>
+INSERT INTO J2_TBL VALUES (1, -1);
+</sql-statement>
+<sql-statement>
+INSERT INTO J2_TBL VALUES (2, 2);
+</sql-statement>
+<sql-statement>
+INSERT INTO J2_TBL VALUES (3, -3);
+</sql-statement>
+<sql-statement>
+INSERT INTO J2_TBL VALUES (2, 4);
+</sql-statement>
+<sql-statement>
+INSERT INTO J2_TBL VALUES (5, -5);
+</sql-statement>
+<sql-statement>
+INSERT INTO J2_TBL VALUES (5, -5);
+</sql-statement>
+<sql-statement>
+INSERT INTO J2_TBL VALUES (0, NULL);
+</sql-statement>
+<sql-statement>
+INSERT INTO J2_TBL VALUES (NULL, NULL);
+</sql-statement>
+<sql-statement>
+INSERT INTO J2_TBL VALUES (NULL, 0);
+</sql-statement>
+<sql-statement>
+-- useful in some tests below
+create temp table onerow();
+</sql-statement>
+<sql-statement>
+insert into onerow default values;
+</sql-statement>
+-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'default_values' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+analyze onerow;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ analyze onerow;
+ ^
+<sql-statement>
+--
+-- CORRELATION NAMES
+-- Make sure that table/column aliases are supported
+-- before diving into more complex join syntax.
+--
+SELECT *
+ FROM J1_TBL AS tx;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FC1F0229D90)
+__libc_start_main+128 (0x7FC1F0229E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/json.err b/ydb/library/yql/tests/postgresql/cases/json.err
new file mode 100644
index 0000000000..f848ff03f3
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/json.err
@@ -0,0 +1,1046 @@
+<sql-statement>
+-- Strings.
+SELECT '""'::json; -- OK.
+</sql-statement>
+<sql-statement>
+SELECT $$''$$::json; -- ERROR, single quotes are not allowed
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT $$''$$::json; -- ERROR, single quotes are not allowed
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "'" is invalid.
+CONTEXT: JSON data, line 1: '...
+
+ SELECT $$''$$::json; -- ERROR, single quotes are not allowed
+ ^
+<sql-statement>
+SELECT '"abc"'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '"abc'::json; -- ERROR, quotes not closed
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"abc'::json; -- ERROR, quotes not closed
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token ""abc" is invalid.
+CONTEXT: JSON data, line 1: "abc
+
+ SELECT '"abc'::json; -- ERROR, quotes not closed
+ ^
+<sql-statement>
+SELECT '"abc
+def"'::json; -- ERROR, unescaped newline in string constant
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"abc
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Character with value 0x0a must be escaped.
+CONTEXT: JSON data, line 1: "abc
+
+ SELECT '"abc
+ ^
+<sql-statement>
+SELECT '"\n\"\\"'::json; -- OK, legal escapes
+</sql-statement>
+<sql-statement>
+SELECT '"\v"'::json; -- ERROR, not a valid JSON escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\v"'::json; -- ERROR, not a valid JSON escape
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Escape sequence "\v" is invalid.
+CONTEXT: JSON data, line 1: "\v...
+
+ SELECT '"\v"'::json; -- ERROR, not a valid JSON escape
+ ^
+<sql-statement>
+-- see json_encoding test for input with unicode escapes
+-- Numbers.
+SELECT '1'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '0'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '01'::json; -- ERROR, not valid according to JSON spec
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '01'::json; -- ERROR, not valid according to JSON spec
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "01" is invalid.
+CONTEXT: JSON data, line 1: 01
+
+ SELECT '01'::json; -- ERROR, not valid according to JSON spec
+ ^
+<sql-statement>
+SELECT '0.1'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '9223372036854775808'::json; -- OK, even though it's too large for int8
+</sql-statement>
+<sql-statement>
+SELECT '1e100'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '1.3e100'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '1f2'::json; -- ERROR
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '1f2'::json; -- ERROR
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "1f2" is invalid.
+CONTEXT: JSON data, line 1: 1f2
+
+ SELECT '1f2'::json; -- ERROR
+ ^
+<sql-statement>
+SELECT '0.x1'::json; -- ERROR
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '0.x1'::json; -- ERROR
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "0.x1" is invalid.
+CONTEXT: JSON data, line 1: 0.x1
+
+ SELECT '0.x1'::json; -- ERROR
+ ^
+<sql-statement>
+SELECT '1.3ex100'::json; -- ERROR
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '1.3ex100'::json; -- ERROR
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "1.3ex100" is invalid.
+CONTEXT: JSON data, line 1: 1.3ex100
+
+ SELECT '1.3ex100'::json; -- ERROR
+ ^
+<sql-statement>
+-- Arrays.
+SELECT '[]'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '[1,2]'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '[1,2,]'::json; -- ERROR, trailing comma
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '[1,2,]'::json; -- ERROR, trailing comma
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected JSON value, but found "]".
+CONTEXT: JSON data, line 1: [1,2,]
+
+ SELECT '[1,2,]'::json; -- ERROR, trailing comma
+ ^
+<sql-statement>
+SELECT '[1,2'::json; -- ERROR, no closing bracket
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '[1,2'::json; -- ERROR, no closing bracket
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: The input string ended unexpectedly.
+CONTEXT: JSON data, line 1: [1,2
+
+ SELECT '[1,2'::json; -- ERROR, no closing bracket
+ ^
+<sql-statement>
+SELECT '[1,[2]'::json; -- ERROR, no closing bracket
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '[1,[2]'::json; -- ERROR, no closing bracket
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: The input string ended unexpectedly.
+CONTEXT: JSON data, line 1: [1,[2]
+
+ SELECT '[1,[2]'::json; -- ERROR, no closing bracket
+ ^
+<sql-statement>
+-- Objects.
+SELECT '{}'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '{"abc"}'::json; -- ERROR, no value
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc"}'::json; -- ERROR, no value
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected ":", but found "}".
+CONTEXT: JSON data, line 1: {"abc"}
+
+ SELECT '{"abc"}'::json; -- ERROR, no value
+ ^
+<sql-statement>
+SELECT '{"abc":1}'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '{1:"abc"}'::json; -- ERROR, keys must be strings
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{1:"abc"}'::json; -- ERROR, keys must be strings
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected string or "}", but found "1".
+CONTEXT: JSON data, line 1: {1...
+
+ SELECT '{1:"abc"}'::json; -- ERROR, keys must be strings
+ ^
+<sql-statement>
+SELECT '{"abc",1}'::json; -- ERROR, wrong separator
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc",1}'::json; -- ERROR, wrong separator
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected ":", but found ",".
+CONTEXT: JSON data, line 1: {"abc",...
+
+ SELECT '{"abc",1}'::json; -- ERROR, wrong separator
+ ^
+<sql-statement>
+SELECT '{"abc"=1}'::json; -- ERROR, totally wrong separator
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc"=1}'::json; -- ERROR, totally wrong separator
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "=" is invalid.
+CONTEXT: JSON data, line 1: {"abc"=...
+
+ SELECT '{"abc"=1}'::json; -- ERROR, totally wrong separator
+ ^
+<sql-statement>
+SELECT '{"abc"::1}'::json; -- ERROR, another wrong separator
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc"::1}'::json; -- ERROR, another wrong separator
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected JSON value, but found ":".
+CONTEXT: JSON data, line 1: {"abc"::...
+
+ SELECT '{"abc"::1}'::json; -- ERROR, another wrong separator
+ ^
+<sql-statement>
+SELECT '{"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}}'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '{"abc":1:2}'::json; -- ERROR, colon in wrong spot
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc":1:2}'::json; -- ERROR, colon in wrong spot
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected "," or "}", but found ":".
+CONTEXT: JSON data, line 1: {"abc":1:...
+
+ SELECT '{"abc":1:2}'::json; -- ERROR, colon in wrong spot
+ ^
+<sql-statement>
+SELECT '{"abc":1,3}'::json; -- ERROR, no value
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc":1,3}'::json; -- ERROR, no value
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected string, but found "3".
+CONTEXT: JSON data, line 1: {"abc":1,3...
+
+ SELECT '{"abc":1,3}'::json; -- ERROR, no value
+ ^
+<sql-statement>
+-- Recursion.
+SET max_stack_depth = '100kB';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: max_stack_depth
+ -- Recursion.
+ ^
+<sql-statement>
+SELECT repeat('[', 10000)::json;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT repeat('[', 10000)::json;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: stack depth limit exceeded
+HINT: Increase the configuration parameter "max_stack_depth" (currently 100kB), after ensuring the platform's stack depth limit is adequate.
+
+ SELECT repeat('[', 10000)::json;
+ ^
+<sql-statement>
+SELECT repeat('{"a":', 10000)::json;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT repeat('{"a":', 10000)::json;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: stack depth limit exceeded
+HINT: Increase the configuration parameter "max_stack_depth" (currently 100kB), after ensuring the platform's stack depth limit is adequate.
+
+ SELECT repeat('{"a":', 10000)::json;
+ ^
+<sql-statement>
+RESET max_stack_depth;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET max_stack_depth;
+ ^
+<sql-statement>
+-- Miscellaneous stuff.
+SELECT 'true'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT 'false'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT 'null'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT ' true '::json; -- OK, even with extra whitespace
+</sql-statement>
+<sql-statement>
+SELECT 'true false'::json; -- ERROR, too many values
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'true false'::json; -- ERROR, too many values
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected end of input, but found "false".
+CONTEXT: JSON data, line 1: true false
+
+ SELECT 'true false'::json; -- ERROR, too many values
+ ^
+<sql-statement>
+SELECT 'true, false'::json; -- ERROR, too many values
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'true, false'::json; -- ERROR, too many values
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected end of input, but found ",".
+CONTEXT: JSON data, line 1: true,...
+
+ SELECT 'true, false'::json; -- ERROR, too many values
+ ^
+<sql-statement>
+SELECT 'truf'::json; -- ERROR, not a keyword
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'truf'::json; -- ERROR, not a keyword
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "truf" is invalid.
+CONTEXT: JSON data, line 1: truf
+
+ SELECT 'truf'::json; -- ERROR, not a keyword
+ ^
+<sql-statement>
+SELECT 'trues'::json; -- ERROR, not a keyword
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'trues'::json; -- ERROR, not a keyword
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "trues" is invalid.
+CONTEXT: JSON data, line 1: trues
+
+ SELECT 'trues'::json; -- ERROR, not a keyword
+ ^
+<sql-statement>
+SELECT ''::json; -- ERROR, no value
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ''::json; -- ERROR, no value
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: The input string ended unexpectedly.
+CONTEXT: JSON data, line 1:
+
+ SELECT ''::json; -- ERROR, no value
+ ^
+<sql-statement>
+SELECT ' '::json; -- ERROR, no value
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ' '::json; -- ERROR, no value
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: The input string ended unexpectedly.
+CONTEXT: JSON data, line 1:
+
+ SELECT ' '::json; -- ERROR, no value
+ ^
+<sql-statement>
+-- Multi-line JSON input to check ERROR reporting
+SELECT '{
+ "one": 1,
+ "two":"two",
+ "three":
+ true}'::json; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '{
+ "one": 1,
+ "two":,"two", -- ERROR extraneous comma before field "two"
+ "three":
+ true}'::json;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected JSON value, but found ",".
+CONTEXT: JSON data, line 3: "two":,...
+
+ SELECT '{
+ ^
+<sql-statement>
+SELECT '{
+ "one": 1,
+ "two":"two",
+ "averyveryveryveryveryveryveryveryveryverylongfieldname":}'::json;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected JSON value, but found "}".
+CONTEXT: JSON data, line 4: ...yveryveryveryveryveryveryveryverylongfieldname":}
+
+ SELECT '{
+ ^
+<sql-statement>
+-- ERROR missing value for last field
+--constructors
+-- array_to_json
+SELECT array_to_json(array(select 1 as a));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:4:22: Error: SublinkExpr: unsupported link type: 6
+ SELECT array_to_json(array(select 1 as a));
+ ^
+<sql-statement>
+SELECT array_to_json(array_agg(q),false) from (select x as b, x * 2 as c from generate_series(1,3) x) q;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT array_to_json(array_agg(q),false) from (select x as b, x * 2 as c from generate_series(1,3) x) q;
+ ^
+ -stdin-:<main>:1:32: Error: No such column: q
+ SELECT array_to_json(array_agg(q),false) from (select x as b, x * 2 as c from generate_series(1,3) x) q;
+ ^
+<sql-statement>
+SELECT array_to_json(array_agg(q),true) from (select x as b, x * 2 as c from generate_series(1,3) x) q;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT array_to_json(array_agg(q),true) from (select x as b, x * 2 as c from generate_series(1,3) x) q;
+ ^
+ -stdin-:<main>:1:32: Error: No such column: q
+ SELECT array_to_json(array_agg(q),true) from (select x as b, x * 2 as c from generate_series(1,3) x) q;
+ ^
+<sql-statement>
+SELECT array_to_json(array_agg(q),false)
+ FROM ( SELECT $$a$$ || x AS b, y AS c,
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ROW(y.*,ARRAY[4,5,6])] AS z
+ FROM generate_series(1,2) x,
+ generate_series(4,5) y) q;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:3:16: Error: alternative is not implemented yet : 138
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ^
+<sql-statement>
+SELECT array_to_json(array_agg(x),false) from generate_series(5,10) x;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT array_to_json(array_agg(x),false) from generate_series(5,10) x;
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT array_to_json(array_agg(x),false) from generate_series(5,10) x;
+ ^
+ -stdin-:<main>:1:22: Error: At function: PgAgg
+ SELECT array_to_json(array_agg(x),false) from generate_series(5,10) x;
+ ^
+ -stdin-:<main>:1:22: Error: Unable to find an overload for aggregate array_agg with given argument types: (int4)
+ SELECT array_to_json(array_agg(x),false) from generate_series(5,10) x;
+ ^
+<sql-statement>
+SELECT array_to_json('{{1,5},{99,100}}'::int[]);
+</sql-statement>
+<sql-statement>
+-- row_to_json
+SELECT row_to_json(row(1,'foo'));
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:8: Error: alternative is not implemented yet : 138
+ SELECT row_to_json(row(1,'foo'));
+ ^
+<sql-statement>
+SELECT row_to_json(q)
+FROM (SELECT $$a$$ || x AS b,
+ y AS c,
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ROW(y.*,ARRAY[4,5,6])] AS z
+ FROM generate_series(1,2) x,
+ generate_series(4,5) y) q;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:4:10: Error: alternative is not implemented yet : 138
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ^
+<sql-statement>
+SELECT row_to_json(q,true)
+FROM (SELECT $$a$$ || x AS b,
+ y AS c,
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ROW(y.*,ARRAY[4,5,6])] AS z
+ FROM generate_series(1,2) x,
+ generate_series(4,5) y) q;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:4:10: Error: alternative is not implemented yet : 138
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ^
+<sql-statement>
+CREATE TEMP TABLE rows AS
+SELECT x, 'txt' || x as y
+FROM generate_series(1,3) AS x;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TEMP TABLE rows AS
+ ^
+<sql-statement>
+SELECT row_to_json(q,true)
+FROM rows q;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.rows
+
+<sql-statement>
+SELECT row_to_json(row((select array_agg(x) as d from generate_series(5,10) x)),false);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 138
+ SELECT row_to_json(row((select array_agg(x) as d from generate_series(5,10) x)),false);
+ ^
+<sql-statement>
+-- anyarray column
+analyze rows;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ -- anyarray column
+ ^
+<sql-statement>
+select attname, to_json(histogram_bounds) histogram_bounds
+from pg_stats
+where tablename = 'rows' and
+ schemaname = pg_my_temp_schema()::regnamespace::text
+order by 1;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.pg_stats
+
+<sql-statement>
+-- to_json, timestamps
+select to_json(timestamp '2014-05-28 12:22:35.614298');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ -- to_json, timestamps
+ ^
+ -stdin-:<main>:2:8: Error: At function: PgCall
+ select to_json(timestamp '2014-05-28 12:22:35.614298');
+ ^
+ -stdin-:<main>:2:8: Error: Unable to find an overload for proc to_json with given argument types: (timestamp)
+ select to_json(timestamp '2014-05-28 12:22:35.614298');
+ ^
+<sql-statement>
+BEGIN;
+</sql-statement>
+<sql-statement>
+SET LOCAL TIME ZONE 10.5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: timezone
+ SET LOCAL TIME ZONE 10.5;
+ ^
+<sql-statement>
+select to_json(timestamptz '2014-05-28 12:22:35.614298-04');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_json(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_json(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_json with given argument types: (timestamptz)
+ select to_json(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+<sql-statement>
+SET LOCAL TIME ZONE -8;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: timezone
+ SET LOCAL TIME ZONE -8;
+ ^
+<sql-statement>
+select to_json(timestamptz '2014-05-28 12:22:35.614298-04');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_json(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_json(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_json with given argument types: (timestamptz)
+ select to_json(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+<sql-statement>
+COMMIT;
+</sql-statement>
+<sql-statement>
+select to_json(date '2014-05-28');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_json(date '2014-05-28');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_json(date '2014-05-28');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_json with given argument types: (date)
+ select to_json(date '2014-05-28');
+ ^
+<sql-statement>
+select to_json(date 'Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_json(date 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_json(date 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_json with given argument types: (date)
+ select to_json(date 'Infinity');
+ ^
+<sql-statement>
+select to_json(date '-Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_json(date '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_json(date '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_json with given argument types: (date)
+ select to_json(date '-Infinity');
+ ^
+<sql-statement>
+select to_json(timestamp 'Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_json(timestamp 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_json(timestamp 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_json with given argument types: (timestamp)
+ select to_json(timestamp 'Infinity');
+ ^
+<sql-statement>
+select to_json(timestamp '-Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_json(timestamp '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_json(timestamp '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_json with given argument types: (timestamp)
+ select to_json(timestamp '-Infinity');
+ ^
+<sql-statement>
+select to_json(timestamptz 'Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_json(timestamptz 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_json(timestamptz 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_json with given argument types: (timestamptz)
+ select to_json(timestamptz 'Infinity');
+ ^
+<sql-statement>
+select to_json(timestamptz '-Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_json(timestamptz '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_json(timestamptz '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_json with given argument types: (timestamptz)
+ select to_json(timestamptz '-Infinity');
+ ^
+<sql-statement>
+--json_agg
+SELECT json_agg(q)
+ FROM ( SELECT $$a$$ || x AS b, y AS c,
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ROW(y.*,ARRAY[4,5,6])] AS z
+ FROM generate_series(1,2) x,
+ generate_series(4,5) y) q;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:4:16: Error: alternative is not implemented yet : 138
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ^
+<sql-statement>
+SELECT json_agg(q ORDER BY x, y)
+ FROM rows q;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order
+ SELECT json_agg(q ORDER BY x, y)
+ ^
+<sql-statement>
+UPDATE rows SET x = NULL WHERE x = 1;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+SELECT json_agg(q ORDER BY x NULLS FIRST, y)
+ FROM rows q;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order
+ SELECT json_agg(q ORDER BY x NULLS FIRST, y)
+ ^
+<sql-statement>
+-- non-numeric output
+SELECT row_to_json(q)
+FROM (SELECT 'NaN'::float8 AS "float8field") q;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ -- non-numeric output
+ ^
+ -stdin-:<main>:2:20: Error: No such column: q
+ SELECT row_to_json(q)
+ ^
+<sql-statement>
+SELECT row_to_json(q)
+FROM (SELECT 'Infinity'::float8 AS "float8field") q;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT row_to_json(q)
+ ^
+ -stdin-:<main>:1:20: Error: No such column: q
+ SELECT row_to_json(q)
+ ^
+<sql-statement>
+SELECT row_to_json(q)
+FROM (SELECT '-Infinity'::float8 AS "float8field") q;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ SELECT row_to_json(q)
+ ^
+ -stdin-:<main>:1:20: Error: No such column: q
+ SELECT row_to_json(q)
+ ^
+<sql-statement>
+-- json input
+SELECT row_to_json(q)
+FROM (SELECT '{"a":1,"b": [2,3,4,"d","e","f"],"c":{"p":1,"q":2}}'::json AS "jsonfield") q;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ -- json input
+ ^
+ -stdin-:<main>:2:20: Error: No such column: q
+ SELECT row_to_json(q)
+ ^
+<sql-statement>
+-- json extraction functions
+CREATE TEMP TABLE test_json (
+ json_type text,
+ test_json json
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO test_json VALUES
+('scalar','"a scalar"'),
+('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'),
+('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}');
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 'x'
+FROM test_json
+WHERE json_type = 'scalar';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 'x'
+FROM test_json
+WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 'x'
+FROM test_json
+WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json->'field2'
+FROM test_json
+WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json->>'field2'
+FROM test_json
+WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 2
+FROM test_json
+WHERE json_type = 'scalar';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 2
+FROM test_json
+WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> -1
+FROM test_json
+WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 2
+FROM test_json
+WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json->>2
+FROM test_json
+WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 6 FROM test_json WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 7 FROM test_json WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 'field4' FROM test_json WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 'field5' FROM test_json WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 'field6' FROM test_json WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT json_object_keys(test_json)
+FROM test_json
+WHERE json_type = 'scalar';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Generator functions are not allowed in: SELECT
+ SELECT json_object_keys(test_json)
+ ^
+<sql-statement>
+SELECT json_object_keys(test_json)
+FROM test_json
+WHERE json_type = 'array';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Generator functions are not allowed in: SELECT
+ SELECT json_object_keys(test_json)
+ ^
+<sql-statement>
+SELECT json_object_keys(test_json)
+FROM test_json
+WHERE json_type = 'object';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Generator functions are not allowed in: SELECT
+ SELECT json_object_keys(test_json)
+ ^
+<sql-statement>
+-- test extending object_keys resultset - initial resultset size is 256
+select count(*) from
+ (select json_object_keys(json_object(array_agg(g)))
+ from (select unnest(array['f'||n,n::text])as g
+ from generate_series(1,300) as n) x ) y;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:4:19: Error: Generator functions are not allowed in: SELECT
+ from (select unnest(array['f'||n,n::text])as g
+ ^
+<sql-statement>
+-- nulls
+select (test_json->'field3') is null as expect_false
+from test_json
+where json_type = 'object';
+</sql-statement>
+<sql-statement>
+select (test_json->>'field3') is null as expect_true
+from test_json
+where json_type = 'object';
+</sql-statement>
+<sql-statement>
+select (test_json->3) is null as expect_false
+from test_json
+where json_type = 'array';
+</sql-statement>
+<sql-statement>
+select (test_json->>3) is null as expect_true
+from test_json
+where json_type = 'array';
+</sql-statement>
+<sql-statement>
+-- corner cases
+select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> null::text;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F33BF829D90)
+__libc_start_main+128 (0x7F33BF829E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/json_encoding.err b/ydb/library/yql/tests/postgresql/cases/json_encoding.err
new file mode 100644
index 0000000000..3d12f9cdf6
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/json_encoding.err
@@ -0,0 +1,337 @@
+<sql-statement>
+--
+-- encoding-sensitive tests for json and jsonb
+--
+SELECT getdatabaseencoding(); -- just to label the results files
+</sql-statement>
+<sql-statement>
+-- first json
+-- basic unicode input
+SELECT '"\u"'::json; -- ERROR, incomplete escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- first json
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: "\u" must be followed by four hexadecimal digits.
+CONTEXT: JSON data, line 1: "\u"
+
+ -- first json
+ ^
+<sql-statement>
+SELECT '"\u00"'::json; -- ERROR, incomplete escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\u00"'::json; -- ERROR, incomplete escape
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: "\u" must be followed by four hexadecimal digits.
+CONTEXT: JSON data, line 1: "\u00"
+
+ SELECT '"\u00"'::json; -- ERROR, incomplete escape
+ ^
+<sql-statement>
+SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: "\u" must be followed by four hexadecimal digits.
+CONTEXT: JSON data, line 1: "\u000g...
+
+ SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit
+ ^
+<sql-statement>
+SELECT '"\u0000"'::json; -- OK, legal escape
+</sql-statement>
+<sql-statement>
+SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK
+</sql-statement>
+<sql-statement>
+-- handling of unicode surrogate pairs
+select json '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a' as correct_in_utf8;
+</sql-statement>
+<sql-statement>
+select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Unicode high surrogate must not follow a high surrogate.
+CONTEXT: JSON data, line 1: { "a":...
+
+ select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row
+ ^
+<sql-statement>
+select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Unicode low surrogate must follow a high surrogate.
+CONTEXT: JSON data, line 1: { "a":...
+
+ select json '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order
+ ^
+<sql-statement>
+select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Unicode low surrogate must follow a high surrogate.
+CONTEXT: JSON data, line 1: { "a":...
+
+ select json '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate
+ ^
+<sql-statement>
+select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Unicode low surrogate must follow a high surrogate.
+CONTEXT: JSON data, line 1: { "a":...
+
+ select json '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate
+ ^
+<sql-statement>
+--handling of simple unicode escapes
+select json '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8;
+</sql-statement>
+<sql-statement>
+select json '{ "a": "dollar \u0024 character" }' as correct_everywhere;
+</sql-statement>
+<sql-statement>
+select json '{ "a": "dollar \\u0024 character" }' as not_an_escape;
+</sql-statement>
+<sql-statement>
+select json '{ "a": "null \u0000 escape" }' as not_unescaped;
+</sql-statement>
+<sql-statement>
+select json '{ "a": "null \\u0000 escape" }' as not_an_escape;
+</sql-statement>
+<sql-statement>
+select json '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8;
+</sql-statement>
+<sql-statement>
+select json '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere;
+</sql-statement>
+<sql-statement>
+select json '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape;
+</sql-statement>
+<sql-statement>
+select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: unsupported Unicode escape sequence
+DETAIL: \u0000 cannot be converted to text.
+CONTEXT: JSON data, line 1: { "a":...
+
+ select json '{ "a": "null \u0000 escape" }' ->> 'a' as fails;
+ ^
+<sql-statement>
+select json '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape;
+</sql-statement>
+<sql-statement>
+-- then jsonb
+-- basic unicode input
+SELECT '"\u"'::jsonb; -- ERROR, incomplete escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- then jsonb
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: "\u" must be followed by four hexadecimal digits.
+CONTEXT: JSON data, line 1: "\u"
+
+ -- then jsonb
+ ^
+<sql-statement>
+SELECT '"\u00"'::jsonb; -- ERROR, incomplete escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\u00"'::jsonb; -- ERROR, incomplete escape
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: "\u" must be followed by four hexadecimal digits.
+CONTEXT: JSON data, line 1: "\u00"
+
+ SELECT '"\u00"'::jsonb; -- ERROR, incomplete escape
+ ^
+<sql-statement>
+SELECT '"\u000g"'::jsonb; -- ERROR, g is not a hex digit
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\u000g"'::jsonb; -- ERROR, g is not a hex digit
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: "\u" must be followed by four hexadecimal digits.
+CONTEXT: JSON data, line 1: "\u000g...
+
+ SELECT '"\u000g"'::jsonb; -- ERROR, g is not a hex digit
+ ^
+<sql-statement>
+SELECT '"\u0045"'::jsonb; -- OK, legal escape
+</sql-statement>
+<sql-statement>
+SELECT '"\u0000"'::jsonb; -- ERROR, we don't support U+0000
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\u0000"'::jsonb; -- ERROR, we don't support U+0000
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: unsupported Unicode escape sequence
+DETAIL: \u0000 cannot be converted to text.
+CONTEXT: JSON data, line 1: ...
+
+ SELECT '"\u0000"'::jsonb; -- ERROR, we don't support U+0000
+ ^
+<sql-statement>
+-- use octet_length here so we don't get an odd unicode char in the
+-- output
+SELECT octet_length('"\uaBcD"'::jsonb::text); -- OK, uppercase and lower case both OK
+</sql-statement>
+<sql-statement>
+-- handling of unicode surrogate pairs
+SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a')::text) AS correct_in_utf8;
+</sql-statement>
+<sql-statement>
+SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Unicode high surrogate must not follow a high surrogate.
+CONTEXT: JSON data, line 1: { "a":...
+
+ SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row
+ ^
+<sql-statement>
+SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Unicode low surrogate must follow a high surrogate.
+CONTEXT: JSON data, line 1: { "a":...
+
+ SELECT jsonb '{ "a": "\ude04\ud83d" }' -> 'a'; -- surrogates in wrong order
+ ^
+<sql-statement>
+SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Unicode low surrogate must follow a high surrogate.
+CONTEXT: JSON data, line 1: { "a":...
+
+ SELECT jsonb '{ "a": "\ud83dX" }' -> 'a'; -- orphan high surrogate
+ ^
+<sql-statement>
+SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Unicode low surrogate must follow a high surrogate.
+CONTEXT: JSON data, line 1: { "a":...
+
+ SELECT jsonb '{ "a": "\ude04X" }' -> 'a'; -- orphan low surrogate
+ ^
+<sql-statement>
+-- handling of simple unicode escapes
+SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8;
+</sql-statement>
+<sql-statement>
+SELECT jsonb '{ "a": "dollar \u0024 character" }' as correct_everywhere;
+</sql-statement>
+<sql-statement>
+SELECT jsonb '{ "a": "dollar \\u0024 character" }' as not_an_escape;
+</sql-statement>
+<sql-statement>
+SELECT jsonb '{ "a": "null \u0000 escape" }' as fails;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT jsonb '{ "a": "null \u0000 escape" }' as fails;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: unsupported Unicode escape sequence
+DETAIL: \u0000 cannot be converted to text.
+CONTEXT: JSON data, line 1: { "a":...
+
+ SELECT jsonb '{ "a": "null \u0000 escape" }' as fails;
+ ^
+<sql-statement>
+SELECT jsonb '{ "a": "null \\u0000 escape" }' as not_an_escape;
+</sql-statement>
+<sql-statement>
+SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8;
+</sql-statement>
+<sql-statement>
+SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere;
+</sql-statement>
+<sql-statement>
+SELECT jsonb '{ "a": "dollar \\u0024 character" }' ->> 'a' as not_an_escape;
+</sql-statement>
+<sql-statement>
+SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: unsupported Unicode escape sequence
+DETAIL: \u0000 cannot be converted to text.
+CONTEXT: JSON data, line 1: { "a":...
+
+ SELECT jsonb '{ "a": "null \u0000 escape" }' ->> 'a' as fails;
+ ^
+<sql-statement>
+SELECT jsonb '{ "a": "null \\u0000 escape" }' ->> 'a' as not_an_escape;
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/jsonb.err b/ydb/library/yql/tests/postgresql/cases/jsonb.err
new file mode 100644
index 0000000000..e786ce2ce2
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/jsonb.err
@@ -0,0 +1,848 @@
+<sql-statement>
+-- Strings.
+SELECT '""'::jsonb; -- OK.
+</sql-statement>
+<sql-statement>
+SELECT $$''$$::jsonb; -- ERROR, single quotes are not allowed
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT $$''$$::jsonb; -- ERROR, single quotes are not allowed
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "'" is invalid.
+CONTEXT: JSON data, line 1: '...
+
+ SELECT $$''$$::jsonb; -- ERROR, single quotes are not allowed
+ ^
+<sql-statement>
+SELECT '"abc"'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '"abc'::jsonb; -- ERROR, quotes not closed
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"abc'::jsonb; -- ERROR, quotes not closed
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token ""abc" is invalid.
+CONTEXT: JSON data, line 1: "abc
+
+ SELECT '"abc'::jsonb; -- ERROR, quotes not closed
+ ^
+<sql-statement>
+SELECT '"abc
+def"'::jsonb; -- ERROR, unescaped newline in string constant
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"abc
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Character with value 0x0a must be escaped.
+CONTEXT: JSON data, line 1: "abc
+
+ SELECT '"abc
+ ^
+<sql-statement>
+SELECT '"\n\"\\"'::jsonb; -- OK, legal escapes
+</sql-statement>
+<sql-statement>
+SELECT '"\v"'::jsonb; -- ERROR, not a valid JSON escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\v"'::jsonb; -- ERROR, not a valid JSON escape
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Escape sequence "\v" is invalid.
+CONTEXT: JSON data, line 1: "\v...
+
+ SELECT '"\v"'::jsonb; -- ERROR, not a valid JSON escape
+ ^
+<sql-statement>
+-- see json_encoding test for input with unicode escapes
+-- Numbers.
+SELECT '1'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '0'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '01'::jsonb; -- ERROR, not valid according to JSON spec
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '01'::jsonb; -- ERROR, not valid according to JSON spec
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "01" is invalid.
+CONTEXT: JSON data, line 1: 01
+
+ SELECT '01'::jsonb; -- ERROR, not valid according to JSON spec
+ ^
+<sql-statement>
+SELECT '0.1'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '9223372036854775808'::jsonb; -- OK, even though it's too large for int8
+</sql-statement>
+<sql-statement>
+SELECT '1e100'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '1.3e100'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '1f2'::jsonb; -- ERROR
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '1f2'::jsonb; -- ERROR
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "1f2" is invalid.
+CONTEXT: JSON data, line 1: 1f2
+
+ SELECT '1f2'::jsonb; -- ERROR
+ ^
+<sql-statement>
+SELECT '0.x1'::jsonb; -- ERROR
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '0.x1'::jsonb; -- ERROR
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "0.x1" is invalid.
+CONTEXT: JSON data, line 1: 0.x1
+
+ SELECT '0.x1'::jsonb; -- ERROR
+ ^
+<sql-statement>
+SELECT '1.3ex100'::jsonb; -- ERROR
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '1.3ex100'::jsonb; -- ERROR
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "1.3ex100" is invalid.
+CONTEXT: JSON data, line 1: 1.3ex100
+
+ SELECT '1.3ex100'::jsonb; -- ERROR
+ ^
+<sql-statement>
+-- Arrays.
+SELECT '[]'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '[1,2]'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '[1,2,]'::jsonb; -- ERROR, trailing comma
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '[1,2,]'::jsonb; -- ERROR, trailing comma
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected JSON value, but found "]".
+CONTEXT: JSON data, line 1: [1,2,]
+
+ SELECT '[1,2,]'::jsonb; -- ERROR, trailing comma
+ ^
+<sql-statement>
+SELECT '[1,2'::jsonb; -- ERROR, no closing bracket
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '[1,2'::jsonb; -- ERROR, no closing bracket
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: The input string ended unexpectedly.
+CONTEXT: JSON data, line 1: [1,2
+
+ SELECT '[1,2'::jsonb; -- ERROR, no closing bracket
+ ^
+<sql-statement>
+SELECT '[1,[2]'::jsonb; -- ERROR, no closing bracket
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '[1,[2]'::jsonb; -- ERROR, no closing bracket
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: The input string ended unexpectedly.
+CONTEXT: JSON data, line 1: [1,[2]
+
+ SELECT '[1,[2]'::jsonb; -- ERROR, no closing bracket
+ ^
+<sql-statement>
+-- Objects.
+SELECT '{}'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '{"abc"}'::jsonb; -- ERROR, no value
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc"}'::jsonb; -- ERROR, no value
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected ":", but found "}".
+CONTEXT: JSON data, line 1: {"abc"}
+
+ SELECT '{"abc"}'::jsonb; -- ERROR, no value
+ ^
+<sql-statement>
+SELECT '{"abc":1}'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '{1:"abc"}'::jsonb; -- ERROR, keys must be strings
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{1:"abc"}'::jsonb; -- ERROR, keys must be strings
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected string or "}", but found "1".
+CONTEXT: JSON data, line 1: {1...
+
+ SELECT '{1:"abc"}'::jsonb; -- ERROR, keys must be strings
+ ^
+<sql-statement>
+SELECT '{"abc",1}'::jsonb; -- ERROR, wrong separator
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc",1}'::jsonb; -- ERROR, wrong separator
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected ":", but found ",".
+CONTEXT: JSON data, line 1: {"abc",...
+
+ SELECT '{"abc",1}'::jsonb; -- ERROR, wrong separator
+ ^
+<sql-statement>
+SELECT '{"abc"=1}'::jsonb; -- ERROR, totally wrong separator
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc"=1}'::jsonb; -- ERROR, totally wrong separator
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "=" is invalid.
+CONTEXT: JSON data, line 1: {"abc"=...
+
+ SELECT '{"abc"=1}'::jsonb; -- ERROR, totally wrong separator
+ ^
+<sql-statement>
+SELECT '{"abc"::1}'::jsonb; -- ERROR, another wrong separator
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc"::1}'::jsonb; -- ERROR, another wrong separator
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected JSON value, but found ":".
+CONTEXT: JSON data, line 1: {"abc"::...
+
+ SELECT '{"abc"::1}'::jsonb; -- ERROR, another wrong separator
+ ^
+<sql-statement>
+SELECT '{"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}}'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '{"abc":1:2}'::jsonb; -- ERROR, colon in wrong spot
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc":1:2}'::jsonb; -- ERROR, colon in wrong spot
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected "," or "}", but found ":".
+CONTEXT: JSON data, line 1: {"abc":1:...
+
+ SELECT '{"abc":1:2}'::jsonb; -- ERROR, colon in wrong spot
+ ^
+<sql-statement>
+SELECT '{"abc":1,3}'::jsonb; -- ERROR, no value
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{"abc":1,3}'::jsonb; -- ERROR, no value
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected string, but found "3".
+CONTEXT: JSON data, line 1: {"abc":1,3...
+
+ SELECT '{"abc":1,3}'::jsonb; -- ERROR, no value
+ ^
+<sql-statement>
+-- Recursion.
+SET max_stack_depth = '100kB';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: max_stack_depth
+ -- Recursion.
+ ^
+<sql-statement>
+SELECT repeat('[', 10000)::jsonb;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT repeat('[', 10000)::jsonb;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: stack depth limit exceeded
+HINT: Increase the configuration parameter "max_stack_depth" (currently 100kB), after ensuring the platform's stack depth limit is adequate.
+
+ SELECT repeat('[', 10000)::jsonb;
+ ^
+<sql-statement>
+SELECT repeat('{"a":', 10000)::jsonb;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT repeat('{"a":', 10000)::jsonb;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: stack depth limit exceeded
+HINT: Increase the configuration parameter "max_stack_depth" (currently 100kB), after ensuring the platform's stack depth limit is adequate.
+
+ SELECT repeat('{"a":', 10000)::jsonb;
+ ^
+<sql-statement>
+RESET max_stack_depth;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET max_stack_depth;
+ ^
+<sql-statement>
+-- Miscellaneous stuff.
+SELECT 'true'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT 'false'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT 'null'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT ' true '::jsonb; -- OK, even with extra whitespace
+</sql-statement>
+<sql-statement>
+SELECT 'true false'::jsonb; -- ERROR, too many values
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'true false'::jsonb; -- ERROR, too many values
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected end of input, but found "false".
+CONTEXT: JSON data, line 1: true false
+
+ SELECT 'true false'::jsonb; -- ERROR, too many values
+ ^
+<sql-statement>
+SELECT 'true, false'::jsonb; -- ERROR, too many values
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'true, false'::jsonb; -- ERROR, too many values
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected end of input, but found ",".
+CONTEXT: JSON data, line 1: true,...
+
+ SELECT 'true, false'::jsonb; -- ERROR, too many values
+ ^
+<sql-statement>
+SELECT 'truf'::jsonb; -- ERROR, not a keyword
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'truf'::jsonb; -- ERROR, not a keyword
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "truf" is invalid.
+CONTEXT: JSON data, line 1: truf
+
+ SELECT 'truf'::jsonb; -- ERROR, not a keyword
+ ^
+<sql-statement>
+SELECT 'trues'::jsonb; -- ERROR, not a keyword
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'trues'::jsonb; -- ERROR, not a keyword
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Token "trues" is invalid.
+CONTEXT: JSON data, line 1: trues
+
+ SELECT 'trues'::jsonb; -- ERROR, not a keyword
+ ^
+<sql-statement>
+SELECT ''::jsonb; -- ERROR, no value
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ''::jsonb; -- ERROR, no value
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: The input string ended unexpectedly.
+CONTEXT: JSON data, line 1:
+
+ SELECT ''::jsonb; -- ERROR, no value
+ ^
+<sql-statement>
+SELECT ' '::jsonb; -- ERROR, no value
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ' '::jsonb; -- ERROR, no value
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: The input string ended unexpectedly.
+CONTEXT: JSON data, line 1:
+
+ SELECT ' '::jsonb; -- ERROR, no value
+ ^
+<sql-statement>
+-- Multi-line JSON input to check ERROR reporting
+SELECT '{
+ "one": 1,
+ "two":"two",
+ "three":
+ true}'::jsonb; -- OK
+</sql-statement>
+<sql-statement>
+SELECT '{
+ "one": 1,
+ "two":,"two", -- ERROR extraneous comma before field "two"
+ "three":
+ true}'::jsonb;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected JSON value, but found ",".
+CONTEXT: JSON data, line 3: "two":,...
+
+ SELECT '{
+ ^
+<sql-statement>
+SELECT '{
+ "one": 1,
+ "two":"two",
+ "averyveryveryveryveryveryveryveryveryverylongfieldname":}'::jsonb;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '{
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type json
+DETAIL: Expected JSON value, but found "}".
+CONTEXT: JSON data, line 4: ...yveryveryveryveryveryveryveryverylongfieldname":}
+
+ SELECT '{
+ ^
+<sql-statement>
+-- ERROR missing value for last field
+-- make sure jsonb is passed through json generators without being escaped
+SELECT array_to_json(ARRAY [jsonb '{"a":1}', jsonb '{"b":[2,3]}']);
+</sql-statement>
+<sql-statement>
+-- anyarray column
+CREATE TEMP TABLE rows AS
+SELECT x, 'txt' || x as y
+FROM generate_series(1,3) AS x;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ -- anyarray column
+ ^
+<sql-statement>
+analyze rows;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ analyze rows;
+ ^
+<sql-statement>
+select attname, to_jsonb(histogram_bounds) histogram_bounds
+from pg_stats
+where tablename = 'rows' and
+ schemaname = pg_my_temp_schema()::regnamespace::text
+order by 1;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.pg_stats
+
+<sql-statement>
+-- to_jsonb, timestamps
+select to_jsonb(timestamp '2014-05-28 12:22:35.614298');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ -- to_jsonb, timestamps
+ ^
+ -stdin-:<main>:2:8: Error: At function: PgCall
+ select to_jsonb(timestamp '2014-05-28 12:22:35.614298');
+ ^
+ -stdin-:<main>:2:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (timestamp)
+ select to_jsonb(timestamp '2014-05-28 12:22:35.614298');
+ ^
+<sql-statement>
+BEGIN;
+</sql-statement>
+<sql-statement>
+SET LOCAL TIME ZONE 10.5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: timezone
+ SET LOCAL TIME ZONE 10.5;
+ ^
+<sql-statement>
+select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (timestamptz)
+ select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+<sql-statement>
+SET LOCAL TIME ZONE -8;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: timezone
+ SET LOCAL TIME ZONE -8;
+ ^
+<sql-statement>
+select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (timestamptz)
+ select to_jsonb(timestamptz '2014-05-28 12:22:35.614298-04');
+ ^
+<sql-statement>
+COMMIT;
+</sql-statement>
+<sql-statement>
+select to_jsonb(date '2014-05-28');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_jsonb(date '2014-05-28');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_jsonb(date '2014-05-28');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (date)
+ select to_jsonb(date '2014-05-28');
+ ^
+<sql-statement>
+select to_jsonb(date 'Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_jsonb(date 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_jsonb(date 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (date)
+ select to_jsonb(date 'Infinity');
+ ^
+<sql-statement>
+select to_jsonb(date '-Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_jsonb(date '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_jsonb(date '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (date)
+ select to_jsonb(date '-Infinity');
+ ^
+<sql-statement>
+select to_jsonb(timestamp 'Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_jsonb(timestamp 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_jsonb(timestamp 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (timestamp)
+ select to_jsonb(timestamp 'Infinity');
+ ^
+<sql-statement>
+select to_jsonb(timestamp '-Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_jsonb(timestamp '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_jsonb(timestamp '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (timestamp)
+ select to_jsonb(timestamp '-Infinity');
+ ^
+<sql-statement>
+select to_jsonb(timestamptz 'Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_jsonb(timestamptz 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_jsonb(timestamptz 'Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (timestamptz)
+ select to_jsonb(timestamptz 'Infinity');
+ ^
+<sql-statement>
+select to_jsonb(timestamptz '-Infinity');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ select to_jsonb(timestamptz '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ select to_jsonb(timestamptz '-Infinity');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc to_jsonb with given argument types: (timestamptz)
+ select to_jsonb(timestamptz '-Infinity');
+ ^
+<sql-statement>
+--jsonb_agg
+SELECT jsonb_agg(q)
+ FROM ( SELECT $$a$$ || x AS b, y AS c,
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ROW(y.*,ARRAY[4,5,6])] AS z
+ FROM generate_series(1,2) x,
+ generate_series(4,5) y) q;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:4:16: Error: alternative is not implemented yet : 138
+ ARRAY[ROW(x.*,ARRAY[1,2,3]),
+ ^
+<sql-statement>
+SELECT jsonb_agg(q ORDER BY x, y)
+ FROM rows q;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order
+ SELECT jsonb_agg(q ORDER BY x, y)
+ ^
+<sql-statement>
+UPDATE rows SET x = NULL WHERE x = 1;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+SELECT jsonb_agg(q ORDER BY x NULLS FIRST, y)
+ FROM rows q;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order
+ SELECT jsonb_agg(q ORDER BY x NULLS FIRST, y)
+ ^
+<sql-statement>
+-- jsonb extraction functions
+CREATE TEMP TABLE test_jsonb (
+ json_type text,
+ test_json jsonb
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO test_jsonb VALUES
+('scalar','"a scalar"'),
+('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'),
+('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}');
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'scalar';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 'field2' FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'scalar';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'scalar';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 9 FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 6 FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 7 FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 'field4' FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 'field5' FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 'field6' FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'scalar';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'scalar';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Generator functions are not allowed in: SELECT
+ SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'scalar';
+ ^
+<sql-statement>
+SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Generator functions are not allowed in: SELECT
+ SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'array';
+ ^
+<sql-statement>
+SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Generator functions are not allowed in: SELECT
+ SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'object';
+ ^
+<sql-statement>
+-- nulls
+SELECT (test_json->'field3') IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT (test_json->>'field3') IS NULL AS expect_true FROM test_jsonb WHERE json_type = 'object';
+</sql-statement>
+<sql-statement>
+SELECT (test_json->3) IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+SELECT (test_json->>3) IS NULL AS expect_true FROM test_jsonb WHERE json_type = 'array';
+</sql-statement>
+<sql-statement>
+-- corner cases
+select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb -> null::text;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F5FC2629D90)
+__libc_start_main+128 (0x7F5FC2629E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/jsonb_jsonpath.err b/ydb/library/yql/tests/postgresql/cases/jsonb_jsonpath.err
new file mode 100644
index 0000000000..ac8e47f3f4
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/jsonb_jsonpath.err
@@ -0,0 +1,32 @@
+<sql-statement>
+select jsonb '{"a": 12}' @? '$';
+</sql-statement>
+<sql-statement>
+select jsonb '{"a": 12}' @? '1';
+</sql-statement>
+<sql-statement>
+select jsonb '{"a": 12}' @? '$.a.b';
+</sql-statement>
+<sql-statement>
+select jsonb '{"a": 12}' @? '$.b';
+</sql-statement>
+<sql-statement>
+select jsonb '{"a": 12}' @? '$.a + 2';
+</sql-statement>
+<sql-statement>
+select jsonb '{"a": 12}' @? '$.b + 2';
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FDC84429D90)
+__libc_start_main+128 (0x7FDC84429E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/jsonpath.err b/ydb/library/yql/tests/postgresql/cases/jsonpath.err
new file mode 100644
index 0000000000..d0b84d814d
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/jsonpath.err
@@ -0,0 +1,743 @@
+<sql-statement>
+--jsonpath io
+select ''::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ --jsonpath io
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath: ""
+
+ --jsonpath io
+ ^
+<sql-statement>
+select '$'::jsonpath;
+</sql-statement>
+<sql-statement>
+select 'strict $'::jsonpath;
+</sql-statement>
+<sql-statement>
+select 'lax $'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.v'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.*'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.*[*]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a[*]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a[*][*]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$[*]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$[0]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$[*][0]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$[*].a'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$[*][0].a.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.**.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.**{2}.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.**{2 to 2}.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.**{2 to 5}.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.**{0 to 5}.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.**{5 to last}.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.**{last}.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a.**{last to 5}.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$+1'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$-1'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$--+1'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a/+-1'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1 * 2 + 4 % -3 != false'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '"\b\f\r\n\t\v\"\''\\"'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '"\x50\u0067\u{53}\u{051}\u{00004C}"'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.foo\x50\u0067\u{53}\u{051}\u{00004C}\t\"bar'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '"\z"'::jsonpath; -- unrecognized escape is just the literal char
+</sql-statement>
+<sql-statement>
+select '$.g ? ($.a == 1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (@ == 1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (@.a == 1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (@.a == 1 || @.a == 4)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (@.a == 1 && @.a == 4)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (@.a == 1 || @.a == 4 && @.b == 7)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (@.a == 1 || !(@.a == 4) && @.b == 7)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (@.a == 1 || !(@.x >= 123 || @.a == 4) && @.b == 7)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (@.x >= @[*]?(@.a > "abc"))'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? ((@.x >= 123 || @.a == 4) is unknown)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (exists (@.x))'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (exists (@.x ? (@ == 14)))'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? ((@.x >= 123 || @.a == 4) && exists (@.x ? (@ == 14)))'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (+@.x >= +-(+@.a + 2))'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$a'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$a.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$a[*]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.g ? (@.zip == $zip)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a[1,2, 3 to 16]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a[$a + 1, ($b[*]) to -($[0] * 2)]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.a[$.a.size() - 3]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select 'last'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select 'last'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: LAST is allowed only in array subscripts
+
+ select 'last'::jsonpath;
+ ^
+<sql-statement>
+select '"last"'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.last'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (last > 0)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (last > 0)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: LAST is allowed only in array subscripts
+
+ select '$ ? (last > 0)'::jsonpath;
+ ^
+<sql-statement>
+select '$[last]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$[$[0] ? (last > 0)]'::jsonpath;
+</sql-statement>
+<sql-statement>
+select 'null.type()'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1.type()'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '(1).type()'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1.2.type()'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '"aaa".type()'::jsonpath;
+</sql-statement>
+<sql-statement>
+select 'true.type()'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.double().floor().ceiling().abs()'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.keyvalue().key'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.datetime()'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$.datetime("datetime template")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ starts with "abc")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ starts with $var)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ like_regex "(invalid pattern")'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@ like_regex "(invalid pattern")'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid regular expression: parentheses () not balanced
+
+ select '$ ? (@ like_regex "(invalid pattern")'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@ like_regex "pattern")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ like_regex "pattern" flag "")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ like_regex "pattern" flag "i")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ like_regex "pattern" flag "is")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ like_regex "pattern" flag "isim")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ like_regex "pattern" flag "xsms")'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@ like_regex "pattern" flag "xsms")'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: XQuery "x" flag (expanded regular expressions) is not implemented
+
+ select '$ ? (@ like_regex "pattern" flag "xsms")'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@ like_regex "pattern" flag "q")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ like_regex "pattern" flag "iq")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ like_regex "pattern" flag "smixq")'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath
+DETAIL: unrecognized flag character "a" in LIKE_REGEX predicate
+
+ select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath;
+ ^
+<sql-statement>
+select '$ < 1'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '($ < 1) || $.a.b <= $x'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '@ + 1'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '@ + 1'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: @ is not allowed in root expressions
+
+ select '@ + 1'::jsonpath;
+ ^
+<sql-statement>
+select '($).a.b'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '($.a.b).c.d'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '($.a.b + -$.x.y).c.d'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '(-+$.a.b).c.d'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1 + ($.a.b + 2).c.d'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1 + ($.a.b > 2).c.d'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '($)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '(($))'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '((($ + 1)).a + ((2)).b ? ((((@ > 1)) || (exists(@.c)))))'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < 1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < .1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < .1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < .1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < -.1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < -.1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < -.1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < +.1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < +.1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < +.1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < 0.1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -0.1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +0.1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < 10.1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -10.1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +10.1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < 1e1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -1e1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +1e1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < .1e1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < .1e1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < .1e1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < -.1e1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < -.1e1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < -.1e1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < +.1e1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < +.1e1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < +.1e1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < 0.1e1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -0.1e1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +0.1e1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < 10.1e1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -10.1e1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +10.1e1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < 1e-1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -1e-1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +1e-1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < .1e-1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < .1e-1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < .1e-1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < -.1e-1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < -.1e-1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < -.1e-1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < +.1e-1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < +.1e-1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < +.1e-1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < 0.1e-1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -0.1e-1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +0.1e-1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < 10.1e-1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -10.1e-1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +10.1e-1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < 1e+1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -1e+1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +1e+1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < .1e+1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < .1e+1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < .1e+1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < -.1e+1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < -.1e+1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < -.1e+1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < +.1e+1)'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$ ? (@.a < +.1e+1)'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '$ ? (@.a < +.1e+1)'::jsonpath;
+ ^
+<sql-statement>
+select '$ ? (@.a < 0.1e+1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -0.1e+1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +0.1e+1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < 10.1e+1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < -10.1e+1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '$ ? (@.a < +10.1e+1)'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '0'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '00'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '00'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected IDENT_P at end of jsonpath input
+
+ select '00'::jsonpath;
+ ^
+<sql-statement>
+select '0.0'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '0.000'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '0.000e1'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '0.000e2'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '0.000e3'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '0.0010'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '0.0010e-1'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '0.0010e+1'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '0.0010e+2'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1e'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '1e'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid floating point number at or near "1e" of jsonpath input
+
+ select '1e'::jsonpath;
+ ^
+<sql-statement>
+select '1.e'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1.2e'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '1.2e'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid floating point number at or near "1.2e" of jsonpath input
+
+ select '1.2e'::jsonpath;
+ ^
+<sql-statement>
+select '1.2.e'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '(1.2).e'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1e3'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1.e3'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1.e3.e'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1.e3.e4'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1.2e3'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1.2.e3'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '(1.2).e3'::jsonpath;
+</sql-statement>
+<sql-statement>
+select '1..e'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '1..e'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '1..e'::jsonpath;
+ ^
+<sql-statement>
+select '1..e3'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '1..e3'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected '.' at or near "." of jsonpath input
+
+ select '1..e3'::jsonpath;
+ ^
+<sql-statement>
+select '(1.).e'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '(1.).e'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected ')' at or near ")" of jsonpath input
+
+ select '(1.).e'::jsonpath;
+ ^
+<sql-statement>
+select '(1.).e3'::jsonpath;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '(1.).e3'::jsonpath;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: syntax error, unexpected ')' at or near ")" of jsonpath input
+
+ select '(1.).e3'::jsonpath;
+ ^
diff --git a/ydb/library/yql/tests/postgresql/cases/jsonpath_encoding.err b/ydb/library/yql/tests/postgresql/cases/jsonpath_encoding.err
new file mode 100644
index 0000000000..3852a5d470
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/jsonpath_encoding.err
@@ -0,0 +1,278 @@
+<sql-statement>
+--
+-- encoding-sensitive tests for jsonpath
+--
+SELECT getdatabaseencoding(); -- just to label the results files
+</sql-statement>
+<sql-statement>
+-- checks for double-quoted values
+-- basic unicode input
+SELECT '"\u"'::jsonpath; -- ERROR, incomplete escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- checks for double-quoted values
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid unicode sequence at or near "\u" of jsonpath input
+
+ -- checks for double-quoted values
+ ^
+<sql-statement>
+SELECT '"\u00"'::jsonpath; -- ERROR, incomplete escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\u00"'::jsonpath; -- ERROR, incomplete escape
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid unicode sequence at or near "\u00" of jsonpath input
+
+ SELECT '"\u00"'::jsonpath; -- ERROR, incomplete escape
+ ^
+<sql-statement>
+SELECT '"\u000g"'::jsonpath; -- ERROR, g is not a hex digit
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\u000g"'::jsonpath; -- ERROR, g is not a hex digit
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid unicode sequence at or near "\u000" of jsonpath input
+
+ SELECT '"\u000g"'::jsonpath; -- ERROR, g is not a hex digit
+ ^
+<sql-statement>
+SELECT '"\u0000"'::jsonpath; -- OK, legal escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '"\u0000"'::jsonpath; -- OK, legal escape
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: unsupported Unicode escape sequence
+DETAIL: \u0000 cannot be converted to text.
+
+ SELECT '"\u0000"'::jsonpath; -- OK, legal escape
+ ^
+<sql-statement>
+SELECT '"\uaBcD"'::jsonpath; -- OK, uppercase and lower case both OK
+</sql-statement>
+<sql-statement>
+-- handling of unicode surrogate pairs
+select '"\ud83d\ude04\ud83d\udc36"'::jsonpath as correct_in_utf8;
+</sql-statement>
+<sql-statement>
+select '"\ud83d\ud83d"'::jsonpath; -- 2 high surrogates in a row
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '"\ud83d\ud83d"'::jsonpath; -- 2 high surrogates in a row
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath
+DETAIL: Unicode high surrogate must not follow a high surrogate.
+
+ select '"\ud83d\ud83d"'::jsonpath; -- 2 high surrogates in a row
+ ^
+<sql-statement>
+select '"\ude04\ud83d"'::jsonpath; -- surrogates in wrong order
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '"\ude04\ud83d"'::jsonpath; -- surrogates in wrong order
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath
+DETAIL: Unicode low surrogate must follow a high surrogate.
+
+ select '"\ude04\ud83d"'::jsonpath; -- surrogates in wrong order
+ ^
+<sql-statement>
+select '"\ud83dX"'::jsonpath; -- orphan high surrogate
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '"\ud83dX"'::jsonpath; -- orphan high surrogate
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath
+DETAIL: Unicode low surrogate must follow a high surrogate.
+
+ select '"\ud83dX"'::jsonpath; -- orphan high surrogate
+ ^
+<sql-statement>
+select '"\ude04X"'::jsonpath; -- orphan low surrogate
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '"\ude04X"'::jsonpath; -- orphan low surrogate
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath
+DETAIL: Unicode low surrogate must follow a high surrogate.
+
+ select '"\ude04X"'::jsonpath; -- orphan low surrogate
+ ^
+<sql-statement>
+--handling of simple unicode escapes
+select '"the Copyright \u00a9 sign"'::jsonpath as correct_in_utf8;
+</sql-statement>
+<sql-statement>
+select '"dollar \u0024 character"'::jsonpath as correct_everywhere;
+</sql-statement>
+<sql-statement>
+select '"dollar \\u0024 character"'::jsonpath as not_an_escape;
+</sql-statement>
+<sql-statement>
+select '"null \u0000 escape"'::jsonpath as not_unescaped;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '"null \u0000 escape"'::jsonpath as not_unescaped;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: unsupported Unicode escape sequence
+DETAIL: \u0000 cannot be converted to text.
+
+ select '"null \u0000 escape"'::jsonpath as not_unescaped;
+ ^
+<sql-statement>
+select '"null \\u0000 escape"'::jsonpath as not_an_escape;
+</sql-statement>
+<sql-statement>
+-- checks for quoted key names
+-- basic unicode input
+SELECT '$."\u"'::jsonpath; -- ERROR, incomplete escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- checks for quoted key names
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid unicode sequence at or near "\u" of jsonpath input
+
+ -- checks for quoted key names
+ ^
+<sql-statement>
+SELECT '$."\u00"'::jsonpath; -- ERROR, incomplete escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '$."\u00"'::jsonpath; -- ERROR, incomplete escape
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid unicode sequence at or near "\u00" of jsonpath input
+
+ SELECT '$."\u00"'::jsonpath; -- ERROR, incomplete escape
+ ^
+<sql-statement>
+SELECT '$."\u000g"'::jsonpath; -- ERROR, g is not a hex digit
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '$."\u000g"'::jsonpath; -- ERROR, g is not a hex digit
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid unicode sequence at or near "\u000" of jsonpath input
+
+ SELECT '$."\u000g"'::jsonpath; -- ERROR, g is not a hex digit
+ ^
+<sql-statement>
+SELECT '$."\u0000"'::jsonpath; -- OK, legal escape
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '$."\u0000"'::jsonpath; -- OK, legal escape
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: unsupported Unicode escape sequence
+DETAIL: \u0000 cannot be converted to text.
+
+ SELECT '$."\u0000"'::jsonpath; -- OK, legal escape
+ ^
+<sql-statement>
+SELECT '$."\uaBcD"'::jsonpath; -- OK, uppercase and lower case both OK
+</sql-statement>
+<sql-statement>
+-- handling of unicode surrogate pairs
+select '$."\ud83d\ude04\ud83d\udc36"'::jsonpath as correct_in_utf8;
+</sql-statement>
+<sql-statement>
+select '$."\ud83d\ud83d"'::jsonpath; -- 2 high surrogates in a row
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$."\ud83d\ud83d"'::jsonpath; -- 2 high surrogates in a row
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath
+DETAIL: Unicode high surrogate must not follow a high surrogate.
+
+ select '$."\ud83d\ud83d"'::jsonpath; -- 2 high surrogates in a row
+ ^
+<sql-statement>
+select '$."\ude04\ud83d"'::jsonpath; -- surrogates in wrong order
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$."\ude04\ud83d"'::jsonpath; -- surrogates in wrong order
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath
+DETAIL: Unicode low surrogate must follow a high surrogate.
+
+ select '$."\ude04\ud83d"'::jsonpath; -- surrogates in wrong order
+ ^
+<sql-statement>
+select '$."\ud83dX"'::jsonpath; -- orphan high surrogate
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$."\ud83dX"'::jsonpath; -- orphan high surrogate
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath
+DETAIL: Unicode low surrogate must follow a high surrogate.
+
+ select '$."\ud83dX"'::jsonpath; -- orphan high surrogate
+ ^
+<sql-statement>
+select '$."\ude04X"'::jsonpath; -- orphan low surrogate
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$."\ude04X"'::jsonpath; -- orphan low surrogate
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type jsonpath
+DETAIL: Unicode low surrogate must follow a high surrogate.
+
+ select '$."\ude04X"'::jsonpath; -- orphan low surrogate
+ ^
+<sql-statement>
+--handling of simple unicode escapes
+select '$."the Copyright \u00a9 sign"'::jsonpath as correct_in_utf8;
+</sql-statement>
+<sql-statement>
+select '$."dollar \u0024 character"'::jsonpath as correct_everywhere;
+</sql-statement>
+<sql-statement>
+select '$."dollar \\u0024 character"'::jsonpath as not_an_escape;
+</sql-statement>
+<sql-statement>
+select '$."null \u0000 escape"'::jsonpath as not_unescaped;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select '$."null \u0000 escape"'::jsonpath as not_unescaped;
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: unsupported Unicode escape sequence
+DETAIL: \u0000 cannot be converted to text.
+
+ select '$."null \u0000 escape"'::jsonpath as not_unescaped;
+ ^
+<sql-statement>
+select '$."null \\u0000 escape"'::jsonpath as not_an_escape;
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/limit.err b/ydb/library/yql/tests/postgresql/cases/limit.err
new file mode 100644
index 0000000000..7961c4b0fb
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/limit.err
@@ -0,0 +1,716 @@
+<sql-statement>
+--
+-- LIMIT
+-- Check the LIMIT/OFFSET feature of SELECT
+--
+SELECT ''::text AS two, unique1, unique2, stringu1
+ FROM onek WHERE unique1 > 50
+ ORDER BY unique1 LIMIT 2;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT ''::text AS five, unique1, unique2, stringu1
+ FROM onek WHERE unique1 > 60
+ ORDER BY unique1 LIMIT 5;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT ''::text AS two, unique1, unique2, stringu1
+ FROM onek WHERE unique1 > 60 AND unique1 < 63
+ ORDER BY unique1 LIMIT 5;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT ''::text AS three, unique1, unique2, stringu1
+ FROM onek WHERE unique1 > 100
+ ORDER BY unique1 LIMIT 3 OFFSET 20;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT ''::text AS zero, unique1, unique2, stringu1
+ FROM onek WHERE unique1 < 50
+ ORDER BY unique1 DESC LIMIT 8 OFFSET 99;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT ''::text AS eleven, unique1, unique2, stringu1
+ FROM onek WHERE unique1 < 50
+ ORDER BY unique1 DESC LIMIT 20 OFFSET 39;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT ''::text AS ten, unique1, unique2, stringu1
+ FROM onek
+ ORDER BY unique1 OFFSET 990;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT ''::text AS five, unique1, unique2, stringu1
+ FROM onek
+ ORDER BY unique1 OFFSET 990 LIMIT 5;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+SELECT ''::text AS five, unique1, unique2, stringu1
+ FROM onek
+ ORDER BY unique1 LIMIT 5 OFFSET 900;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+-- Test null limit and offset. The planner would discard a simple null
+-- constant, so to ensure executor is exercised, do this:
+select * from int8_tbl limit (case when random() < 0.5 then null::bigint end);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.int8_tbl
+
+<sql-statement>
+select * from int8_tbl offset (case when random() < 0.5 then null::bigint end);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.int8_tbl
+
+<sql-statement>
+-- Test assorted cases involving backwards fetch from a LIMIT plan node
+begin;
+</sql-statement>
+<sql-statement>
+declare c1 cursor for select * from int8_tbl limit 10;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 304
+ declare c1 cursor for select * from int8_tbl limit 10;
+ ^
+<sql-statement>
+fetch all in c1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c1;
+ ^
+<sql-statement>
+fetch 1 in c1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch 1 in c1;
+ ^
+<sql-statement>
+fetch backward 1 in c1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c1;
+ ^
+<sql-statement>
+fetch backward all in c1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward all in c1;
+ ^
+<sql-statement>
+fetch backward 1 in c1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c1;
+ ^
+<sql-statement>
+fetch all in c1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c1;
+ ^
+<sql-statement>
+declare c2 cursor for select * from int8_tbl limit 3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 304
+ declare c2 cursor for select * from int8_tbl limit 3;
+ ^
+<sql-statement>
+fetch all in c2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c2;
+ ^
+<sql-statement>
+fetch 1 in c2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch 1 in c2;
+ ^
+<sql-statement>
+fetch backward 1 in c2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c2;
+ ^
+<sql-statement>
+fetch backward all in c2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward all in c2;
+ ^
+<sql-statement>
+fetch backward 1 in c2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c2;
+ ^
+<sql-statement>
+fetch all in c2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c2;
+ ^
+<sql-statement>
+declare c3 cursor for select * from int8_tbl offset 3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 304
+ declare c3 cursor for select * from int8_tbl offset 3;
+ ^
+<sql-statement>
+fetch all in c3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c3;
+ ^
+<sql-statement>
+fetch 1 in c3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch 1 in c3;
+ ^
+<sql-statement>
+fetch backward 1 in c3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c3;
+ ^
+<sql-statement>
+fetch backward all in c3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward all in c3;
+ ^
+<sql-statement>
+fetch backward 1 in c3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c3;
+ ^
+<sql-statement>
+fetch all in c3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c3;
+ ^
+<sql-statement>
+declare c4 cursor for select * from int8_tbl offset 10;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 304
+ declare c4 cursor for select * from int8_tbl offset 10;
+ ^
+<sql-statement>
+fetch all in c4;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c4;
+ ^
+<sql-statement>
+fetch 1 in c4;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch 1 in c4;
+ ^
+<sql-statement>
+fetch backward 1 in c4;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c4;
+ ^
+<sql-statement>
+fetch backward all in c4;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward all in c4;
+ ^
+<sql-statement>
+fetch backward 1 in c4;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c4;
+ ^
+<sql-statement>
+fetch all in c4;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c4;
+ ^
+<sql-statement>
+declare c5 cursor for select * from int8_tbl order by q1 fetch first 2 rows with ties;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 304
+ declare c5 cursor for select * from int8_tbl order by q1 fetch first 2 rows with ties;
+ ^
+<sql-statement>
+fetch all in c5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c5;
+ ^
+<sql-statement>
+fetch 1 in c5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch 1 in c5;
+ ^
+<sql-statement>
+fetch backward 1 in c5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c5;
+ ^
+<sql-statement>
+fetch backward 1 in c5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward 1 in c5;
+ ^
+<sql-statement>
+fetch all in c5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c5;
+ ^
+<sql-statement>
+fetch backward all in c5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward all in c5;
+ ^
+<sql-statement>
+fetch all in c5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch all in c5;
+ ^
+<sql-statement>
+fetch backward all in c5;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 259
+ fetch backward all in c5;
+ ^
+<sql-statement>
+rollback;
+</sql-statement>
+<sql-statement>
+-- Stress test for variable LIMIT in conjunction with bounded-heap sorting
+SELECT
+ (SELECT n
+ FROM (VALUES (1)) AS x,
+ (SELECT n FROM generate_series(1,10) AS n
+ ORDER BY n LIMIT 1 OFFSET s-1) AS y) AS z
+ FROM generate_series(1,10) AS s;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:6:40: Error: Columns are not allowed in: OFFSET
+ ORDER BY n LIMIT 1 OFFSET s-1) AS y) AS z
+ ^
+<sql-statement>
+--
+-- Test behavior of volatile and set-returning functions in conjunction
+-- with ORDER BY and LIMIT.
+--
+create temp sequence testseq;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 278
+ --
+ ^
+<sql-statement>
+explain (verbose, costs off)
+select unique1, unique2, nextval('testseq')
+ from tenk1 order by unique2 limit 10;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (verbose, costs off)
+ ^
+<sql-statement>
+select unique1, unique2, nextval('testseq')
+ from tenk1 order by unique2 limit 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+select currval('testseq');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select currval('testseq');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: relation "testseq" does not exist
+
+ select currval('testseq');
+ ^
+<sql-statement>
+explain (verbose, costs off)
+select unique1, unique2, nextval('testseq')
+ from tenk1 order by tenthous limit 10;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (verbose, costs off)
+ ^
+<sql-statement>
+select unique1, unique2, nextval('testseq')
+ from tenk1 order by tenthous limit 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+select currval('testseq');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ select currval('testseq');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: relation "testseq" does not exist
+
+ select currval('testseq');
+ ^
+<sql-statement>
+explain (verbose, costs off)
+select unique1, unique2, generate_series(1,10)
+ from tenk1 order by unique2 limit 7;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (verbose, costs off)
+ ^
+<sql-statement>
+select unique1, unique2, generate_series(1,10)
+ from tenk1 order by unique2 limit 7;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:26: Error: Generator functions are not allowed in: SELECT
+ select unique1, unique2, generate_series(1,10)
+ ^
+<sql-statement>
+explain (verbose, costs off)
+select unique1, unique2, generate_series(1,10)
+ from tenk1 order by tenthous limit 7;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (verbose, costs off)
+ ^
+<sql-statement>
+select unique1, unique2, generate_series(1,10)
+ from tenk1 order by tenthous limit 7;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:26: Error: Generator functions are not allowed in: SELECT
+ select unique1, unique2, generate_series(1,10)
+ ^
+<sql-statement>
+-- use of random() is to keep planner from folding the expressions together
+explain (verbose, costs off)
+select generate_series(0,2) as s1, generate_series((random()*.1)::int,2) as s2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ -- use of random() is to keep planner from folding the expressions together
+ ^
+<sql-statement>
+select generate_series(0,2) as s1, generate_series((random()*.1)::int,2) as s2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Generator functions are not allowed in: SELECT
+ select generate_series(0,2) as s1, generate_series((random()*.1)::int,2) as s2;
+ ^
+<sql-statement>
+explain (verbose, costs off)
+select generate_series(0,2) as s1, generate_series((random()*.1)::int,2) as s2
+order by s2 desc;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ explain (verbose, costs off)
+ ^
+<sql-statement>
+select generate_series(0,2) as s1, generate_series((random()*.1)::int,2) as s2
+order by s2 desc;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: Generator functions are not allowed in: SELECT
+ select generate_series(0,2) as s1, generate_series((random()*.1)::int,2) as s2
+ ^
+<sql-statement>
+-- test for failure to set all aggregates' aggtranstype
+explain (verbose, costs off)
+select sum(tenthous) as s1, sum(tenthous) + random()*0 as s2
+ from tenk1 group by thousand order by thousand limit 3;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ -- test for failure to set all aggregates' aggtranstype
+ ^
+<sql-statement>
+select sum(tenthous) as s1, sum(tenthous) + random()*0 as s2
+ from tenk1 group by thousand order by thousand limit 3;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+--
+-- FETCH FIRST
+-- Check the WITH TIES clause
+--
+SELECT thousand
+ FROM onek WHERE thousand < 5
+ ORDER BY thousand FETCH FIRST 2 ROW WITH TIES;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: LimitOption unsupported value: 1
+ --
+ ^
+<sql-statement>
+SELECT thousand
+ FROM onek WHERE thousand < 5
+ ORDER BY thousand FETCH FIRST ROWS WITH TIES;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: LimitOption unsupported value: 1
+ SELECT thousand
+ ^
+<sql-statement>
+SELECT thousand
+ FROM onek WHERE thousand < 5
+ ORDER BY thousand FETCH FIRST 1 ROW WITH TIES;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: LimitOption unsupported value: 1
+ SELECT thousand
+ ^
+<sql-statement>
+SELECT thousand
+ FROM onek WHERE thousand < 5
+ ORDER BY thousand FETCH FIRST 2 ROW ONLY;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+-- SKIP LOCKED and WITH TIES are incompatible
+SELECT thousand
+ FROM onek WHERE thousand < 5
+ ORDER BY thousand FETCH FIRST 1 ROW WITH TIES FOR UPDATE SKIP LOCKED;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: ERROR: SKIP LOCKED and WITH TIES options cannot be used together
+
+ -- SKIP LOCKED and WITH TIES are incompatible
+ ^
+<sql-statement>
+-- should fail
+SELECT ''::text AS two, unique1, unique2, stringu1
+ FROM onek WHERE unique1 > 50
+ FETCH FIRST 2 ROW WITH TIES;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: ERROR: WITH TIES cannot be specified without ORDER BY clause
+
+ -- should fail
+ ^
+<sql-statement>
+-- test ruleutils
+CREATE VIEW limit_thousand_v_1 AS SELECT thousand FROM onek WHERE thousand < 995
+ ORDER BY thousand FETCH FIRST 5 ROWS WITH TIES OFFSET 10;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ -- test ruleutils
+ ^
+<sql-statement>
+\d+ limit_thousand_v_1
+</sql-statement>
+Metacommand \d+ limit_thousand_v_1 is not supported
+<sql-statement>
+CREATE VIEW limit_thousand_v_2 AS SELECT thousand FROM onek WHERE thousand < 995
+ ORDER BY thousand OFFSET 10 FETCH FIRST 5 ROWS ONLY;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ CREATE VIEW limit_thousand_v_2 AS SELECT thousand FROM onek WHERE thousand < 995
+ ^
+<sql-statement>
+\d+ limit_thousand_v_2
+</sql-statement>
+Metacommand \d+ limit_thousand_v_2 is not supported
+<sql-statement>
+CREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995
+ ORDER BY thousand FETCH FIRST NULL ROWS WITH TIES; -- fails
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ CREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995
+ ^
+<sql-statement>
+CREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995
+ ORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ CREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995
+ ^
+<sql-statement>
+\d+ limit_thousand_v_3
+</sql-statement>
+Metacommand \d+ limit_thousand_v_3 is not supported
+<sql-statement>
+CREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995
+ ORDER BY thousand FETCH FIRST NULL ROWS ONLY;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ CREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995
+ ^
+<sql-statement>
+\d+ limit_thousand_v_4
+</sql-statement>
+Metacommand \d+ limit_thousand_v_4 is not supported
+<sql-statement>
+-- leave these views
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/name.err b/ydb/library/yql/tests/postgresql/cases/name.err
new file mode 100644
index 0000000000..85c245513f
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/name.err
@@ -0,0 +1,320 @@
+<sql-statement>
+--
+-- NAME
+-- all inputs are silently truncated at NAMEDATALEN-1 (63) characters
+--
+-- fixed-length by reference
+SELECT name 'name string' = name 'name string' AS "True";
+</sql-statement>
+<sql-statement>
+SELECT name 'name string' = name 'name string ' AS "False";
+</sql-statement>
+<sql-statement>
+--
+--
+--
+CREATE TABLE NAME_TBL(f1 name);
+</sql-statement>
+<sql-statement>
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR');
+</sql-statement>
+<sql-statement>
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr');
+</sql-statement>
+<sql-statement>
+INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
+</sql-statement>
+<sql-statement>
+INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
+</sql-statement>
+<sql-statement>
+INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
+</sql-statement>
+<sql-statement>
+INSERT INTO NAME_TBL(f1) VALUES ('');
+</sql-statement>
+<sql-statement>
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
+</sql-statement>
+<sql-statement>
+SELECT * FROM NAME_TBL;
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 <> '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 < '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 <= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 > '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 >= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*';
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*';
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]';
+</sql-statement>
+<sql-statement>
+SELECT c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*';
+</sql-statement>
+<sql-statement>
+DROP TABLE NAME_TBL;
+</sql-statement>
+<sql-statement>
+DO $$
+DECLARE r text[];
+BEGIN
+ r := parse_ident('Schemax.Tabley');
+ RAISE NOTICE '%', format('%I.%I', r[1], r[2]);
+ r := parse_ident('"SchemaX"."TableY"');
+ RAISE NOTICE '%', format('%I.%I', r[1], r[2]);
+END;
+$$;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 263
+ DO $$
+ ^
+<sql-statement>
+SELECT parse_ident('foo.boo');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident('foo.boo');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident('foo.boo');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident('foo.boo');
+ ^
+<sql-statement>
+SELECT parse_ident('foo.boo[]'); -- should fail
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident('foo.boo[]'); -- should fail
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident('foo.boo[]'); -- should fail
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident('foo.boo[]'); -- should fail
+ ^
+<sql-statement>
+SELECT parse_ident('foo.boo[]', strict => false); -- ok
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 118
+ SELECT parse_ident('foo.boo[]', strict => false); -- ok
+ ^
+<sql-statement>
+-- should fail
+SELECT parse_ident(' ');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ -- should fail
+ ^
+ -stdin-:<main>:2:8: Error: At function: PgCall
+ SELECT parse_ident(' ');
+ ^
+ -stdin-:<main>:2:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident(' ');
+ ^
+<sql-statement>
+SELECT parse_ident(' .aaa');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident(' .aaa');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident(' .aaa');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident(' .aaa');
+ ^
+<sql-statement>
+SELECT parse_ident(' aaa . ');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident(' aaa . ');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident(' aaa . ');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident(' aaa . ');
+ ^
+<sql-statement>
+SELECT parse_ident('aaa.a%b');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident('aaa.a%b');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident('aaa.a%b');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident('aaa.a%b');
+ ^
+<sql-statement>
+SELECT parse_ident(E'X\rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident(E'X\rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident(E'X\rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident(E'X\rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
+ ^
+<sql-statement>
+SELECT length(a[1]), length(a[2]) from parse_ident('"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy') as a ;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:8: Error: alternative is not implemented yet : 360
+ SELECT length(a[1]), length(a[2]) from parse_ident('"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy') as a ;
+ ^
+<sql-statement>
+SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (text)
+ SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"');
+ ^
+<sql-statement>
+SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"')::name[];
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"')::name[];
+ ^
+ -stdin-:<main>:1:91: Error: At function: PgCast
+ SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"')::name[];
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"')::name[];
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (text)
+ SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"')::name[];
+ ^
+<sql-statement>
+SELECT parse_ident(E'"c".X XXXX\002XXXXXX');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident(E'"c".X XXXX\002XXXXXX');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident(E'"c".X XXXX\002XXXXXX');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident(E'"c".X XXXX\002XXXXXX');
+ ^
+<sql-statement>
+SELECT parse_ident('1020');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident('1020');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident('1020');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident('1020');
+ ^
+<sql-statement>
+SELECT parse_ident('10.20');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident('10.20');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident('10.20');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident('10.20');
+ ^
+<sql-statement>
+SELECT parse_ident('.');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident('.');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident('.');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident('.');
+ ^
+<sql-statement>
+SELECT parse_ident('.1020');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident('.1020');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident('.1020');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident('.1020');
+ ^
+<sql-statement>
+SELECT parse_ident('xxx.1020');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT parse_ident('xxx.1020');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT parse_ident('xxx.1020');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc parse_ident with given argument types: (unknown)
+ SELECT parse_ident('xxx.1020');
+ ^
diff --git a/ydb/library/yql/tests/postgresql/cases/numeric.err b/ydb/library/yql/tests/postgresql/cases/numeric.err
new file mode 100644
index 0000000000..93e6819837
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/numeric.err
@@ -0,0 +1,2311 @@
+<sql-statement>
+--
+-- NUMERIC
+--
+CREATE TABLE num_data (id int4, val numeric(210,10));
+</sql-statement>
+<sql-statement>
+CREATE TABLE num_exp_add (id1 int4, id2 int4, expected numeric(210,10));
+</sql-statement>
+<sql-statement>
+CREATE TABLE num_exp_sub (id1 int4, id2 int4, expected numeric(210,10));
+</sql-statement>
+<sql-statement>
+CREATE TABLE num_exp_div (id1 int4, id2 int4, expected numeric(210,10));
+</sql-statement>
+<sql-statement>
+CREATE TABLE num_exp_mul (id1 int4, id2 int4, expected numeric(210,10));
+</sql-statement>
+<sql-statement>
+CREATE TABLE num_exp_sqrt (id int4, expected numeric(210,10));
+</sql-statement>
+<sql-statement>
+CREATE TABLE num_exp_ln (id int4, expected numeric(210,10));
+</sql-statement>
+<sql-statement>
+CREATE TABLE num_exp_log10 (id int4, expected numeric(210,10));
+</sql-statement>
+<sql-statement>
+CREATE TABLE num_exp_power_10_ln (id int4, expected numeric(210,10));
+</sql-statement>
+<sql-statement>
+CREATE TABLE num_result (id1 int4, id2 int4, result numeric(210,10));
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * The following EXPECTED results are computed by bc(1)
+-- * with a scale of 200
+-- ******************************
+BEGIN TRANSACTION;
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,2,'-34338492.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,2,'34338492.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,2,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,2,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,3,'4.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,3,'-4.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,3,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,3,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,4,'7799461.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,4,'-7799461.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,4,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,4,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,5,'16397.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,5,'-16397.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,5,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,5,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,6,'93901.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,6,'-93901.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,6,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,6,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,7,'-83028485');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,7,'83028485');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,7,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,7,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,8,'74881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,8,'-74881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,8,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,8,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (0,9,'-24926804.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (0,9,'24926804.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (0,9,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (0,9,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,2,'-34338492.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,2,'34338492.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,2,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,2,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,3,'4.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,3,'-4.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,3,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,3,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,4,'7799461.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,4,'-7799461.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,4,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,4,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,5,'16397.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,5,'-16397.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,5,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,5,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,6,'93901.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,6,'-93901.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,6,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,6,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,7,'-83028485');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,7,'83028485');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,7,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,7,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,8,'74881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,8,'-74881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,8,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,8,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (1,9,'-24926804.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (1,9,'24926804.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (1,9,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (1,9,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,0,'-34338492.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,0,'-34338492.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,1,'-34338492.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,1,'-34338492.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,2,'-68676984.430794094');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,2,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,2,'1179132047626883.596862135856320209');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,2,'1.00000000000000000000');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,3,'-34338487.905397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,3,'-34338496.525397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,3,'-147998901.44836127257');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,3,'-7967167.56737750510440835266');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,4,'-26539030.803497047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,4,'-42137953.627297047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,4,'-267821744976817.8111137106593');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,4,'-4.40267480046830116685');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,5,'-34322095.176906047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,5,'-34354889.253888047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,5,'-563049578578.769242506736077');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,5,'-2094.18866914563535496429');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,6,'-34244590.637766787');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,6,'-34432393.793027307');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,6,'-3224438592470.18449811926184222');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,6,'-365.68599891479766440940');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,7,'-117366977.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,7,'48689992.784602953');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,7,'2851072985828710.485883795');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,7,'.41357483778485235518');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,8,'-34263611.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,8,'-34413373.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,8,'-2571300635581.146276407');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,8,'-458.57416721727870888476');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (2,9,'-59265296.260444467');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (2,9,'-9411688.170349627');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (2,9,'855948866655588.453741509242968740');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (2,9,'1.37757299946438931811');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,0,'4.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,0,'4.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,1,'4.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,1,'4.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,2,'-34338487.905397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,2,'34338496.525397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,2,'-147998901.44836127257');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,2,'-.00000012551512084352');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,3,'8.62');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,3,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,3,'18.5761');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,3,'1.00000000000000000000');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,4,'7799465.7219');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,4,'-7799457.1019');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,4,'33615678.685289');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,4,'.00000055260225961552');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,5,'16401.348491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,5,'-16392.728491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,5,'70671.23589621');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,5,'.00026285234387695504');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,6,'93905.88763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,6,'-93897.26763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,6,'404715.7995864206');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,6,'.00004589912234457595');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,7,'-83028480.69');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,7,'83028489.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,7,'-357852770.35');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,7,'-.00000005190989574240');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,8,'74885.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,8,'-74876.69');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,8,'322737.11');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,8,'.00005755799201399553');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (3,9,'-24926799.735047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (3,9,'24926808.355047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (3,9,'-107434525.43415438020');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (3,9,'-.00000017290624149854');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,0,'7799461.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,0,'7799461.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,1,'7799461.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,1,'7799461.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,2,'-26539030.803497047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,2,'42137953.627297047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,2,'-267821744976817.8111137106593');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,2,'-.22713465002993920385');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,3,'7799465.7219');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,3,'7799457.1019');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,3,'33615678.685289');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,3,'1809619.81714617169373549883');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,4,'15598922.8238');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,4,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,4,'60831598315717.14146161');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,4,'1.00000000000000000000');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,5,'7815858.450391');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,5,'7783064.373409');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,5,'127888068979.9935054429');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,5,'475.66281046305802686061');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,6,'7893362.98953026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,6,'7705559.83426974');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,6,'732381731243.745115764094');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,6,'83.05996138436129499606');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,7,'-75229023.5881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,7,'90827946.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,7,'-647577464846017.9715');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,7,'-.09393717604145131637');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,8,'7874342.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,8,'7724580.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,8,'584031469984.4839');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,8,'104.15808298366741897143');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (4,9,'-17127342.633147420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (4,9,'32726265.456947420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (4,9,'-194415646271340.1815956522980');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (4,9,'-.31289456112403769409');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,0,'16397.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,0,'16397.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,1,'16397.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,1,'16397.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,2,'-34322095.176906047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,2,'34354889.253888047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,2,'-563049578578.769242506736077');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,2,'-.00047751189505192446');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,3,'16401.348491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,3,'16392.728491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,3,'70671.23589621');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,3,'3804.41728329466357308584');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,4,'7815858.450391');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,4,'-7783064.373409');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,4,'127888068979.9935054429');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,4,'.00210232958726897192');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,5,'32794.076982');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,5,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,5,'268862871.275335557081');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,5,'1.00000000000000000000');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,6,'110298.61612126');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,6,'-77504.53913926');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,6,'1539707782.76899778633766');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,6,'.17461941433576102689');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,7,'-83012087.961509');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,7,'83044882.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,7,'-1361421264394.416135');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,7,'-.00019748690453643710');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,8,'91278.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,8,'-58483.961509');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,8,'1227826639.244571');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,8,'.21897461960978085228');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (5,9,'-24910407.006556420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (5,9,'24943201.083538420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (5,9,'-408725765384.257043660243220');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (5,9,'-.00065780749354660427');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,0,'93901.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,0,'93901.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,1,'93901.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,1,'93901.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,2,'-34244590.637766787');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,2,'34432393.793027307');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,2,'-3224438592470.18449811926184222');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,2,'-.00273458651128995823');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,3,'93905.88763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,3,'93897.26763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,3,'404715.7995864206');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,3,'21786.90896293735498839907');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,4,'7893362.98953026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,4,'-7705559.83426974');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,4,'732381731243.745115764094');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,4,'.01203949512295682469');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,5,'110298.61612126');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,5,'77504.53913926');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,5,'1539707782.76899778633766');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,5,'5.72674008674192359679');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,6,'187803.15526052');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,6,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,6,'8817506281.4517452372676676');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,6,'1.00000000000000000000');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,7,'-82934583.42236974');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,7,'83122386.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,7,'-7796505729750.37795610');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,7,'-.00113095617281538980');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,8,'168782.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,8,'19020.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,8,'7031444034.53149906');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,8,'1.25401073209839612184');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (6,9,'-24832902.467417160');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (6,9,'25020705.622677680');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (6,9,'-2340666225110.29929521292692920');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (6,9,'-.00376709254265256789');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,0,'-83028485');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,0,'-83028485');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,1,'-83028485');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,1,'-83028485');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,2,'-117366977.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,2,'-48689992.784602953');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,2,'2851072985828710.485883795');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,2,'2.41794207151503385700');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,3,'-83028480.69');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,3,'-83028489.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,3,'-357852770.35');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,3,'-19264149.65197215777262180974');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,4,'-75229023.5881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,4,'-90827946.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,4,'-647577464846017.9715');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,4,'-10.64541262725136247686');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,5,'-83012087.961509');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,5,'-83044882.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,5,'-1361421264394.416135');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,5,'-5063.62688881730941836574');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,6,'-82934583.42236974');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,6,'-83122386.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,6,'-7796505729750.37795610');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,6,'-884.20756174009028770294');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,7,'-166056970');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,7,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,7,'6893729321395225');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,7,'1.00000000000000000000');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,8,'-82953604');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,8,'-83103366');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,8,'-6217255985285');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,8,'-1108.80577182462841041118');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (7,9,'-107955289.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (7,9,'-58101680.954952580');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (7,9,'2069634775752159.035758700');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (7,9,'3.33089171198810413382');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,0,'74881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,0,'74881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,1,'74881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,1,'74881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,2,'-34263611.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,2,'34413373.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,2,'-2571300635581.146276407');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,2,'-.00218067233500788615');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,3,'74885.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,3,'74876.69');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,3,'322737.11');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,3,'17373.78190255220417633410');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,4,'7874342.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,4,'-7724580.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,4,'584031469984.4839');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,4,'.00960079113741758956');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,5,'91278.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,5,'58483.961509');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,5,'1227826639.244571');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,5,'4.56673929509287019456');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,6,'168782.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,6,'-19020.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,6,'7031444034.53149906');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,6,'.79744134113322314424');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,7,'-82953604');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,7,'83103366');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,7,'-6217255985285');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,7,'-.00090187120721280172');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,8,'149762');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,8,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,8,'5607164161');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,8,'1.00000000000000000000');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (8,9,'-24851923.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (8,9,'25001685.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (8,9,'-1866544013697.195857020');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (8,9,'-.00300403532938582735');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,0,'-24926804.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,0,'-24926804.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,1,'-24926804.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,1,'-24926804.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,2,'-59265296.260444467');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,2,'9411688.170349627');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,2,'855948866655588.453741509242968740');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,2,'.72591434384152961526');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,3,'-24926799.735047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,3,'-24926808.355047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,3,'-107434525.43415438020');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,3,'-5783481.21694835730858468677');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,4,'-17127342.633147420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,4,'-32726265.456947420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,4,'-194415646271340.1815956522980');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,4,'-3.19596478892958416484');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,5,'-24910407.006556420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,5,'-24943201.083538420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,5,'-408725765384.257043660243220');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,5,'-1520.20159364322004505807');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,6,'-24832902.467417160');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,6,'-25020705.622677680');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,6,'-2340666225110.29929521292692920');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,6,'-265.45671195426965751280');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,7,'-107955289.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,7,'58101680.954952580');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,7,'2069634775752159.035758700');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,7,'.30021990699995814689');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,8,'-24851923.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,8,'-25001685.045047420');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,8,'-1866544013697.195857020');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,8,'-332.88556569820675471748');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_add VALUES (9,9,'-49853608.090094840');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sub VALUES (9,9,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_mul VALUES (9,9,'621345559900192.420120630048656400');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_div VALUES (9,9,'1.00000000000000000000');
+</sql-statement>
+<sql-statement>
+COMMIT TRANSACTION;
+</sql-statement>
+<sql-statement>
+BEGIN TRANSACTION;
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (0,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (1,'0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (2,'5859.90547836712524903505');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (3,'2.07605394920266944396');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (4,'2792.75158435189147418923');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (5,'128.05092147657509145473');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (6,'306.43364311096782703406');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (7,'9111.99676251039939975230');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (8,'273.64392922189960397542');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_sqrt VALUES (9,'4992.67503899937593364766');
+</sql-statement>
+<sql-statement>
+COMMIT TRANSACTION;
+</sql-statement>
+<sql-statement>
+BEGIN TRANSACTION;
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (2,'17.35177750493897715514');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (3,'1.46093790411565641971');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (4,'15.86956523951936572464');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (5,'9.70485601768871834038');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (6,'11.45000246622944403127');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (7,'18.23469429965478772991');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (8,'11.22365546576315513668');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_ln VALUES (9,'17.03145425013166006962');
+</sql-statement>
+<sql-statement>
+COMMIT TRANSACTION;
+</sql-statement>
+<sql-statement>
+BEGIN TRANSACTION;
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (2,'7.53578122160797276459');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (3,'.63447727016073160075');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (4,'6.89206461372691743345');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (5,'4.21476541614777768626');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (6,'4.97267288886207207671');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (7,'7.91922711353275546914');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (8,'4.87437163556421004138');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_log10 VALUES (9,'7.39666659961986567059');
+</sql-statement>
+<sql-statement>
+COMMIT TRANSACTION;
+</sql-statement>
+<sql-statement>
+BEGIN TRANSACTION;
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (0,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (1,'NaN');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (2,'224790267919917955.13261618583642653184');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (3,'28.90266599445155957393');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (4,'7405685069594999.07733999469386277636');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (5,'5068226527.32127265408584640098');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (6,'281839893606.99372343357047819067');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (7,'1716699575118597095.42330819910640247627');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (8,'167361463828.07491320069016125952');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_exp_power_10_ln VALUES (9,'107511333880052007.04141124673540337457');
+</sql-statement>
+<sql-statement>
+COMMIT TRANSACTION;
+</sql-statement>
+<sql-statement>
+BEGIN TRANSACTION;
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (0, '0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (1, '0');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (2, '-34338492.215397047');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (3, '4.31');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (4, '7799461.4119');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (5, '16397.038491');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (6, '93901.57763026');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (7, '-83028485');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (8, '74881');
+</sql-statement>
+<sql-statement>
+INSERT INTO num_data VALUES (9, '-24926804.045047420');
+</sql-statement>
+<sql-statement>
+COMMIT TRANSACTION;
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * Create indices for faster checks
+-- ******************************
+CREATE UNIQUE INDEX num_exp_add_idx ON num_exp_add (id1, id2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unique index creation is not supported yet
+ -- ******************************
+ ^
+<sql-statement>
+CREATE UNIQUE INDEX num_exp_sub_idx ON num_exp_sub (id1, id2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unique index creation is not supported yet
+ CREATE UNIQUE INDEX num_exp_sub_idx ON num_exp_sub (id1, id2);
+ ^
+<sql-statement>
+CREATE UNIQUE INDEX num_exp_div_idx ON num_exp_div (id1, id2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unique index creation is not supported yet
+ CREATE UNIQUE INDEX num_exp_div_idx ON num_exp_div (id1, id2);
+ ^
+<sql-statement>
+CREATE UNIQUE INDEX num_exp_mul_idx ON num_exp_mul (id1, id2);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unique index creation is not supported yet
+ CREATE UNIQUE INDEX num_exp_mul_idx ON num_exp_mul (id1, id2);
+ ^
+<sql-statement>
+CREATE UNIQUE INDEX num_exp_sqrt_idx ON num_exp_sqrt (id);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unique index creation is not supported yet
+ CREATE UNIQUE INDEX num_exp_sqrt_idx ON num_exp_sqrt (id);
+ ^
+<sql-statement>
+CREATE UNIQUE INDEX num_exp_ln_idx ON num_exp_ln (id);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unique index creation is not supported yet
+ CREATE UNIQUE INDEX num_exp_ln_idx ON num_exp_ln (id);
+ ^
+<sql-statement>
+CREATE UNIQUE INDEX num_exp_log10_idx ON num_exp_log10 (id);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unique index creation is not supported yet
+ CREATE UNIQUE INDEX num_exp_log10_idx ON num_exp_log10 (id);
+ ^
+<sql-statement>
+CREATE UNIQUE INDEX num_exp_power_10_ln_idx ON num_exp_power_10_ln (id);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: unique index creation is not supported yet
+ CREATE UNIQUE INDEX num_exp_power_10_ln_idx ON num_exp_power_10_ln (id);
+ ^
+<sql-statement>
+VACUUM ANALYZE num_exp_add;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ VACUUM ANALYZE num_exp_add;
+ ^
+<sql-statement>
+VACUUM ANALYZE num_exp_sub;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ VACUUM ANALYZE num_exp_sub;
+ ^
+<sql-statement>
+VACUUM ANALYZE num_exp_div;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ VACUUM ANALYZE num_exp_div;
+ ^
+<sql-statement>
+VACUUM ANALYZE num_exp_mul;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ VACUUM ANALYZE num_exp_mul;
+ ^
+<sql-statement>
+VACUUM ANALYZE num_exp_sqrt;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ VACUUM ANALYZE num_exp_sqrt;
+ ^
+<sql-statement>
+VACUUM ANALYZE num_exp_ln;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ VACUUM ANALYZE num_exp_ln;
+ ^
+<sql-statement>
+VACUUM ANALYZE num_exp_log10;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ VACUUM ANALYZE num_exp_log10;
+ ^
+<sql-statement>
+VACUUM ANALYZE num_exp_power_10_ln;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ VACUUM ANALYZE num_exp_power_10_ln;
+ ^
+<sql-statement>
+-- ******************************
+-- * Now check the behaviour of the NUMERIC type
+-- ******************************
+-- ******************************
+-- * Addition check
+-- ******************************
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val
+ FROM num_data t1, num_data t2;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ INSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: id
+ INSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val
+ ^
+<sql-statement>
+SELECT t1.id1, t1.id2, t1.result, t2.expected
+ FROM num_result t1, num_exp_add t2
+ WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
+ AND t1.result != t2.expected;
+</sql-statement>
+<sql-statement>
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10)
+ FROM num_data t1, num_data t2;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10)
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: id
+ INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10)
+ ^
+<sql-statement>
+SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 10) as expected
+ FROM num_result t1, num_exp_add t2
+ WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
+ AND t1.result != round(t2.expected, 10);
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * Subtraction check
+-- ******************************
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val
+ FROM num_data t1, num_data t2;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ INSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: id
+ INSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val
+ ^
+<sql-statement>
+SELECT t1.id1, t1.id2, t1.result, t2.expected
+ FROM num_result t1, num_exp_sub t2
+ WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
+ AND t1.result != t2.expected;
+</sql-statement>
+<sql-statement>
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40)
+ FROM num_data t1, num_data t2;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40)
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: id
+ INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40)
+ ^
+<sql-statement>
+SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 40)
+ FROM num_result t1, num_exp_sub t2
+ WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
+ AND t1.result != round(t2.expected, 40);
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * Multiply check
+-- ******************************
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val
+ FROM num_data t1, num_data t2;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ INSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: id
+ INSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val
+ ^
+<sql-statement>
+SELECT t1.id1, t1.id2, t1.result, t2.expected
+ FROM num_result t1, num_exp_mul t2
+ WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
+ AND t1.result != t2.expected;
+</sql-statement>
+<sql-statement>
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30)
+ FROM num_data t1, num_data t2;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30)
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: id
+ INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30)
+ ^
+<sql-statement>
+SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 30) as expected
+ FROM num_result t1, num_exp_mul t2
+ WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
+ AND t1.result != round(t2.expected, 30);
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * Division check
+-- ******************************
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val
+ FROM num_data t1, num_data t2
+ WHERE t2.val != '0.0';
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ INSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: id
+ INSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val
+ ^
+<sql-statement>
+SELECT t1.id1, t1.id2, t1.result, t2.expected
+ FROM num_result t1, num_exp_div t2
+ WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
+ AND t1.result != t2.expected;
+</sql-statement>
+<sql-statement>
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80)
+ FROM num_data t1, num_data t2
+ WHERE t2.val != '0.0';
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80)
+ ^
+ -stdin-:<main>:1:1: Error: Duplicated member: id
+ INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80)
+ ^
+<sql-statement>
+SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected
+ FROM num_result t1, num_exp_div t2
+ WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
+ AND t1.result != round(t2.expected, 80);
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * Square root check
+-- ******************************
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT id, 0, SQRT(ABS(val))
+ FROM num_data;
+</sql-statement>
+<sql-statement>
+SELECT t1.id1, t1.result, t2.expected
+ FROM num_result t1, num_exp_sqrt t2
+ WHERE t1.id1 = t2.id
+ AND t1.result != t2.expected;
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * Natural logarithm check
+-- ******************************
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT id, 0, LN(ABS(val))
+ FROM num_data
+ WHERE val != '0.0';
+</sql-statement>
+<sql-statement>
+SELECT t1.id1, t1.result, t2.expected
+ FROM num_result t1, num_exp_ln t2
+ WHERE t1.id1 = t2.id
+ AND t1.result != t2.expected;
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * Logarithm base 10 check
+-- ******************************
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val))
+ FROM num_data
+ WHERE val != '0.0';
+</sql-statement>
+<sql-statement>
+SELECT t1.id1, t1.result, t2.expected
+ FROM num_result t1, num_exp_log10 t2
+ WHERE t1.id1 = t2.id
+ AND t1.result != t2.expected;
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * POWER(10, LN(value)) check
+-- ******************************
+DELETE FROM num_result;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+INSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))
+ FROM num_data
+ WHERE val != '0.0';
+</sql-statement>
+<sql-statement>
+SELECT t1.id1, t1.result, t2.expected
+ FROM num_result t1, num_exp_power_10_ln t2
+ WHERE t1.id1 = t2.id
+ AND t1.result != t2.expected;
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * Check behavior with Inf and NaN inputs. It's easiest to handle these
+-- * separately from the num_data framework used above, because some input
+-- * combinations will throw errors.
+-- ******************************
+WITH v(x) AS
+ (VALUES('0'::numeric),('1'),('-1'),('4.2'),('inf'),('-inf'),('nan'))
+SELECT x1, x2,
+ x1 + x2 AS sum,
+ x1 - x2 AS diff,
+ x1 * x2 AS prod
+FROM v AS v1(x1), v AS v2(x2);
+</sql-statement>
+<sql-statement>
+WITH v(x) AS
+ (VALUES('0'::numeric),('1'),('-1'),('4.2'),('inf'),('-inf'),('nan'))
+SELECT x1, x2,
+ x1 / x2 AS quot,
+ x1 % x2 AS mod,
+ div(x1, x2) AS div
+FROM v AS v1(x1), v AS v2(x2) WHERE x2 != 0;
+</sql-statement>
+<sql-statement>
+SELECT 'inf'::numeric / '0';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'inf'::numeric / '0';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT 'inf'::numeric / '0';
+ ^
+<sql-statement>
+SELECT '-inf'::numeric / '0';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-inf'::numeric / '0';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT '-inf'::numeric / '0';
+ ^
+<sql-statement>
+SELECT 'nan'::numeric / '0';
+</sql-statement>
+<sql-statement>
+SELECT '0'::numeric / '0';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '0'::numeric / '0';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT '0'::numeric / '0';
+ ^
+<sql-statement>
+SELECT 'inf'::numeric % '0';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT 'inf'::numeric % '0';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT 'inf'::numeric % '0';
+ ^
+<sql-statement>
+SELECT '-inf'::numeric % '0';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '-inf'::numeric % '0';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT '-inf'::numeric % '0';
+ ^
+<sql-statement>
+SELECT 'nan'::numeric % '0';
+</sql-statement>
+<sql-statement>
+SELECT '0'::numeric % '0';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '0'::numeric % '0';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT '0'::numeric % '0';
+ ^
+<sql-statement>
+SELECT div('inf'::numeric, '0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT div('inf'::numeric, '0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT div('inf'::numeric, '0');
+ ^
+<sql-statement>
+SELECT div('-inf'::numeric, '0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT div('-inf'::numeric, '0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT div('-inf'::numeric, '0');
+ ^
+<sql-statement>
+SELECT div('nan'::numeric, '0');
+</sql-statement>
+<sql-statement>
+SELECT div('0'::numeric, '0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT div('0'::numeric, '0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: division by zero
+
+ SELECT div('0'::numeric, '0');
+ ^
+<sql-statement>
+WITH v(x) AS
+ (VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan'))
+SELECT x, -x as minusx, abs(x), floor(x), ceil(x), sign(x), numeric_inc(x) as inc
+FROM v;
+</sql-statement>
+<sql-statement>
+WITH v(x) AS
+ (VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan'))
+SELECT x, round(x), round(x,1) as round1, trunc(x), trunc(x,1) as trunc1
+FROM v;
+</sql-statement>
+<sql-statement>
+-- the large values fall into the numeric abbreviation code's maximal classes
+WITH v(x) AS
+ (VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('1e340'),('-1e340'),
+ ('inf'),('-inf'),('nan'),
+ ('inf'),('-inf'),('nan'))
+SELECT substring(x::text, 1, 32)
+FROM v ORDER BY x;
+</sql-statement>
+<sql-statement>
+WITH v(x) AS
+ (VALUES('0'::numeric),('1'),('4.2'),('inf'),('nan'))
+SELECT x, sqrt(x)
+FROM v;
+</sql-statement>
+<sql-statement>
+SELECT sqrt('-1'::numeric);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT sqrt('-1'::numeric);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take square root of a negative number
+
+ SELECT sqrt('-1'::numeric);
+ ^
+<sql-statement>
+SELECT sqrt('-inf'::numeric);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT sqrt('-inf'::numeric);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take square root of a negative number
+
+ SELECT sqrt('-inf'::numeric);
+ ^
+<sql-statement>
+WITH v(x) AS
+ (VALUES('1'::numeric),('4.2'),('inf'),('nan'))
+SELECT x,
+ log(x),
+ log10(x),
+ ln(x)
+FROM v;
+</sql-statement>
+<sql-statement>
+SELECT ln('0'::numeric);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ln('0'::numeric);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of zero
+
+ SELECT ln('0'::numeric);
+ ^
+<sql-statement>
+SELECT ln('-1'::numeric);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ln('-1'::numeric);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of a negative number
+
+ SELECT ln('-1'::numeric);
+ ^
+<sql-statement>
+SELECT ln('-inf'::numeric);
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT ln('-inf'::numeric);
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of a negative number
+
+ SELECT ln('-inf'::numeric);
+ ^
+<sql-statement>
+WITH v(x) AS
+ (VALUES('2'::numeric),('4.2'),('inf'),('nan'))
+SELECT x1, x2,
+ log(x1, x2)
+FROM v AS v1(x1), v AS v2(x2);
+</sql-statement>
+<sql-statement>
+SELECT log('0'::numeric, '10');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT log('0'::numeric, '10');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of zero
+
+ SELECT log('0'::numeric, '10');
+ ^
+<sql-statement>
+SELECT log('10'::numeric, '0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT log('10'::numeric, '0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of zero
+
+ SELECT log('10'::numeric, '0');
+ ^
+<sql-statement>
+SELECT log('-inf'::numeric, '10');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT log('-inf'::numeric, '10');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of a negative number
+
+ SELECT log('-inf'::numeric, '10');
+ ^
+<sql-statement>
+SELECT log('10'::numeric, '-inf');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT log('10'::numeric, '-inf');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of a negative number
+
+ SELECT log('10'::numeric, '-inf');
+ ^
+<sql-statement>
+SELECT log('inf'::numeric, '0');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT log('inf'::numeric, '0');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of zero
+
+ SELECT log('inf'::numeric, '0');
+ ^
+<sql-statement>
+SELECT log('inf'::numeric, '-inf');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT log('inf'::numeric, '-inf');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of a negative number
+
+ SELECT log('inf'::numeric, '-inf');
+ ^
+<sql-statement>
+SELECT log('-inf'::numeric, 'inf');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT log('-inf'::numeric, 'inf');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: cannot take logarithm of a negative number
+
+ SELECT log('-inf'::numeric, 'inf');
+ ^
+<sql-statement>
+WITH v(x) AS
+ (VALUES('0'::numeric),('1'),('2'),('4.2'),('inf'),('nan'))
+SELECT x1, x2,
+ power(x1, x2)
+FROM v AS v1(x1), v AS v2(x2) WHERE x1 != 0 OR x2 >= 0;
+</sql-statement>
+<sql-statement>
+SELECT power('0'::numeric, '-1');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT power('0'::numeric, '-1');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: zero raised to a negative power is undefined
+
+ SELECT power('0'::numeric, '-1');
+ ^
+<sql-statement>
+SELECT power('0'::numeric, '-inf');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT power('0'::numeric, '-inf');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: zero raised to a negative power is undefined
+
+ SELECT power('0'::numeric, '-inf');
+ ^
+<sql-statement>
+SELECT power('-1'::numeric, 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power('-2'::numeric, '3');
+</sql-statement>
+<sql-statement>
+SELECT power('-2'::numeric, '3.3');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT power('-2'::numeric, '3.3');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: a negative number raised to a non-integer power yields a complex result
+
+ SELECT power('-2'::numeric, '3.3');
+ ^
+<sql-statement>
+SELECT power('-2'::numeric, '-1');
+</sql-statement>
+<sql-statement>
+SELECT power('-2'::numeric, '-1.5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT power('-2'::numeric, '-1.5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: a negative number raised to a non-integer power yields a complex result
+
+ SELECT power('-2'::numeric, '-1.5');
+ ^
+<sql-statement>
+SELECT power('-2'::numeric, 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power('-2'::numeric, '-inf');
+</sql-statement>
+<sql-statement>
+SELECT power('inf'::numeric, '-2');
+</sql-statement>
+<sql-statement>
+SELECT power('inf'::numeric, '-inf');
+</sql-statement>
+<sql-statement>
+SELECT power('-inf'::numeric, '2');
+</sql-statement>
+<sql-statement>
+SELECT power('-inf'::numeric, '3');
+</sql-statement>
+<sql-statement>
+SELECT power('-inf'::numeric, '4.5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT power('-inf'::numeric, '4.5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: a negative number raised to a non-integer power yields a complex result
+
+ SELECT power('-inf'::numeric, '4.5');
+ ^
+<sql-statement>
+SELECT power('-inf'::numeric, '-2');
+</sql-statement>
+<sql-statement>
+SELECT power('-inf'::numeric, '-3');
+</sql-statement>
+<sql-statement>
+SELECT power('-inf'::numeric, '0');
+</sql-statement>
+<sql-statement>
+SELECT power('-inf'::numeric, 'inf');
+</sql-statement>
+<sql-statement>
+SELECT power('-inf'::numeric, '-inf');
+</sql-statement>
+<sql-statement>
+-- ******************************
+-- * miscellaneous checks for things that have been broken in the past...
+-- ******************************
+-- numeric AVG used to fail on some platforms
+SELECT AVG(val) FROM num_data;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FDB67429D90)
+__libc_start_main+128 (0x7FDB67429E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/numerology.err b/ydb/library/yql/tests/postgresql/cases/numerology.err
new file mode 100644
index 0000000000..710cfc9233
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/numerology.err
@@ -0,0 +1,158 @@
+<sql-statement>
+--
+-- NUMEROLOGY
+-- Test various combinations of numeric types and functions.
+--
+--
+-- Test implicit type conversions
+-- This fails for Postgres v6.1 (and earlier?)
+-- so let's try explicit conversions for now - tgl 97/05/07
+--
+CREATE TABLE TEMP_FLOAT (f1 FLOAT8);
+</sql-statement>
+<sql-statement>
+INSERT INTO TEMP_FLOAT (f1)
+ SELECT float8(f1) FROM INT4_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.INT4_TBL
+
+<sql-statement>
+INSERT INTO TEMP_FLOAT (f1)
+ SELECT float8(f1) FROM INT2_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.INT2_TBL
+
+<sql-statement>
+SELECT f1 FROM TEMP_FLOAT
+ ORDER BY f1;
+</sql-statement>
+<sql-statement>
+-- int4
+CREATE TABLE TEMP_INT4 (f1 INT4);
+</sql-statement>
+<sql-statement>
+INSERT INTO TEMP_INT4 (f1)
+ SELECT int4(f1) FROM FLOAT8_TBL
+ WHERE (f1 > -2147483647) AND (f1 < 2147483647);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.FLOAT8_TBL
+
+<sql-statement>
+INSERT INTO TEMP_INT4 (f1)
+ SELECT int4(f1) FROM INT2_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.INT2_TBL
+
+<sql-statement>
+SELECT f1 FROM TEMP_INT4
+ ORDER BY f1;
+</sql-statement>
+<sql-statement>
+-- int2
+CREATE TABLE TEMP_INT2 (f1 INT2);
+</sql-statement>
+<sql-statement>
+INSERT INTO TEMP_INT2 (f1)
+ SELECT int2(f1) FROM FLOAT8_TBL
+ WHERE (f1 >= -32767) AND (f1 <= 32767);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.FLOAT8_TBL
+
+<sql-statement>
+INSERT INTO TEMP_INT2 (f1)
+ SELECT int2(f1) FROM INT4_TBL
+ WHERE (f1 >= -32767) AND (f1 <= 32767);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.INT4_TBL
+
+<sql-statement>
+SELECT f1 FROM TEMP_INT2
+ ORDER BY f1;
+</sql-statement>
+<sql-statement>
+--
+-- Group-by combinations
+--
+CREATE TABLE TEMP_GROUP (f1 INT4, f2 INT4, f3 FLOAT8);
+</sql-statement>
+<sql-statement>
+INSERT INTO TEMP_GROUP
+ SELECT 1, (- i.f1), (- f.f1)
+ FROM INT4_TBL i, FLOAT8_TBL f;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.FLOAT8_TBL
+
+<sql-statement>
+INSERT INTO TEMP_GROUP
+ SELECT 2, i.f1, f.f1
+ FROM INT4_TBL i, FLOAT8_TBL f;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.FLOAT8_TBL
+
+<sql-statement>
+SELECT DISTINCT f1 AS two FROM TEMP_GROUP ORDER BY 1;
+</sql-statement>
+<sql-statement>
+SELECT f1 AS two, max(f3) AS max_float, min(f3) as min_float
+ FROM TEMP_GROUP
+ GROUP BY f1
+ ORDER BY two, max_float, min_float;
+</sql-statement>
+<sql-statement>
+-- GROUP BY a result column name is not legal per SQL92, but we accept it
+-- anyway (if the name is not the name of any column exposed by FROM).
+SELECT f1 AS two, max(f3) AS max_float, min(f3) AS min_float
+ FROM TEMP_GROUP
+ GROUP BY two
+ ORDER BY two, max_float, min_float;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ -- GROUP BY a result column name is not legal per SQL92, but we accept it
+ ^
+ -stdin-:<main>:5:12: Error: No such column: two
+ GROUP BY two
+ ^
+<sql-statement>
+SELECT f1 AS two, (max(f3) + 1) AS max_plus_1, (min(f3) - 1) AS min_minus_1
+ FROM TEMP_GROUP
+ GROUP BY f1
+ ORDER BY two, min_minus_1;
+</sql-statement>
+<sql-statement>
+SELECT f1 AS two,
+ max(f2) + min(f2) AS max_plus_min,
+ min(f3) - 1 AS min_minus_1
+ FROM TEMP_GROUP
+ GROUP BY f1
+ ORDER BY two, min_minus_1;
+</sql-statement>
+<sql-statement>
+DROP TABLE TEMP_INT2;
+</sql-statement>
+<sql-statement>
+DROP TABLE TEMP_INT4;
+</sql-statement>
+<sql-statement>
+DROP TABLE TEMP_FLOAT;
+</sql-statement>
+<sql-statement>
+DROP TABLE TEMP_GROUP;
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/oid.err b/ydb/library/yql/tests/postgresql/cases/oid.err
new file mode 100644
index 0000000000..c6a792771c
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/oid.err
@@ -0,0 +1,176 @@
+<sql-statement>
+--
+-- OID
+--
+CREATE TABLE OID_TBL(f1 oid);
+</sql-statement>
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('1234');
+</sql-statement>
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('1235');
+</sql-statement>
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('987');
+</sql-statement>
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('-1040');
+</sql-statement>
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('99999999');
+</sql-statement>
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('5 ');
+</sql-statement>
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES (' 10 ');
+</sql-statement>
+<sql-statement>
+-- leading/trailing hard tab is also allowed
+INSERT INTO OID_TBL(f1) VALUES (' 15 ');
+</sql-statement>
+<sql-statement>
+-- bad inputs
+INSERT INTO OID_TBL(f1) VALUES ('');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ -- bad inputs
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type oid: ""
+
+ -- bad inputs
+ ^
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES (' ');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO OID_TBL(f1) VALUES (' ');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type oid: " "
+
+ INSERT INTO OID_TBL(f1) VALUES (' ');
+ ^
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('asdfasd');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO OID_TBL(f1) VALUES ('asdfasd');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type oid: "asdfasd"
+
+ INSERT INTO OID_TBL(f1) VALUES ('asdfasd');
+ ^
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('99asdfasd');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO OID_TBL(f1) VALUES ('99asdfasd');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type oid: "99asdfasd"
+
+ INSERT INTO OID_TBL(f1) VALUES ('99asdfasd');
+ ^
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('5 d');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO OID_TBL(f1) VALUES ('5 d');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type oid: "5 d"
+
+ INSERT INTO OID_TBL(f1) VALUES ('5 d');
+ ^
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES (' 5d');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO OID_TBL(f1) VALUES (' 5d');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type oid: " 5d"
+
+ INSERT INTO OID_TBL(f1) VALUES (' 5d');
+ ^
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('5 5');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO OID_TBL(f1) VALUES ('5 5');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type oid: "5 5"
+
+ INSERT INTO OID_TBL(f1) VALUES ('5 5');
+ ^
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES (' - 500');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO OID_TBL(f1) VALUES (' - 500');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type oid: " - 500"
+
+ INSERT INTO OID_TBL(f1) VALUES (' - 500');
+ ^
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('32958209582039852935');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO OID_TBL(f1) VALUES ('32958209582039852935');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value "32958209582039852935" is out of range for type oid
+
+ INSERT INTO OID_TBL(f1) VALUES ('32958209582039852935');
+ ^
+<sql-statement>
+INSERT INTO OID_TBL(f1) VALUES ('-23582358720398502385');
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtFill!
+ INSERT INTO OID_TBL(f1) VALUES ('-23582358720398502385');
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: value "-23582358720398502385" is out of range for type oid
+
+ INSERT INTO OID_TBL(f1) VALUES ('-23582358720398502385');
+ ^
+<sql-statement>
+SELECT * FROM OID_TBL;
+</sql-statement>
+<sql-statement>
+SELECT o.* FROM OID_TBL o WHERE o.f1 = 1234;
+</sql-statement>
+<sql-statement>
+SELECT o.* FROM OID_TBL o WHERE o.f1 <> '1234';
+</sql-statement>
+<sql-statement>
+SELECT o.* FROM OID_TBL o WHERE o.f1 <= '1234';
+</sql-statement>
+<sql-statement>
+SELECT o.* FROM OID_TBL o WHERE o.f1 < '1234';
+</sql-statement>
+<sql-statement>
+SELECT o.* FROM OID_TBL o WHERE o.f1 >= '1234';
+</sql-statement>
+<sql-statement>
+SELECT o.* FROM OID_TBL o WHERE o.f1 > '1234';
+</sql-statement>
+<sql-statement>
+DROP TABLE OID_TBL;
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/select.err b/ydb/library/yql/tests/postgresql/cases/select.err
new file mode 100644
index 0000000000..474f2b5d4f
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select.err
@@ -0,0 +1,363 @@
+<sql-statement>
+--
+-- SELECT
+--
+-- btree index
+-- awk '{if($1<10){print;}else{next;}}' onek.data | sort +0n -1
+--
+SELECT * FROM onek
+ WHERE onek.unique1 < 10
+ ORDER BY onek.unique1;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+--
+-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1
+--
+SELECT onek.unique1, onek.stringu1 FROM onek
+ WHERE onek.unique1 < 20
+ ORDER BY unique1 using >;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:6:27: Error: sortby_dir unsupported value: 3
+ ORDER BY unique1 using >;
+ ^
+<sql-statement>
+--
+-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2
+--
+SELECT onek.unique1, onek.stringu1 FROM onek
+ WHERE onek.unique1 > 980
+ ORDER BY stringu1 using <;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:6:28: Error: sortby_dir unsupported value: 3
+ ORDER BY stringu1 using <;
+ ^
+<sql-statement>
+--
+-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |
+-- sort +1d -2 +0nr -1
+--
+SELECT onek.unique1, onek.string4 FROM onek
+ WHERE onek.unique1 > 980
+ ORDER BY string4 using <, unique1 using >;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:7:27: Error: sortby_dir unsupported value: 3
+ ORDER BY string4 using <, unique1 using >;
+ ^
+<sql-statement>
+--
+-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |
+-- sort +1dr -2 +0n -1
+--
+SELECT onek.unique1, onek.string4 FROM onek
+ WHERE onek.unique1 > 980
+ ORDER BY string4 using >, unique1 using <;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:7:27: Error: sortby_dir unsupported value: 3
+ ORDER BY string4 using >, unique1 using <;
+ ^
+<sql-statement>
+--
+-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |
+-- sort +0nr -1 +1d -2
+--
+SELECT onek.unique1, onek.string4 FROM onek
+ WHERE onek.unique1 < 20
+ ORDER BY unique1 using >, string4 using <;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:7:27: Error: sortby_dir unsupported value: 3
+ ORDER BY unique1 using >, string4 using <;
+ ^
+<sql-statement>
+--
+-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |
+-- sort +0n -1 +1dr -2
+--
+SELECT onek.unique1, onek.string4 FROM onek
+ WHERE onek.unique1 < 20
+ ORDER BY unique1 using <, string4 using >;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:7:27: Error: sortby_dir unsupported value: 3
+ ORDER BY unique1 using <, string4 using >;
+ ^
+<sql-statement>
+--
+-- test partial btree indexes
+--
+-- As of 7.2, planner probably won't pick an indexscan without stats,
+-- so ANALYZE first. Also, we want to prevent it from picking a bitmapscan
+-- followed by sort, because that could hide index ordering problems.
+--
+ANALYZE onek2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275
+ --
+ ^
+<sql-statement>
+SET enable_seqscan TO off;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_seqscan
+ SET enable_seqscan TO off;
+ ^
+<sql-statement>
+SET enable_bitmapscan TO off;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_bitmapscan
+ SET enable_bitmapscan TO off;
+ ^
+<sql-statement>
+SET enable_sort TO off;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_sort
+ SET enable_sort TO off;
+ ^
+<sql-statement>
+--
+-- awk '{if($1<10){print $0;}else{next;}}' onek.data | sort +0n -1
+--
+SELECT onek2.* FROM onek2 WHERE onek2.unique1 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek2
+
+<sql-statement>
+--
+-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1
+--
+SELECT onek2.unique1, onek2.stringu1 FROM onek2
+ WHERE onek2.unique1 < 20
+ ORDER BY unique1 using >;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:6:28: Error: sortby_dir unsupported value: 3
+ ORDER BY unique1 using >;
+ ^
+<sql-statement>
+--
+-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2
+--
+SELECT onek2.unique1, onek2.stringu1 FROM onek2
+ WHERE onek2.unique1 > 980;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek2
+
+<sql-statement>
+RESET enable_seqscan;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET enable_seqscan;
+ ^
+<sql-statement>
+RESET enable_bitmapscan;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET enable_bitmapscan;
+ ^
+<sql-statement>
+RESET enable_sort;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET enable_sort;
+ ^
+<sql-statement>
+SELECT two, stringu1, ten, string4
+ INTO TABLE tmp
+ FROM onek;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: SelectStmt: not supported intoClause
+ SELECT two, stringu1, ten, string4
+ ^
+<sql-statement>
+--
+-- awk '{print $1,$2;}' person.data |
+-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |
+-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |
+-- awk 'BEGIN{FS=" ";}{if(NF!=2){print $4,$5;}else{print;}}' - stud_emp.data
+--
+-- SELECT name, age FROM person*; ??? check if different
+SELECT p.name, p.age FROM person* p;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.person
+
+<sql-statement>
+--
+-- awk '{print $1,$2;}' person.data |
+-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |
+-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |
+-- awk 'BEGIN{FS=" ";}{if(NF!=1){print $4,$5;}else{print;}}' - stud_emp.data |
+-- sort +1nr -2
+--
+SELECT p.name, p.age FROM person* p ORDER BY age using >, name;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:8:56: Error: sortby_dir unsupported value: 3
+ SELECT p.name, p.age FROM person* p ORDER BY age using >, name;
+ ^
+<sql-statement>
+--
+-- Test some cases involving whole-row Var referencing a subquery
+--
+select foo from (select 1 offset 0) as foo;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ --
+ ^
+ -stdin-:<main>:4:8: Error: No such column: foo
+ select foo from (select 1 offset 0) as foo;
+ ^
+<sql-statement>
+select foo from (select null offset 0) as foo;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ select foo from (select null offset 0) as foo;
+ ^
+ -stdin-:<main>:1:8: Error: No such column: foo
+ select foo from (select null offset 0) as foo;
+ ^
+<sql-statement>
+select foo from (select 'xyzzy',1,null offset 0) as foo;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
+ select foo from (select 'xyzzy',1,null offset 0) as foo;
+ ^
+ -stdin-:<main>:1:8: Error: No such column: foo
+ select foo from (select 'xyzzy',1,null offset 0) as foo;
+ ^
+<sql-statement>
+--
+-- Test VALUES lists
+--
+select * from onek, (values(147, 'RFAAAA'), (931, 'VJAAAA')) as v (i, j)
+ WHERE onek.unique1 = v.i and onek.stringu1 = v.j;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.onek
+
+<sql-statement>
+-- a more complex case
+-- looks like we're coding lisp :-)
+select * from onek,
+ (values ((select i from
+ (values(10000), (2), (389), (1000), (2000), ((select 10029))) as foo(i)
+ order by i asc limit 1))) bar (i)
+ where onek.unique1 = bar.i;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:4:12: Error: SubLinks are not allowed in: VALUES
+ (values ((select i from
+ ^
+<sql-statement>
+-- try VALUES in a subquery
+select * from onek
+ where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99))
+ order by unique1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:3:25: Error: alternative is not implemented yet : 138
+ where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99))
+ ^
+<sql-statement>
+-- VALUES is also legal as a standalone query or a set-operation member
+VALUES (1,2), (3,4+4), (7,77.7);
+</sql-statement>
+<sql-statement>
+VALUES (1,2), (3,4+4), (7,77.7)
+UNION ALL
+SELECT 2+2, 57
+UNION ALL
+TABLE int8_tbl;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.int8_tbl
+
+<sql-statement>
+-- corner case: VALUES with no columns
+CREATE TEMP TABLE nocols();
+</sql-statement>
+<sql-statement>
+INSERT INTO nocols DEFAULT VALUES;
+</sql-statement>
+-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'default_values' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+SELECT * FROM nocols n, LATERAL (VALUES(n.*)) v;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral
+ SELECT * FROM nocols n, LATERAL (VALUES(n.*)) v;
+ ^
+<sql-statement>
+--
+-- Test ORDER BY options
+--
+CREATE TEMP TABLE foo (f1 int);
+</sql-statement>
+<sql-statement>
+INSERT INTO foo VALUES (42),(3),(10),(7),(null),(null),(1);
+</sql-statement>
+<sql-statement>
+SELECT * FROM foo ORDER BY f1;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F2C13A29D90)
+__libc_start_main+128 (0x7F2C13A29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/select_distinct.err b/ydb/library/yql/tests/postgresql/cases/select_distinct.err
new file mode 100644
index 0000000000..d1a0759d09
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select_distinct.err
@@ -0,0 +1,388 @@
+<sql-statement>
+--
+-- SELECT_DISTINCT
+--
+--
+-- awk '{print $3;}' onek.data | sort -n | uniq
+--
+SELECT DISTINCT two FROM tmp ORDER BY 1;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tmp
+
+<sql-statement>
+--
+-- awk '{print $5;}' onek.data | sort -n | uniq
+--
+SELECT DISTINCT ten FROM tmp ORDER BY 1;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tmp
+
+<sql-statement>
+--
+-- awk '{print $16;}' onek.data | sort -d | uniq
+--
+SELECT DISTINCT string4 FROM tmp ORDER BY 1;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tmp
+
+<sql-statement>
+--
+-- awk '{print $3,$16,$5;}' onek.data | sort -d | uniq |
+-- sort +0n -1 +1d -2 +2n -3
+--
+SELECT DISTINCT two, string4, ten
+ FROM tmp
+ ORDER BY two using <, string4 using <, ten using <;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:7:23: Error: sortby_dir unsupported value: 3
+ ORDER BY two using <, string4 using <, ten using <;
+ ^
+<sql-statement>
+--
+-- awk '{print $2;}' person.data |
+-- awk '{if(NF!=1){print $2;}else{print;}}' - emp.data |
+-- awk '{if(NF!=1){print $2;}else{print;}}' - student.data |
+-- awk 'BEGIN{FS=" ";}{if(NF!=1){print $5;}else{print;}}' - stud_emp.data |
+-- sort -n -r | uniq
+--
+SELECT DISTINCT p.age FROM person* p ORDER BY age using >;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:8:57: Error: sortby_dir unsupported value: 3
+ SELECT DISTINCT p.age FROM person* p ORDER BY age using >;
+ ^
+<sql-statement>
+--
+-- Check mentioning same column more than once
+--
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT count(*) FROM
+ (SELECT DISTINCT two, four, two FROM tenk1) ss;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ --
+ ^
+<sql-statement>
+SELECT count(*) FROM
+ (SELECT DISTINCT two, four, two FROM tenk1) ss;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+--
+-- Compare results between plans using sorting and plans using hash
+-- aggregation. Force spilling in both cases by setting work_mem low.
+--
+SET work_mem='64kB';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: work_mem
+ --
+ ^
+<sql-statement>
+-- Produce results with sorting.
+SET enable_hashagg=FALSE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_hashagg
+ -- Produce results with sorting.
+ ^
+<sql-statement>
+SET jit_above_cost=0;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: jit_above_cost
+ SET jit_above_cost=0;
+ ^
+<sql-statement>
+EXPLAIN (costs off)
+SELECT DISTINCT g%1000 FROM generate_series(0,9999) g;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (costs off)
+ ^
+<sql-statement>
+CREATE TABLE distinct_group_1 AS
+SELECT DISTINCT g%1000 FROM generate_series(0,9999) g;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE distinct_group_1 AS
+ ^
+<sql-statement>
+SET jit_above_cost TO DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 1
+ SET jit_above_cost TO DEFAULT;
+ ^
+<sql-statement>
+CREATE TABLE distinct_group_2 AS
+SELECT DISTINCT (g%1000)::text FROM generate_series(0,9999) g;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE distinct_group_2 AS
+ ^
+<sql-statement>
+SET enable_hashagg=TRUE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_hashagg
+ SET enable_hashagg=TRUE;
+ ^
+<sql-statement>
+-- Produce results with hash aggregation.
+SET enable_sort=FALSE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_sort
+ -- Produce results with hash aggregation.
+ ^
+<sql-statement>
+SET jit_above_cost=0;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: jit_above_cost
+ SET jit_above_cost=0;
+ ^
+<sql-statement>
+EXPLAIN (costs off)
+SELECT DISTINCT g%1000 FROM generate_series(0,9999) g;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (costs off)
+ ^
+<sql-statement>
+CREATE TABLE distinct_hash_1 AS
+SELECT DISTINCT g%1000 FROM generate_series(0,9999) g;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE distinct_hash_1 AS
+ ^
+<sql-statement>
+SET jit_above_cost TO DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 1
+ SET jit_above_cost TO DEFAULT;
+ ^
+<sql-statement>
+CREATE TABLE distinct_hash_2 AS
+SELECT DISTINCT (g%1000)::text FROM generate_series(0,9999) g;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE distinct_hash_2 AS
+ ^
+<sql-statement>
+SET enable_sort=TRUE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_sort
+ SET enable_sort=TRUE;
+ ^
+<sql-statement>
+SET work_mem TO DEFAULT;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 1
+ SET work_mem TO DEFAULT;
+ ^
+<sql-statement>
+-- Compare results
+(SELECT * FROM distinct_hash_1 EXCEPT SELECT * FROM distinct_group_1)
+ UNION ALL
+(SELECT * FROM distinct_group_1 EXCEPT SELECT * FROM distinct_hash_1);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.distinct_group_1
+
+<sql-statement>
+(SELECT * FROM distinct_hash_1 EXCEPT SELECT * FROM distinct_group_1)
+ UNION ALL
+(SELECT * FROM distinct_group_1 EXCEPT SELECT * FROM distinct_hash_1);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.distinct_group_1
+
+<sql-statement>
+DROP TABLE distinct_hash_1;
+</sql-statement>
+<sql-statement>
+DROP TABLE distinct_hash_2;
+</sql-statement>
+<sql-statement>
+DROP TABLE distinct_group_1;
+</sql-statement>
+<sql-statement>
+DROP TABLE distinct_group_2;
+</sql-statement>
+<sql-statement>
+--
+-- Also, some tests of IS DISTINCT FROM, which doesn't quite deserve its
+-- very own regression file.
+--
+CREATE TEMP TABLE disttable (f1 integer);
+</sql-statement>
+<sql-statement>
+INSERT INTO DISTTABLE VALUES(1);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.DISTTABLE
+
+<sql-statement>
+INSERT INTO DISTTABLE VALUES(2);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.DISTTABLE
+
+<sql-statement>
+INSERT INTO DISTTABLE VALUES(3);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.DISTTABLE
+
+<sql-statement>
+INSERT INTO DISTTABLE VALUES(NULL);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.DISTTABLE
+
+<sql-statement>
+-- basic cases
+SELECT f1, f1 IS DISTINCT FROM 2 as "not 2" FROM disttable;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:15: Error: A_Expr_Kind unsupported value: 3
+ SELECT f1, f1 IS DISTINCT FROM 2 as "not 2" FROM disttable;
+ ^
+<sql-statement>
+SELECT f1, f1 IS DISTINCT FROM NULL as "not null" FROM disttable;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:15: Error: A_Expr_Kind unsupported value: 3
+ SELECT f1, f1 IS DISTINCT FROM NULL as "not null" FROM disttable;
+ ^
+<sql-statement>
+SELECT f1, f1 IS DISTINCT FROM f1 as "false" FROM disttable;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:15: Error: A_Expr_Kind unsupported value: 3
+ SELECT f1, f1 IS DISTINCT FROM f1 as "false" FROM disttable;
+ ^
+<sql-statement>
+SELECT f1, f1 IS DISTINCT FROM f1+1 as "not null" FROM disttable;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:15: Error: A_Expr_Kind unsupported value: 3
+ SELECT f1, f1 IS DISTINCT FROM f1+1 as "not null" FROM disttable;
+ ^
+<sql-statement>
+-- check that optimizer constant-folds it properly
+SELECT 1 IS DISTINCT FROM 2 as "yes";
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:10: Error: A_Expr_Kind unsupported value: 3
+ SELECT 1 IS DISTINCT FROM 2 as "yes";
+ ^
+<sql-statement>
+SELECT 2 IS DISTINCT FROM 2 as "no";
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:10: Error: A_Expr_Kind unsupported value: 3
+ SELECT 2 IS DISTINCT FROM 2 as "no";
+ ^
+<sql-statement>
+SELECT 2 IS DISTINCT FROM null as "yes";
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:10: Error: A_Expr_Kind unsupported value: 3
+ SELECT 2 IS DISTINCT FROM null as "yes";
+ ^
+<sql-statement>
+SELECT null IS DISTINCT FROM null as "no";
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:13: Error: A_Expr_Kind unsupported value: 3
+ SELECT null IS DISTINCT FROM null as "no";
+ ^
+<sql-statement>
+-- negated form
+SELECT 1 IS NOT DISTINCT FROM 2 as "no";
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:2:10: Error: A_Expr_Kind unsupported value: 4
+ SELECT 1 IS NOT DISTINCT FROM 2 as "no";
+ ^
+<sql-statement>
+SELECT 2 IS NOT DISTINCT FROM 2 as "yes";
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:10: Error: A_Expr_Kind unsupported value: 4
+ SELECT 2 IS NOT DISTINCT FROM 2 as "yes";
+ ^
+<sql-statement>
+SELECT 2 IS NOT DISTINCT FROM null as "no";
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:10: Error: A_Expr_Kind unsupported value: 4
+ SELECT 2 IS NOT DISTINCT FROM null as "no";
+ ^
+<sql-statement>
+SELECT null IS NOT DISTINCT FROM null as "yes";
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:13: Error: A_Expr_Kind unsupported value: 4
+ SELECT null IS NOT DISTINCT FROM null as "yes";
+ ^
diff --git a/ydb/library/yql/tests/postgresql/cases/select_distinct_on.err b/ydb/library/yql/tests/postgresql/cases/select_distinct_on.err
new file mode 100644
index 0000000000..2317491821
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select_distinct_on.err
@@ -0,0 +1,42 @@
+<sql-statement>
+--
+-- SELECT_DISTINCT_ON
+--
+SELECT DISTINCT ON (string4) string4, two, ten
+ FROM tmp
+ ORDER BY string4 using <, two using >, ten using <;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:6:27: Error: sortby_dir unsupported value: 3
+ ORDER BY string4 using <, two using >, ten using <;
+ ^
+<sql-statement>
+-- this will fail due to conflict of ordering requirements
+SELECT DISTINCT ON (string4, ten) string4, two, ten
+ FROM tmp
+ ORDER BY string4 using <, two using <, ten using <;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:4:27: Error: sortby_dir unsupported value: 3
+ ORDER BY string4 using <, two using <, ten using <;
+ ^
+<sql-statement>
+SELECT DISTINCT ON (string4, ten) string4, ten, two
+ FROM tmp
+ ORDER BY string4 using <, ten using >, two using <;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:3:27: Error: sortby_dir unsupported value: 3
+ ORDER BY string4 using <, ten using >, two using <;
+ ^
+<sql-statement>
+-- bug #5049: early 8.4.x chokes on volatile DISTINCT ON clauses
+select distinct on (1) floor(random()) as r, f1 from int4_tbl order by 1,2;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.int4_tbl
+
diff --git a/ydb/library/yql/tests/postgresql/cases/select_having.err b/ydb/library/yql/tests/postgresql/cases/select_having.err
new file mode 100644
index 0000000000..3df7f178bb
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select_having.err
@@ -0,0 +1,65 @@
+<sql-statement>
+--
+-- SELECT_HAVING
+--
+-- load test data
+CREATE TABLE test_having (a int, b int, c char(8), d char);
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (0, 1, 'XXXX', 'A');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (1, 2, 'AAAA', 'b');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (2, 2, 'AAAA', 'c');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (3, 3, 'BBBB', 'D');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (4, 3, 'BBBB', 'e');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (5, 3, 'bbbb', 'F');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (6, 4, 'cccc', 'g');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (7, 4, 'cccc', 'h');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (8, 4, 'CCCC', 'I');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');
+</sql-statement>
+<sql-statement>
+SELECT b, c FROM test_having
+ GROUP BY b, c HAVING count(*) = 1 ORDER BY b, c;
+</sql-statement>
+<sql-statement>
+-- HAVING is effectively equivalent to WHERE in this case
+SELECT b, c FROM test_having
+ GROUP BY b, c HAVING b = 3 ORDER BY b, c;
+</sql-statement>
+<sql-statement>
+SELECT lower(c), count(c) FROM test_having
+ GROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a)
+ ORDER BY lower(c);
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F3D13629D90)
+__libc_start_main+128 (0x7F3D13629E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/select_having.err.1 b/ydb/library/yql/tests/postgresql/cases/select_having.err.1
new file mode 100644
index 0000000000..c4a57826d2
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select_having.err.1
@@ -0,0 +1,65 @@
+<sql-statement>
+--
+-- SELECT_HAVING
+--
+-- load test data
+CREATE TABLE test_having (a int, b int, c char(8), d char);
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (0, 1, 'XXXX', 'A');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (1, 2, 'AAAA', 'b');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (2, 2, 'AAAA', 'c');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (3, 3, 'BBBB', 'D');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (4, 3, 'BBBB', 'e');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (5, 3, 'bbbb', 'F');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (6, 4, 'cccc', 'g');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (7, 4, 'cccc', 'h');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (8, 4, 'CCCC', 'I');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');
+</sql-statement>
+<sql-statement>
+SELECT b, c FROM test_having
+ GROUP BY b, c HAVING count(*) = 1 ORDER BY b, c;
+</sql-statement>
+<sql-statement>
+-- HAVING is effectively equivalent to WHERE in this case
+SELECT b, c FROM test_having
+ GROUP BY b, c HAVING b = 3 ORDER BY b, c;
+</sql-statement>
+<sql-statement>
+SELECT lower(c), count(c) FROM test_having
+ GROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a)
+ ORDER BY lower(c);
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FF013429D90)
+__libc_start_main+128 (0x7FF013429E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/select_having.err.2 b/ydb/library/yql/tests/postgresql/cases/select_having.err.2
new file mode 100644
index 0000000000..bb348a5d97
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select_having.err.2
@@ -0,0 +1,65 @@
+<sql-statement>
+--
+-- SELECT_HAVING
+--
+-- load test data
+CREATE TABLE test_having (a int, b int, c char(8), d char);
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (0, 1, 'XXXX', 'A');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (1, 2, 'AAAA', 'b');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (2, 2, 'AAAA', 'c');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (3, 3, 'BBBB', 'D');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (4, 3, 'BBBB', 'e');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (5, 3, 'bbbb', 'F');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (6, 4, 'cccc', 'g');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (7, 4, 'cccc', 'h');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (8, 4, 'CCCC', 'I');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');
+</sql-statement>
+<sql-statement>
+SELECT b, c FROM test_having
+ GROUP BY b, c HAVING count(*) = 1 ORDER BY b, c;
+</sql-statement>
+<sql-statement>
+-- HAVING is effectively equivalent to WHERE in this case
+SELECT b, c FROM test_having
+ GROUP BY b, c HAVING b = 3 ORDER BY b, c;
+</sql-statement>
+<sql-statement>
+SELECT lower(c), count(c) FROM test_having
+ GROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a)
+ ORDER BY lower(c);
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F8E11C29D90)
+__libc_start_main+128 (0x7F8E11C29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/select_implicit.err b/ydb/library/yql/tests/postgresql/cases/select_implicit.err
new file mode 100644
index 0000000000..9ccba0eed2
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select_implicit.err
@@ -0,0 +1,59 @@
+<sql-statement>
+--
+-- SELECT_IMPLICIT
+-- Test cases for queries with ordering terms missing from the target list.
+-- This used to be called "junkfilter.sql".
+-- The parser uses the term "resjunk" to handle these cases.
+-- - thomas 1998-07-09
+--
+-- load test data
+CREATE TABLE test_missing_target (a int, b int, c char(8), d char);
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (0, 1, 'XXXX', 'A');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (1, 2, 'ABAB', 'b');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (2, 2, 'ABAB', 'c');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (3, 3, 'BBBB', 'D');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (4, 3, 'BBBB', 'e');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (5, 3, 'bbbb', 'F');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (6, 4, 'cccc', 'g');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (7, 4, 'cccc', 'h');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (8, 4, 'CCCC', 'I');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (9, 4, 'CCCC', 'j');
+</sql-statement>
+<sql-statement>
+-- w/ existing GROUP BY target
+SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7EFCA5629D90)
+__libc_start_main+128 (0x7EFCA5629E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/select_implicit.err.1 b/ydb/library/yql/tests/postgresql/cases/select_implicit.err.1
new file mode 100644
index 0000000000..66987a1f17
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select_implicit.err.1
@@ -0,0 +1,59 @@
+<sql-statement>
+--
+-- SELECT_IMPLICIT
+-- Test cases for queries with ordering terms missing from the target list.
+-- This used to be called "junkfilter.sql".
+-- The parser uses the term "resjunk" to handle these cases.
+-- - thomas 1998-07-09
+--
+-- load test data
+CREATE TABLE test_missing_target (a int, b int, c char(8), d char);
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (0, 1, 'XXXX', 'A');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (1, 2, 'ABAB', 'b');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (2, 2, 'ABAB', 'c');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (3, 3, 'BBBB', 'D');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (4, 3, 'BBBB', 'e');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (5, 3, 'bbbb', 'F');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (6, 4, 'cccc', 'g');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (7, 4, 'cccc', 'h');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (8, 4, 'CCCC', 'I');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (9, 4, 'CCCC', 'j');
+</sql-statement>
+<sql-statement>
+-- w/ existing GROUP BY target
+SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F6A16A29D90)
+__libc_start_main+128 (0x7F6A16A29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/select_implicit.err.2 b/ydb/library/yql/tests/postgresql/cases/select_implicit.err.2
new file mode 100644
index 0000000000..d36a3f7bfa
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select_implicit.err.2
@@ -0,0 +1,59 @@
+<sql-statement>
+--
+-- SELECT_IMPLICIT
+-- Test cases for queries with ordering terms missing from the target list.
+-- This used to be called "junkfilter.sql".
+-- The parser uses the term "resjunk" to handle these cases.
+-- - thomas 1998-07-09
+--
+-- load test data
+CREATE TABLE test_missing_target (a int, b int, c char(8), d char);
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (0, 1, 'XXXX', 'A');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (1, 2, 'ABAB', 'b');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (2, 2, 'ABAB', 'c');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (3, 3, 'BBBB', 'D');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (4, 3, 'BBBB', 'e');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (5, 3, 'bbbb', 'F');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (6, 4, 'cccc', 'g');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (7, 4, 'cccc', 'h');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (8, 4, 'CCCC', 'I');
+</sql-statement>
+<sql-statement>
+INSERT INTO test_missing_target VALUES (9, 4, 'CCCC', 'j');
+</sql-statement>
+<sql-statement>
+-- w/ existing GROUP BY target
+SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FC318C29D90)
+__libc_start_main+128 (0x7FC318C29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/select_into.err b/ydb/library/yql/tests/postgresql/cases/select_into.err
new file mode 100644
index 0000000000..64b7781af7
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/select_into.err
@@ -0,0 +1,531 @@
+<sql-statement>
+--
+-- SELECT_INTO
+--
+SELECT *
+ INTO TABLE sitmp1
+ FROM onek
+ WHERE onek.unique1 < 2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: SelectStmt: not supported intoClause
+ --
+ ^
+<sql-statement>
+DROP TABLE sitmp1;
+</sql-statement>
+<sql-statement>
+SELECT *
+ INTO TABLE sitmp1
+ FROM onek2
+ WHERE onek2.unique1 < 2;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: SelectStmt: not supported intoClause
+ SELECT *
+ ^
+<sql-statement>
+DROP TABLE sitmp1;
+</sql-statement>
+<sql-statement>
+--
+-- SELECT INTO and INSERT permission, if owner is not allowed to insert.
+--
+CREATE SCHEMA selinto_schema;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 292
+ --
+ ^
+<sql-statement>
+CREATE USER regress_selinto_user;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 285
+ CREATE USER regress_selinto_user;
+ ^
+<sql-statement>
+ALTER DEFAULT PRIVILEGES FOR ROLE regress_selinto_user
+ REVOKE INSERT ON TABLES FROM regress_selinto_user;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 250
+ ALTER DEFAULT PRIVILEGES FOR ROLE regress_selinto_user
+ ^
+<sql-statement>
+GRANT ALL ON SCHEMA selinto_schema TO public;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 248
+ GRANT ALL ON SCHEMA selinto_schema TO public;
+ ^
+<sql-statement>
+SET SESSION AUTHORIZATION regress_selinto_user;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: session_authorization
+ SET SESSION AUTHORIZATION regress_selinto_user;
+ ^
+<sql-statement>
+-- WITH DATA, passes.
+CREATE TABLE selinto_schema.tbl_withdata1 (a)
+ AS SELECT generate_series(1,3) WITH DATA;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ -- WITH DATA, passes.
+ ^
+<sql-statement>
+INSERT INTO selinto_schema.tbl_withdata1 VALUES (4);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: Unknown cluster: selinto_schema
+ INSERT INTO selinto_schema.tbl_withdata1 VALUES (4);
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE selinto_schema.tbl_withdata2 (a) AS
+ SELECT generate_series(1,3) WITH DATA;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+-- WITH NO DATA, passes.
+CREATE TABLE selinto_schema.tbl_nodata1 (a) AS
+ SELECT generate_series(1,3) WITH NO DATA;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ -- WITH NO DATA, passes.
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE selinto_schema.tbl_nodata2 (a) AS
+ SELECT generate_series(1,3) WITH NO DATA;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+-- EXECUTE and WITH DATA, passes.
+PREPARE data_sel AS SELECT generate_series(1,3);
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 301
+ -- EXECUTE and WITH DATA, passes.
+ ^
+<sql-statement>
+CREATE TABLE selinto_schema.tbl_withdata3 (a) AS
+ EXECUTE data_sel WITH DATA;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE selinto_schema.tbl_withdata3 (a) AS
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE selinto_schema.tbl_withdata4 (a) AS
+ EXECUTE data_sel WITH DATA;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+-- EXECUTE and WITH NO DATA, passes.
+CREATE TABLE selinto_schema.tbl_nodata3 (a) AS
+ EXECUTE data_sel WITH NO DATA;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ -- EXECUTE and WITH NO DATA, passes.
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE selinto_schema.tbl_nodata4 (a) AS
+ EXECUTE data_sel WITH NO DATA;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+RESET SESSION AUTHORIZATION;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET SESSION AUTHORIZATION;
+ ^
+<sql-statement>
+ALTER DEFAULT PRIVILEGES FOR ROLE regress_selinto_user
+ GRANT INSERT ON TABLES TO regress_selinto_user;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 250
+ ALTER DEFAULT PRIVILEGES FOR ROLE regress_selinto_user
+ ^
+<sql-statement>
+SET SESSION AUTHORIZATION regress_selinto_user;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: session_authorization
+ SET SESSION AUTHORIZATION regress_selinto_user;
+ ^
+<sql-statement>
+RESET SESSION AUTHORIZATION;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ RESET SESSION AUTHORIZATION;
+ ^
+<sql-statement>
+DEALLOCATE data_sel;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 303
+ DEALLOCATE data_sel;
+ ^
+<sql-statement>
+DROP SCHEMA selinto_schema CASCADE;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 228
+ DROP SCHEMA selinto_schema CASCADE;
+ ^
+<sql-statement>
+DROP USER regress_selinto_user;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 287
+ DROP USER regress_selinto_user;
+ ^
+<sql-statement>
+-- Tests for WITH NO DATA and column name consistency
+CREATE TABLE ctas_base (i int, j int);
+</sql-statement>
+<sql-statement>
+INSERT INTO ctas_base VALUES (1, 2);
+</sql-statement>
+<sql-statement>
+CREATE TABLE ctas_nodata (ii, jj, kk) AS SELECT i, j FROM ctas_base; -- Error
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE ctas_nodata (ii, jj, kk) AS SELECT i, j FROM ctas_base; -- Error
+ ^
+<sql-statement>
+CREATE TABLE ctas_nodata (ii, jj, kk) AS SELECT i, j FROM ctas_base WITH NO DATA; -- Error
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE ctas_nodata (ii, jj, kk) AS SELECT i, j FROM ctas_base WITH NO DATA; -- Error
+ ^
+<sql-statement>
+CREATE TABLE ctas_nodata (ii, jj) AS SELECT i, j FROM ctas_base; -- OK
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE ctas_nodata (ii, jj) AS SELECT i, j FROM ctas_base; -- OK
+ ^
+<sql-statement>
+CREATE TABLE ctas_nodata_2 (ii, jj) AS SELECT i, j FROM ctas_base WITH NO DATA; -- OK
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE ctas_nodata_2 (ii, jj) AS SELECT i, j FROM ctas_base WITH NO DATA; -- OK
+ ^
+<sql-statement>
+CREATE TABLE ctas_nodata_3 (ii) AS SELECT i, j FROM ctas_base; -- OK
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE ctas_nodata_3 (ii) AS SELECT i, j FROM ctas_base; -- OK
+ ^
+<sql-statement>
+CREATE TABLE ctas_nodata_4 (ii) AS SELECT i, j FROM ctas_base WITH NO DATA; -- OK
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE ctas_nodata_4 (ii) AS SELECT i, j FROM ctas_base WITH NO DATA; -- OK
+ ^
+<sql-statement>
+SELECT * FROM ctas_nodata;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.ctas_nodata
+
+<sql-statement>
+SELECT * FROM ctas_nodata_2;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.ctas_nodata_2
+
+<sql-statement>
+SELECT * FROM ctas_nodata_3;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.ctas_nodata_3
+
+<sql-statement>
+SELECT * FROM ctas_nodata_4;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.ctas_nodata_4
+
+<sql-statement>
+DROP TABLE ctas_base;
+</sql-statement>
+<sql-statement>
+DROP TABLE ctas_nodata;
+</sql-statement>
+<sql-statement>
+DROP TABLE ctas_nodata_2;
+</sql-statement>
+<sql-statement>
+DROP TABLE ctas_nodata_3;
+</sql-statement>
+<sql-statement>
+DROP TABLE ctas_nodata_4;
+</sql-statement>
+<sql-statement>
+--
+-- CREATE TABLE AS/SELECT INTO as last command in a SQL function
+-- have been known to cause problems
+--
+CREATE FUNCTION make_table() RETURNS VOID
+AS $$
+ CREATE TABLE created_table AS SELECT * FROM int8_tbl;
+$$ LANGUAGE SQL;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261
+ --
+ ^
+<sql-statement>
+SELECT make_table();
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT make_table();
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT make_table();
+ ^
+ -stdin-:<main>:1:8: Error: No such proc: make_table
+ SELECT make_table();
+ ^
+<sql-statement>
+SELECT * FROM created_table;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.created_table
+
+<sql-statement>
+-- Try EXPLAIN ANALYZE SELECT INTO and EXPLAIN ANALYZE CREATE TABLE AS
+-- WITH NO DATA, but hide the outputs since they won't be stable.
+DO $$
+BEGIN
+ EXECUTE 'EXPLAIN ANALYZE SELECT * INTO TABLE easi FROM int8_tbl';
+ EXECUTE 'EXPLAIN ANALYZE CREATE TABLE easi2 AS SELECT * FROM int8_tbl WITH NO DATA';
+END$$;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 263
+ -- Try EXPLAIN ANALYZE SELECT INTO and EXPLAIN ANALYZE CREATE TABLE AS
+ ^
+<sql-statement>
+DROP TABLE created_table;
+</sql-statement>
+<sql-statement>
+DROP TABLE easi, easi2;
+</sql-statement>
+<sql-statement>
+--
+-- Disallowed uses of SELECT ... INTO. All should fail
+--
+DECLARE foo CURSOR FOR SELECT 1 INTO b;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 304
+ --
+ ^
+<sql-statement>
+COPY (SELECT 1 INTO frak UNION SELECT 2) TO 'blob';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 253
+ COPY (SELECT 1 INTO frak UNION SELECT 2) TO 'blob';
+ ^
+<sql-statement>
+SELECT * FROM (SELECT 1 INTO f) bar;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: SelectStmt: not supported intoClause
+ SELECT * FROM (SELECT 1 INTO f) bar;
+ ^
+<sql-statement>
+CREATE VIEW foo AS SELECT 1 INTO b;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: expected at least one target column
+ CREATE VIEW foo AS SELECT 1 INTO b;
+ ^
+<sql-statement>
+INSERT INTO b SELECT 1 INTO f;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: SelectStmt: not supported intoClause
+ INSERT INTO b SELECT 1 INTO f;
+ ^
+<sql-statement>
+-- Test CREATE TABLE AS ... IF NOT EXISTS
+CREATE TABLE ctas_ine_tbl AS SELECT 1;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ -- Test CREATE TABLE AS ... IF NOT EXISTS
+ ^
+<sql-statement>
+CREATE TABLE ctas_ine_tbl AS SELECT 1 / 0; -- error
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE ctas_ine_tbl AS SELECT 1 / 0; -- error
+ ^
+<sql-statement>
+CREATE TABLE IF NOT EXISTS ctas_ine_tbl AS SELECT 1 / 0; -- ok
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE IF NOT EXISTS ctas_ine_tbl AS SELECT 1 / 0; -- ok
+ ^
+<sql-statement>
+CREATE TABLE ctas_ine_tbl AS SELECT 1 / 0 WITH NO DATA; -- error
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE ctas_ine_tbl AS SELECT 1 / 0 WITH NO DATA; -- error
+ ^
+<sql-statement>
+CREATE TABLE IF NOT EXISTS ctas_ine_tbl AS SELECT 1 / 0 WITH NO DATA; -- ok
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277
+ CREATE TABLE IF NOT EXISTS ctas_ine_tbl AS SELECT 1 / 0 WITH NO DATA; -- ok
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE ctas_ine_tbl AS SELECT 1 / 0; -- error
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE IF NOT EXISTS ctas_ine_tbl AS SELECT 1 / 0; -- ok
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE ctas_ine_tbl AS SELECT 1 / 0 WITH NO DATA; -- error
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE IF NOT EXISTS ctas_ine_tbl AS SELECT 1 / 0 WITH NO DATA; -- ok
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+PREPARE ctas_ine_query AS SELECT 1 / 0;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 301
+ PREPARE ctas_ine_query AS SELECT 1 / 0;
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE ctas_ine_tbl AS EXECUTE ctas_ine_query; -- error
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ CREATE TABLE IF NOT EXISTS ctas_ine_tbl AS EXECUTE ctas_ine_query; -- ok
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
+ ^
+<sql-statement>
+DROP TABLE ctas_ine_tbl;
+</sql-statement>
diff --git a/ydb/library/yql/tests/postgresql/cases/strings.err b/ydb/library/yql/tests/postgresql/cases/strings.err
new file mode 100644
index 0000000000..0d09f7dc7e
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/strings.err
@@ -0,0 +1,284 @@
+<sql-statement>
+--
+-- STRINGS
+-- Test various data entry syntaxes.
+--
+-- SQL string continuation syntax
+-- E021-03 character string literals
+SELECT 'first line'
+' - next line'
+ ' - third line'
+ AS "Three lines to one";
+</sql-statement>
+<sql-statement>
+-- illegal string continuation syntax
+SELECT 'first line'
+' - next line' /* this comment is not allowed here */
+' - third line'
+ AS "Illegal comment within continuation";
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:4:1: Error: ERROR: syntax error at or near "' - third line'"
+
+ ' - third line'
+ ^
+<sql-statement>
+-- Unicode escapes
+SET standard_conforming_strings TO on;
+</sql-statement>
+<sql-statement>
+SELECT U&'d\0061t\+000061' AS U&"d\0061t\+000061";
+</sql-statement>
+<sql-statement>
+SELECT U&'d!0061t\+000061' UESCAPE '!' AS U&"d*0061t\+000061" UESCAPE '*';
+</sql-statement>
+<sql-statement>
+SELECT U&'a\\b' AS "a\b";
+</sql-statement>
+<sql-statement>
+SELECT U&' \' UESCAPE '!' AS "tricky";
+</sql-statement>
+<sql-statement>
+SELECT 'tricky' AS U&"\" UESCAPE '!';
+</sql-statement>
+<sql-statement>
+SELECT U&'wrong: \061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:19: Error: ERROR: invalid Unicode escape
+
+ SELECT U&'wrong: \061';
+ ^
+<sql-statement>
+SELECT U&'wrong: \+0061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:19: Error: ERROR: invalid Unicode escape
+
+ SELECT U&'wrong: \+0061';
+ ^
+<sql-statement>
+SELECT U&'wrong: +0061' UESCAPE +;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:34: Error: ERROR: UESCAPE must be followed by a simple string literal at or near "+"
+
+ SELECT U&'wrong: +0061' UESCAPE +;
+ ^
+<sql-statement>
+SELECT U&'wrong: +0061' UESCAPE '+';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:34: Error: ERROR: invalid Unicode escape character at or near "'+'"
+
+ SELECT U&'wrong: +0061' UESCAPE '+';
+ ^
+<sql-statement>
+SELECT U&'wrong: \db99';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:24: Error: ERROR: invalid Unicode surrogate pair
+
+ SELECT U&'wrong: \db99';
+ ^
+<sql-statement>
+SELECT U&'wrong: \db99xy';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:24: Error: ERROR: invalid Unicode surrogate pair
+
+ SELECT U&'wrong: \db99xy';
+ ^
+<sql-statement>
+SELECT U&'wrong: \db99\\';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:24: Error: ERROR: invalid Unicode surrogate pair
+
+ SELECT U&'wrong: \db99\\';
+ ^
+<sql-statement>
+SELECT U&'wrong: \db99\0061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:24: Error: ERROR: invalid Unicode surrogate pair
+
+ SELECT U&'wrong: \db99\0061';
+ ^
+<sql-statement>
+SELECT U&'wrong: \+00db99\+000061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:27: Error: ERROR: invalid Unicode surrogate pair
+
+ SELECT U&'wrong: \+00db99\+000061';
+ ^
+<sql-statement>
+SELECT U&'wrong: \+2FFFFF';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:19: Error: ERROR: invalid Unicode escape value
+
+ SELECT U&'wrong: \+2FFFFF';
+ ^
+<sql-statement>
+-- while we're here, check the same cases in E-style literals
+SELECT E'd\u0061t\U00000061' AS "data";
+</sql-statement>
+<sql-statement>
+SELECT E'a\\b' AS "a\b";
+</sql-statement>
+<sql-statement>
+SELECT E'wrong: \u061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:18: Error: ERROR: invalid Unicode escape
+
+ SELECT E'wrong: \u061';
+ ^
+<sql-statement>
+SELECT E'wrong: \U0061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:18: Error: ERROR: invalid Unicode escape
+
+ SELECT E'wrong: \U0061';
+ ^
+<sql-statement>
+SELECT E'wrong: \udb99';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:24: Error: ERROR: invalid Unicode surrogate pair at or near "'"
+
+ SELECT E'wrong: \udb99';
+ ^
+<sql-statement>
+SELECT E'wrong: \udb99xy';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:24: Error: ERROR: invalid Unicode surrogate pair at or near "x"
+
+ SELECT E'wrong: \udb99xy';
+ ^
+<sql-statement>
+SELECT E'wrong: \udb99\\';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:24: Error: ERROR: invalid Unicode surrogate pair at or near "\"
+
+ SELECT E'wrong: \udb99\\';
+ ^
+<sql-statement>
+SELECT E'wrong: \udb99\u0061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:24: Error: ERROR: invalid Unicode surrogate pair at or near "\u0061"
+
+ SELECT E'wrong: \udb99\u0061';
+ ^
+<sql-statement>
+SELECT E'wrong: \U0000db99\U00000061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:28: Error: ERROR: invalid Unicode surrogate pair at or near "\U00000061"
+
+ SELECT E'wrong: \U0000db99\U00000061';
+ ^
+<sql-statement>
+SELECT E'wrong: \U002FFFFF';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:18: Error: ERROR: invalid Unicode escape value at or near "\U002FFFFF"
+
+ SELECT E'wrong: \U002FFFFF';
+ ^
+<sql-statement>
+SET standard_conforming_strings TO off;
+</sql-statement>
+<sql-statement>
+SELECT U&'d\0061t\+000061' AS U&"d\0061t\+000061";
+</sql-statement>
+<sql-statement>
+SELECT U&'d!0061t\+000061' UESCAPE '!' AS U&"d*0061t\+000061" UESCAPE '*';
+</sql-statement>
+<sql-statement>
+SELECT U&' \' UESCAPE '!' AS "tricky";
+</sql-statement>
+<sql-statement>
+SELECT 'tricky' AS U&"\" UESCAPE '!';
+</sql-statement>
+<sql-statement>
+SELECT U&'wrong: \061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:19: Error: ERROR: invalid Unicode escape
+
+ SELECT U&'wrong: \061';
+ ^
+<sql-statement>
+SELECT U&'wrong: \+0061';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:19: Error: ERROR: invalid Unicode escape
+
+ SELECT U&'wrong: \+0061';
+ ^
+<sql-statement>
+SELECT U&'wrong: +0061' UESCAPE '+';
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:34: Error: ERROR: invalid Unicode escape character at or near "'+'"
+
+ SELECT U&'wrong: +0061' UESCAPE '+';
+ ^
+<sql-statement>
+RESET standard_conforming_strings;
+</sql-statement>
+<sql-statement>
+-- bytea
+SET bytea_output TO hex;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: bytea_output
+ -- bytea
+ ^
+<sql-statement>
+SELECT E'\\xDeAdBeEf'::bytea;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F5874229D90)
+__libc_start_main+128 (0x7F5874229E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type list_node
diff --git a/ydb/library/yql/tests/postgresql/cases/subselect.err b/ydb/library/yql/tests/postgresql/cases/subselect.err
new file mode 100644
index 0000000000..6dfa1746d6
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/subselect.err
@@ -0,0 +1,48 @@
+<sql-statement>
+--
+-- SUBSELECT
+--
+SELECT 1 AS one WHERE 1 IN (SELECT 1);
+</sql-statement>
+-stdin-:<main>: Fatal: Optimization
+
+ -stdin-:<main>:4:25: Fatal: ydb/library/yql/core/common_opt/yql_co_pgselect.cpp:2852 JoinOuter(): requirement outerInputs.size() == finalExtTypes->Tail().ChildrenSize() failed
+ SELECT 1 AS one WHERE 1 IN (SELECT 1);
+ ^
+ -stdin-:<main>:1:1: Fatal: ydb/library/yql/core/common_opt/yql_co_pgselect.cpp:640 RewriteSubLinksPartial(): requirement status.Level != IGraphTransformer::TStatus::Error failed
+ --
+ ^
+<sql-statement>
+SELECT 1 AS zero WHERE 1 NOT IN (SELECT 1);
+</sql-statement>
+-stdin-:<main>: Fatal: Optimization
+
+ -stdin-:<main>:1:26: Fatal: ydb/library/yql/core/common_opt/yql_co_pgselect.cpp:2852 JoinOuter(): requirement outerInputs.size() == finalExtTypes->Tail().ChildrenSize() failed
+ SELECT 1 AS zero WHERE 1 NOT IN (SELECT 1);
+ ^
+ -stdin-:<main>:1:1: Fatal: ydb/library/yql/core/common_opt/yql_co_pgselect.cpp:640 RewriteSubLinksPartial(): requirement status.Level != IGraphTransformer::TStatus::Error failed
+ SELECT 1 AS zero WHERE 1 NOT IN (SELECT 1);
+ ^
+<sql-statement>
+SELECT 1 AS zero WHERE 1 IN (SELECT 2);
+</sql-statement>
+-stdin-:<main>: Fatal: Optimization
+
+ -stdin-:<main>:1:26: Fatal: ydb/library/yql/core/common_opt/yql_co_pgselect.cpp:2852 JoinOuter(): requirement outerInputs.size() == finalExtTypes->Tail().ChildrenSize() failed
+ SELECT 1 AS zero WHERE 1 IN (SELECT 2);
+ ^
+ -stdin-:<main>:1:1: Fatal: ydb/library/yql/core/common_opt/yql_co_pgselect.cpp:640 RewriteSubLinksPartial(): requirement status.Level != IGraphTransformer::TStatus::Error failed
+ SELECT 1 AS zero WHERE 1 IN (SELECT 2);
+ ^
+<sql-statement>
+-- Check grammar's handling of extra parens in assorted contexts
+SELECT * FROM (SELECT 1 AS x) ss;
+</sql-statement>
+<sql-statement>
+SELECT * FROM ((SELECT 1 AS x)) ss;
+</sql-statement>
+<sql-statement>
+(SELECT 2) UNION SELECT 2;
+</sql-statement>
+NYql::TAggregateExpander::ExpandAggApply(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&) at /-S/ydb/library/yql/core/yql_aggregate_expander.cpp:119:51
+?? at ??:0:0
diff --git a/ydb/library/yql/tests/postgresql/cases/text.err b/ydb/library/yql/tests/postgresql/cases/text.err
new file mode 100644
index 0000000000..a6d8f4a456
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/text.err
@@ -0,0 +1,35 @@
+<sql-statement>
+--
+-- TEXT
+--
+SELECT text 'this is a text string' = text 'this is a text string' AS true;
+</sql-statement>
+<sql-statement>
+SELECT text 'this is a text string' = text 'this is a text strin' AS false;
+</sql-statement>
+<sql-statement>
+CREATE TABLE TEXT_TBL (f1 text);
+</sql-statement>
+<sql-statement>
+INSERT INTO TEXT_TBL VALUES ('doh!');
+</sql-statement>
+<sql-statement>
+INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor');
+</sql-statement>
+<sql-statement>
+SELECT * FROM TEXT_TBL;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F3739A29D90)
+__libc_start_main+128 (0x7F3739A29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/time.err b/ydb/library/yql/tests/postgresql/cases/time.err
new file mode 100644
index 0000000000..afee613e83
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/time.err
@@ -0,0 +1,58 @@
+<sql-statement>
+--
+-- TIME
+--
+CREATE TABLE TIME_TBL (f1 time(2));
+</sql-statement>
+<sql-statement>
+INSERT INTO TIME_TBL VALUES ('00:00');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIME_TBL VALUES ('01:00');
+</sql-statement>
+<sql-statement>
+-- as of 7.4, timezone spec should be accepted and ignored
+INSERT INTO TIME_TBL VALUES ('02:03 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIME_TBL VALUES ('11:59 EDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIME_TBL VALUES ('12:00');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIME_TBL VALUES ('12:01');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIME_TBL VALUES ('23:59');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York');
+</sql-statement>
+<sql-statement>
+-- this should fail (the timezone offset is not known)
+INSERT INTO TIME_TBL VALUES ('15:36:39 America/New_York');
+</sql-statement>
+<sql-statement>
+SELECT f1 AS "Time" FROM TIME_TBL;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F9B17A29D90)
+__libc_start_main+128 (0x7F9B17A29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/timestamp.err b/ydb/library/yql/tests/postgresql/cases/timestamp.err
new file mode 100644
index 0000000000..24c93e6ba6
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/timestamp.err
@@ -0,0 +1,346 @@
+<sql-statement>
+--
+-- TIMESTAMP
+--
+CREATE TABLE TIMESTAMP_TBL (d1 timestamp(2) without time zone);
+</sql-statement>
+<sql-statement>
+-- Test shorthand input values
+-- We can't just "select" the results since they aren't constants; test for
+-- equality instead. We can do that by running the test inside a transaction
+-- block, within which the value of 'now' shouldn't change, and so these
+-- related values shouldn't either.
+BEGIN;
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('today');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('yesterday');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow');
+</sql-statement>
+<sql-statement>
+-- time zone should be ignored by this data type
+INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow EST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow zulu');
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'today';
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS Three FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'tomorrow';
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'yesterday';
+</sql-statement>
+<sql-statement>
+COMMIT;
+</sql-statement>
+<sql-statement>
+DELETE FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+-- Verify that 'now' *does* change over a reasonable interval such as 100 msec,
+-- and that it doesn't change over the same interval within a transaction block
+INSERT INTO TIMESTAMP_TBL VALUES ('now');
+</sql-statement>
+<sql-statement>
+SELECT pg_sleep(0.1);
+</sql-statement>
+<sql-statement>
+BEGIN;
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('now');
+</sql-statement>
+<sql-statement>
+SELECT pg_sleep(0.1);
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('now');
+</sql-statement>
+<sql-statement>
+SELECT pg_sleep(0.1);
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS two FROM TIMESTAMP_TBL WHERE d1 = timestamp(2) without time zone 'now';
+</sql-statement>
+<sql-statement>
+SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMapReduce!
+ SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMP_TBL;
+ ^
+ -stdin-:<main>:1:1: Fatal: Failed to unwrap empty optional
+ SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMP_TBL;
+ ^
+<sql-statement>
+COMMIT;
+</sql-statement>
+<sql-statement>
+TRUNCATE TIMESTAMP_TBL;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257
+ TRUNCATE TIMESTAMP_TBL;
+ ^
+<sql-statement>
+-- Special values
+INSERT INTO TIMESTAMP_TBL VALUES ('-infinity');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('infinity');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('epoch');
+</sql-statement>
+<sql-statement>
+-- Postgres v6.0 standard output format
+INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST');
+</sql-statement>
+<sql-statement>
+-- Variations on Postgres v6.1 standard output format
+INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.000001 1997 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST');
+</sql-statement>
+<sql-statement>
+-- ISO 8601 format
+INSERT INTO TIMESTAMP_TBL VALUES ('1997-01-02');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('1997-01-02 03:04:05');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('1997-02-10 17:32:01-08');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('1997-02-10 17:32:01-0800');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('1997-02-10 17:32:01 -08:00');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 -0800');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('1997-06-10 17:32:01 -07:00');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('2001-09-22T18:19:20');
+</sql-statement>
+<sql-statement>
+-- POSIX format (note that the timezone abbrev is just decoration here)
+INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 08:14:01 GMT+8');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 13:14:02 GMT-1');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 12:14:03 GMT-2');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 03:14:04 PST+8');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('2000-03-15 02:14:05 MST+7:00');
+</sql-statement>
+<sql-statement>
+-- Variations for acceptable input formats
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997 -0800');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 5:32PM 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('1997/02/10 17:32:01-0800');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('1997-02-10 17:32:01 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb-10-1997 17:32:01 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('02-10-1997 17:32:01 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 PST');
+</sql-statement>
+<sql-statement>
+set datestyle to ymd;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: datestyle
+ set datestyle to ymd;
+ ^
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('97FEB10 5:32:01PM UTC');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('97/02/10 17:32:01 UTC');
+</sql-statement>
+<sql-statement>
+reset datestyle;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ reset datestyle;
+ ^
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('1997.041 17:32:01 UTC');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 America/New_York');
+</sql-statement>
+<sql-statement>
+-- this fails (even though TZ is a no-op, we still look it up)
+INSERT INTO TIMESTAMP_TBL VALUES ('19970710 173201 America/Does_not_exist');
+</sql-statement>
+<sql-statement>
+-- Check date conversion and date arithmetic
+INSERT INTO TIMESTAMP_TBL VALUES ('1997-06-10 18:32:01 PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 11 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 12 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 13 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 14 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 15 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 0097 BC');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 0097');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 0597');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 1097');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 1697');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 1797');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 1897');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 2097');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 28 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 29 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Mar 01 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Dec 30 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 28 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 29 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Mar 01 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Dec 30 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 1999');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 2000');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 2000');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 2001');
+</sql-statement>
+<sql-statement>
+-- Currently unsupported syntax and ranges
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 -0097');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC');
+</sql-statement>
+<sql-statement>
+SELECT d1 FROM TIMESTAMP_TBL;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F5DA6429D90)
+__libc_start_main+128 (0x7F5DA6429E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/timestamptz.err b/ydb/library/yql/tests/postgresql/cases/timestamptz.err
new file mode 100644
index 0000000000..cd9f7ed009
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/timestamptz.err
@@ -0,0 +1,465 @@
+<sql-statement>
+--
+-- TIMESTAMPTZ
+--
+CREATE TABLE TIMESTAMPTZ_TBL (d1 timestamp(2) with time zone);
+</sql-statement>
+<sql-statement>
+-- Test shorthand input values
+-- We can't just "select" the results since they aren't constants; test for
+-- equality instead. We can do that by running the test inside a transaction
+-- block, within which the value of 'now' shouldn't change, and so these
+-- related values shouldn't either.
+BEGIN;
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('today');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('yesterday');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow EST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow zulu');
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'today';
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow';
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'yesterday';
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow EST';
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow zulu';
+</sql-statement>
+<sql-statement>
+COMMIT;
+</sql-statement>
+<sql-statement>
+DELETE FROM TIMESTAMPTZ_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Pre type annotation
+
+ -stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_delete' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
+
+<sql-statement>
+-- Verify that 'now' *does* change over a reasonable interval such as 100 msec,
+-- and that it doesn't change over the same interval within a transaction block
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
+</sql-statement>
+<sql-statement>
+SELECT pg_sleep(0.1);
+</sql-statement>
+<sql-statement>
+BEGIN;
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
+</sql-statement>
+<sql-statement>
+SELECT pg_sleep(0.1);
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
+</sql-statement>
+<sql-statement>
+SELECT pg_sleep(0.1);
+</sql-statement>
+<sql-statement>
+SELECT count(*) AS two FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp(2) with time zone 'now';
+</sql-statement>
+<sql-statement>
+SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMPTZ_TBL;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: YtMapReduce!
+ SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMPTZ_TBL;
+ ^
+ -stdin-:<main>:1:1: Fatal: Failed to unwrap empty optional
+ SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMPTZ_TBL;
+ ^
+<sql-statement>
+COMMIT;
+</sql-statement>
+<sql-statement>
+TRUNCATE TIMESTAMPTZ_TBL;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257
+ TRUNCATE TIMESTAMPTZ_TBL;
+ ^
+<sql-statement>
+-- Special values
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('-infinity');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('infinity');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('epoch');
+</sql-statement>
+<sql-statement>
+-- Postgres v6.0 standard output format
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST');
+</sql-statement>
+<sql-statement>
+-- Variations on Postgres v6.1 standard output format
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.000001 1997 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST');
+</sql-statement>
+<sql-statement>
+-- ISO 8601 format
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-01-02');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-01-02 03:04:05');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-02-10 17:32:01-08');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-02-10 17:32:01-0800');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-02-10 17:32:01 -08:00');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 -0800');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-06-10 17:32:01 -07:00');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('2001-09-22T18:19:20');
+</sql-statement>
+<sql-statement>
+-- POSIX format (note that the timezone abbrev is just decoration here)
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('2000-03-15 08:14:01 GMT+8');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('2000-03-15 13:14:02 GMT-1');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('2000-03-15 12:14:03 GMT-2');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('2000-03-15 03:14:04 PST+8');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('2000-03-15 02:14:05 MST+7:00');
+</sql-statement>
+<sql-statement>
+-- Variations for acceptable input formats
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997 -0800');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 5:32PM 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997/02/10 17:32:01-0800');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-02-10 17:32:01 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb-10-1997 17:32:01 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('02-10-1997 17:32:01 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 PST');
+</sql-statement>
+<sql-statement>
+set datestyle to ymd;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: datestyle
+ set datestyle to ymd;
+ ^
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('97FEB10 5:32:01PM UTC');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('97/02/10 17:32:01 UTC');
+</sql-statement>
+<sql-statement>
+reset datestyle;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4
+ reset datestyle;
+ ^
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997.041 17:32:01 UTC');
+</sql-statement>
+<sql-statement>
+-- timestamps at different timezones
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 America/New_York');
+</sql-statement>
+<sql-statement>
+SELECT '19970210 173201' AT TIME ZONE 'America/New_York';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '19970210 173201' AT TIME ZONE 'America/New_York';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: time zone "America/New_York" not recognized
+
+ SELECT '19970210 173201' AT TIME ZONE 'America/New_York';
+ ^
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/New_York');
+</sql-statement>
+<sql-statement>
+SELECT '19970710 173201' AT TIME ZONE 'America/New_York';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '19970710 173201' AT TIME ZONE 'America/New_York';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: time zone "America/New_York" not recognized
+
+ SELECT '19970710 173201' AT TIME ZONE 'America/New_York';
+ ^
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/Does_not_exist');
+</sql-statement>
+<sql-statement>
+SELECT '19970710 173201' AT TIME ZONE 'America/Does_not_exist';
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '19970710 173201' AT TIME ZONE 'America/Does_not_exist';
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: time zone "America/Does_not_exist" not recognized
+
+ SELECT '19970710 173201' AT TIME ZONE 'America/Does_not_exist';
+ ^
+<sql-statement>
+-- Daylight saving time for timestamps beyond 32-bit time_t range.
+SELECT '20500710 173201 Europe/Helsinki'::timestamptz; -- DST
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- Daylight saving time for timestamps beyond 32-bit time_t range.
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: time zone "europe/helsinki" not recognized
+
+ -- Daylight saving time for timestamps beyond 32-bit time_t range.
+ ^
+<sql-statement>
+SELECT '20500110 173201 Europe/Helsinki'::timestamptz; -- non-DST
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '20500110 173201 Europe/Helsinki'::timestamptz; -- non-DST
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: time zone "europe/helsinki" not recognized
+
+ SELECT '20500110 173201 Europe/Helsinki'::timestamptz; -- non-DST
+ ^
+<sql-statement>
+SELECT '205000-07-10 17:32:01 Europe/Helsinki'::timestamptz; -- DST
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '205000-07-10 17:32:01 Europe/Helsinki'::timestamptz; -- DST
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: time zone "europe/helsinki" not recognized
+
+ SELECT '205000-07-10 17:32:01 Europe/Helsinki'::timestamptz; -- DST
+ ^
+<sql-statement>
+SELECT '205000-01-10 17:32:01 Europe/Helsinki'::timestamptz; -- non-DST
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT '205000-01-10 17:32:01 Europe/Helsinki'::timestamptz; -- non-DST
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: time zone "europe/helsinki" not recognized
+
+ SELECT '205000-01-10 17:32:01 Europe/Helsinki'::timestamptz; -- non-DST
+ ^
+<sql-statement>
+-- Check date conversion and date arithmetic
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-06-10 18:32:01 PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 11 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 12 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 13 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 14 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 15 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 0097 BC');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 0097');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 0597');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 1097');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 1697');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 1797');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 1897');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 2097');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 28 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 29 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mar 01 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 30 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 1996');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 28 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 29 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mar 01 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 30 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 1997');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 1999');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 2000');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 2000');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 2001');
+</sql-statement>
+<sql-statement>
+-- Currently unsupported syntax and ranges
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 -0097');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 5097 BC');
+</sql-statement>
+<sql-statement>
+-- Alternative field order that we've historically supported (sort of)
+-- with regular and POSIXy timezone specs
+SELECT 'Wed Jul 11 10:51:14 America/New_York 2001'::timestamptz;
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ -- Alternative field order that we've historically supported (sort of)
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized
+
+ -- Alternative field order that we've historically supported (sort of)
+ ^
+<sql-statement>
+SELECT 'Wed Jul 11 10:51:14 GMT-4 2001'::timestamptz;
+</sql-statement>
+<sql-statement>
+SELECT 'Wed Jul 11 10:51:14 GMT+4 2001'::timestamptz;
+</sql-statement>
+<sql-statement>
+SELECT 'Wed Jul 11 10:51:14 PST-03:00 2001'::timestamptz;
+</sql-statement>
+<sql-statement>
+SELECT 'Wed Jul 11 10:51:14 PST+03:00 2001'::timestamptz;
+</sql-statement>
+<sql-statement>
+SELECT d1 FROM TIMESTAMPTZ_TBL;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FEACC629D90)
+__libc_start_main+128 (0x7FEACC629E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/timetz.err b/ydb/library/yql/tests/postgresql/cases/timetz.err
new file mode 100644
index 0000000000..94cf552934
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/timetz.err
@@ -0,0 +1,71 @@
+<sql-statement>
+--
+-- TIMETZ
+--
+CREATE TABLE TIMETZ_TBL (f1 time(2) with time zone);
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('00:01 PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('01:00 PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('02:03 PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('07:07 PST');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('08:08 EDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('11:59 PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('12:00 PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('12:01 PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('23:59 PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('11:59:59.99 PM PDT');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('2003-03-07 15:36:39 America/New_York');
+</sql-statement>
+<sql-statement>
+INSERT INTO TIMETZ_TBL VALUES ('2003-07-07 15:36:39 America/New_York');
+</sql-statement>
+<sql-statement>
+-- this should fail (the timezone offset is not known)
+INSERT INTO TIMETZ_TBL VALUES ('15:36:39 America/New_York');
+</sql-statement>
+<sql-statement>
+-- this should fail (timezone not specified without a date)
+INSERT INTO TIMETZ_TBL VALUES ('15:36:39 m2');
+</sql-statement>
+<sql-statement>
+-- this should fail (dynamic timezone abbreviation without a date)
+INSERT INTO TIMETZ_TBL VALUES ('15:36:39 MSK m2');
+</sql-statement>
+<sql-statement>
+SELECT f1 AS "Time TZ" FROM TIMETZ_TBL;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F63BCA29D90)
+__libc_start_main+128 (0x7F63BCA29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/truncate.err b/ydb/library/yql/tests/postgresql/cases/truncate.err
new file mode 100644
index 0000000000..4e7b29c54a
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/truncate.err
@@ -0,0 +1,27 @@
+<sql-statement>
+-- Test basic TRUNCATE functionality.
+CREATE TABLE truncate_a (col1 integer primary key);
+</sql-statement>
+<sql-statement>
+INSERT INTO truncate_a VALUES (1);
+</sql-statement>
+<sql-statement>
+INSERT INTO truncate_a VALUES (2);
+</sql-statement>
+<sql-statement>
+SELECT * FROM truncate_a;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F93B8C29D90)
+__libc_start_main+128 (0x7F93B8C29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/unicode.err b/ydb/library/yql/tests/postgresql/cases/unicode.err
new file mode 100644
index 0000000000..6763d250fc
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/unicode.err
@@ -0,0 +1,125 @@
+<sql-statement>
+SELECT U&'\0061\0308bc' <> U&'\00E4bc' COLLATE "C" AS sanity_check;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:25: Error: alternative is not implemented yet : 365
+ SELECT U&'\0061\0308bc' <> U&'\00E4bc' COLLATE "C" AS sanity_check;
+ ^
+<sql-statement>
+SELECT normalize('');
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT normalize('');
+ ^
+ -stdin-:<main>:1:8: Error: At function: PgCall
+ SELECT normalize('');
+ ^
+ -stdin-:<main>:1:8: Error: Unable to find an overload for proc normalize with given argument types: (unknown)
+ SELECT normalize('');
+ ^
+<sql-statement>
+SELECT normalize(U&'\0061\0308\24D1c') = U&'\00E4\24D1c' COLLATE "C" AS test_default;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:40: Error: alternative is not implemented yet : 365
+ SELECT normalize(U&'\0061\0308\24D1c') = U&'\00E4\24D1c' COLLATE "C" AS test_default;
+ ^
+<sql-statement>
+SELECT normalize(U&'\0061\0308\24D1c', NFC) = U&'\00E4\24D1c' COLLATE "C" AS test_nfc;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:45: Error: alternative is not implemented yet : 365
+ SELECT normalize(U&'\0061\0308\24D1c', NFC) = U&'\00E4\24D1c' COLLATE "C" AS test_nfc;
+ ^
+<sql-statement>
+SELECT normalize(U&'\00E4bc', NFC) = U&'\00E4bc' COLLATE "C" AS test_nfc_idem;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:36: Error: alternative is not implemented yet : 365
+ SELECT normalize(U&'\00E4bc', NFC) = U&'\00E4bc' COLLATE "C" AS test_nfc_idem;
+ ^
+<sql-statement>
+SELECT normalize(U&'\00E4\24D1c', NFD) = U&'\0061\0308\24D1c' COLLATE "C" AS test_nfd;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:40: Error: alternative is not implemented yet : 365
+ SELECT normalize(U&'\00E4\24D1c', NFD) = U&'\0061\0308\24D1c' COLLATE "C" AS test_nfd;
+ ^
+<sql-statement>
+SELECT normalize(U&'\0061\0308\24D1c', NFKC) = U&'\00E4bc' COLLATE "C" AS test_nfkc;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:46: Error: alternative is not implemented yet : 365
+ SELECT normalize(U&'\0061\0308\24D1c', NFKC) = U&'\00E4bc' COLLATE "C" AS test_nfkc;
+ ^
+<sql-statement>
+SELECT normalize(U&'\00E4\24D1c', NFKD) = U&'\0061\0308bc' COLLATE "C" AS test_nfkd;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:41: Error: alternative is not implemented yet : 365
+ SELECT normalize(U&'\00E4\24D1c', NFKD) = U&'\0061\0308bc' COLLATE "C" AS test_nfkd;
+ ^
+<sql-statement>
+SELECT "normalize"('abc', 'def'); -- run-time error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT "normalize"('abc', 'def'); -- run-time error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid normalization form: def
+
+ SELECT "normalize"('abc', 'def'); -- run-time error
+ ^
+<sql-statement>
+SELECT U&'\00E4\24D1c' IS NORMALIZED AS test_default;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
+ SELECT U&'\00E4\24D1c' IS NORMALIZED AS test_default;
+ ^
+ -stdin-:<main>:1:24: Error: At function: PgCall
+ SELECT U&'\00E4\24D1c' IS NORMALIZED AS test_default;
+ ^
+ -stdin-:<main>:1:24: Error: Unable to find an overload for proc is_normalized with given argument types: (unknown)
+ SELECT U&'\00E4\24D1c' IS NORMALIZED AS test_default;
+ ^
+<sql-statement>
+SELECT U&'\00E4\24D1c' IS NFC NORMALIZED AS test_nfc;
+</sql-statement>
+<sql-statement>
+SELECT num, val,
+ val IS NFC NORMALIZED AS NFC,
+ val IS NFD NORMALIZED AS NFD,
+ val IS NFKC NORMALIZED AS NFKC,
+ val IS NFKD NORMALIZED AS NFKD
+FROM
+ (VALUES (1, U&'\00E4bc'),
+ (2, U&'\0061\0308bc'),
+ (3, U&'\00E4\24D1c'),
+ (4, U&'\0061\0308\24D1c'),
+ (5, '')) vals (num, val)
+ORDER BY num;
+</sql-statement>
+<sql-statement>
+SELECT is_normalized('abc', 'def'); -- run-time error
+</sql-statement>
+-stdin-:<main>: Fatal: Execution
+
+ -stdin-:<main>:1:1: Fatal: Execution of node: Result
+ SELECT is_normalized('abc', 'def'); -- run-time error
+ ^
+ -stdin-:<main>:1:1: Fatal: ERROR: invalid normalization form: def
+
+ SELECT is_normalized('abc', 'def'); -- run-time error
+ ^
diff --git a/ydb/library/yql/tests/postgresql/cases/union.err b/ydb/library/yql/tests/postgresql/cases/union.err
new file mode 100644
index 0000000000..9fccd88351
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/union.err
@@ -0,0 +1,9 @@
+<sql-statement>
+--
+-- UNION (also INTERSECT, EXCEPT)
+--
+-- Simple UNION constructs
+SELECT 1 AS two UNION SELECT 2 ORDER BY 1;
+</sql-statement>
+NYql::TAggregateExpander::ExpandAggApply(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&) at /-S/ydb/library/yql/core/yql_aggregate_expander.cpp:119:51
+?? at ??:0:0
diff --git a/ydb/library/yql/tests/postgresql/cases/update.err b/ydb/library/yql/tests/postgresql/cases/update.err
new file mode 100644
index 0000000000..974d2a732f
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/update.err
@@ -0,0 +1,39 @@
+<sql-statement>
+--
+-- UPDATE syntax tests
+--
+CREATE TABLE update_test (
+ a INT DEFAULT 10,
+ b INT,
+ c TEXT
+);
+</sql-statement>
+<sql-statement>
+CREATE TABLE upsert_test (
+ a INT PRIMARY KEY,
+ b TEXT
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO update_test VALUES (5, 10, 'foo');
+</sql-statement>
+<sql-statement>
+INSERT INTO update_test(b, a) VALUES (15, 10);
+</sql-statement>
+<sql-statement>
+SELECT * FROM update_test;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7FECC4229D90)
+__libc_start_main+128 (0x7FECC4229E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/update.out b/ydb/library/yql/tests/postgresql/cases/update.out
index c5bdedc2c5..768698f8fa 100644
--- a/ydb/library/yql/tests/postgresql/cases/update.out
+++ b/ydb/library/yql/tests/postgresql/cases/update.out
@@ -1,27 +1,14 @@
+--
+-- UPDATE syntax tests
+--
+CREATE TABLE update_test (
+ a INT DEFAULT 10,
+ b INT,
+ c TEXT
+);
CREATE TABLE upsert_test (
a INT PRIMARY KEY,
b TEXT
);
--- Test ON CONFLICT DO UPDATE
-INSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo');
-DROP TABLE upsert_test;
-CREATE TABLE upsert_test_2 (b TEXT, a INT PRIMARY KEY);
--- Create partitions intentionally in descending bound order, so as to test
--- that update-row-movement works with the leaf partitions not in bound order.
-CREATE TABLE part_b_20_b_30 (e varchar, c numeric, a text, b bigint, d int);
-CREATE TABLE part_c_1_100 (e varchar, d int, c numeric, b bigint, a text);
-\set init_range_parted 'truncate range_parted; insert into range_parted VALUES (''a'', 1, 1, 1), (''a'', 10, 200, 1), (''b'', 12, 96, 1), (''b'', 13, 97, 2), (''b'', 15, 105, 16), (''b'', 17, 105, 19)'
-\set show_data 'select tableoid::regclass::text COLLATE "C" partname, * from range_parted ORDER BY 1, 2, 3, 4, 5, 6'
--- Common table needed for multiple test scenarios.
-CREATE TABLE mintab(c1 int);
-INSERT into mintab VALUES (120);
-DROP TABLE mintab;
-CREATE TABLE sub_part1(b int, c int8, a numeric);
-CREATE TABLE sub_part2(b int, c int8, a numeric);
-CREATE TABLE list_part1(a numeric, b int, c int8);
--- UPDATE partition-key with FROM clause. If join produces multiple output
--- rows for the same row to be modified, we should tuple-route the row only
--- once. There should not be any rows inserted.
-CREATE TABLE non_parted (id int);
-INSERT into non_parted VALUES (1), (1), (1), (2), (2), (2), (3), (3), (3);
-DROP TABLE non_parted;
+INSERT INTO update_test VALUES (5, 10, 'foo');
+INSERT INTO update_test(b, a) VALUES (15, 10);
diff --git a/ydb/library/yql/tests/postgresql/cases/update.sql b/ydb/library/yql/tests/postgresql/cases/update.sql
index c5bdedc2c5..768698f8fa 100644
--- a/ydb/library/yql/tests/postgresql/cases/update.sql
+++ b/ydb/library/yql/tests/postgresql/cases/update.sql
@@ -1,27 +1,14 @@
+--
+-- UPDATE syntax tests
+--
+CREATE TABLE update_test (
+ a INT DEFAULT 10,
+ b INT,
+ c TEXT
+);
CREATE TABLE upsert_test (
a INT PRIMARY KEY,
b TEXT
);
--- Test ON CONFLICT DO UPDATE
-INSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo');
-DROP TABLE upsert_test;
-CREATE TABLE upsert_test_2 (b TEXT, a INT PRIMARY KEY);
--- Create partitions intentionally in descending bound order, so as to test
--- that update-row-movement works with the leaf partitions not in bound order.
-CREATE TABLE part_b_20_b_30 (e varchar, c numeric, a text, b bigint, d int);
-CREATE TABLE part_c_1_100 (e varchar, d int, c numeric, b bigint, a text);
-\set init_range_parted 'truncate range_parted; insert into range_parted VALUES (''a'', 1, 1, 1), (''a'', 10, 200, 1), (''b'', 12, 96, 1), (''b'', 13, 97, 2), (''b'', 15, 105, 16), (''b'', 17, 105, 19)'
-\set show_data 'select tableoid::regclass::text COLLATE "C" partname, * from range_parted ORDER BY 1, 2, 3, 4, 5, 6'
--- Common table needed for multiple test scenarios.
-CREATE TABLE mintab(c1 int);
-INSERT into mintab VALUES (120);
-DROP TABLE mintab;
-CREATE TABLE sub_part1(b int, c int8, a numeric);
-CREATE TABLE sub_part2(b int, c int8, a numeric);
-CREATE TABLE list_part1(a numeric, b int, c int8);
--- UPDATE partition-key with FROM clause. If join produces multiple output
--- rows for the same row to be modified, we should tuple-route the row only
--- once. There should not be any rows inserted.
-CREATE TABLE non_parted (id int);
-INSERT into non_parted VALUES (1), (1), (1), (2), (2), (2), (3), (3), (3);
-DROP TABLE non_parted;
+INSERT INTO update_test VALUES (5, 10, 'foo');
+INSERT INTO update_test(b, a) VALUES (15, 10);
diff --git a/ydb/library/yql/tests/postgresql/cases/window.err b/ydb/library/yql/tests/postgresql/cases/window.err
new file mode 100644
index 0000000000..188388b056
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/window.err
@@ -0,0 +1,330 @@
+<sql-statement>
+--
+-- WINDOW FUNCTIONS
+--
+CREATE TEMPORARY TABLE empsalary (
+ depname varchar,
+ empno bigint,
+ salary int,
+ enroll_date date
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO empsalary VALUES
+('develop', 10, 5200, '2007-08-01'),
+('sales', 1, 5000, '2006-10-01'),
+('personnel', 5, 3500, '2007-12-10'),
+('sales', 4, 4800, '2007-08-08'),
+('personnel', 2, 3900, '2006-12-23'),
+('develop', 7, 4200, '2008-01-01'),
+('develop', 9, 4500, '2008-01-01'),
+('sales', 3, 4800, '2007-08-01'),
+('develop', 8, 6000, '2006-10-01'),
+('develop', 11, 5200, '2007-08-15');
+</sql-statement>
+<sql-statement>
+SELECT depname, empno, salary, sum(salary) OVER (PARTITION BY depname) FROM empsalary ORDER BY depname, salary;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: Sort, At function: PgReplaceUnknown, At function: OrderedMap, At function: CalcOverWindow
+ SELECT depname, empno, salary, sum(salary) OVER (PARTITION BY depname) FROM empsalary ORDER BY depname, salary;
+ ^
+ -stdin-:<main>:1:1: Error: Expected hashable and equatable type for key column: _yql_partition_key_0_0, but got: pgvarchar
+ SELECT depname, empno, salary, sum(salary) OVER (PARTITION BY depname) FROM empsalary ORDER BY depname, salary;
+ ^
+<sql-statement>
+SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary) FROM empsalary;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap, At function: CalcOverWindow
+ SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary) FROM empsalary;
+ ^
+ -stdin-:<main>:1:1: Error: Expected hashable and equatable type for key column: _yql_partition_key_0_0, but got: pgvarchar
+ SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary) FROM empsalary;
+ ^
+<sql-statement>
+-- with GROUP BY
+SELECT four, ten, SUM(SUM(four)) OVER (PARTITION BY four), AVG(ten) FROM tenk1
+GROUP BY four, ten ORDER BY four, ten;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname);
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap, At function: CalcOverWindow
+ SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname);
+ ^
+ -stdin-:<main>:1:1: Error: Expected hashable and equatable type for key column: _yql_partition_key_0_0, but got: pgvarchar
+ SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname);
+ ^
+<sql-statement>
+SELECT depname, empno, salary, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary) ORDER BY rank() OVER w;
+</sql-statement>
+-stdin-:<main>: Error: Parse Sql
+
+ -stdin-:<main>:1:121: Error: Over is not allowed in: ORDER BY
+ SELECT depname, empno, salary, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary) ORDER BY rank() OVER w;
+ ^
+<sql-statement>
+-- empty window specification
+SELECT COUNT(*) OVER () FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT COUNT(*) OVER w FROM tenk1 WHERE unique2 < 10 WINDOW w AS ();
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+-- no window operation
+SELECT four FROM tenk1 WHERE FALSE WINDOW w AS (PARTITION BY ten);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+-- cumulative aggregate
+SELECT sum(four) OVER (PARTITION BY ten ORDER BY unique2) AS sum_1, ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT row_number() OVER (ORDER BY unique2) FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT rank() OVER (PARTITION BY four ORDER BY ten) AS rank_1, ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT dense_rank() OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT percent_rank() OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT cume_dist() OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT ntile(3) OVER (ORDER BY ten, four), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT ntile(NULL) OVER (ORDER BY ten, four), ten, four FROM tenk1 LIMIT 2;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT lag(ten) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT lag(ten, four) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT lag(ten, four, 0) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT lag(ten, four, 0.7) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT lead(ten) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT lead(ten * 2, 1) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT lead(ten * 2, 1, -1) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT lead(ten * 2, 1, -1.4) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT first_value(ten) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+-- last_value returns the last row of the frame, which is CURRENT ROW in ORDER BY window.
+SELECT last_value(four) OVER (ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT last_value(ten) OVER (PARTITION BY four), ten, four FROM
+ (SELECT * FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten)s
+ ORDER BY four, ten;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT nth_value(ten, four + 1) OVER (PARTITION BY four), ten, four
+ FROM (SELECT * FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten)s;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT ten, two, sum(hundred) AS gsum, sum(sum(hundred)) OVER (PARTITION BY two ORDER BY ten) AS wsum
+FROM tenk1 GROUP BY ten, two;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT count(*) OVER (PARTITION BY four), four FROM (SELECT * FROM tenk1 WHERE two = 1)s WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT (count(*) OVER (PARTITION BY four ORDER BY ten) +
+ sum(hundred) OVER (PARTITION BY four ORDER BY ten))::varchar AS cntsum
+ FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+-- opexpr with different windows evaluation.
+SELECT * FROM(
+ SELECT count(*) OVER (PARTITION BY four ORDER BY ten) +
+ sum(hundred) OVER (PARTITION BY two ORDER BY ten) AS total,
+ count(*) OVER (PARTITION BY four ORDER BY ten) AS fourcount,
+ sum(hundred) OVER (PARTITION BY two ORDER BY ten) AS twosum
+ FROM tenk1
+)sub
+WHERE total <> fourcount + twosum;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT avg(four) OVER (PARTITION BY four ORDER BY thousand / 100) FROM tenk1 WHERE unique2 < 10;
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+SELECT ten, two, sum(hundred) AS gsum, sum(sum(hundred)) OVER win AS wsum
+FROM tenk1 GROUP BY ten, two WINDOW win AS (PARTITION BY two ORDER BY ten);
+</sql-statement>
+-stdin-:<main>: Fatal: Table metadata loading
+
+ -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.tenk1
+
+<sql-statement>
+-- more than one window with GROUP BY
+SELECT sum(salary),
+ row_number() OVER (ORDER BY depname),
+ sum(sum(salary)) OVER (ORDER BY depname DESC)
+FROM empsalary GROUP BY depname;
+</sql-statement>
+-stdin-:<main>: Error: Type annotation
+
+ -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap, At function: CalcOverWindow, At function: CalcOverWindow, At function: UnionAll, At function: Aggregate
+ -- more than one window with GROUP BY
+ ^
+ -stdin-:<main>:1:1: Error: Expected hashable and equatable type for key column: _alias_empsalary.depname, but got: pgvarchar
+ -- more than one window with GROUP BY
+ ^
+<sql-statement>
+-- identical windows with different names
+SELECT sum(salary) OVER w1, count(*) OVER w2
+FROM empsalary WINDOW w1 AS (ORDER BY salary), w2 AS (ORDER BY salary);
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F2872029D90)
+__libc_start_main+128 (0x7F2872029E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/xml.err b/ydb/library/yql/tests/postgresql/cases/xml.err
new file mode 100644
index 0000000000..d2ea950126
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/xml.err
@@ -0,0 +1,32 @@
+<sql-statement>
+CREATE TABLE xmltest (
+ id int,
+ data xml
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO xmltest VALUES (1, '<value>one</value>');
+</sql-statement>
+<sql-statement>
+INSERT INTO xmltest VALUES (2, '<value>two</value>');
+</sql-statement>
+<sql-statement>
+INSERT INTO xmltest VALUES (3, '<wrong');
+</sql-statement>
+<sql-statement>
+SELECT * FROM xmltest;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F4627A29D90)
+__libc_start_main+128 (0x7F4627A29E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/xml.err.1 b/ydb/library/yql/tests/postgresql/cases/xml.err.1
new file mode 100644
index 0000000000..950ebc73d7
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/xml.err.1
@@ -0,0 +1,32 @@
+<sql-statement>
+CREATE TABLE xmltest (
+ id int,
+ data xml
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO xmltest VALUES (1, '<value>one</value>');
+</sql-statement>
+<sql-statement>
+INSERT INTO xmltest VALUES (2, '<value>two</value>');
+</sql-statement>
+<sql-statement>
+INSERT INTO xmltest VALUES (3, '<wrong');
+</sql-statement>
+<sql-statement>
+SELECT * FROM xmltest;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F1E82229D90)
+__libc_start_main+128 (0x7F1E82229E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/cases/xml.err.2 b/ydb/library/yql/tests/postgresql/cases/xml.err.2
new file mode 100644
index 0000000000..8e39a77712
--- /dev/null
+++ b/ydb/library/yql/tests/postgresql/cases/xml.err.2
@@ -0,0 +1,32 @@
+<sql-statement>
+CREATE TABLE xmltest (
+ id int,
+ data xml
+);
+</sql-statement>
+<sql-statement>
+INSERT INTO xmltest VALUES (1, '<value>one</value>');
+</sql-statement>
+<sql-statement>
+INSERT INTO xmltest VALUES (2, '<value>two</value>');
+</sql-statement>
+<sql-statement>
+INSERT INTO xmltest VALUES (3, '<wrong');
+</sql-statement>
+<sql-statement>
+SELECT * FROM xmltest;
+</sql-statement>
+BackTrace(void**, unsigned long)+29 (0x14033ECD)
+TBackTrace::Capture()+30 (0x1403443E)
+TWithBackTrace<yexception>::TWithBackTrace<>()+72 (0x13FD0568)
+NYT::TNode::TTypeError::TTypeError()+25 (0x144DC3E9)
+NYT::TNode::CheckType(NYT::TNode::EType) const+267 (0x144DD9BB)
+NYT::TNode::AsString() const+30 (0x144DC53E)
+WriteTableToStream(IOutputStream&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&, TVector<NYT::TNode, std::__y1::allocator<NYT::TNode> > const&)+830 (0x13EBBB7E)
+Main(int, char**)+5748 (0x13EC0FB4)
+main+273 (0x13EC2761)
+??+0 (0x7F12BF829D90)
+__libc_start_main+128 (0x7F12BF829E40)
+??+0 (0x13E4C029)
+
+(NYT::TNode::TTypeError) library/cpp/yson/node/node.cpp:829: TNode type string_node expected, actual type null
diff --git a/ydb/library/yql/tests/postgresql/pg_tests.csv b/ydb/library/yql/tests/postgresql/pg_tests.csv
index 6996cc19e3..37520932cb 100644
--- a/ydb/library/yql/tests/postgresql/pg_tests.csv
+++ b/ydb/library/yql/tests/postgresql/pg_tests.csv
@@ -1,54 +1,54 @@
testcase,statements,successful,ratio
-functional_deps,40,3,7.5
comments,7,7,100.0
-expressions,63,8,12.7
+expressions,63,14,22.22
+functional_deps,40,6,15.0
+dbsize,24,24,100.0
+create_table,368,47,12.77
+alter_table,1679,4,0.24
+create_misc,76,3,3.95
+aggregates,416,1,0.24
+json_encoding,42,42,100.0
+jsonb_jsonpath,427,5,1.17
+insert,357,2,0.56
+bit,115,4,3.48
limit,84,5,5.95
jsonpath_encoding,31,31,100.0
-name,40,4,10.0
-create_misc,76,1,1.32
-dbsize,24,22,91.67
+numerology,24,8,33.33
+horology,306,79,25.82
select_distinct,46,1,2.17
-json_encoding,42,42,100.0
-jsonb_jsonpath,427,0,0.0
-oid,27,1,3.7
-numerology,24,4,16.67
-select_distinct_on,4,0,0.0
-float4,96,17,17.71
-int2,49,8,16.33
-select,88,2,2.27
-insert,357,8,2.24
-unicode,13,4,30.77
-strings,390,28,7.18
-int4,70,27,38.57
-float8,168,49,29.17
-interval,168,87,51.79
jsonpath,169,152,89.94
-select_into,67,2,2.99
-alter_table,1679,2,0.12
-bit,115,13,11.3
-aggregates,416,0,0.0
+select_distinct_on,4,0,0.0
+select,88,4,4.55
+arrays,410,1,0.24
+case,63,13,20.63
+select_into,67,3,4.48
+strings,390,31,7.95
+int8,142,13,9.15
+date,264,17,6.44
text,76,5,6.58
-arrays,410,6,1.46
+delete,10,0,0.0
truncate,193,3,1.55
-horology,306,76,24.84
-int8,142,6,4.23
-update,288,13,4.51
+unicode,13,4,30.77
time,39,11,28.21
-case,63,13,20.63
subselect,234,2,0.85
-create_table,383,41,10.7
-json,454,44,9.69
-jsonb,1017,43,4.23
-union,186,0,0.0
-date,264,17,6.44
+boolean,93,64,68.82
+update,288,4,1.39
+join,591,23,3.89
+name,40,22,55.0
timetz,45,13,28.89
+union,186,0,0.0
+oid,27,21,77.78
xml,234,3,1.28
-delete,10,0,0.0
-boolean,93,62,66.67
+interval,168,115,68.45
+json,454,51,11.23
+float4,96,48,50.0
window,298,2,0.67
-join,591,23,3.89
+int2,49,47,95.92
+float8,168,96,57.14
+jsonb,1017,50,4.92
+int4,70,70,100.0
select_implicit,44,11,25.0
-timestamp,145,78,53.79
-timestamptz,315,79,25.08
+timestamp,145,81,55.86
+timestamptz,315,83,26.35
select_having,23,11,47.83
-numeric,915,490,53.55
+numeric,915,526,57.49
diff --git a/ydb/library/yql/tools/pg-make-test/__main__.py b/ydb/library/yql/tools/pg-make-test/__main__.py
index 017fd8e38c..ddf2c7b149 100644
--- a/ydb/library/yql/tools/pg-make-test/__main__.py
+++ b/ydb/library/yql/tools/pg-make-test/__main__.py
@@ -91,12 +91,13 @@ class TestCaseBuilder:
ressqlfile = self.config.dstdir / sqlfile.name
resoutfile = ressqlfile.with_suffix('.out')
+ reserrfile_base = resoutfile.with_suffix('.err')
max_stmts_run = 0
ressql = None
resout = None
- for outfile in get_out_files(sqlfile):
+ for outfile_idx, outfile in enumerate(get_out_files(sqlfile)):
test_name = Path(sqlfile).name
LOGGER.info("Processing (%d) %s -> %s", os.getpid(), test_name, Path(outfile).name)
if is_split_logging:
@@ -135,6 +136,8 @@ class TestCaseBuilder:
'\n'.join(str(sql_line) for sql_line in s_sql),
'\n'.join(str(out_line) for out_line in s_out),
)
+ reserrfile = reserrfile_base if outfile_idx == 0 else reserrfile_base.with_suffix(reserrfile_base.suffix + ".{0}".format(outfile_idx))
+ shutil.move(test_err_name, reserrfile)
stmts_run = 0
stmts = []
diff --git a/ydb/library/yql/tools/pgrun/pgrun.cpp b/ydb/library/yql/tools/pgrun/pgrun.cpp
index 0802f519f1..9a992a592b 100644
--- a/ydb/library/yql/tools/pgrun/pgrun.cpp
+++ b/ydb/library/yql/tools/pgrun/pgrun.cpp
@@ -993,6 +993,8 @@ int Main(int argc, char* argv[])
const auto stmt = GetFormattedStmt(raw_stmt);
Cout << stmt << '\n';
+ Cerr << "<sql-statement>\n" << stmt << "\n</sql-statement>\n";
+
if (stmt[0] == '\\') {
ProcessMetaCmd(stmt);
continue;