diff options
author | marsaly <marsaly@ydb.tech> | 2023-12-11 19:37:42 +0300 |
---|---|---|
committer | marsaly <marsaly@ydb.tech> | 2023-12-11 20:26:14 +0300 |
commit | 0725824b3155b061fb8801cc4b1ca50e50edfa93 (patch) | |
tree | 2aa0947fa0d9cfefc9d94c781d5876625ab06c50 | |
parent | e032a9d10c50b991ce08b32590bbaf15089ff059 (diff) | |
download | ydb-0725824b3155b061fb8801cc4b1ca50e50edfa93.tar.gz |
pg-make-test saves stderr
Output executed SQL statement's text into stderr
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; |