diff options
author | Mars Agliullin <marsaly@ydb.tech> | 2024-02-19 14:58:47 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-19 14:58:47 +0300 |
commit | b50baf6376efc34aa67b25e2259aa3dea37db288 (patch) | |
tree | 4abc1bdb8181a0127a9cd13bff108114abfb1eb5 | |
parent | 011e15d6c5e75350988de328ce7ed6a6faa17fc1 (diff) | |
download | ydb-b50baf6376efc34aa67b25e2259aa3dea37db288.tar.gz |
YQL-17567: Fix of INSERT with no columns specified (#1438)
Fixes #1834
92 files changed, 21415 insertions, 823 deletions
diff --git a/ydb/library/yql/providers/common/provider/yql_provider.cpp b/ydb/library/yql/providers/common/provider/yql_provider.cpp index a58824e0768..69e216a3c7b 100644 --- a/ydb/library/yql/providers/common/provider/yql_provider.cpp +++ b/ydb/library/yql/providers/common/provider/yql_provider.cpp @@ -1475,7 +1475,7 @@ bool NeedToRenamePgSelectColumns(const TCoPgSelect& pgSelect) { bool RenamePgSelectColumns( const TCoPgSelect& node, TExprNode::TPtr& output, - TMaybe<TVector<TString>> tableColumnOrder, + const TMaybe<TColumnOrder>& tableColumnOrder, TExprContext& ctx, TTypeAnnotationContext& types) { @@ -1485,7 +1485,7 @@ bool RenamePgSelectColumns( TString optionName = (hasValues) ? "values" : "projection_order"; auto selectorColumnOrder = types.LookupColumnOrder(node.Ref()); - TVector<TString> insertColumnOrder; + TColumnOrder insertColumnOrder; if (auto targetColumnsOption = GetSetItemOption(node, "target_columns")) { auto targetColumns = GetSetItemOptionValue(TExprBase(targetColumnsOption)); for (const auto& child : targetColumns->ChildrenList()) { diff --git a/ydb/library/yql/providers/common/provider/yql_provider.h b/ydb/library/yql/providers/common/provider/yql_provider.h index b7553c38ad3..41c8d716493 100644 --- a/ydb/library/yql/providers/common/provider/yql_provider.h +++ b/ydb/library/yql/providers/common/provider/yql_provider.h @@ -209,7 +209,7 @@ bool NeedToRenamePgSelectColumns(const NNodes::TCoPgSelect& pgSelect); bool RenamePgSelectColumns( const NNodes::TCoPgSelect& node, TExprNode::TPtr& output, - TMaybe<TVector<TString>> tableColumnOrder, + const TMaybe<TColumnOrder>& tableColumnOrder, TExprContext& ctx, TTypeAnnotationContext& types); } // namespace NCommon diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp index b45c896a51e..f26775c8489 100644 --- a/ydb/library/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp +++ b/ydb/library/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp @@ -459,7 +459,12 @@ private: auto pgSelect = TCoPgSelect(content); if (NCommon::NeedToRenamePgSelectColumns(pgSelect)) { TExprNode::TPtr output; - bool result = NCommon::RenamePgSelectColumns(pgSelect, output, contentColumnOrder, ctx, *State_->Types); + + const auto& columnOrder = (outTableInfo.RowSpec) + ? outTableInfo.RowSpec->GetColumnOrder() + : contentColumnOrder; + + bool result = NCommon::RenamePgSelectColumns(pgSelect, output, columnOrder, ctx, *State_->Types); if (!result) { return TStatus::Error; } diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp index adf1f696e6d..65a5e095f22 100644 --- a/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp +++ b/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp @@ -3400,6 +3400,13 @@ private: return {}; } TYtOutTableInfo outTable(outItemType, State_->Configuration->UseNativeYtTypes.Get().GetOrElse(DEFAULT_USE_NATIVE_YT_TYPES) ? NTCF_ALL : NTCF_NONE); + + { + auto path = write.Table().Name().StringValue(); + auto commitEpoch = TEpochInfo::Parse(write.Table().CommitEpoch().Ref()).GetOrElse(0); + auto dstRowSpec = State_->TablesData->GetTable(cluster, path, commitEpoch).RowSpec; + outTable.RowSpec->SetColumnOrder(dstRowSpec->GetColumnOrder()); + } auto content = write.Content(); if (auto sorted = content.Ref().GetConstraint<TSortedConstraintNode>()) { const bool useNativeDescSort = State_->Configuration->UseNativeDescSort.Get().GetOrElse(DEFAULT_USE_NATIVE_DESC_SORT); diff --git a/ydb/library/yql/tests/postgresql/cases/aggregates.err b/ydb/library/yql/tests/postgresql/cases/aggregates.err index bbfa28c5737..37d2cae842a 100644 --- a/ydb/library/yql/tests/postgresql/cases/aggregates.err +++ b/ydb/library/yql/tests/postgresql/cases/aggregates.err @@ -1352,4 +1352,2203 @@ drop table p_t1; -- create temp table t1(f1 int, f2 bigint); </sql-statement> -(TFileError) (Error 17: File exists) util/system/file.cpp:918: can't open "/var/tmp/tmpdyumpf7m/t1" with mode CreateNew (0x00000003) +<sql-statement> +create temp table t2(f1 bigint, f22 bigint); +</sql-statement> +<sql-statement> +select f1 from t1 left join t2 using (f1) group by f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported using + select f1 from t1 left join t2 using (f1) group by f1; + ^ +<sql-statement> +select f1 from t1 left join t2 using (f1) group by t1.f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported using + select f1 from t1 left join t2 using (f1) group by t1.f1; + ^ +<sql-statement> +select t1.f1 from t1 left join t2 using (f1) group by t1.f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported using + select t1.f1 from t1 left join t2 using (f1) group by t1.f1; + ^ +<sql-statement> +-- only this one should fail: +select t1.f1 from t1 left join t2 using (f1) group by f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported using + -- only this one should fail: + ^ +<sql-statement> +drop table t1, t2; +</sql-statement> +<sql-statement> +-- +-- Test combinations of DISTINCT and/or ORDER BY +-- +select array_agg(a order by b) + from (values (1,4),(2,3),(3,1),(4,2)) v(a,b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:4:8: Error: FuncCall: unsupported agg_order + select array_agg(a order by b) + ^ +<sql-statement> +select array_agg(a order by a) + from (values (1,4),(2,3),(3,1),(4,2)) v(a,b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select array_agg(a order by a) + ^ +<sql-statement> +select array_agg(a order by a desc) + from (values (1,4),(2,3),(3,1),(4,2)) v(a,b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select array_agg(a order by a desc) + ^ +<sql-statement> +select array_agg(b order by a desc) + from (values (1,4),(2,3),(3,1),(4,2)) v(a,b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select array_agg(b order by a desc) + ^ +<sql-statement> +select array_agg(distinct a) + from (values (1),(2),(1),(3),(null),(2)) v(a); +</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_agg(distinct a) + ^ + -stdin-:<main>:1:8: Error: At function: PgAgg + select array_agg(distinct a) + ^ + -stdin-:<main>:1:8: Error: Unable to find an overload for aggregate array_agg with given argument types: (int4) + select array_agg(distinct a) + ^ +<sql-statement> +select array_agg(distinct a order by a) + from (values (1),(2),(1),(3),(null),(2)) v(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select array_agg(distinct a order by a) + ^ +<sql-statement> +select array_agg(distinct a order by a desc) + from (values (1),(2),(1),(3),(null),(2)) v(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select array_agg(distinct a order by a desc) + ^ +<sql-statement> +select array_agg(distinct a order by a desc nulls last) + from (values (1),(2),(1),(3),(null),(2)) v(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select array_agg(distinct a order by a desc nulls last) + ^ +<sql-statement> +-- multi-arg aggs, strict/nonstrict, distinct/order by +select aggfstr(a,b,c) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + -- multi-arg aggs, strict/nonstrict, distinct/order by + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + select aggfstr(a,b,c) + ^ + -stdin-:<main>:2:8: Error: No such proc: aggfstr + select aggfstr(a,b,c) + ^ +<sql-statement> +select aggfns(a,b,c) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c); +</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 aggfns(a,b,c) + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select aggfns(a,b,c) + ^ + -stdin-:<main>:1:8: Error: No such proc: aggfns + select aggfns(a,b,c) + ^ +<sql-statement> +select aggfstr(distinct a,b,c) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,3) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: agg_distinct must be set only for aggregate functions + select aggfstr(distinct a,b,c) + ^ +<sql-statement> +select aggfns(distinct a,b,c) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,3) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: agg_distinct must be set only for aggregate functions + select aggfns(distinct a,b,c) + ^ +<sql-statement> +select aggfstr(distinct a,b,c order by b) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,3) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select aggfstr(distinct a,b,c order by b) + ^ +<sql-statement> +select aggfns(distinct a,b,c order by b) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,3) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,b,c order by b) + ^ +<sql-statement> +-- test specific code paths +select aggfns(distinct a,a,c order by c using ~<~,a) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,a,c order by c using ~<~,a) + ^ +<sql-statement> +select aggfns(distinct a,a,c order by c using ~<~) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,a,c order by c using ~<~) + ^ +<sql-statement> +select aggfns(distinct a,a,c order by a) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,a,c order by a) + ^ +<sql-statement> +select aggfns(distinct a,b,c order by a,c using ~<~,b) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,b,c order by a,c using ~<~,b) + ^ +<sql-statement> +-- check node I/O via view creation and usage, also deparsing logic +create view agg_view1 as + select aggfns(a,b,c) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + -- check node I/O via view creation and usage, also deparsing logic + ^ +<sql-statement> +select * from agg_view1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.agg_view1 + +<sql-statement> +select pg_get_viewdef('agg_view1'::regclass); +</sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + select pg_get_viewdef('agg_view1'::regclass); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: relation "agg_view1" does not exist + + select pg_get_viewdef('agg_view1'::regclass); + ^ +<sql-statement> +create or replace view agg_view1 as + select aggfns(distinct a,b,c) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,3) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create or replace view agg_view1 as + ^ +<sql-statement> +select * from agg_view1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.agg_view1 + +<sql-statement> +select pg_get_viewdef('agg_view1'::regclass); +</sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + select pg_get_viewdef('agg_view1'::regclass); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: relation "agg_view1" does not exist + + select pg_get_viewdef('agg_view1'::regclass); + ^ +<sql-statement> +create or replace view agg_view1 as + select aggfns(distinct a,b,c order by b) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,3) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create or replace view agg_view1 as + ^ +<sql-statement> +select * from agg_view1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.agg_view1 + +<sql-statement> +select pg_get_viewdef('agg_view1'::regclass); +</sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + select pg_get_viewdef('agg_view1'::regclass); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: relation "agg_view1" does not exist + + select pg_get_viewdef('agg_view1'::regclass); + ^ +<sql-statement> +create or replace view agg_view1 as + select aggfns(a,b,c order by b+1) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create or replace view agg_view1 as + ^ +<sql-statement> +select * from agg_view1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.agg_view1 + +<sql-statement> +select pg_get_viewdef('agg_view1'::regclass); +</sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + select pg_get_viewdef('agg_view1'::regclass); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: relation "agg_view1" does not exist + + select pg_get_viewdef('agg_view1'::regclass); + ^ +<sql-statement> +create or replace view agg_view1 as + select aggfns(a,a,c order by b) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create or replace view agg_view1 as + ^ +<sql-statement> +select * from agg_view1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.agg_view1 + +<sql-statement> +select pg_get_viewdef('agg_view1'::regclass); +</sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + select pg_get_viewdef('agg_view1'::regclass); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: relation "agg_view1" does not exist + + select pg_get_viewdef('agg_view1'::regclass); + ^ +<sql-statement> +create or replace view agg_view1 as + select aggfns(a,b,c order by c using ~<~) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create or replace view agg_view1 as + ^ +<sql-statement> +select * from agg_view1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.agg_view1 + +<sql-statement> +select pg_get_viewdef('agg_view1'::regclass); +</sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + select pg_get_viewdef('agg_view1'::regclass); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: relation "agg_view1" does not exist + + select pg_get_viewdef('agg_view1'::regclass); + ^ +<sql-statement> +create or replace view agg_view1 as + select aggfns(distinct a,b,c order by a,c using ~<~,b) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create or replace view agg_view1 as + ^ +<sql-statement> +select * from agg_view1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.agg_view1 + +<sql-statement> +select pg_get_viewdef('agg_view1'::regclass); +</sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + select pg_get_viewdef('agg_view1'::regclass); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: relation "agg_view1" does not exist + + select pg_get_viewdef('agg_view1'::regclass); + ^ +<sql-statement> +drop view agg_view1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'agg_view1' + drop view agg_view1; + ^ +<sql-statement> +-- incorrect DISTINCT usage errors +select aggfns(distinct a,b,c order by i) + from (values (1,1,'foo')) v(a,b,c), generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,b,c order by i) + ^ +<sql-statement> +select aggfns(distinct a,b,c order by a,b+1) + from (values (1,1,'foo')) v(a,b,c), generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,b,c order by a,b+1) + ^ +<sql-statement> +select aggfns(distinct a,b,c order by a,b,i,c) + from (values (1,1,'foo')) v(a,b,c), generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,b,c order by a,b,i,c) + ^ +<sql-statement> +select aggfns(distinct a,a,c order by a,b) + from (values (1,1,'foo')) v(a,b,c), generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,a,c order by a,b) + ^ +<sql-statement> +-- string_agg tests +select string_agg(a,',') from (values('aaaa'),('bbbb'),('cccc')) g(a); +</sql-statement> +<sql-statement> +select string_agg(a,',') from (values('aaaa'),(null),('bbbb'),('cccc')) g(a); +</sql-statement> +<sql-statement> +select string_agg(a,'AB') from (values(null),(null),('bbbb'),('cccc')) g(a); +</sql-statement> +<sql-statement> +select string_agg(a,',') from (values(null),(null)) g(a); +</sql-statement> +<sql-statement> +-- check some implicit casting cases, as per bug #5564 +select string_agg(distinct f1, ',' order by f1) from varchar_tbl; -- ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select string_agg(distinct f1, ',' order by f1) from varchar_tbl; -- ok + ^ +<sql-statement> +select string_agg(distinct f1::text, ',' order by f1) from varchar_tbl; -- not ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select string_agg(distinct f1::text, ',' order by f1) from varchar_tbl; -- not ok + ^ +<sql-statement> +select string_agg(distinct f1, ',' order by f1::text) from varchar_tbl; -- not ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select string_agg(distinct f1, ',' order by f1::text) from varchar_tbl; -- not ok + ^ +<sql-statement> +select string_agg(distinct f1::text, ',' order by f1::text) from varchar_tbl; -- ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select string_agg(distinct f1::text, ',' order by f1::text) from varchar_tbl; -- ok + ^ +<sql-statement> +-- string_agg bytea tests +create table bytea_test_table(v bytea); +</sql-statement> +<sql-statement> +select string_agg(v, '') from bytea_test_table; +</sql-statement> +<sql-statement> +insert into bytea_test_table values(decode('ff','hex')); +</sql-statement> +<sql-statement> +select string_agg(v, '') from bytea_test_table; +</sql-statement> +<sql-statement> +insert into bytea_test_table values(decode('aa','hex')); +</sql-statement> +<sql-statement> +select string_agg(v, '') from bytea_test_table; +</sql-statement> +<sql-statement> +select string_agg(v, NULL) from bytea_test_table; +</sql-statement> +<sql-statement> +select string_agg(v, decode('ee', 'hex')) from bytea_test_table; +</sql-statement> +<sql-statement> +drop table bytea_test_table; +</sql-statement> +<sql-statement> +-- FILTER tests +select min(unique1) filter (where unique1 > 100) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_filter + select min(unique1) filter (where unique1 > 100) from tenk1; + ^ +<sql-statement> +select sum(1/ten) filter (where ten > 0) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_filter + select sum(1/ten) filter (where ten > 0) from tenk1; + ^ +<sql-statement> +select ten, sum(distinct four) filter (where four::text ~ '123') from onek a +group by ten; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:13: Error: FuncCall: unsupported agg_filter + select ten, sum(distinct four) filter (where four::text ~ '123') from onek a + ^ +<sql-statement> +select ten, sum(distinct four) filter (where four > 10) from onek a +group by ten +having exists (select 1 from onek b where sum(distinct a.four) = b.four); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:3:43: Error: Aggregate functions are not allowed in: WHERE + having exists (select 1 from onek b where sum(distinct a.four) = b.four); + ^ +<sql-statement> +select max(foo COLLATE "C") filter (where (bar collate "POSIX") > '0') +from (values ('a', 'b')) AS v(foo,bar); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_filter + select max(foo COLLATE "C") filter (where (bar collate "POSIX") > '0') + ^ +<sql-statement> +-- outer reference in FILTER (PostgreSQL extension) +select (select count(*) + from (values (1)) t0(inner_c)) +from (values (2),(3)) t1(outer_c); -- inner query is aggregation query +</sql-statement> +<sql-statement> +select (select count(*) filter (where outer_c <> 0) + from (values (1)) t0(inner_c)) +from (values (2),(3)) t1(outer_c); -- outer query is aggregation query +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:16: Error: FuncCall: unsupported agg_filter + select (select count(*) filter (where outer_c <> 0) + ^ +<sql-statement> +select (select count(inner_c) filter (where outer_c <> 0) + from (values (1)) t0(inner_c)) +from (values (2),(3)) t1(outer_c); -- inner query is aggregation query +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:16: Error: FuncCall: unsupported agg_filter + select (select count(inner_c) filter (where outer_c <> 0) + ^ +<sql-statement> +select + (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1)) + filter (where o.unique1 < 10)) +from tenk1 o; -- outer query is aggregation query +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:11: Error: FuncCall: unsupported agg_filter + (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1)) + ^ +<sql-statement> +-- subquery in FILTER clause (PostgreSQL extension) +select sum(unique1) FILTER (WHERE + unique1 IN (SELECT unique1 FROM onek where unique1 < 100)) FROM tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_filter + select sum(unique1) FILTER (WHERE + ^ +<sql-statement> +-- exercise lots of aggregate parts with FILTER +select aggfns(distinct a,b,c order by a,c using ~<~,b) filter (where a > 1) + from (values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz')) v(a,b,c), + generate_series(1,2) i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select aggfns(distinct a,b,c order by a,c using ~<~,b) filter (where a > 1) + ^ +<sql-statement> +-- check handling of bare boolean Var in FILTER +select max(0) filter (where b1) from bool_test; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_filter + select max(0) filter (where b1) from bool_test; + ^ +<sql-statement> +select (select max(0) filter (where b1)) from bool_test; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:16: Error: FuncCall: unsupported agg_filter + select (select max(0) filter (where b1)) from bool_test; + ^ +<sql-statement> +-- check for correct detection of nested-aggregate errors in FILTER +select max(unique1) filter (where sum(ten) > 0) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_filter + select max(unique1) filter (where sum(ten) > 0) from tenk1; + ^ +<sql-statement> +select (select max(unique1) filter (where sum(ten) > 0) from int8_tbl) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:16: Error: FuncCall: unsupported agg_filter + select (select max(unique1) filter (where sum(ten) > 0) from int8_tbl) from tenk1; + ^ +<sql-statement> +select max(unique1) filter (where bool_or(ten > 0)) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_filter + select max(unique1) filter (where bool_or(ten > 0)) from tenk1; + ^ +<sql-statement> +select (select max(unique1) filter (where bool_or(ten > 0)) from int8_tbl) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:16: Error: FuncCall: unsupported agg_filter + select (select max(unique1) filter (where bool_or(ten > 0)) from int8_tbl) from tenk1; + ^ +<sql-statement> +-- ordered-set aggregates +select p, percentile_cont(p) within group (order by x::float8) +from generate_series(1,5) x, + (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p) +group by p order by p; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:11: Error: FuncCall: unsupported agg_order + select p, percentile_cont(p) within group (order by x::float8) + ^ +<sql-statement> +select p, percentile_cont(p order by p) within group (order by x) -- error +from generate_series(1,5) x, + (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p) +group by p order by p; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:42: Error: ERROR: cannot use multiple ORDER BY clauses with WITHIN GROUP + + select p, percentile_cont(p order by p) within group (order by x) -- error + ^ +<sql-statement> +select p, sum() within group (order by x::float8) -- error +from generate_series(1,5) x, + (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p) +group by p order by p; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:11: Error: FuncCall: unsupported agg_order + select p, sum() within group (order by x::float8) -- error + ^ +<sql-statement> +select p, percentile_cont(p,p) -- error +from generate_series(1,5) x, + (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p) +group by p order by p; +</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 p, percentile_cont(p,p) -- error + ^ + -stdin-:<main>:1:11: Error: At function: PgAgg + select p, percentile_cont(p,p) -- error + ^ + -stdin-:<main>:1:11: Error: Only normal aggregation supported + select p, percentile_cont(p,p) -- error + ^ +<sql-statement> +select percentile_cont(0.5) within group (order by b) from aggtest; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percentile_cont(0.5) within group (order by b) from aggtest; + ^ +<sql-statement> +select percentile_cont(0.5) within group (order by b), sum(b) from aggtest; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percentile_cont(0.5) within group (order by b), sum(b) from aggtest; + ^ +<sql-statement> +select percentile_cont(0.5) within group (order by thousand) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percentile_cont(0.5) within group (order by thousand) from tenk1; + ^ +<sql-statement> +select percentile_disc(0.5) within group (order by thousand) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percentile_disc(0.5) within group (order by thousand) from tenk1; + ^ +<sql-statement> +select rank(3) within group (order by x) +from (values (1),(1),(2),(2),(3),(3),(4)) v(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select rank(3) within group (order by x) + ^ +<sql-statement> +select cume_dist(3) within group (order by x) +from (values (1),(1),(2),(2),(3),(3),(4)) v(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select cume_dist(3) within group (order by x) + ^ +<sql-statement> +select percent_rank(3) within group (order by x) +from (values (1),(1),(2),(2),(3),(3),(4),(5)) v(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percent_rank(3) within group (order by x) + ^ +<sql-statement> +select dense_rank(3) within group (order by x) +from (values (1),(1),(2),(2),(3),(3),(4)) v(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select dense_rank(3) within group (order by x) + ^ +<sql-statement> +select percentile_disc(array[0,0.1,0.25,0.5,0.75,0.9,1]) within group (order by thousand) +from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percentile_disc(array[0,0.1,0.25,0.5,0.75,0.9,1]) within group (order by thousand) + ^ +<sql-statement> +select percentile_cont(array[0,0.25,0.5,0.75,1]) within group (order by thousand) +from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percentile_cont(array[0,0.25,0.5,0.75,1]) within group (order by thousand) + ^ +<sql-statement> +select percentile_disc(array[[null,1,0.5],[0.75,0.25,null]]) within group (order by thousand) +from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percentile_disc(array[[null,1,0.5],[0.75,0.25,null]]) within group (order by thousand) + ^ +<sql-statement> +select percentile_cont(array[0,1,0.25,0.75,0.5,1,0.3,0.32,0.35,0.38,0.4]) within group (order by x) +from generate_series(1,6) x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percentile_cont(array[0,1,0.25,0.75,0.5,1,0.3,0.32,0.35,0.38,0.4]) within group (order by x) + ^ +<sql-statement> +select ten, mode() within group (order by string4) from tenk1 group by ten; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:13: Error: FuncCall: unsupported agg_order + select ten, mode() within group (order by string4) from tenk1 group by ten; + ^ +<sql-statement> +select percentile_disc(array[0.25,0.5,0.75]) within group (order by x) +from unnest('{fred,jim,fred,jack,jill,fred,jill,jim,jim,sheila,jim,sheila}'::text[]) u(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select percentile_disc(array[0.25,0.5,0.75]) within group (order by x) + ^ +<sql-statement> +-- check collation propagates up in suitable cases: +select pg_collation_for(percentile_disc(1) within group (order by x collate "POSIX")) + from (values ('fred'),('jim')) v(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:25: Error: FuncCall: unsupported agg_order + select pg_collation_for(percentile_disc(1) within group (order by x collate "POSIX")) + ^ +<sql-statement> +-- ordered-set aggs created with CREATE AGGREGATE +select test_rank(3) within group (order by x) +from (values (1),(1),(2),(2),(3),(3),(4)) v(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select test_rank(3) within group (order by x) + ^ +<sql-statement> +select test_percentile_disc(0.5) within group (order by thousand) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select test_percentile_disc(0.5) within group (order by thousand) from tenk1; + ^ +<sql-statement> +-- ordered-set aggs can't use ungrouped vars in direct args: +select rank(x) within group (order by x) from generate_series(1,5) x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select rank(x) within group (order by x) from generate_series(1,5) x; + ^ +<sql-statement> +-- outer-level agg can't use a grouped arg of a lower level, either: +select array(select percentile_disc(a) within group (order by x) + from (values (0.3),(0.7)) v(a) group by a) + from generate_series(1,5) g(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: SublinkExpr: unsupported link type: 6 + select array(select percentile_disc(a) within group (order by x) + ^ +<sql-statement> +-- agg in the direct args is a grouping violation, too: +select rank(sum(x)) within group (order by x) from generate_series(1,5) x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select rank(sum(x)) within group (order by x) from generate_series(1,5) x; + ^ +<sql-statement> +-- hypothetical-set type unification and argument-count failures: +select rank(3) within group (order by x) from (values ('fred'),('jim')) v(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select rank(3) within group (order by x) from (values ('fred'),('jim')) v(x); + ^ +<sql-statement> +select rank(3) within group (order by stringu1,stringu2) from tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select rank(3) within group (order by stringu1,stringu2) from tenk1; + ^ +<sql-statement> +select rank('fred') within group (order by x) from generate_series(1,5) x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select rank('fred') within group (order by x) from generate_series(1,5) x; + ^ +<sql-statement> +select rank('adam'::text collate "C") within group (order by x collate "POSIX") + from (values ('fred'),('jim')) v(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select rank('adam'::text collate "C") within group (order by x collate "POSIX") + ^ +<sql-statement> +-- hypothetical-set type unification successes: +select rank('adam'::varchar) within group (order by x) from (values ('fred'),('jim')) v(x); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select rank('adam'::varchar) within group (order by x) from (values ('fred'),('jim')) v(x); + ^ +<sql-statement> +select rank('3') within group (order by x) from generate_series(1,5) x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + select rank('3') within group (order by x) from generate_series(1,5) x; + ^ +<sql-statement> +-- divide by zero check +select percent_rank(0) within group (order by x) from generate_series(1,0) x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + select percent_rank(0) within group (order by x) from generate_series(1,0) x; + ^ +<sql-statement> +-- deparse and multiple features: +create view aggordview1 as +select ten, + percentile_disc(0.5) within group (order by thousand) as p50, + percentile_disc(0.5) within group (order by thousand) filter (where hundred=1) as px, + rank(5,'AZZZZ',50) within group (order by hundred, string4 desc, hundred) + from tenk1 + group by ten order by ten; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + -- deparse and multiple features: + ^ +<sql-statement> +select pg_get_viewdef('aggordview1'); +</sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + select pg_get_viewdef('aggordview1'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: relation "aggordview1" does not exist + + select pg_get_viewdef('aggordview1'); + ^ +<sql-statement> +select * from aggordview1 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.aggordview1 + +<sql-statement> +drop view aggordview1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'aggordview1' + drop view aggordview1; + ^ +<sql-statement> +-- variadic aggregates +select least_agg(q1,q2) from 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> +select least_agg(variadic array[q1,q2]) from int8_tbl; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic + select least_agg(variadic array[q1,q2]) from int8_tbl; + ^ +<sql-statement> +select cleast_agg(q1,q2) from 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> +select cleast_agg(4.5,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> +select cleast_agg(variadic array[4.5,f1]) from int4_tbl; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic + select cleast_agg(variadic array[4.5,f1]) from int4_tbl; + ^ +<sql-statement> +select pg_typeof(cleast_agg(variadic array[4.5,f1])) from int4_tbl; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:18: Error: FuncCall: unsupported func_variadic + select pg_typeof(cleast_agg(variadic array[4.5,f1])) from int4_tbl; + ^ +<sql-statement> +-- test aggregates with common transition functions share the same states +begin work; +</sql-statement> +<sql-statement> +create type avg_state as (total bigint, count bigint); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + create type avg_state as (total bigint, count bigint); + ^ +<sql-statement> +create or replace function avg_transfn(state avg_state, n int) returns avg_state as +$$ +declare new_state avg_state; +begin + raise notice 'avg_transfn called with %', n; + if state is null then + if n is not null then + new_state.total := n; + new_state.count := 1; + return new_state; + end if; + return null; + elsif n is not null then + state.total := state.total + n; + state.count := state.count + 1; + return state; + end if; + return null; +end +$$ language plpgsql; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create or replace function avg_transfn(state avg_state, n int) returns avg_state as + ^ +<sql-statement> +create function avg_finalfn(state avg_state) returns int4 as +$$ +begin + if state is null then + return NULL; + else + return state.total / state.count; + end if; +end +$$ language plpgsql; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function avg_finalfn(state avg_state) returns int4 as + ^ +<sql-statement> +create function sum_finalfn(state avg_state) returns int4 as +$$ +begin + if state is null then + return NULL; + else + return state.total; + end if; +end +$$ language plpgsql; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function sum_finalfn(state avg_state) returns int4 as + ^ +<sql-statement> +create aggregate my_avg(int4) + stype = avg_state, + sfunc = avg_transfn, + finalfunc = avg_finalfn +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:4: Error: ERROR: syntax error at or near "stype" + + stype = avg_state, + ^ +<sql-statement> +create aggregate my_sum(int4) + stype = avg_state, + sfunc = avg_transfn, + finalfunc = sum_finalfn +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:4: Error: ERROR: syntax error at or near "stype" + + stype = avg_state, + ^ +<sql-statement> +-- aggregate state should be shared as aggs are the same. +select my_avg(one),my_avg(one) from (values(1),(3)) t(one); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + -- aggregate state should be shared as aggs are the same. + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- aggregate state should be shared as aggs are the same. + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + select my_avg(one),my_avg(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:2:8: Error: No such proc: my_avg + select my_avg(one),my_avg(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- aggregate state should be shared as aggs are the same. + ^ + -stdin-:<main>:2:20: Error: At function: PgCall + select my_avg(one),my_avg(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:2:20: Error: No such proc: my_avg + select my_avg(one),my_avg(one) from (values(1),(3)) t(one); + ^ +<sql-statement> +-- aggregate state should be shared as transfn is the same for both aggs. +select my_avg(one),my_sum(one) from (values(1),(3)) t(one); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + -- aggregate state should be shared as transfn is the same for both aggs. + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- aggregate state should be shared as transfn is the same for both aggs. + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + select my_avg(one),my_sum(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:2:8: Error: No such proc: my_avg + select my_avg(one),my_sum(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- aggregate state should be shared as transfn is the same for both aggs. + ^ + -stdin-:<main>:2:20: Error: At function: PgCall + select my_avg(one),my_sum(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:2:20: Error: No such proc: my_sum + select my_avg(one),my_sum(one) from (values(1),(3)) t(one); + ^ +<sql-statement> +-- same as previous one, but with DISTINCT, which requires sorting the input. +select my_avg(distinct one),my_sum(distinct one) from (values(1),(3),(1)) t(one); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: agg_distinct must be set only for aggregate functions + select my_avg(distinct one),my_sum(distinct one) from (values(1),(3),(1)) t(one); + ^ +<sql-statement> +-- shouldn't share states due to the distinctness not matching. +select my_avg(distinct one),my_sum(one) from (values(1),(3)) t(one); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: agg_distinct must be set only for aggregate functions + select my_avg(distinct one),my_sum(one) from (values(1),(3)) t(one); + ^ +<sql-statement> +-- shouldn't share states due to the filter clause not matching. +select my_avg(one) filter (where one > 1),my_sum(one) from (values(1),(3)) t(one); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_filter + select my_avg(one) filter (where one > 1),my_sum(one) from (values(1),(3)) t(one); + ^ +<sql-statement> +-- this should not share the state due to different input columns. +select my_avg(one),my_sum(two) from (values(1,2),(3,4)) t(one,two); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + -- this should not share the state due to different input columns. + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- this should not share the state due to different input columns. + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + select my_avg(one),my_sum(two) from (values(1,2),(3,4)) t(one,two); + ^ + -stdin-:<main>:2:8: Error: No such proc: my_avg + select my_avg(one),my_sum(two) from (values(1,2),(3,4)) t(one,two); + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- this should not share the state due to different input columns. + ^ + -stdin-:<main>:2:20: Error: At function: PgCall + select my_avg(one),my_sum(two) from (values(1,2),(3,4)) t(one,two); + ^ + -stdin-:<main>:2:20: Error: No such proc: my_sum + select my_avg(one),my_sum(two) from (values(1,2),(3,4)) t(one,two); + ^ +<sql-statement> +-- exercise cases where OSAs share state +select + percentile_cont(0.5) within group (order by a), + percentile_disc(0.5) within group (order by a) +from (values(1::float8),(3),(5),(7)) t(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:3:3: Error: FuncCall: unsupported agg_order + percentile_cont(0.5) within group (order by a), + ^ +<sql-statement> +select + percentile_cont(0.25) within group (order by a), + percentile_disc(0.5) within group (order by a) +from (values(1::float8),(3),(5),(7)) t(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:3: Error: FuncCall: unsupported agg_order + percentile_cont(0.25) within group (order by a), + ^ +<sql-statement> +-- these can't share state currently +select + rank(4) within group (order by a), + dense_rank(4) within group (order by a) +from (values(1),(3),(5),(7)) t(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:3:3: Error: FuncCall: unsupported agg_order + rank(4) within group (order by a), + ^ +<sql-statement> +-- test that aggs with the same sfunc and initcond share the same agg state +create aggregate my_sum_init(int4) + stype = avg_state, + sfunc = avg_transfn, + finalfunc = sum_finalfn, + initcond = '(10,0)' +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:3:4: Error: ERROR: syntax error at or near "stype" + + stype = avg_state, + ^ +<sql-statement> +create aggregate my_avg_init(int4) + stype = avg_state, + sfunc = avg_transfn, + finalfunc = avg_finalfn, + initcond = '(10,0)' +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:4: Error: ERROR: syntax error at or near "stype" + + stype = avg_state, + ^ +<sql-statement> +create aggregate my_avg_init2(int4) + stype = avg_state, + sfunc = avg_transfn, + finalfunc = avg_finalfn, + initcond = '(4,0)' +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:4: Error: ERROR: syntax error at or near "stype" + + stype = avg_state, + ^ +<sql-statement> +-- state should be shared if INITCONDs are matching +select my_sum_init(one),my_avg_init(one) from (values(1),(3)) t(one); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + -- state should be shared if INITCONDs are matching + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- state should be shared if INITCONDs are matching + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + select my_sum_init(one),my_avg_init(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:2:8: Error: No such proc: my_sum_init + select my_sum_init(one),my_avg_init(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- state should be shared if INITCONDs are matching + ^ + -stdin-:<main>:2:25: Error: At function: PgCall + select my_sum_init(one),my_avg_init(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:2:25: Error: No such proc: my_avg_init + select my_sum_init(one),my_avg_init(one) from (values(1),(3)) t(one); + ^ +<sql-statement> +-- Varying INITCONDs should cause the states not to be shared. +select my_sum_init(one),my_avg_init2(one) from (values(1),(3)) t(one); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + -- Varying INITCONDs should cause the states not to be shared. + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- Varying INITCONDs should cause the states not to be shared. + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + select my_sum_init(one),my_avg_init2(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:2:8: Error: No such proc: my_sum_init + select my_sum_init(one),my_avg_init2(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- Varying INITCONDs should cause the states not to be shared. + ^ + -stdin-:<main>:2:25: Error: At function: PgCall + select my_sum_init(one),my_avg_init2(one) from (values(1),(3)) t(one); + ^ + -stdin-:<main>:2:25: Error: No such proc: my_avg_init2 + select my_sum_init(one),my_avg_init2(one) from (values(1),(3)) t(one); + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- test aggregate state sharing to ensure it works if one aggregate has a +-- finalfn and the other one has none. +begin work; +</sql-statement> +<sql-statement> +create or replace function sum_transfn(state int4, n int4) returns int4 as +$$ +declare new_state int4; +begin + raise notice 'sum_transfn called with %', n; + if state is null then + if n is not null then + new_state := n; + return new_state; + end if; + return null; + elsif n is not null then + state := state + n; + return state; + end if; + return null; +end +$$ language plpgsql; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create or replace function sum_transfn(state int4, n int4) returns int4 as + ^ +<sql-statement> +create function halfsum_finalfn(state int4) returns int4 as +$$ +begin + if state is null then + return NULL; + else + return state / 2; + end if; +end +$$ language plpgsql; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function halfsum_finalfn(state int4) returns int4 as + ^ +<sql-statement> +create aggregate my_sum(int4) + stype = int4, + sfunc = sum_transfn +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:4: Error: ERROR: syntax error at or near "stype" + + stype = int4, + ^ +<sql-statement> +create aggregate my_half_sum(int4) + stype = int4, + sfunc = sum_transfn, + finalfunc = halfsum_finalfn +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:4: Error: ERROR: syntax error at or near "stype" + + stype = int4, + ^ +<sql-statement> +-- Agg state should be shared even though my_sum has no finalfn +select my_sum(one),my_half_sum(one) from (values(1),(2),(3),(4)) t(one); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + -- Agg state should be shared even though my_sum has no finalfn + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- Agg state should be shared even though my_sum has no finalfn + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + select my_sum(one),my_half_sum(one) from (values(1),(2),(3),(4)) t(one); + ^ + -stdin-:<main>:2:8: Error: No such proc: my_sum + select my_sum(one),my_half_sum(one) from (values(1),(2),(3),(4)) t(one); + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- Agg state should be shared even though my_sum has no finalfn + ^ + -stdin-:<main>:2:20: Error: At function: PgCall + select my_sum(one),my_half_sum(one) from (values(1),(2),(3),(4)) t(one); + ^ + -stdin-:<main>:2:20: Error: No such proc: my_half_sum + select my_sum(one),my_half_sum(one) from (values(1),(2),(3),(4)) t(one); + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- test that the aggregate transition logic correctly handles +-- transition / combine functions returning NULL +-- First test the case of a normal transition function returning NULL +BEGIN; +</sql-statement> +<sql-statement> +CREATE FUNCTION balkifnull(int8, int4) +RETURNS int8 +STRICT +LANGUAGE plpgsql AS $$ +BEGIN + IF $1 IS NULL THEN + RAISE 'erroneously called with NULL argument'; + END IF; + RETURN NULL; +END$$; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + CREATE FUNCTION balkifnull(int8, int4) + ^ +<sql-statement> +CREATE AGGREGATE balk(int4) + SFUNC = balkifnull(int8, int4), + STYPE = int8, + PARALLEL = SAFE, + INITCOND = '0' +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:5: Error: ERROR: syntax error at or near "SFUNC" + + SFUNC = balkifnull(int8, int4), + ^ +<sql-statement> +SELECT balk(hundred) 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> +ROLLBACK; +</sql-statement> +<sql-statement> +-- Secondly test the case of a parallel aggregate combiner function +-- returning NULL. For that use normal transition function, but a +-- combiner function returning NULL. +BEGIN; +</sql-statement> +<sql-statement> +CREATE FUNCTION balkifnull(int8, int8) +RETURNS int8 +PARALLEL SAFE +STRICT +LANGUAGE plpgsql AS $$ +BEGIN + IF $1 IS NULL THEN + RAISE 'erroneously called with NULL argument'; + END IF; + RETURN NULL; +END$$; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + CREATE FUNCTION balkifnull(int8, int8) + ^ +<sql-statement> +CREATE AGGREGATE balk(int4) + SFUNC = int4_sum(int8, int4), + STYPE = int8, + COMBINEFUNC = balkifnull(int8, int8), + PARALLEL = SAFE, + INITCOND = '0' +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:5: Error: ERROR: syntax error at or near "SFUNC" + + SFUNC = int4_sum(int8, int4), + ^ +<sql-statement> +-- force use of parallelism +ALTER TABLE tenk1 set (parallel_workers = 4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- force use of parallelism + ^ +<sql-statement> +SET LOCAL parallel_setup_cost=0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: parallel_setup_cost + SET LOCAL parallel_setup_cost=0; + ^ +<sql-statement> +SET LOCAL max_parallel_workers_per_gather=4; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: max_parallel_workers_per_gather + SET LOCAL max_parallel_workers_per_gather=4; + ^ +<sql-statement> +EXPLAIN (COSTS OFF) SELECT balk(hundred) FROM tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + EXPLAIN (COSTS OFF) SELECT balk(hundred) FROM tenk1; + ^ +<sql-statement> +SELECT balk(hundred) 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> +ROLLBACK; +</sql-statement> +<sql-statement> +-- test coverage for aggregate combine/serial/deserial functions +BEGIN; +</sql-statement> +<sql-statement> +SET parallel_setup_cost = 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: parallel_setup_cost + SET parallel_setup_cost = 0; + ^ +<sql-statement> +SET parallel_tuple_cost = 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: parallel_tuple_cost + SET parallel_tuple_cost = 0; + ^ +<sql-statement> +SET min_parallel_table_scan_size = 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: min_parallel_table_scan_size + SET min_parallel_table_scan_size = 0; + ^ +<sql-statement> +SET max_parallel_workers_per_gather = 4; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: max_parallel_workers_per_gather + SET max_parallel_workers_per_gather = 4; + ^ +<sql-statement> +SET parallel_leader_participation = off; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: parallel_leader_participation + SET parallel_leader_participation = off; + ^ +<sql-statement> +SET enable_indexonlyscan = off; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_indexonlyscan + SET enable_indexonlyscan = off; + ^ +<sql-statement> +-- variance(int4) covers numeric_poly_combine +-- sum(int8) covers int8_avg_combine +-- regr_count(float8, float8) covers int8inc_float8_float8 and aggregates with > 1 arg +EXPLAIN (COSTS OFF, VERBOSE) +SELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8) +FROM (SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1) u; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- variance(int4) covers numeric_poly_combine + ^ +<sql-statement> +SELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8) +FROM (SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1) u; +</sql-statement> +-stdin-:<main>: 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> +-- variance(int8) covers numeric_combine +-- avg(numeric) covers numeric_avg_combine +EXPLAIN (COSTS OFF, VERBOSE) +SELECT variance(unique1::int8), avg(unique1::numeric) +FROM (SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1) u; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- variance(int8) covers numeric_combine + ^ +<sql-statement> +SELECT variance(unique1::int8), avg(unique1::numeric) +FROM (SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1 + UNION ALL SELECT * FROM tenk1) u; +</sql-statement> +-stdin-:<main>: 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> +ROLLBACK; +</sql-statement> +<sql-statement> +-- test coverage for dense_rank +SELECT dense_rank(x) WITHIN GROUP (ORDER BY x) FROM (VALUES (1),(1),(2),(2),(3),(3)) v(x) GROUP BY (x) ORDER BY 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:8: Error: FuncCall: unsupported agg_order + SELECT dense_rank(x) WITHIN GROUP (ORDER BY x) FROM (VALUES (1),(1),(2),(2),(3),(3)) v(x) GROUP BY (x) ORDER BY 1; + ^ +<sql-statement> +-- Ensure that the STRICT checks for aggregates does not take NULLness +-- of ORDER BY columns into account. See bug report around +-- 2a505161-2727-2473-7c46-591ed108ac52@email.cz +SELECT min(x ORDER BY y) FROM (VALUES(1, NULL)) AS d(x,y); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:4:8: Error: FuncCall: unsupported agg_order + SELECT min(x ORDER BY y) FROM (VALUES(1, NULL)) AS d(x,y); + ^ +<sql-statement> +SELECT min(x ORDER BY y) FROM (VALUES(1, 2)) AS d(x,y); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: unsupported agg_order + SELECT min(x ORDER BY y) FROM (VALUES(1, 2)) AS d(x,y); + ^ +<sql-statement> +-- check collation-sensitive matching between grouping expressions +select v||'a', case v||'a' when 'aa' then 1 else 0 end, count(*) + from unnest(array['a','b']) u(v) + group by v||'a' order by 1; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgGroup + -- check collation-sensitive matching between grouping expressions + ^ + -stdin-:<main>:4:12: Error: At function: PgOp + group by v||'a' order by 1; + ^ + -stdin-:<main>:4:12: Error: Unable to find an overload for operator || with given argument type(s): (anyelement,unknown) + group by v||'a' order by 1; + ^ +<sql-statement> +select v||'a', case when v||'a' = 'aa' then 1 else 0 end, count(*) + from unnest(array['a','b']) u(v) + group by v||'a' order by 1; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgGroup + select v||'a', case when v||'a' = 'aa' then 1 else 0 end, count(*) + ^ + -stdin-:<main>:3:12: Error: At function: PgOp + group by v||'a' order by 1; + ^ + -stdin-:<main>:3:12: Error: Unable to find an overload for operator || with given argument type(s): (anyelement,unknown) + group by v||'a' order by 1; + ^ +<sql-statement> +-- Make sure that generation of HashAggregate for uniqification purposes +-- does not lead to array overflow due to unexpected duplicate hash keys +-- see CAFeeJoKKu0u+A_A9R9316djW-YW3-+Gtgvy3ju655qRHR3jtdA@mail.gmail.com +set enable_memoize to off; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_memoize + -- Make sure that generation of HashAggregate for uniqification purposes + ^ +<sql-statement> +explain (costs off) + select 1 from tenk1 + where (hundred, thousand) in (select twothousand, twothousand from onek); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +reset enable_memoize; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4 + reset enable_memoize; + ^ +<sql-statement> +-- +-- Hash Aggregation Spill tests +-- +set enable_sort=false; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_sort + -- + ^ +<sql-statement> +set work_mem='64kB'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: work_mem + set work_mem='64kB'; + ^ +<sql-statement> +select unique1, count(*), sum(twothousand) from tenk1 +group by unique1 +having sum(fivethous) > 4975 +order by sum(twothousand); +</sql-statement> +-stdin-:<main>: 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> +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> +set enable_sort to default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 1 + set enable_sort to default; + ^ +<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> +create table agg_data_2k as +select g from generate_series(0, 1999) g; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_data_2k as + ^ +<sql-statement> +analyze agg_data_2k; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze agg_data_2k; + ^ +<sql-statement> +create table agg_data_20k as +select g from generate_series(0, 19999) g; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_data_20k as + ^ +<sql-statement> +analyze agg_data_20k; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze agg_data_20k; + ^ +<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 g%10000 as c1, sum(g::numeric) as c2, count(*) as c3 + from agg_data_20k group by g%10000; +</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 agg_group_1 as +select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3 + from agg_data_20k group by g%10000; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_group_1 as + ^ +<sql-statement> +create table agg_group_2 as +select * from + (values (100), (300), (500)) as r(a), + lateral ( + select (g/2)::numeric as c1, + array_agg(g::numeric) as c2, + count(*) as c3 + from agg_data_2k + where g < r.a + group by g/2) as s; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_group_2 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 agg_group_3 as +select (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3 + from agg_data_2k group by g/2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_group_3 as + ^ +<sql-statement> +create table agg_group_4 as +select (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3 + from agg_data_2k group by g/2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_group_4 as + ^ +<sql-statement> +-- Produce results with hash aggregation +set enable_hashagg = true; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_hashagg + -- Produce results with hash aggregation + ^ +<sql-statement> +set enable_sort = false; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_sort + set enable_sort = false; + ^ +<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 g%10000 as c1, sum(g::numeric) as c2, count(*) as c3 + from agg_data_20k group by g%10000; +</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 agg_hash_1 as +select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3 + from agg_data_20k group by g%10000; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_hash_1 as + ^ +<sql-statement> +create table agg_hash_2 as +select * from + (values (100), (300), (500)) as r(a), + lateral ( + select (g/2)::numeric as c1, + array_agg(g::numeric) as c2, + count(*) as c3 + from agg_data_2k + where g < r.a + group by g/2) as s; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_hash_2 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 agg_hash_3 as +select (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3 + from agg_data_2k group by g/2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_hash_3 as + ^ +<sql-statement> +create table agg_hash_4 as +select (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3 + from agg_data_2k group by g/2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table agg_hash_4 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 group aggregation results to hash aggregation results +(select * from agg_hash_1 except select * from agg_group_1) + union all +(select * from agg_group_1 except select * from agg_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.agg_group_1 + +<sql-statement> +(select * from agg_hash_2 except select * from agg_group_2) + union all +(select * from agg_group_2 except select * from agg_hash_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.agg_group_2 + +<sql-statement> +(select * from agg_hash_3 except select * from agg_group_3) + union all +(select * from agg_group_3 except select * from agg_hash_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.agg_hash_3 + +<sql-statement> +(select * from agg_hash_4 except select * from agg_group_4) + union all +(select * from agg_group_4 except select * from agg_hash_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.agg_hash_4 + +<sql-statement> +drop table agg_group_1; +</sql-statement> +<sql-statement> +drop table agg_group_2; +</sql-statement> +<sql-statement> +drop table agg_group_3; +</sql-statement> +<sql-statement> +drop table agg_group_4; +</sql-statement> +<sql-statement> +drop table agg_hash_1; +</sql-statement> +<sql-statement> +drop table agg_hash_2; +</sql-statement> +<sql-statement> +drop table agg_hash_3; +</sql-statement> +<sql-statement> +drop table agg_hash_4; +</sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/aggregates.out b/ydb/library/yql/tests/postgresql/cases/aggregates.out index d167da5cf65..c39ce9fdfee 100644 --- a/ydb/library/yql/tests/postgresql/cases/aggregates.out +++ b/ydb/library/yql/tests/postgresql/cases/aggregates.out @@ -356,3 +356,88 @@ insert into minmaxtest values(11), (12); create temp table t1 (a int, b int, c int, d int, primary key (a, b)); create temp table t2 (x int, y int, z int, primary key (x, y)); drop table t2; +-- +-- Test GROUP BY matching of join columns that are type-coerced due to USING +-- +create temp table t1(f1 int, f2 bigint); +create temp table t2(f1 bigint, f22 bigint); +drop table t1, t2; +-- string_agg tests +select string_agg(a,',') from (values('aaaa'),('bbbb'),('cccc')) g(a); + string_agg +---------------- + aaaa,bbbb,cccc +(1 row) + +select string_agg(a,',') from (values('aaaa'),(null),('bbbb'),('cccc')) g(a); + string_agg +---------------- + aaaa,bbbb,cccc +(1 row) + +select string_agg(a,'AB') from (values(null),(null),('bbbb'),('cccc')) g(a); + string_agg +------------ + bbbbABcccc +(1 row) + +select string_agg(a,',') from (values(null),(null)) g(a); + string_agg +------------ + +(1 row) + +-- string_agg bytea tests +create table bytea_test_table(v bytea); +select string_agg(v, '') from bytea_test_table; + string_agg +------------ + +(1 row) + +insert into bytea_test_table values(decode('ff','hex')); +select string_agg(v, '') from bytea_test_table; + string_agg +------------ + \xff +(1 row) + +insert into bytea_test_table values(decode('aa','hex')); +select string_agg(v, '') from bytea_test_table; + string_agg +------------ + \xffaa +(1 row) + +select string_agg(v, NULL) from bytea_test_table; + string_agg +------------ + \xffaa +(1 row) + +select string_agg(v, decode('ee', 'hex')) from bytea_test_table; + string_agg +------------ + \xffeeaa +(1 row) + +drop table bytea_test_table; +-- outer reference in FILTER (PostgreSQL extension) +select (select count(*) + from (values (1)) t0(inner_c)) +from (values (2),(3)) t1(outer_c); -- inner query is aggregation query + count +------- + 1 + 1 +(2 rows) + +select p, percentile_cont(p order by p) within group (order by x) -- error +from generate_series(1,5) x, + (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p) +group by p order by p; +ERROR: cannot use multiple ORDER BY clauses with WITHIN GROUP +LINE 1: select p, percentile_cont(p order by p) within group (order ... + ^ +-- test aggregates with common transition functions share the same states +begin work; diff --git a/ydb/library/yql/tests/postgresql/cases/aggregates.sql b/ydb/library/yql/tests/postgresql/cases/aggregates.sql index 5d544657bb4..67ab10a0e7e 100644 --- a/ydb/library/yql/tests/postgresql/cases/aggregates.sql +++ b/ydb/library/yql/tests/postgresql/cases/aggregates.sql @@ -111,3 +111,34 @@ insert into minmaxtest values(11), (12); create temp table t1 (a int, b int, c int, d int, primary key (a, b)); create temp table t2 (x int, y int, z int, primary key (x, y)); drop table t2; +-- +-- Test GROUP BY matching of join columns that are type-coerced due to USING +-- +create temp table t1(f1 int, f2 bigint); +create temp table t2(f1 bigint, f22 bigint); +drop table t1, t2; +-- string_agg tests +select string_agg(a,',') from (values('aaaa'),('bbbb'),('cccc')) g(a); +select string_agg(a,',') from (values('aaaa'),(null),('bbbb'),('cccc')) g(a); +select string_agg(a,'AB') from (values(null),(null),('bbbb'),('cccc')) g(a); +select string_agg(a,',') from (values(null),(null)) g(a); +-- string_agg bytea tests +create table bytea_test_table(v bytea); +select string_agg(v, '') from bytea_test_table; +insert into bytea_test_table values(decode('ff','hex')); +select string_agg(v, '') from bytea_test_table; +insert into bytea_test_table values(decode('aa','hex')); +select string_agg(v, '') from bytea_test_table; +select string_agg(v, NULL) from bytea_test_table; +select string_agg(v, decode('ee', 'hex')) from bytea_test_table; +drop table bytea_test_table; +-- outer reference in FILTER (PostgreSQL extension) +select (select count(*) + from (values (1)) t0(inner_c)) +from (values (2),(3)) t1(outer_c); -- inner query is aggregation query +select p, percentile_cont(p order by p) within group (order by x) -- error +from generate_series(1,5) x, + (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p) +group by p order by p; +-- test aggregates with common transition functions share the same states +begin work; diff --git a/ydb/library/yql/tests/postgresql/cases/alter_table.err b/ydb/library/yql/tests/postgresql/cases/alter_table.err index 9026661f68c..18c3565ba87 100644 --- a/ydb/library/yql/tests/postgresql/cases/alter_table.err +++ b/ydb/library/yql/tests/postgresql/cases/alter_table.err @@ -549,4 +549,11139 @@ CREATE TABLE attmp (regtable int); <sql-statement> CREATE TEMP TABLE attmp (attmptable int); </sql-statement> -(TFileError) (Error 17: File exists) util/system/file.cpp:918: can't open "/var/tmp/tmpasfe8kov/attmp" with mode CreateNew (0x00000003) +<sql-statement> +ALTER TABLE attmp RENAME TO attmp_new; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE attmp RENAME TO attmp_new; + ^ +<sql-statement> +SELECT * FROM attmp; +</sql-statement> +<sql-statement> +SELECT * FROM attmp_new; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.attmp_new + +<sql-statement> +ALTER TABLE attmp RENAME TO attmp_new2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE attmp RENAME TO attmp_new2; + ^ +<sql-statement> +SELECT * FROM attmp; -- should fail +</sql-statement> +<sql-statement> +SELECT * FROM attmp_new; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.attmp_new + +<sql-statement> +SELECT * FROM attmp_new2; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.attmp_new2 + +<sql-statement> +DROP TABLE attmp_new; +</sql-statement> +<sql-statement> +DROP TABLE attmp_new2; +</sql-statement> +<sql-statement> +-- check rename of partitioned tables and indexes also +CREATE TABLE part_attmp (a int primary key) partition by range (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- check rename of partitioned tables and indexes also + ^ +<sql-statement> +CREATE TABLE part_attmp1 PARTITION OF part_attmp FOR VALUES FROM (0) TO (100); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE part_attmp1 PARTITION OF part_attmp FOR VALUES FROM (0) TO (100); + ^ +<sql-statement> +ALTER INDEX part_attmp_pkey RENAME TO part_attmp_index; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX part_attmp_pkey RENAME TO part_attmp_index; + ^ +<sql-statement> +ALTER INDEX part_attmp1_pkey RENAME TO part_attmp1_index; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX part_attmp1_pkey RENAME TO part_attmp1_index; + ^ +<sql-statement> +ALTER TABLE part_attmp RENAME TO part_at2tmp; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE part_attmp RENAME TO part_at2tmp; + ^ +<sql-statement> +ALTER TABLE part_attmp1 RENAME TO part_at2tmp1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE part_attmp1 RENAME TO part_at2tmp1; + ^ +<sql-statement> +SET ROLE regress_alter_table_user1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: role + SET ROLE regress_alter_table_user1; + ^ +<sql-statement> +ALTER INDEX part_attmp_index RENAME TO fail; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX part_attmp_index RENAME TO fail; + ^ +<sql-statement> +ALTER INDEX part_attmp1_index RENAME TO fail; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX part_attmp1_index RENAME TO fail; + ^ +<sql-statement> +ALTER TABLE part_at2tmp RENAME TO fail; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE part_at2tmp RENAME TO fail; + ^ +<sql-statement> +ALTER TABLE part_at2tmp1 RENAME TO fail; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE part_at2tmp1 RENAME TO fail; + ^ +<sql-statement> +RESET ROLE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4 + RESET ROLE; + ^ +<sql-statement> +DROP TABLE part_at2tmp; +</sql-statement> +<sql-statement> +-- +-- check renaming to a table's array type's autogenerated name +-- (the array type's name should get out of the way) +-- +CREATE TABLE attmp_array (id int); +</sql-statement> +<sql-statement> +CREATE TABLE attmp_array2 (id int); +</sql-statement> +<sql-statement> +SELECT typname FROM pg_type WHERE oid = 'attmp_array[]'::regtype; +</sql-statement> +-stdin-:<main>: 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_type + +<sql-statement> +SELECT typname FROM pg_type WHERE oid = 'attmp_array2[]'::regtype; +</sql-statement> +-stdin-:<main>: 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_type + +<sql-statement> +ALTER TABLE attmp_array2 RENAME TO _attmp_array; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE attmp_array2 RENAME TO _attmp_array; + ^ +<sql-statement> +SELECT typname FROM pg_type WHERE oid = 'attmp_array[]'::regtype; +</sql-statement> +-stdin-:<main>: 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_type + +<sql-statement> +SELECT typname FROM pg_type WHERE oid = '_attmp_array[]'::regtype; +</sql-statement> +-stdin-:<main>: 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_type + +<sql-statement> +DROP TABLE _attmp_array; +</sql-statement> +<sql-statement> +DROP TABLE attmp_array; +</sql-statement> +<sql-statement> +-- renaming to table's own array type's name is an interesting corner case +CREATE TABLE attmp_array (id int); +</sql-statement> +<sql-statement> +SELECT typname FROM pg_type WHERE oid = 'attmp_array[]'::regtype; +</sql-statement> +-stdin-:<main>: 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_type + +<sql-statement> +ALTER TABLE attmp_array RENAME TO _attmp_array; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE attmp_array RENAME TO _attmp_array; + ^ +<sql-statement> +SELECT typname FROM pg_type WHERE oid = '_attmp_array[]'::regtype; +</sql-statement> +-stdin-:<main>: 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_type + +<sql-statement> +DROP TABLE _attmp_array; +</sql-statement> +<sql-statement> +-- ALTER TABLE ... RENAME on non-table relations +-- renaming indexes (FIXME: this should probably test the index's functionality) +ALTER INDEX IF EXISTS __onek_unique1 RENAME TO attmp_onek_unique1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + -- ALTER TABLE ... RENAME on non-table relations + ^ +<sql-statement> +ALTER INDEX IF EXISTS __attmp_onek_unique1 RENAME TO onek_unique1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX IF EXISTS __attmp_onek_unique1 RENAME TO onek_unique1; + ^ +<sql-statement> +ALTER INDEX onek_unique1 RENAME TO attmp_onek_unique1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX onek_unique1 RENAME TO attmp_onek_unique1; + ^ +<sql-statement> +ALTER INDEX attmp_onek_unique1 RENAME TO onek_unique1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX attmp_onek_unique1 RENAME TO onek_unique1; + ^ +<sql-statement> +SET ROLE regress_alter_table_user1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: role + SET ROLE regress_alter_table_user1; + ^ +<sql-statement> +ALTER INDEX onek_unique1 RENAME TO fail; -- permission denied +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX onek_unique1 RENAME TO fail; -- permission denied + ^ +<sql-statement> +RESET ROLE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4 + RESET ROLE; + ^ +<sql-statement> +-- rename statements with mismatching statement and object types +CREATE TABLE alter_idx_rename_test (a INT); +</sql-statement> +<sql-statement> +CREATE INDEX alter_idx_rename_test_idx ON alter_idx_rename_test (a); +</sql-statement> +<sql-statement> +CREATE TABLE alter_idx_rename_test_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 TABLE alter_idx_rename_test_parted (a INT) PARTITION BY LIST (a); + ^ +<sql-statement> +CREATE INDEX alter_idx_rename_test_parted_idx ON alter_idx_rename_test_parted (a); +</sql-statement> +<sql-statement> +BEGIN; +</sql-statement> +<sql-statement> +ALTER INDEX alter_idx_rename_test RENAME TO alter_idx_rename_test_2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX alter_idx_rename_test RENAME TO alter_idx_rename_test_2; + ^ +<sql-statement> +ALTER INDEX alter_idx_rename_test_parted RENAME TO alter_idx_rename_test_parted_2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX alter_idx_rename_test_parted RENAME TO alter_idx_rename_test_parted_2; + ^ +<sql-statement> +SELECT relation::regclass, mode FROM pg_locks +WHERE pid = pg_backend_pid() AND locktype = 'relation' + AND relation::regclass::text LIKE 'alter\_idx%' +ORDER BY relation::regclass::text COLLATE "C"; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 365 + SELECT relation::regclass, mode FROM pg_locks + ^ +<sql-statement> +COMMIT; +</sql-statement> +<sql-statement> +BEGIN; +</sql-statement> +<sql-statement> +ALTER INDEX alter_idx_rename_test_idx RENAME TO alter_idx_rename_test_idx_2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX alter_idx_rename_test_idx RENAME TO alter_idx_rename_test_idx_2; + ^ +<sql-statement> +ALTER INDEX alter_idx_rename_test_parted_idx RENAME TO alter_idx_rename_test_parted_idx_2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX alter_idx_rename_test_parted_idx RENAME TO alter_idx_rename_test_parted_idx_2; + ^ +<sql-statement> +SELECT relation::regclass, mode FROM pg_locks +WHERE pid = pg_backend_pid() AND locktype = 'relation' + AND relation::regclass::text LIKE 'alter\_idx%' +ORDER BY relation::regclass::text COLLATE "C"; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 365 + SELECT relation::regclass, mode FROM pg_locks + ^ +<sql-statement> +COMMIT; +</sql-statement> +<sql-statement> +BEGIN; +</sql-statement> +<sql-statement> +ALTER TABLE alter_idx_rename_test_idx_2 RENAME TO alter_idx_rename_test_idx_3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE alter_idx_rename_test_idx_2 RENAME TO alter_idx_rename_test_idx_3; + ^ +<sql-statement> +ALTER TABLE alter_idx_rename_test_parted_idx_2 RENAME TO alter_idx_rename_test_parted_idx_3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE alter_idx_rename_test_parted_idx_2 RENAME TO alter_idx_rename_test_parted_idx_3; + ^ +<sql-statement> +SELECT relation::regclass, mode FROM pg_locks +WHERE pid = pg_backend_pid() AND locktype = 'relation' + AND relation::regclass::text LIKE 'alter\_idx%' +ORDER BY relation::regclass::text COLLATE "C"; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 365 + SELECT relation::regclass, mode FROM pg_locks + ^ +<sql-statement> +COMMIT; +</sql-statement> +<sql-statement> +DROP TABLE alter_idx_rename_test_2; +</sql-statement> +<sql-statement> +-- renaming views +CREATE VIEW attmp_view (unique1) AS SELECT unique1 FROM tenk1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>: Error: Not all views have been dropped + +<sql-statement> +ALTER TABLE attmp_view RENAME TO attmp_view_new; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE attmp_view RENAME TO attmp_view_new; + ^ +<sql-statement> +SET ROLE regress_alter_table_user1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: role + SET ROLE regress_alter_table_user1; + ^ +<sql-statement> +ALTER VIEW attmp_view_new RENAME TO fail; -- permission denied +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER VIEW attmp_view_new RENAME TO fail; -- permission denied + ^ +<sql-statement> +RESET ROLE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4 + RESET ROLE; + ^ +<sql-statement> +-- hack to ensure we get an indexscan here +set enable_seqscan to off; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_seqscan + -- hack to ensure we get an indexscan here + ^ +<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> +-- 5 values, sorted +SELECT unique1 FROM tenk1 WHERE unique1 < 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.tenk1 + +<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> +DROP VIEW attmp_view_new; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'attmp_view_new' + DROP VIEW attmp_view_new; + ^ +<sql-statement> +-- toast-like relation name +alter table stud_emp rename to pg_toast_stud_emp; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + -- toast-like relation name + ^ +<sql-statement> +alter table pg_toast_stud_emp rename to stud_emp; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + alter table pg_toast_stud_emp rename to stud_emp; + ^ +<sql-statement> +-- renaming index should rename constraint as well +ALTER TABLE onek ADD CONSTRAINT onek_unique1_constraint UNIQUE (unique1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- renaming index should rename constraint as well + ^ +<sql-statement> +ALTER INDEX onek_unique1_constraint RENAME TO onek_unique1_constraint_foo; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER INDEX onek_unique1_constraint RENAME TO onek_unique1_constraint_foo; + ^ +<sql-statement> +ALTER TABLE onek DROP CONSTRAINT onek_unique1_constraint_foo; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE onek DROP CONSTRAINT onek_unique1_constraint_foo; + ^ +<sql-statement> +-- renaming constraint +ALTER TABLE onek ADD CONSTRAINT onek_check_constraint CHECK (unique1 >= 0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- renaming constraint + ^ +<sql-statement> +ALTER TABLE onek RENAME CONSTRAINT onek_check_constraint TO onek_check_constraint_foo; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE onek RENAME CONSTRAINT onek_check_constraint TO onek_check_constraint_foo; + ^ +<sql-statement> +ALTER TABLE onek DROP CONSTRAINT onek_check_constraint_foo; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE onek DROP CONSTRAINT onek_check_constraint_foo; + ^ +<sql-statement> +-- renaming constraint should rename index as well +ALTER TABLE onek ADD CONSTRAINT onek_unique1_constraint UNIQUE (unique1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- renaming constraint should rename index as well + ^ +<sql-statement> +DROP INDEX onek_unique1_constraint; -- to see whether it's there +</sql-statement> +-stdin-:<main>: Error: Pre type annotation + + -stdin-:<main>:1:1: Error: Unexpected tag: pgObject + DROP INDEX onek_unique1_constraint; -- to see whether it's there + ^ +<sql-statement> +ALTER TABLE onek RENAME CONSTRAINT onek_unique1_constraint TO onek_unique1_constraint_foo; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE onek RENAME CONSTRAINT onek_unique1_constraint TO onek_unique1_constraint_foo; + ^ +<sql-statement> +DROP INDEX onek_unique1_constraint_foo; -- to see whether it's there +</sql-statement> +-stdin-:<main>: Error: Pre type annotation + + -stdin-:<main>:1:1: Error: Unexpected tag: pgObject + DROP INDEX onek_unique1_constraint_foo; -- to see whether it's there + ^ +<sql-statement> +ALTER TABLE onek DROP CONSTRAINT onek_unique1_constraint_foo; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE onek DROP CONSTRAINT onek_unique1_constraint_foo; + ^ +<sql-statement> +-- renaming constraints vs. inheritance +CREATE TABLE constraint_rename_test (a int CONSTRAINT con1 CHECK (a > 0), b int, c int); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- renaming constraints vs. inheritance + ^ +<sql-statement> +\d constraint_rename_test +</sql-statement> +Metacommand \d constraint_rename_test is not supported +<sql-statement> +CREATE TABLE constraint_rename_test2 (a int CONSTRAINT con1 CHECK (a > 0), d int) INHERITS (constraint_rename_test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE constraint_rename_test2 (a int CONSTRAINT con1 CHECK (a > 0), d int) INHERITS (constraint_rename_test); + ^ +<sql-statement> +\d constraint_rename_test2 +</sql-statement> +Metacommand \d constraint_rename_test2 is not supported +<sql-statement> +ALTER TABLE constraint_rename_test2 RENAME CONSTRAINT con1 TO con1foo; -- fail +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE constraint_rename_test2 RENAME CONSTRAINT con1 TO con1foo; -- fail + ^ +<sql-statement> +ALTER TABLE ONLY constraint_rename_test RENAME CONSTRAINT con1 TO con1foo; -- fail +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE ONLY constraint_rename_test RENAME CONSTRAINT con1 TO con1foo; -- fail + ^ +<sql-statement> +ALTER TABLE constraint_rename_test RENAME CONSTRAINT con1 TO con1foo; -- ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE constraint_rename_test RENAME CONSTRAINT con1 TO con1foo; -- ok + ^ +<sql-statement> +\d constraint_rename_test +</sql-statement> +Metacommand \d constraint_rename_test is not supported +<sql-statement> +\d constraint_rename_test2 +</sql-statement> +Metacommand \d constraint_rename_test2 is not supported +<sql-statement> +ALTER TABLE constraint_rename_test ADD CONSTRAINT con2 CHECK (b > 0) NO INHERIT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE constraint_rename_test ADD CONSTRAINT con2 CHECK (b > 0) NO INHERIT; + ^ +<sql-statement> +ALTER TABLE ONLY constraint_rename_test RENAME CONSTRAINT con2 TO con2foo; -- ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE ONLY constraint_rename_test RENAME CONSTRAINT con2 TO con2foo; -- ok + ^ +<sql-statement> +ALTER TABLE constraint_rename_test RENAME CONSTRAINT con2foo TO con2bar; -- ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE constraint_rename_test RENAME CONSTRAINT con2foo TO con2bar; -- ok + ^ +<sql-statement> +\d constraint_rename_test +</sql-statement> +Metacommand \d constraint_rename_test is not supported +<sql-statement> +\d constraint_rename_test2 +</sql-statement> +Metacommand \d constraint_rename_test2 is not supported +<sql-statement> +ALTER TABLE constraint_rename_test ADD CONSTRAINT con3 PRIMARY KEY (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE constraint_rename_test ADD CONSTRAINT con3 PRIMARY KEY (a); + ^ +<sql-statement> +ALTER TABLE constraint_rename_test RENAME CONSTRAINT con3 TO con3foo; -- ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE constraint_rename_test RENAME CONSTRAINT con3 TO con3foo; -- ok + ^ +<sql-statement> +\d constraint_rename_test +</sql-statement> +Metacommand \d constraint_rename_test is not supported +<sql-statement> +\d constraint_rename_test2 +</sql-statement> +Metacommand \d constraint_rename_test2 is not supported +<sql-statement> +DROP TABLE constraint_rename_test2; +</sql-statement> +<sql-statement> +DROP TABLE constraint_rename_test; +</sql-statement> +<sql-statement> +ALTER TABLE IF EXISTS constraint_not_exist RENAME CONSTRAINT con3 TO con3foo; -- ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE IF EXISTS constraint_not_exist RENAME CONSTRAINT con3 TO con3foo; -- ok + ^ +<sql-statement> +ALTER TABLE IF EXISTS constraint_rename_test ADD CONSTRAINT con4 UNIQUE (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE IF EXISTS constraint_rename_test ADD CONSTRAINT con4 UNIQUE (a); + ^ +<sql-statement> +-- renaming constraints with cache reset of target relation +CREATE TABLE constraint_rename_cache (a int, + CONSTRAINT chk_a CHECK (a > 0), + PRIMARY KEY (a)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table constraint not supported + -- renaming constraints with cache reset of target relation + ^ +<sql-statement> +ALTER TABLE constraint_rename_cache + RENAME CONSTRAINT chk_a TO chk_a_new; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE constraint_rename_cache + ^ +<sql-statement> +ALTER TABLE constraint_rename_cache + RENAME CONSTRAINT constraint_rename_cache_pkey TO constraint_rename_pkey_new; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE constraint_rename_cache + ^ +<sql-statement> +CREATE TABLE like_constraint_rename_cache + (LIKE constraint_rename_cache INCLUDING ALL); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE like_constraint_rename_cache + ^ +<sql-statement> +\d like_constraint_rename_cache +</sql-statement> +Metacommand \d like_constraint_rename_cache is not supported +<sql-statement> +DROP TABLE constraint_rename_cache; +</sql-statement> +<sql-statement> +DROP TABLE like_constraint_rename_cache; +</sql-statement> +<sql-statement> +-- FOREIGN KEY CONSTRAINT adding TEST +CREATE TABLE attmp2 (a int primary key); +</sql-statement> +<sql-statement> +CREATE TABLE attmp3 (a int, b int); +</sql-statement> +<sql-statement> +CREATE TABLE attmp4 (a int, b int, unique(a,b)); +</sql-statement> +<sql-statement> +CREATE TABLE attmp5 (a int, b int); +</sql-statement> +<sql-statement> +-- Insert rows into attmp2 (pktable) +INSERT INTO attmp2 values (1); +</sql-statement> +<sql-statement> +INSERT INTO attmp2 values (2); +</sql-statement> +<sql-statement> +INSERT INTO attmp2 values (3); +</sql-statement> +<sql-statement> +INSERT INTO attmp2 values (4); +</sql-statement> +<sql-statement> +-- Insert rows into attmp3 +INSERT INTO attmp3 values (1,10); +</sql-statement> +<sql-statement> +INSERT INTO attmp3 values (1,20); +</sql-statement> +<sql-statement> +INSERT INTO attmp3 values (5,50); +</sql-statement> +<sql-statement> +-- Try (and fail) to add constraint due to invalid source columns +ALTER TABLE attmp3 add constraint attmpconstr foreign key(c) references attmp2 match full; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Try (and fail) to add constraint due to invalid source columns + ^ +<sql-statement> +-- Try (and fail) to add constraint due to invalid destination columns explicitly given +ALTER TABLE attmp3 add constraint attmpconstr foreign key(a) references attmp2(b) match full; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Try (and fail) to add constraint due to invalid destination columns explicitly given + ^ +<sql-statement> +-- Try (and fail) to add constraint due to invalid data +ALTER TABLE attmp3 add constraint attmpconstr foreign key (a) references attmp2 match full; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Try (and fail) to add constraint due to invalid data + ^ +<sql-statement> +-- Delete failing row +DELETE FROM attmp3 where a=5; +</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', 'mutationid'. + +<sql-statement> +-- Try (and succeed) +ALTER TABLE attmp3 add constraint attmpconstr foreign key (a) references attmp2 match full; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Try (and succeed) + ^ +<sql-statement> +ALTER TABLE attmp3 drop constraint attmpconstr; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 drop constraint attmpconstr; + ^ +<sql-statement> +INSERT INTO attmp3 values (5,50); +</sql-statement> +<sql-statement> +-- Try NOT VALID and then VALIDATE CONSTRAINT, but fails. Delete failure then re-validate +ALTER TABLE attmp3 add constraint attmpconstr foreign key (a) references attmp2 match full NOT VALID; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Try NOT VALID and then VALIDATE CONSTRAINT, but fails. Delete failure then re-validate + ^ +<sql-statement> +ALTER TABLE attmp3 validate constraint attmpconstr; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 validate constraint attmpconstr; + ^ +<sql-statement> +-- Delete failing row +DELETE FROM attmp3 where a=5; +</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', 'mutationid'. + +<sql-statement> +-- Try (and succeed) and repeat to show it works on already valid constraint +ALTER TABLE attmp3 validate constraint attmpconstr; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Try (and succeed) and repeat to show it works on already valid constraint + ^ +<sql-statement> +ALTER TABLE attmp3 validate constraint attmpconstr; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 validate constraint attmpconstr; + ^ +<sql-statement> +-- Try a non-verified CHECK constraint +ALTER TABLE attmp3 ADD CONSTRAINT b_greater_than_ten CHECK (b > 10); -- fail +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Try a non-verified CHECK constraint + ^ +<sql-statement> +ALTER TABLE attmp3 ADD CONSTRAINT b_greater_than_ten CHECK (b > 10) NOT VALID; -- succeeds +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 ADD CONSTRAINT b_greater_than_ten CHECK (b > 10) NOT VALID; -- succeeds + ^ +<sql-statement> +ALTER TABLE attmp3 VALIDATE CONSTRAINT b_greater_than_ten; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 VALIDATE CONSTRAINT b_greater_than_ten; -- fails + ^ +<sql-statement> +DELETE FROM attmp3 WHERE NOT b > 10; +</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', 'mutationid'. + +<sql-statement> +ALTER TABLE attmp3 VALIDATE CONSTRAINT b_greater_than_ten; -- succeeds +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 VALIDATE CONSTRAINT b_greater_than_ten; -- succeeds + ^ +<sql-statement> +ALTER TABLE attmp3 VALIDATE CONSTRAINT b_greater_than_ten; -- succeeds +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 VALIDATE CONSTRAINT b_greater_than_ten; -- succeeds + ^ +<sql-statement> +-- Test inherited NOT VALID CHECK constraints +select * from attmp3; +</sql-statement> +<sql-statement> +CREATE TABLE attmp6 () INHERITS (attmp3); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE attmp6 () INHERITS (attmp3); + ^ +<sql-statement> +CREATE TABLE attmp7 () INHERITS (attmp3); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE attmp7 () INHERITS (attmp3); + ^ +<sql-statement> +INSERT INTO attmp6 VALUES (6, 30), (7, 16); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.attmp6 + +<sql-statement> +ALTER TABLE attmp3 ADD CONSTRAINT b_le_20 CHECK (b <= 20) NOT VALID; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 ADD CONSTRAINT b_le_20 CHECK (b <= 20) NOT VALID; + ^ +<sql-statement> +ALTER TABLE attmp3 VALIDATE CONSTRAINT b_le_20; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 VALIDATE CONSTRAINT b_le_20; -- fails + ^ +<sql-statement> +DELETE FROM attmp6 WHERE b > 20; +</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', 'mutationid'. + +<sql-statement> +ALTER TABLE attmp3 VALIDATE CONSTRAINT b_le_20; -- succeeds +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 VALIDATE CONSTRAINT b_le_20; -- succeeds + ^ +<sql-statement> +-- An already validated constraint must not be revalidated +CREATE FUNCTION boo(int) RETURNS int IMMUTABLE STRICT LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'boo: %', $1; RETURN $1; END; $$; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + -- An already validated constraint must not be revalidated + ^ +<sql-statement> +INSERT INTO attmp7 VALUES (8, 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.attmp7 + +<sql-statement> +ALTER TABLE attmp7 ADD CONSTRAINT identity CHECK (b = boo(b)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp7 ADD CONSTRAINT identity CHECK (b = boo(b)); + ^ +<sql-statement> +ALTER TABLE attmp3 ADD CONSTRAINT IDENTITY check (b = boo(b)) NOT VALID; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 ADD CONSTRAINT IDENTITY check (b = boo(b)) NOT VALID; + ^ +<sql-statement> +ALTER TABLE attmp3 VALIDATE CONSTRAINT identity; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp3 VALIDATE CONSTRAINT identity; + ^ +<sql-statement> +-- A NO INHERIT constraint should not be looked for in children during VALIDATE CONSTRAINT +create table parent_noinh_convalid (a int); +</sql-statement> +<sql-statement> +create table child_noinh_convalid () inherits (parent_noinh_convalid); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table child_noinh_convalid () inherits (parent_noinh_convalid); + ^ +<sql-statement> +insert into parent_noinh_convalid values (1); +</sql-statement> +<sql-statement> +insert into child_noinh_convalid 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.child_noinh_convalid + +<sql-statement> +alter table parent_noinh_convalid add constraint check_a_is_2 check (a = 2) no inherit not valid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table parent_noinh_convalid add constraint check_a_is_2 check (a = 2) no inherit not valid; + ^ +<sql-statement> +-- fail, because of the row in parent +alter table parent_noinh_convalid validate constraint check_a_is_2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- fail, because of the row in parent + ^ +<sql-statement> +delete from only parent_noinh_convalid; +</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', 'mutationid'. + +<sql-statement> +-- ok (parent itself contains no violating rows) +alter table parent_noinh_convalid validate constraint check_a_is_2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- ok (parent itself contains no violating rows) + ^ +<sql-statement> +select convalidated from pg_constraint where conrelid = 'parent_noinh_convalid'::regclass and conname = 'check_a_is_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.pg_constraint + +<sql-statement> +-- cleanup +drop table parent_noinh_convalid, child_noinh_convalid; +</sql-statement> +<sql-statement> +-- Try (and fail) to create constraint from attmp5(a) to attmp4(a) - unique constraint on +-- attmp4 is a,b +ALTER TABLE attmp5 add constraint attmpconstr foreign key(a) references attmp4(a) match full; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Try (and fail) to create constraint from attmp5(a) to attmp4(a) - unique constraint on + ^ +<sql-statement> +DROP TABLE attmp7; +</sql-statement> +<sql-statement> +DROP TABLE attmp6; +</sql-statement> +<sql-statement> +DROP TABLE attmp5; +</sql-statement> +<sql-statement> +DROP TABLE attmp4; +</sql-statement> +<sql-statement> +DROP TABLE attmp3; +</sql-statement> +<sql-statement> +DROP TABLE attmp2; +</sql-statement> +<sql-statement> +-- NOT VALID with plan invalidation -- ensure we don't use a constraint for +-- exclusion until validated +set constraint_exclusion TO 'partition'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: constraint_exclusion + -- NOT VALID with plan invalidation -- ensure we don't use a constraint for + ^ +<sql-statement> +create table nv_parent (d date, check (false) no inherit not valid); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table constraint not supported + create table nv_parent (d date, check (false) no inherit not valid); + ^ +<sql-statement> +-- not valid constraint added at creation time should automatically become valid +\d nv_parent +</sql-statement> +Metacommand \d nv_parent is not supported +<sql-statement> +create table nv_child_2010 () inherits (nv_parent); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table nv_child_2010 () inherits (nv_parent); + ^ +<sql-statement> +create table nv_child_2011 () inherits (nv_parent); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table nv_child_2011 () inherits (nv_parent); + ^ +<sql-statement> +alter table nv_child_2010 add check (d between '2010-01-01'::date and '2010-12-31'::date) not valid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table nv_child_2010 add check (d between '2010-01-01'::date and '2010-12-31'::date) not valid; + ^ +<sql-statement> +alter table nv_child_2011 add check (d between '2011-01-01'::date and '2011-12-31'::date) not valid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table nv_child_2011 add check (d between '2011-01-01'::date and '2011-12-31'::date) not valid; + ^ +<sql-statement> +explain (costs off) select * from nv_parent where d between '2011-08-01' and '2011-08-31'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) select * from nv_parent where d between '2011-08-01' and '2011-08-31'; + ^ +<sql-statement> +create table nv_child_2009 (check (d between '2009-01-01'::date and '2009-12-31'::date)) inherits (nv_parent); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table nv_child_2009 (check (d between '2009-01-01'::date and '2009-12-31'::date)) inherits (nv_parent); + ^ +<sql-statement> +explain (costs off) select * from nv_parent where d between '2011-08-01'::date and '2011-08-31'::date; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) select * from nv_parent where d between '2011-08-01'::date and '2011-08-31'::date; + ^ +<sql-statement> +explain (costs off) select * from nv_parent where d between '2009-08-01'::date and '2009-08-31'::date; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) select * from nv_parent where d between '2009-08-01'::date and '2009-08-31'::date; + ^ +<sql-statement> +-- after validation, the constraint should be used +alter table nv_child_2011 VALIDATE CONSTRAINT nv_child_2011_d_check; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- after validation, the constraint should be used + ^ +<sql-statement> +explain (costs off) select * from nv_parent where d between '2009-08-01'::date and '2009-08-31'::date; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) select * from nv_parent where d between '2009-08-01'::date and '2009-08-31'::date; + ^ +<sql-statement> +-- add an inherited NOT VALID constraint +alter table nv_parent add check (d between '2001-01-01'::date and '2099-12-31'::date) not valid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add an inherited NOT VALID constraint + ^ +<sql-statement> +\d nv_child_2009 +</sql-statement> +Metacommand \d nv_child_2009 is not supported +<sql-statement> +-- we leave nv_parent and children around to help test pg_dump logic +-- Foreign key adding test with mixed types +-- Note: these tables are TEMP to avoid name conflicts when this test +-- is run in parallel with foreign_key.sql. +CREATE TEMP TABLE PKTABLE (ptest1 int PRIMARY KEY); +</sql-statement> +<sql-statement> +INSERT INTO PKTABLE VALUES(42); +</sql-statement> +<sql-statement> +CREATE TEMP TABLE FKTABLE (ftest1 inet); +</sql-statement> +<sql-statement> +-- This next should fail, because int=inet does not exist +ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- This next should fail, because int=inet does not exist + ^ +<sql-statement> +-- This should also fail for the same reason, but here we +-- give the column name +ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable(ptest1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- This should also fail for the same reason, but here we + ^ +<sql-statement> +DROP TABLE FKTABLE; +</sql-statement> +<sql-statement> +-- This should succeed, even though they are different types, +-- because int=int8 exists and is a member of the integer opfamily +CREATE TEMP TABLE FKTABLE (ftest1 int8); +</sql-statement> +<sql-statement> +ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable; + ^ +<sql-statement> +-- Check it actually works +INSERT INTO FKTABLE VALUES(42); -- should succeed +</sql-statement> +<sql-statement> +INSERT INTO FKTABLE VALUES(43); -- should fail +</sql-statement> +<sql-statement> +DROP TABLE FKTABLE; +</sql-statement> +<sql-statement> +-- This should fail, because we'd have to cast numeric to int which is +-- not an implicit coercion (or use numeric=numeric, but that's not part +-- of the integer opfamily) +CREATE TEMP TABLE FKTABLE (ftest1 numeric); +</sql-statement> +<sql-statement> +ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable; + ^ +<sql-statement> +DROP TABLE FKTABLE; +</sql-statement> +<sql-statement> +DROP TABLE PKTABLE; +</sql-statement> +<sql-statement> +-- On the other hand, this should work because int implicitly promotes to +-- numeric, and we allow promotion on the FK side +CREATE TEMP TABLE PKTABLE (ptest1 numeric PRIMARY KEY); +</sql-statement> +<sql-statement> +INSERT INTO PKTABLE VALUES(42); +</sql-statement> +<sql-statement> +CREATE TEMP TABLE FKTABLE (ftest1 int); +</sql-statement> +<sql-statement> +ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1) references pktable; + ^ +<sql-statement> +-- Check it actually works +INSERT INTO FKTABLE VALUES(42); -- should succeed +</sql-statement> +<sql-statement> +INSERT INTO FKTABLE VALUES(43); -- should fail +</sql-statement> +<sql-statement> +DROP TABLE FKTABLE; +</sql-statement> +<sql-statement> +DROP TABLE PKTABLE; +</sql-statement> +<sql-statement> +CREATE TEMP TABLE PKTABLE (ptest1 int, ptest2 inet, + PRIMARY KEY(ptest1, ptest2)); +</sql-statement> +<sql-statement> +-- This should fail, because we just chose really odd types +CREATE TEMP TABLE FKTABLE (ftest1 cidr, ftest2 timestamp); +</sql-statement> +<sql-statement> +ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) references pktable; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) references pktable; + ^ +<sql-statement> +DROP TABLE FKTABLE; +</sql-statement> +<sql-statement> +-- Again, so should this... +CREATE TEMP TABLE FKTABLE (ftest1 cidr, ftest2 timestamp); +</sql-statement> +<sql-statement> +ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) + references pktable(ptest1, ptest2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) + ^ +<sql-statement> +DROP TABLE FKTABLE; +</sql-statement> +<sql-statement> +-- This fails because we mixed up the column ordering +CREATE TEMP TABLE FKTABLE (ftest1 int, ftest2 inet); +</sql-statement> +<sql-statement> +ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) + references pktable(ptest2, ptest1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) + ^ +<sql-statement> +-- As does this... +ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest2, ftest1) + references pktable(ptest1, ptest2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- As does this... + ^ +<sql-statement> +DROP TABLE FKTABLE; +</sql-statement> +<sql-statement> +DROP TABLE PKTABLE; +</sql-statement> +<sql-statement> +-- Test that ALTER CONSTRAINT updates trigger deferrability properly +CREATE TEMP TABLE PKTABLE (ptest1 int primary key); +</sql-statement> +<sql-statement> +CREATE TEMP TABLE FKTABLE (ftest1 int); +</sql-statement> +<sql-statement> +ALTER TABLE FKTABLE ADD CONSTRAINT fknd FOREIGN KEY(ftest1) REFERENCES pktable + ON DELETE CASCADE ON UPDATE NO ACTION NOT DEFERRABLE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD CONSTRAINT fknd FOREIGN KEY(ftest1) REFERENCES pktable + ^ +<sql-statement> +ALTER TABLE FKTABLE ADD CONSTRAINT fkdd FOREIGN KEY(ftest1) REFERENCES pktable + ON DELETE CASCADE ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD CONSTRAINT fkdd FOREIGN KEY(ftest1) REFERENCES pktable + ^ +<sql-statement> +ALTER TABLE FKTABLE ADD CONSTRAINT fkdi FOREIGN KEY(ftest1) REFERENCES pktable + ON DELETE CASCADE ON UPDATE NO ACTION DEFERRABLE INITIALLY IMMEDIATE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD CONSTRAINT fkdi FOREIGN KEY(ftest1) REFERENCES pktable + ^ +<sql-statement> +ALTER TABLE FKTABLE ADD CONSTRAINT fknd2 FOREIGN KEY(ftest1) REFERENCES pktable + ON DELETE CASCADE ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD CONSTRAINT fknd2 FOREIGN KEY(ftest1) REFERENCES pktable + ^ +<sql-statement> +ALTER TABLE FKTABLE ALTER CONSTRAINT fknd2 NOT DEFERRABLE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ALTER CONSTRAINT fknd2 NOT DEFERRABLE; + ^ +<sql-statement> +ALTER TABLE FKTABLE ADD CONSTRAINT fkdd2 FOREIGN KEY(ftest1) REFERENCES pktable + ON DELETE CASCADE ON UPDATE NO ACTION NOT DEFERRABLE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD CONSTRAINT fkdd2 FOREIGN KEY(ftest1) REFERENCES pktable + ^ +<sql-statement> +ALTER TABLE FKTABLE ALTER CONSTRAINT fkdd2 DEFERRABLE INITIALLY DEFERRED; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ALTER CONSTRAINT fkdd2 DEFERRABLE INITIALLY DEFERRED; + ^ +<sql-statement> +ALTER TABLE FKTABLE ADD CONSTRAINT fkdi2 FOREIGN KEY(ftest1) REFERENCES pktable + ON DELETE CASCADE ON UPDATE NO ACTION NOT DEFERRABLE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ADD CONSTRAINT fkdi2 FOREIGN KEY(ftest1) REFERENCES pktable + ^ +<sql-statement> +ALTER TABLE FKTABLE ALTER CONSTRAINT fkdi2 DEFERRABLE INITIALLY IMMEDIATE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE FKTABLE ALTER CONSTRAINT fkdi2 DEFERRABLE INITIALLY IMMEDIATE; + ^ +<sql-statement> +SELECT conname, tgfoid::regproc, tgtype, tgdeferrable, tginitdeferred +FROM pg_trigger JOIN pg_constraint con ON con.oid = tgconstraint +WHERE tgrelid = 'pktable'::regclass +ORDER BY 1,2,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.pg_constraint + +<sql-statement> +SELECT conname, tgfoid::regproc, tgtype, tgdeferrable, tginitdeferred +FROM pg_trigger JOIN pg_constraint con ON con.oid = tgconstraint +WHERE tgrelid = 'fktable'::regclass +ORDER BY 1,2,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.pg_constraint + +<sql-statement> +-- temp tables should go away by themselves, need not drop them. +-- test check constraint adding +create table atacc1 ( test int ); +</sql-statement> +<sql-statement> +-- add a check constraint +alter table atacc1 add constraint atacc_test1 check (test>3); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a check constraint + ^ +<sql-statement> +-- should fail +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +-- should succeed +insert into atacc1 (test) values (4); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- let's do one where the check fails when added +create table atacc1 ( test int ); +</sql-statement> +<sql-statement> +-- insert a soon to be failing row +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +-- add a check constraint (fails) +alter table atacc1 add constraint atacc_test1 check (test>3); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a check constraint (fails) + ^ +<sql-statement> +insert into atacc1 (test) values (4); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- let's do one where the check fails because the column doesn't exist +create table atacc1 ( test int ); +</sql-statement> +<sql-statement> +-- add a check constraint (fails) +alter table atacc1 add constraint atacc_test1 check (test1>3); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a check constraint (fails) + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- something a little more complicated +create table atacc1 ( test int, test2 int, test3 int); +</sql-statement> +<sql-statement> +-- add a check constraint (fails) +alter table atacc1 add constraint atacc_test1 check (test+test2<test3*4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a check constraint (fails) + ^ +<sql-statement> +-- should fail +insert into atacc1 (test,test2,test3) values (4,4,2); +</sql-statement> +<sql-statement> +-- should succeed +insert into atacc1 (test,test2,test3) values (4,4,5); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- lets do some naming tests +create table atacc1 (test int check (test>3), test2 int); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- lets do some naming tests + ^ +<sql-statement> +alter table atacc1 add check (test2>test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add check (test2>test); + ^ +<sql-statement> +-- should fail for $2 +insert into atacc1 (test2, test) values (3, 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.atacc1 + +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- inheritance related tests +create table atacc1 (test int); +</sql-statement> +<sql-statement> +create table atacc2 (test2 int); +</sql-statement> +<sql-statement> +create table atacc3 (test3 int) inherits (atacc1, atacc2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table atacc3 (test3 int) inherits (atacc1, atacc2); + ^ +<sql-statement> +alter table atacc2 add constraint foo check (test2>0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc2 add constraint foo check (test2>0); + ^ +<sql-statement> +-- fail and then succeed on atacc2 +insert into atacc2 (test2) values (-3); +</sql-statement> +<sql-statement> +insert into atacc2 (test2) values (3); +</sql-statement> +<sql-statement> +-- fail and then succeed on atacc3 +insert into atacc3 (test2) 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.atacc3 + +<sql-statement> +insert into atacc3 (test2) 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.atacc3 + +<sql-statement> +drop table atacc3; +</sql-statement> +<sql-statement> +drop table atacc2; +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- same things with one created with INHERIT +create table atacc1 (test int); +</sql-statement> +<sql-statement> +create table atacc2 (test2 int); +</sql-statement> +<sql-statement> +create table atacc3 (test3 int) inherits (atacc1, atacc2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table atacc3 (test3 int) inherits (atacc1, atacc2); + ^ +<sql-statement> +alter table atacc3 no inherit atacc2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc3 no inherit atacc2; + ^ +<sql-statement> +-- fail +alter table atacc3 no inherit atacc2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- fail + ^ +<sql-statement> +-- make sure it really isn't a child +insert into atacc3 (test2) 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.atacc3 + +<sql-statement> +select test2 from atacc2; +</sql-statement> +<sql-statement> +-- fail due to missing constraint +alter table atacc2 add constraint foo check (test2>0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- fail due to missing constraint + ^ +<sql-statement> +alter table atacc3 inherit atacc2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc3 inherit atacc2; + ^ +<sql-statement> +-- fail due to missing column +alter table atacc3 rename test2 to testx; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + -- fail due to missing column + ^ +<sql-statement> +alter table atacc3 inherit atacc2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc3 inherit atacc2; + ^ +<sql-statement> +-- fail due to mismatched data type +alter table atacc3 add test2 bool; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- fail due to mismatched data type + ^ +<sql-statement> +alter table atacc3 inherit atacc2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc3 inherit atacc2; + ^ +<sql-statement> +alter table atacc3 drop test2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc3 drop test2; + ^ +<sql-statement> +-- succeed +alter table atacc3 add test2 int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- succeed + ^ +<sql-statement> +update atacc3 set test2 = 4 where test2 is null; +</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', 'mutationid'. + +<sql-statement> +alter table atacc3 add constraint foo check (test2>0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc3 add constraint foo check (test2>0); + ^ +<sql-statement> +alter table atacc3 inherit atacc2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc3 inherit atacc2; + ^ +<sql-statement> +-- fail due to duplicates and circular inheritance +alter table atacc3 inherit atacc2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- fail due to duplicates and circular inheritance + ^ +<sql-statement> +alter table atacc2 inherit atacc3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc2 inherit atacc3; + ^ +<sql-statement> +alter table atacc2 inherit atacc2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc2 inherit atacc2; + ^ +<sql-statement> +-- test that we really are a child now (should see 4 not 3 and cascade should go through) +select test2 from atacc2; +</sql-statement> +<sql-statement> +drop table atacc2 cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + drop table atacc2 cascade; + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- adding only to a parent is allowed as of 9.2 +create table atacc1 (test int); +</sql-statement> +<sql-statement> +create table atacc2 (test2 int) inherits (atacc1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table atacc2 (test2 int) inherits (atacc1); + ^ +<sql-statement> +-- ok: +alter table atacc1 add constraint foo check (test>0) no inherit; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- ok: + ^ +<sql-statement> +-- check constraint is not there on child +insert into atacc2 (test) values (-3); +</sql-statement> +<sql-statement> +-- check constraint is there on parent +insert into atacc1 (test) values (-3); +</sql-statement> +<sql-statement> +insert into atacc1 (test) values (3); +</sql-statement> +<sql-statement> +-- fail, violating row: +alter table atacc2 add constraint foo check (test>0) no inherit; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- fail, violating row: + ^ +<sql-statement> +drop table atacc2; +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- test unique constraint adding +create table atacc1 ( test int ) ; +</sql-statement> +<sql-statement> +-- add a unique constraint +alter table atacc1 add constraint atacc_test1 unique (test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a unique constraint + ^ +<sql-statement> +-- insert first value +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +-- should fail +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +-- should succeed +insert into atacc1 (test) values (4); +</sql-statement> +<sql-statement> +-- try to create duplicates via alter table using - should fail +alter table atacc1 alter column test type integer using 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try to create duplicates via alter table using - should fail + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- let's do one where the unique constraint fails when added +create table atacc1 ( test int ); +</sql-statement> +<sql-statement> +-- insert soon to be failing rows +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +-- add a unique constraint (fails) +alter table atacc1 add constraint atacc_test1 unique (test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a unique constraint (fails) + ^ +<sql-statement> +insert into atacc1 (test) values (3); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- let's do one where the unique constraint fails +-- because the column doesn't exist +create table atacc1 ( test int ); +</sql-statement> +<sql-statement> +-- add a unique constraint (fails) +alter table atacc1 add constraint atacc_test1 unique (test1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a unique constraint (fails) + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- something a little more complicated +create table atacc1 ( test int, test2 int); +</sql-statement> +<sql-statement> +-- add a unique constraint +alter table atacc1 add constraint atacc_test1 unique (test, test2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a unique constraint + ^ +<sql-statement> +-- insert initial value +insert into atacc1 (test,test2) values (4,4); +</sql-statement> +<sql-statement> +-- should fail +insert into atacc1 (test,test2) values (4,4); +</sql-statement> +<sql-statement> +-- should all succeed +insert into atacc1 (test,test2) values (4,5); +</sql-statement> +<sql-statement> +insert into atacc1 (test,test2) values (5,4); +</sql-statement> +<sql-statement> +insert into atacc1 (test,test2) values (5,5); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- lets do some naming tests +create table atacc1 (test int, test2 int, unique(test)); +</sql-statement> +<sql-statement> +alter table atacc1 add unique (test2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add unique (test2); + ^ +<sql-statement> +-- should fail for @@ second one @@ +insert into atacc1 (test2, test) values (3, 3); +</sql-statement> +<sql-statement> +insert into atacc1 (test2, test) values (2, 3); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- test primary key constraint adding +create table atacc1 ( id serial, test int) ; +</sql-statement> +<sql-statement> +-- add a primary key constraint +alter table atacc1 add constraint atacc_test1 primary key (test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a primary key constraint + ^ +<sql-statement> +-- insert first value +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +-- should fail +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +-- should succeed +insert into atacc1 (test) values (4); +</sql-statement> +<sql-statement> +-- inserting NULL should fail +insert into atacc1 (test) values(NULL); +</sql-statement> +<sql-statement> +-- try adding a second primary key (should fail) +alter table atacc1 add constraint atacc_oid1 primary key(id); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try adding a second primary key (should fail) + ^ +<sql-statement> +-- drop first primary key constraint +alter table atacc1 drop constraint atacc_test1 restrict; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- drop first primary key constraint + ^ +<sql-statement> +-- try adding a primary key on oid (should succeed) +alter table atacc1 add constraint atacc_oid1 primary key(id); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try adding a primary key on oid (should succeed) + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- let's do one where the primary key constraint fails when added +create table atacc1 ( test int ); +</sql-statement> +<sql-statement> +-- insert soon to be failing rows +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +insert into atacc1 (test) values (2); +</sql-statement> +<sql-statement> +-- add a primary key (fails) +alter table atacc1 add constraint atacc_test1 primary key (test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a primary key (fails) + ^ +<sql-statement> +insert into atacc1 (test) values (3); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- let's do another one where the primary key constraint fails when added +create table atacc1 ( test int ); +</sql-statement> +<sql-statement> +-- insert soon to be failing row +insert into atacc1 (test) values (NULL); +</sql-statement> +<sql-statement> +-- add a primary key (fails) +alter table atacc1 add constraint atacc_test1 primary key (test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a primary key (fails) + ^ +<sql-statement> +insert into atacc1 (test) values (3); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- let's do one where the primary key constraint fails +-- because the column doesn't exist +create table atacc1 ( test int ); +</sql-statement> +<sql-statement> +-- add a primary key constraint (fails) +alter table atacc1 add constraint atacc_test1 primary key (test1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a primary key constraint (fails) + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- adding a new column as primary key to a non-empty table. +-- should fail unless the column has a non-null default value. +create table atacc1 ( test int ); +</sql-statement> +<sql-statement> +insert into atacc1 (test) values (0); +</sql-statement> +<sql-statement> +-- add a primary key column without a default (fails). +alter table atacc1 add column test2 int primary key; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a primary key column without a default (fails). + ^ +<sql-statement> +-- now add a primary key column with a default (succeeds). +alter table atacc1 add column test2 int default 0 primary key; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- now add a primary key column with a default (succeeds). + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- this combination used to have order-of-execution problems (bug #15580) +create table atacc1 (a int); +</sql-statement> +<sql-statement> +insert into atacc1 values(1); +</sql-statement> +<sql-statement> +alter table atacc1 + add column b float8 not null default random(), + add primary key(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- additionally, we've seen issues with foreign key validation not being +-- properly delayed until after a table rewrite. Check that works ok. +create table atacc1 (a int primary key); +</sql-statement> +<sql-statement> +alter table atacc1 add constraint atacc1_fkey foreign key (a) references atacc1 (a) not valid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add constraint atacc1_fkey foreign key (a) references atacc1 (a) not valid; + ^ +<sql-statement> +alter table atacc1 validate constraint atacc1_fkey, alter a type bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 validate constraint atacc1_fkey, alter a type bigint; + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- we've also seen issues with check constraints being validated at the wrong +-- time when there's a pending table rewrite. +create table atacc1 (a bigint, b int); +</sql-statement> +<sql-statement> +insert into atacc1 values(1,1); +</sql-statement> +<sql-statement> +alter table atacc1 add constraint atacc1_chk check(b = 1) not valid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add constraint atacc1_chk check(b = 1) not valid; + ^ +<sql-statement> +alter table atacc1 validate constraint atacc1_chk, alter a type int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 validate constraint atacc1_chk, alter a type int; + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- same as above, but ensure the constraint violation is detected +create table atacc1 (a bigint, b int); +</sql-statement> +<sql-statement> +insert into atacc1 values(1,2); +</sql-statement> +<sql-statement> +alter table atacc1 add constraint atacc1_chk check(b = 1) not valid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add constraint atacc1_chk check(b = 1) not valid; + ^ +<sql-statement> +alter table atacc1 validate constraint atacc1_chk, alter a type int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 validate constraint atacc1_chk, alter a type int; + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- something a little more complicated +create table atacc1 ( test int, test2 int); +</sql-statement> +<sql-statement> +-- add a primary key constraint +alter table atacc1 add constraint atacc_test1 primary key (test, test2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- add a primary key constraint + ^ +<sql-statement> +-- try adding a second primary key - should fail +alter table atacc1 add constraint atacc_test2 primary key (test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try adding a second primary key - should fail + ^ +<sql-statement> +-- insert initial value +insert into atacc1 (test,test2) values (4,4); +</sql-statement> +<sql-statement> +-- should fail +insert into atacc1 (test,test2) values (4,4); +</sql-statement> +<sql-statement> +insert into atacc1 (test,test2) values (NULL,3); +</sql-statement> +<sql-statement> +insert into atacc1 (test,test2) values (3, NULL); +</sql-statement> +<sql-statement> +insert into atacc1 (test,test2) values (NULL,NULL); +</sql-statement> +<sql-statement> +-- should all succeed +insert into atacc1 (test,test2) values (4,5); +</sql-statement> +<sql-statement> +insert into atacc1 (test,test2) values (5,4); +</sql-statement> +<sql-statement> +insert into atacc1 (test,test2) values (5,5); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- lets do some naming tests +create table atacc1 (test int, test2 int, primary key(test)); +</sql-statement> +<sql-statement> +-- only first should succeed +insert into atacc1 (test2, test) values (3, 3); +</sql-statement> +<sql-statement> +insert into atacc1 (test2, test) values (2, 3); +</sql-statement> +<sql-statement> +insert into atacc1 (test2, test) values (1, NULL); +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- alter table / alter column [set/drop] not null tests +-- try altering system catalogs, should fail +alter table pg_class alter column relname drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- alter table / alter column [set/drop] not null tests + ^ +<sql-statement> +alter table pg_class alter relname set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table pg_class alter relname set not null; + ^ +<sql-statement> +-- try altering non-existent table, should fail +alter table non_existent alter column bar set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try altering non-existent table, should fail + ^ +<sql-statement> +alter table non_existent alter column bar drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table non_existent alter column bar drop not null; + ^ +<sql-statement> +-- test setting columns to null and not null and vice versa +-- test checking for null values and primary key +create table atacc1 (test int not null); +</sql-statement> +<sql-statement> +alter table atacc1 add constraint "atacc1_pkey" primary key (test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add constraint "atacc1_pkey" primary key (test); + ^ +<sql-statement> +alter table atacc1 alter column test drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter column test drop not null; + ^ +<sql-statement> +alter table atacc1 drop constraint "atacc1_pkey"; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 drop constraint "atacc1_pkey"; + ^ +<sql-statement> +alter table atacc1 alter column test drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter column test drop not null; + ^ +<sql-statement> +insert into atacc1 values (null); +</sql-statement> +<sql-statement> +alter table atacc1 alter test set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter test set not null; + ^ +<sql-statement> +delete from atacc1; +</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', 'mutationid'. + +<sql-statement> +alter table atacc1 alter test set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter test set not null; + ^ +<sql-statement> +-- try altering a non-existent column, should fail +alter table atacc1 alter bar set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try altering a non-existent column, should fail + ^ +<sql-statement> +alter table atacc1 alter bar drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter bar drop not null; + ^ +<sql-statement> +-- try creating a view and altering that, should fail +create view myview as select * from atacc1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + -- try creating a view and altering that, should fail + ^ +<sql-statement> +alter table myview alter column test drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table myview alter column test drop not null; + ^ +<sql-statement> +alter table myview alter column test set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table myview alter column test set not null; + ^ +<sql-statement> +drop view myview; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'myview' + drop view myview; + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- set not null verified by constraints +create table atacc1 (test_a int, test_b int); +</sql-statement> +<sql-statement> +insert into atacc1 values (null, 1); +</sql-statement> +<sql-statement> +-- constraint not cover all values, should fail +alter table atacc1 add constraint atacc1_constr_or check(test_a is not null or test_b < 10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- constraint not cover all values, should fail + ^ +<sql-statement> +alter table atacc1 alter test_a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter test_a set not null; + ^ +<sql-statement> +alter table atacc1 drop constraint atacc1_constr_or; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 drop constraint atacc1_constr_or; + ^ +<sql-statement> +-- not valid constraint, should fail +alter table atacc1 add constraint atacc1_constr_invalid check(test_a is not null) not valid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- not valid constraint, should fail + ^ +<sql-statement> +alter table atacc1 alter test_a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter test_a set not null; + ^ +<sql-statement> +alter table atacc1 drop constraint atacc1_constr_invalid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 drop constraint atacc1_constr_invalid; + ^ +<sql-statement> +-- with valid constraint +update atacc1 set test_a = 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', 'mutationid'. + +<sql-statement> +alter table atacc1 add constraint atacc1_constr_a_valid check(test_a is not null); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add constraint atacc1_constr_a_valid check(test_a is not null); + ^ +<sql-statement> +alter table atacc1 alter test_a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter test_a set not null; + ^ +<sql-statement> +delete from atacc1; +</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', 'mutationid'. + +<sql-statement> +insert into atacc1 values (2, null); +</sql-statement> +<sql-statement> +alter table atacc1 alter test_a drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter test_a drop not null; + ^ +<sql-statement> +-- test multiple set not null at same time +-- test_a checked by atacc1_constr_a_valid, test_b should fail by table scan +alter table atacc1 alter test_a set not null, alter test_b set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- test multiple set not null at same time + ^ +<sql-statement> +-- commands order has no importance +alter table atacc1 alter test_b set not null, alter test_a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- commands order has no importance + ^ +<sql-statement> +-- valid one by table scan, one by check constraints +update atacc1 set test_b = 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', 'mutationid'. + +<sql-statement> +alter table atacc1 alter test_b set not null, alter test_a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter test_b set not null, alter test_a set not null; + ^ +<sql-statement> +alter table atacc1 alter test_a drop not null, alter test_b drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter test_a drop not null, alter test_b drop not null; + ^ +<sql-statement> +-- both column has check constraints +alter table atacc1 add constraint atacc1_constr_b_valid check(test_b is not null); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- both column has check constraints + ^ +<sql-statement> +alter table atacc1 alter test_b set not null, alter test_a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter test_b set not null, alter test_a set not null; + ^ +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- test inheritance +create table parent (a int); +</sql-statement> +<sql-statement> +create table child (b varchar(255)) inherits (parent); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table child (b varchar(255)) inherits (parent); + ^ +<sql-statement> +alter table parent alter a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table parent alter a set not null; + ^ +<sql-statement> +insert into parent values (NULL); +</sql-statement> +<sql-statement> +insert into child (a, b) values (NULL, 'foo'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.child + +<sql-statement> +alter table parent alter a drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table parent alter a drop not null; + ^ +<sql-statement> +insert into parent values (NULL); +</sql-statement> +<sql-statement> +insert into child (a, b) values (NULL, 'foo'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.child + +<sql-statement> +alter table only parent alter a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table only parent alter a set not null; + ^ +<sql-statement> +alter table child alter a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table child alter a set not null; + ^ +<sql-statement> +delete from parent; +</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', 'mutationid'. + +<sql-statement> +alter table only parent alter a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table only parent alter a set not null; + ^ +<sql-statement> +insert into parent values (NULL); +</sql-statement> +<sql-statement> +alter table child alter a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table child alter a set not null; + ^ +<sql-statement> +insert into child (a, b) values (NULL, 'foo'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.child + +<sql-statement> +delete from child; +</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', 'mutationid'. + +<sql-statement> +alter table child alter a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table child alter a set not null; + ^ +<sql-statement> +insert into child (a, b) values (NULL, 'foo'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.child + +<sql-statement> +drop table child; +</sql-statement> +<sql-statement> +drop table parent; +</sql-statement> +<sql-statement> +-- test setting and removing default values +create table def_test ( + c1 int4 default 5, + c2 text default 'initial_default' +); +</sql-statement> +<sql-statement> +insert into def_test 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', 'mutationid'. + +<sql-statement> +alter table def_test alter column c1 drop default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table def_test alter column c1 drop default; + ^ +<sql-statement> +insert into def_test 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', 'mutationid'. + +<sql-statement> +alter table def_test alter column c2 drop default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table def_test alter column c2 drop default; + ^ +<sql-statement> +insert into def_test 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', 'mutationid'. + +<sql-statement> +alter table def_test alter column c1 set default 10; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table def_test alter column c1 set default 10; + ^ +<sql-statement> +alter table def_test alter column c2 set default 'new_default'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table def_test alter column c2 set default 'new_default'; + ^ +<sql-statement> +insert into def_test 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', 'mutationid'. + +<sql-statement> +select * from def_test; +</sql-statement> +<sql-statement> +-- set defaults to an incorrect type: this should fail +alter table def_test alter column c1 set default 'wrong_datatype'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- set defaults to an incorrect type: this should fail + ^ +<sql-statement> +alter table def_test alter column c2 set default 20; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table def_test alter column c2 set default 20; + ^ +<sql-statement> +-- set defaults on a non-existent column: this should fail +alter table def_test alter column c3 set default 30; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- set defaults on a non-existent column: this should fail + ^ +<sql-statement> +-- set defaults on views: we need to create a view, add a rule +-- to allow insertions into it, and then alter the view to add +-- a default +create view def_view_test as select * from def_test; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + -- set defaults on views: we need to create a view, add a rule + ^ +<sql-statement> +create rule def_view_test_ins as + on insert to def_view_test + do instead insert into def_test select new.*; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 265 + create rule def_view_test_ins as + ^ +<sql-statement> +insert into def_view_test 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', 'mutationid'. + +<sql-statement> +alter table def_view_test alter column c1 set default 45; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table def_view_test alter column c1 set default 45; + ^ +<sql-statement> +insert into def_view_test 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', 'mutationid'. + +<sql-statement> +alter table def_view_test alter column c2 set default 'view_default'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table def_view_test alter column c2 set default 'view_default'; + ^ +<sql-statement> +insert into def_view_test 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', 'mutationid'. + +<sql-statement> +select * from def_view_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.def_view_test + +<sql-statement> +drop rule def_view_test_ins on def_view_test; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: Not supported object type for DROP + drop rule def_view_test_ins on def_view_test; + ^ +<sql-statement> +drop view def_view_test; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'def_view_test' + drop view def_view_test; + ^ +<sql-statement> +drop table def_test; +</sql-statement> +<sql-statement> +-- alter table / drop column tests +-- try altering system catalogs, should fail +alter table pg_class drop column relname; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- alter table / drop column tests + ^ +<sql-statement> +-- try altering non-existent table, should fail +alter table nosuchtable drop column bar; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try altering non-existent table, should fail + ^ +<sql-statement> +-- test dropping columns +create table atacc1 (a int4 not null, b int4, c int4 not null, d int4); +</sql-statement> +<sql-statement> +insert into atacc1 values (1, 2, 3, 4); +</sql-statement> +<sql-statement> +alter table atacc1 drop a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 drop a; + ^ +<sql-statement> +alter table atacc1 drop a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 drop a; + ^ +<sql-statement> +-- SELECTs +select * from atacc1; +</sql-statement> +<sql-statement> +select * from atacc1 order by a; +</sql-statement> +<sql-statement> +select * from atacc1 order by "........pg.dropped.1........"; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select * from atacc1 order by "........pg.dropped.1........"; + ^ + -stdin-:<main>:1:31: Error: No such column: ........pg.dropped.1........ + select * from atacc1 order by "........pg.dropped.1........"; + ^ +<sql-statement> +select * from atacc1 group by a; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: AssumeColumnOrder, At function: PgReplaceUnknown, At function: OrderedMap + select * from atacc1 group by a; + ^ + -stdin-:<main>:1:1: Error: At function: AsStruct, At function: Member + select * from atacc1 group by a; + ^ + -stdin-:<main>:1:1: Error: Member not found: _alias_atacc1.b. Did you mean _alias_atacc1.a? + select * from atacc1 group by a; + ^ + -stdin-:<main>:1:1: Error: At function: Member + select * from atacc1 group by a; + ^ + -stdin-:<main>:1:1: Error: Member not found: _alias_atacc1.c. Did you mean _alias_atacc1.a? + select * from atacc1 group by a; + ^ + -stdin-:<main>:1:1: Error: At function: Member + select * from atacc1 group by a; + ^ + -stdin-:<main>:1:1: Error: Member not found: _alias_atacc1.d. Did you mean _alias_atacc1.a? + select * from atacc1 group by a; + ^ +<sql-statement> +select * from atacc1 group by "........pg.dropped.1........"; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select * from atacc1 group by "........pg.dropped.1........"; + ^ + -stdin-:<main>:1:31: Error: No such column: ........pg.dropped.1........ + select * from atacc1 group by "........pg.dropped.1........"; + ^ +<sql-statement> +select atacc1.* from atacc1; +</sql-statement> +<sql-statement> +select a from atacc1; +</sql-statement> +<sql-statement> +select atacc1.a from atacc1; +</sql-statement> +<sql-statement> +select b,c,d from atacc1; +</sql-statement> +<sql-statement> +select a,b,c,d from atacc1; +</sql-statement> +<sql-statement> +select * from atacc1 where a = 1; +</sql-statement> +<sql-statement> +select "........pg.dropped.1........" from atacc1; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select "........pg.dropped.1........" from atacc1; + ^ + -stdin-:<main>:1:8: Error: No such column: ........pg.dropped.1........ + select "........pg.dropped.1........" from atacc1; + ^ +<sql-statement> +select atacc1."........pg.dropped.1........" from atacc1; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select atacc1."........pg.dropped.1........" from atacc1; + ^ + -stdin-:<main>:1:8: Error: No such column: ........pg.dropped.1........ + select atacc1."........pg.dropped.1........" from atacc1; + ^ +<sql-statement> +select "........pg.dropped.1........",b,c,d from atacc1; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select "........pg.dropped.1........",b,c,d from atacc1; + ^ + -stdin-:<main>:1:8: Error: No such column: ........pg.dropped.1........ + select "........pg.dropped.1........",b,c,d from atacc1; + ^ +<sql-statement> +select * from atacc1 where "........pg.dropped.1........" = 1; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select * from atacc1 where "........pg.dropped.1........" = 1; + ^ + -stdin-:<main>:1:28: Error: No such column: ........pg.dropped.1........ + select * from atacc1 where "........pg.dropped.1........" = 1; + ^ +<sql-statement> +-- UPDATEs +update atacc1 set a = 3; +</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', 'mutationid'. + +<sql-statement> +update atacc1 set b = 2 where a = 3; +</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', 'mutationid'. + +<sql-statement> +update atacc1 set "........pg.dropped.1........" = 3; +</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', 'mutationid'. + +<sql-statement> +update atacc1 set b = 2 where "........pg.dropped.1........" = 3; +</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', 'mutationid'. + +<sql-statement> +-- INSERTs +insert into atacc1 values (10, 11, 12, 13); +</sql-statement> +<sql-statement> +insert into atacc1 values (default, 11, 12, 13); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148 + insert into atacc1 values (default, 11, 12, 13); + ^ +<sql-statement> +insert into atacc1 values (11, 12, 13); +</sql-statement> +<sql-statement> +insert into atacc1 (a) values (10); +</sql-statement> +<sql-statement> +insert into atacc1 (a) values (default); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148 + insert into atacc1 (a) values (default); + ^ +<sql-statement> +insert into atacc1 (a,b,c,d) values (10,11,12,13); +</sql-statement> +<sql-statement> +insert into atacc1 (a,b,c,d) values (default,11,12,13); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148 + insert into atacc1 (a,b,c,d) values (default,11,12,13); + ^ +<sql-statement> +insert into atacc1 (b,c,d) values (11,12,13); +</sql-statement> +<sql-statement> +insert into atacc1 ("........pg.dropped.1........") values (10); +</sql-statement> +<sql-statement> +insert into atacc1 ("........pg.dropped.1........") values (default); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148 + insert into atacc1 ("........pg.dropped.1........") values (default); + ^ +<sql-statement> +insert into atacc1 ("........pg.dropped.1........",b,c,d) values (10,11,12,13); +</sql-statement> +<sql-statement> +insert into atacc1 ("........pg.dropped.1........",b,c,d) values (default,11,12,13); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148 + insert into atacc1 ("........pg.dropped.1........",b,c,d) values (default,11,12,13); + ^ +<sql-statement> +-- DELETEs +delete from atacc1 where a = 3; +</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', 'mutationid'. + +<sql-statement> +delete from atacc1 where "........pg.dropped.1........" = 3; +</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', 'mutationid'. + +<sql-statement> +delete from atacc1; +</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', 'mutationid'. + +<sql-statement> +-- try dropping a non-existent column, should fail +alter table atacc1 drop bar; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try dropping a non-existent column, should fail + ^ +<sql-statement> +-- try removing an oid column, should succeed (as it's nonexistent) +alter table atacc1 SET WITHOUT OIDS; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try removing an oid column, should succeed (as it's nonexistent) + ^ +<sql-statement> +-- try adding an oid column, should fail (not supported) +alter table atacc1 SET WITH OIDS; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:24: Error: ERROR: syntax error at or near "WITH" + + alter table atacc1 SET WITH OIDS; + ^ +<sql-statement> +-- try dropping the xmin column, should fail +alter table atacc1 drop xmin; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try dropping the xmin column, should fail + ^ +<sql-statement> +-- try creating a view and altering that, should fail +create view myview as select * from atacc1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + -- try creating a view and altering that, should fail + ^ +<sql-statement> +select * from myview; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.myview + +<sql-statement> +alter table myview drop d; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table myview drop d; + ^ +<sql-statement> +drop view myview; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'myview' + drop view myview; + ^ +<sql-statement> +-- test some commands to make sure they fail on the dropped column +analyze atacc1(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + -- test some commands to make sure they fail on the dropped column + ^ +<sql-statement> +analyze atacc1("........pg.dropped.1........"); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze atacc1("........pg.dropped.1........"); + ^ +<sql-statement> +vacuum analyze atacc1(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + vacuum analyze atacc1(a); + ^ +<sql-statement> +vacuum analyze atacc1("........pg.dropped.1........"); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + vacuum analyze atacc1("........pg.dropped.1........"); + ^ +<sql-statement> +comment on column atacc1.a is 'testing'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + comment on column atacc1.a is 'testing'; + ^ +<sql-statement> +comment on column atacc1."........pg.dropped.1........" is 'testing'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + comment on column atacc1."........pg.dropped.1........" is 'testing'; + ^ +<sql-statement> +alter table atacc1 alter a set storage plain; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter a set storage plain; + ^ +<sql-statement> +alter table atacc1 alter "........pg.dropped.1........" set storage plain; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter "........pg.dropped.1........" set storage plain; + ^ +<sql-statement> +alter table atacc1 alter a set statistics 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter a set statistics 0; + ^ +<sql-statement> +alter table atacc1 alter "........pg.dropped.1........" set statistics 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter "........pg.dropped.1........" set statistics 0; + ^ +<sql-statement> +alter table atacc1 alter a set default 3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter a set default 3; + ^ +<sql-statement> +alter table atacc1 alter "........pg.dropped.1........" set default 3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter "........pg.dropped.1........" set default 3; + ^ +<sql-statement> +alter table atacc1 alter a drop default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter a drop default; + ^ +<sql-statement> +alter table atacc1 alter "........pg.dropped.1........" drop default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter "........pg.dropped.1........" drop default; + ^ +<sql-statement> +alter table atacc1 alter a set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter a set not null; + ^ +<sql-statement> +alter table atacc1 alter "........pg.dropped.1........" set not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter "........pg.dropped.1........" set not null; + ^ +<sql-statement> +alter table atacc1 alter a drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter a drop not null; + ^ +<sql-statement> +alter table atacc1 alter "........pg.dropped.1........" drop not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 alter "........pg.dropped.1........" drop not null; + ^ +<sql-statement> +alter table atacc1 rename a to x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + alter table atacc1 rename a to x; + ^ +<sql-statement> +alter table atacc1 rename "........pg.dropped.1........" to x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + alter table atacc1 rename "........pg.dropped.1........" to x; + ^ +<sql-statement> +alter table atacc1 add primary key(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add primary key(a); + ^ +<sql-statement> +alter table atacc1 add primary key("........pg.dropped.1........"); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add primary key("........pg.dropped.1........"); + ^ +<sql-statement> +alter table atacc1 add unique(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add unique(a); + ^ +<sql-statement> +alter table atacc1 add unique("........pg.dropped.1........"); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add unique("........pg.dropped.1........"); + ^ +<sql-statement> +alter table atacc1 add check (a > 3); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add check (a > 3); + ^ +<sql-statement> +alter table atacc1 add check ("........pg.dropped.1........" > 3); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add check ("........pg.dropped.1........" > 3); + ^ +<sql-statement> +create table atacc2 (id int4 unique); +</sql-statement> +<sql-statement> +alter table atacc1 add foreign key (a) references atacc2(id); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add foreign key (a) references atacc2(id); + ^ +<sql-statement> +alter table atacc1 add foreign key ("........pg.dropped.1........") references atacc2(id); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add foreign key ("........pg.dropped.1........") references atacc2(id); + ^ +<sql-statement> +alter table atacc2 add foreign key (id) references atacc1(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc2 add foreign key (id) references atacc1(a); + ^ +<sql-statement> +alter table atacc2 add foreign key (id) references atacc1("........pg.dropped.1........"); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc2 add foreign key (id) references atacc1("........pg.dropped.1........"); + ^ +<sql-statement> +drop table atacc2; +</sql-statement> +<sql-statement> +create index "testing_idx" on atacc1(a); +</sql-statement> +<sql-statement> +create index "testing_idx" on atacc1("........pg.dropped.1........"); +</sql-statement> +<sql-statement> +-- test create as and select into +insert into atacc1 values (21, 22, 23); +</sql-statement> +<sql-statement> +create table attest1 as select * from atacc1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create table attest1 as select * from atacc1; + ^ +<sql-statement> +select * from attest1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.attest1 + +<sql-statement> +drop table attest1; +</sql-statement> +<sql-statement> +select * into attest2 from atacc1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: SelectStmt: not supported intoClause + select * into attest2 from atacc1; + ^ +<sql-statement> +select * from attest2; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.attest2 + +<sql-statement> +drop table attest2; +</sql-statement> +<sql-statement> +-- try dropping all columns +alter table atacc1 drop c; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- try dropping all columns + ^ +<sql-statement> +alter table atacc1 drop d; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 drop d; + ^ +<sql-statement> +alter table atacc1 drop b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 drop b; + ^ +<sql-statement> +select * from atacc1; +</sql-statement> +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- test constraint error reporting in presence of dropped columns +create table atacc1 (id serial primary key, value int check (value < 10)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- test constraint error reporting in presence of dropped columns + ^ +<sql-statement> +insert into atacc1(value) 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.atacc1 + +<sql-statement> +alter table atacc1 drop column value; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 drop column value; + ^ +<sql-statement> +alter table atacc1 add column value int check (value < 10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atacc1 add column value int check (value < 10); + ^ +<sql-statement> +insert into atacc1(value) 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.atacc1 + +<sql-statement> +insert into atacc1(id, value) values (null, 0); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.atacc1 + +<sql-statement> +drop table atacc1; +</sql-statement> +<sql-statement> +-- test inheritance +create table parent (a int, b int, c int); +</sql-statement> +<sql-statement> +insert into parent values (1, 2, 3); +</sql-statement> +<sql-statement> +alter table parent drop a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table parent drop a; + ^ +<sql-statement> +create table child (d varchar(255)) inherits (parent); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table child (d varchar(255)) inherits (parent); + ^ +<sql-statement> +insert into child values (12, 13, 'testing'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.child + +<sql-statement> +select * from parent; +</sql-statement> +<sql-statement> +select * from child; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.child + +<sql-statement> +alter table parent drop c; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table parent drop c; + ^ +<sql-statement> +select * from parent; +</sql-statement> +<sql-statement> +select * from child; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.child + +<sql-statement> +drop table child; +</sql-statement> +<sql-statement> +drop table parent; +</sql-statement> +<sql-statement> +-- check error cases for inheritance column merging +create table parent (a float8, b numeric(10,4), c text collate "C"); +</sql-statement> +<sql-statement> +create table child (a float4) inherits (parent); -- fail +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table child (a float4) inherits (parent); -- fail + ^ +<sql-statement> +create table child (b decimal(10,7)) inherits (parent); -- fail +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table child (b decimal(10,7)) inherits (parent); -- fail + ^ +<sql-statement> +create table child (c text collate "POSIX") inherits (parent); -- fail +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table child (c text collate "POSIX") inherits (parent); -- fail + ^ +<sql-statement> +create table child (a double precision, b decimal(10,4)) inherits (parent); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table child (a double precision, b decimal(10,4)) inherits (parent); + ^ +<sql-statement> +drop table child; +</sql-statement> +<sql-statement> +drop table parent; +</sql-statement> +<sql-statement> +-- test copy in/out +create table attest (a int4, b int4, c int4); +</sql-statement> +<sql-statement> +insert into attest values (1,2,3); +</sql-statement> +<sql-statement> +alter table attest drop a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table attest drop a; + ^ +<sql-statement> +copy attest to stdout; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 253 + copy attest to stdout; + ^ +<sql-statement> +copy attest(a) to stdout; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 253 + copy attest(a) to stdout; + ^ +<sql-statement> +copy attest("........pg.dropped.1........") to stdout; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 253 + copy attest("........pg.dropped.1........") to stdout; + ^ +<sql-statement> +copy attest from stdin; +10 11 12 +\. +</sql-statement> +Metacommand \. is not supported +<sql-statement> +select * from attest; +</sql-statement> +<sql-statement> +copy attest from stdin; +21 22 +\. +</sql-statement> +Metacommand \. is not supported +<sql-statement> +select * from attest; +</sql-statement> +<sql-statement> +copy attest(a) from stdin; +copy attest("........pg.dropped.1........") from stdin; +copy attest(b,c) from stdin; +31 32 +\. +</sql-statement> +Metacommand \. is not supported +<sql-statement> +select * from attest; +</sql-statement> +<sql-statement> +drop table attest; +</sql-statement> +<sql-statement> +-- test inheritance +create table dropColumn (a int, b int, e int); +</sql-statement> +<sql-statement> +create table dropColumnChild (c int) inherits (dropColumn); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table dropColumnChild (c int) inherits (dropColumn); + ^ +<sql-statement> +create table dropColumnAnother (d int) inherits (dropColumnChild); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table dropColumnAnother (d int) inherits (dropColumnChild); + ^ +<sql-statement> +-- these two should fail +alter table dropColumnchild drop column a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- these two should fail + ^ +<sql-statement> +alter table only dropColumnChild drop column b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table only dropColumnChild drop column b; + ^ +<sql-statement> +-- these three should work +alter table only dropColumn drop column e; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- these three should work + ^ +<sql-statement> +alter table dropColumnChild drop column c; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table dropColumnChild drop column c; + ^ +<sql-statement> +alter table dropColumn drop column a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table dropColumn drop column a; + ^ +<sql-statement> +create table renameColumn (a int); +</sql-statement> +<sql-statement> +create table renameColumnChild (b int) inherits (renameColumn); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table renameColumnChild (b int) inherits (renameColumn); + ^ +<sql-statement> +create table renameColumnAnother (c int) inherits (renameColumnChild); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table renameColumnAnother (c int) inherits (renameColumnChild); + ^ +<sql-statement> +-- these three should fail +alter table renameColumnChild rename column a to d; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + -- these three should fail + ^ +<sql-statement> +alter table only renameColumnChild rename column a to d; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + alter table only renameColumnChild rename column a to d; + ^ +<sql-statement> +alter table only renameColumn rename column a to d; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + alter table only renameColumn rename column a to d; + ^ +<sql-statement> +-- these should work +alter table renameColumn rename column a to d; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + -- these should work + ^ +<sql-statement> +alter table renameColumnChild rename column b to a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + alter table renameColumnChild rename column b to a; + ^ +<sql-statement> +-- these should work +alter table if exists doesnt_exist_tab rename column a to d; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + -- these should work + ^ +<sql-statement> +alter table if exists doesnt_exist_tab rename column b to a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + alter table if exists doesnt_exist_tab rename column b to a; + ^ +<sql-statement> +-- this should work +alter table renameColumn add column w int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- this should work + ^ +<sql-statement> +-- this should fail +alter table only renameColumn add column x int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- this should fail + ^ +<sql-statement> +-- Test corner cases in dropping of inherited columns +create table p1 (f1 int, f2 int); +</sql-statement> +<sql-statement> +create table c1 (f1 int not null) inherits(p1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table c1 (f1 int not null) inherits(p1); + ^ +<sql-statement> +-- should be rejected since c1.f1 is inherited +alter table c1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should be rejected since c1.f1 is inherited + ^ +<sql-statement> +-- should work +alter table p1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should work + ^ +<sql-statement> +-- c1.f1 is still there, but no longer inherited +select f1 from c1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.c1 + +<sql-statement> +alter table c1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table c1 drop column f1; + ^ +<sql-statement> +select f1 from c1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.c1 + +<sql-statement> +drop table p1 cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + drop table p1 cascade; + ^ +<sql-statement> +create table p1 (f1 int, f2 int); +</sql-statement> +<sql-statement> +create table c1 () inherits(p1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table c1 () inherits(p1); + ^ +<sql-statement> +-- should be rejected since c1.f1 is inherited +alter table c1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should be rejected since c1.f1 is inherited + ^ +<sql-statement> +alter table p1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table p1 drop column f1; + ^ +<sql-statement> +-- c1.f1 is dropped now, since there is no local definition for it +select f1 from c1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.c1 + +<sql-statement> +drop table p1 cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + drop table p1 cascade; + ^ +<sql-statement> +create table p1 (f1 int, f2 int); +</sql-statement> +<sql-statement> +create table c1 () inherits(p1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table c1 () inherits(p1); + ^ +<sql-statement> +-- should be rejected since c1.f1 is inherited +alter table c1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should be rejected since c1.f1 is inherited + ^ +<sql-statement> +alter table only p1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table only p1 drop column f1; + ^ +<sql-statement> +-- c1.f1 is NOT dropped, but must now be considered non-inherited +alter table c1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- c1.f1 is NOT dropped, but must now be considered non-inherited + ^ +<sql-statement> +drop table p1 cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + drop table p1 cascade; + ^ +<sql-statement> +create table p1 (f1 int, f2 int); +</sql-statement> +<sql-statement> +create table c1 (f1 int not null) inherits(p1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table c1 (f1 int not null) inherits(p1); + ^ +<sql-statement> +-- should be rejected since c1.f1 is inherited +alter table c1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should be rejected since c1.f1 is inherited + ^ +<sql-statement> +alter table only p1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table only p1 drop column f1; + ^ +<sql-statement> +-- c1.f1 is still there, but no longer inherited +alter table c1 drop column f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- c1.f1 is still there, but no longer inherited + ^ +<sql-statement> +drop table p1 cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + drop table p1 cascade; + ^ +<sql-statement> +create table p1(id int, name text); +</sql-statement> +<sql-statement> +create table p2(id2 int, name text, height int); +</sql-statement> +<sql-statement> +create table c1(age int) inherits(p1,p2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table c1(age int) inherits(p1,p2); + ^ +<sql-statement> +create table gc1() inherits (c1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table gc1() inherits (c1); + ^ +<sql-statement> +select relname, attname, attinhcount, attislocal +from pg_class join pg_attribute on (pg_class.oid = pg_attribute.attrelid) +where relname in ('p1','p2','c1','gc1') and attnum > 0 and not attisdropped +order by relname, attnum; +</sql-statement> +-stdin-:<main>: 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_attribute + +<sql-statement> +-- should work +alter table only p1 drop column name; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should work + ^ +<sql-statement> +-- should work. Now c1.name is local and inhcount is 0. +alter table p2 drop column name; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should work. Now c1.name is local and inhcount is 0. + ^ +<sql-statement> +-- should be rejected since its inherited +alter table gc1 drop column name; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should be rejected since its inherited + ^ +<sql-statement> +-- should work, and drop gc1.name along +alter table c1 drop column name; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should work, and drop gc1.name along + ^ +<sql-statement> +-- should fail: column does not exist +alter table gc1 drop column name; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should fail: column does not exist + ^ +<sql-statement> +-- should work and drop the attribute in all tables +alter table p2 drop column height; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should work and drop the attribute in all tables + ^ +<sql-statement> +-- IF EXISTS test +create table dropColumnExists (); +</sql-statement> +<sql-statement> +alter table dropColumnExists drop column non_existing; --fail +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table dropColumnExists drop column non_existing; --fail + ^ +<sql-statement> +alter table dropColumnExists drop column if exists non_existing; --succeed +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table dropColumnExists drop column if exists non_existing; --succeed + ^ +<sql-statement> +select relname, attname, attinhcount, attislocal +from pg_class join pg_attribute on (pg_class.oid = pg_attribute.attrelid) +where relname in ('p1','p2','c1','gc1') and attnum > 0 and not attisdropped +order by relname, attnum; +</sql-statement> +-stdin-:<main>: 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_attribute + +<sql-statement> +drop table p1, p2 cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + drop table p1, p2 cascade; + ^ +<sql-statement> +-- test attinhcount tracking with merged columns +create table depth0(); +</sql-statement> +<sql-statement> +create table depth1(c text) inherits (depth0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table depth1(c text) inherits (depth0); + ^ +<sql-statement> +create table depth2() inherits (depth1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table depth2() inherits (depth1); + ^ +<sql-statement> +alter table depth0 add c text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table depth0 add c text; + ^ +<sql-statement> +select attrelid::regclass, attname, attinhcount, attislocal +from pg_attribute +where attnum > 0 and attrelid::regclass in ('depth0', 'depth1', 'depth2') +order by attrelid::regclass::text, attnum; +</sql-statement> +-stdin-:<main>: 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_attribute + +<sql-statement> +-- test renumbering of child-table columns in inherited operations +create table p1 (f1 int); +</sql-statement> +<sql-statement> +create table c1 (f2 text, f3 int) inherits (p1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table c1 (f2 text, f3 int) inherits (p1); + ^ +<sql-statement> +alter table p1 add column a1 int check (a1 > 0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table p1 add column a1 int check (a1 > 0); + ^ +<sql-statement> +alter table p1 add column f2 text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table p1 add column f2 text; + ^ +<sql-statement> +insert into p1 values (1,2,'abc'); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: YtWriteTable! + insert into p1 values (1,2,'abc'); + ^ + -stdin-:<main>:1:1: Error: values have 3 columns, INSERT INTO expects: 2 + insert into p1 values (1,2,'abc'); + ^ +<sql-statement> +insert into c1 values(11,'xyz',33,0); -- should fail +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.c1 + +<sql-statement> +insert into c1 values(11,'xyz',33,22); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.c1 + +<sql-statement> +select * from p1; +</sql-statement> +<sql-statement> +update p1 set a1 = a1 + 1, f2 = upper(f2); +</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', 'mutationid'. + +<sql-statement> +select * from p1; +</sql-statement> +<sql-statement> +drop table p1 cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + drop table p1 cascade; + ^ +<sql-statement> +-- test that operations with a dropped column do not try to reference +-- its datatype +create domain mytype as text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 272 + -- test that operations with a dropped column do not try to reference + ^ +<sql-statement> +create temp table foo (f1 text, f2 mytype, f3 text); +</sql-statement> +<sql-statement> +insert into foo values('bb','cc','dd'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.foo + +<sql-statement> +select * from foo; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.foo + +<sql-statement> +drop domain mytype cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373 + drop domain mytype cascade; + ^ +<sql-statement> +select * from foo; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.foo + +<sql-statement> +insert into foo values('qq','rr'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.foo + +<sql-statement> +select * from foo; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.foo + +<sql-statement> +update foo set f3 = 'zz'; +</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', 'mutationid'. + +<sql-statement> +select * from foo; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.foo + +<sql-statement> +select f3,max(f1) from foo group by f3; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.foo + +<sql-statement> +-- Simple tests for alter table column type +alter table foo alter f1 TYPE integer; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Simple tests for alter table column type + ^ +<sql-statement> +alter table foo alter f1 TYPE varchar(10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table foo alter f1 TYPE varchar(10); + ^ +<sql-statement> +create table anothertab (atcol1 serial8, atcol2 boolean, + constraint anothertab_chk check (atcol1 <= 3)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table constraint not supported + create table anothertab (atcol1 serial8, atcol2 boolean, + ^ +<sql-statement> +insert into anothertab (atcol1, atcol2) values (default, true); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148 + insert into anothertab (atcol1, atcol2) values (default, true); + ^ +<sql-statement> +insert into anothertab (atcol1, atcol2) values (default, false); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148 + insert into anothertab (atcol1, atcol2) values (default, false); + ^ +<sql-statement> +select * from anothertab; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.anothertab + +<sql-statement> +alter table anothertab alter column atcol1 type boolean; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column atcol1 type boolean; -- fails + ^ +<sql-statement> +alter table anothertab alter column atcol1 type boolean using atcol1::int; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column atcol1 type boolean using atcol1::int; -- fails + ^ +<sql-statement> +alter table anothertab alter column atcol1 type integer; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column atcol1 type integer; + ^ +<sql-statement> +select * from anothertab; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.anothertab + +<sql-statement> +insert into anothertab (atcol1, atcol2) values (45, null); -- fails +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.anothertab + +<sql-statement> +insert into anothertab (atcol1, atcol2) values (default, null); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: alternative is not implemented yet : 148 + insert into anothertab (atcol1, atcol2) values (default, null); + ^ +<sql-statement> +select * from anothertab; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.anothertab + +<sql-statement> +alter table anothertab alter column atcol2 type text + using case when atcol2 is true then 'IT WAS TRUE' + when atcol2 is false then 'IT WAS FALSE' + else 'IT WAS NULL!' end; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column atcol2 type text + ^ +<sql-statement> +select * from anothertab; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.anothertab + +<sql-statement> +alter table anothertab alter column atcol1 type boolean + using case when atcol1 % 2 = 0 then true else false end; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column atcol1 type boolean + ^ +<sql-statement> +alter table anothertab alter column atcol1 drop default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column atcol1 drop default; + ^ +<sql-statement> +alter table anothertab alter column atcol1 type boolean + using case when atcol1 % 2 = 0 then true else false end; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column atcol1 type boolean + ^ +<sql-statement> +alter table anothertab drop constraint anothertab_chk; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab drop constraint anothertab_chk; + ^ +<sql-statement> +alter table anothertab drop constraint anothertab_chk; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab drop constraint anothertab_chk; -- fails + ^ +<sql-statement> +alter table anothertab drop constraint IF EXISTS anothertab_chk; -- succeeds +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab drop constraint IF EXISTS anothertab_chk; -- succeeds + ^ +<sql-statement> +alter table anothertab alter column atcol1 type boolean + using case when atcol1 % 2 = 0 then true else false end; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column atcol1 type boolean + ^ +<sql-statement> +select * from anothertab; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.anothertab + +<sql-statement> +drop table anothertab; +</sql-statement> +<sql-statement> +-- Test index handling in alter table column type (cf. bugs #15835, #15865) +create table anothertab(f1 int primary key, f2 int unique, + f3 int, f4 int, f5 int); +</sql-statement> +<sql-statement> +alter table anothertab + add exclude using btree (f3 with =); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab + ^ +<sql-statement> +alter table anothertab + add exclude using btree (f4 with =) where (f4 is not null); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab + ^ +<sql-statement> +alter table anothertab + add exclude using btree (f4 with =) where (f5 > 0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab + ^ +<sql-statement> +alter table anothertab + add unique(f1,f4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab + ^ +<sql-statement> +create index on anothertab(f2,f3); +</sql-statement> +<sql-statement> +create unique index on anothertab(f4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: unique index creation is not supported yet + create unique index on anothertab(f4); + ^ +<sql-statement> +\d anothertab +</sql-statement> +Metacommand \d anothertab is not supported +<sql-statement> +alter table anothertab alter column f1 type bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column f1 type bigint; + ^ +<sql-statement> +alter table anothertab + alter column f2 type bigint, + alter column f3 type bigint, + alter column f4 type bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab + ^ +<sql-statement> +alter table anothertab alter column f5 type bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table anothertab alter column f5 type bigint; + ^ +<sql-statement> +\d anothertab +</sql-statement> +Metacommand \d anothertab is not supported +<sql-statement> +drop table anothertab; +</sql-statement> +<sql-statement> +-- test that USING expressions are parsed before column alter type / drop steps +create table another (f1 int, f2 text, f3 text); +</sql-statement> +<sql-statement> +insert into another values(1, 'one', 'uno'); +</sql-statement> +<sql-statement> +insert into another values(2, 'two', 'due'); +</sql-statement> +<sql-statement> +insert into another values(3, 'three', 'tre'); +</sql-statement> +<sql-statement> +select * from another; +</sql-statement> +<sql-statement> +alter table another + alter f1 type text using f2 || ' and ' || f3 || ' more', + alter f2 type bigint using f1 * 10, + drop column f3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table another + ^ +<sql-statement> +select * from another; +</sql-statement> +<sql-statement> +drop table another; +</sql-statement> +<sql-statement> +-- Create an index that skips WAL, then perform a SET DATA TYPE that skips +-- rewriting the index. +begin; +</sql-statement> +<sql-statement> +create table skip_wal_skip_rewrite_index (c varchar(10) primary key); +</sql-statement> +<sql-statement> +alter table skip_wal_skip_rewrite_index alter c type varchar(20); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table skip_wal_skip_rewrite_index alter c type varchar(20); + ^ +<sql-statement> +commit; +</sql-statement> +<sql-statement> +-- We disallow changing table's row type if it's used for storage +create table at_tab1 (a int, b text); +</sql-statement> +<sql-statement> +create table at_tab2 (x int, y at_tab1); +</sql-statement> +<sql-statement> +alter table at_tab1 alter column b type varchar; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table at_tab1 alter column b type varchar; -- fails + ^ +<sql-statement> +drop table at_tab2; +</sql-statement> +<sql-statement> +-- Use of row type in an expression is defended differently +create table at_tab2 (x int, y text, check((x,y)::at_tab1 = (1,'42')::at_tab1)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table constraint not supported + -- Use of row type in an expression is defended differently + ^ +<sql-statement> +alter table at_tab1 alter column b type varchar; -- allowed, but ... +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table at_tab1 alter column b type varchar; -- allowed, but ... + ^ +<sql-statement> +insert into at_tab2 values(1,'42'); -- ... this will fail +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.at_tab2 + +<sql-statement> +drop table at_tab1, at_tab2; +</sql-statement> +<sql-statement> +-- Check it for a partitioned table, too +create table at_tab1 (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 + -- Check it for a partitioned table, too + ^ +<sql-statement> +create table at_tab2 (x int, y at_tab1); +</sql-statement> +<sql-statement> +alter table at_tab1 alter column b type varchar; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table at_tab1 alter column b type varchar; -- fails + ^ +<sql-statement> +drop table at_tab1, at_tab2; +</sql-statement> +<sql-statement> +-- Alter column type that's part of a partitioned index +create table at_partitioned (a int, b text) partition by range (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- Alter column type that's part of a partitioned index + ^ +<sql-statement> +create table at_part_1 partition of at_partitioned for values from (0) to (1000); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table at_part_1 partition of at_partitioned for values from (0) to (1000); + ^ +<sql-statement> +insert into at_partitioned values (512, '0.123'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.at_partitioned + +<sql-statement> +create table at_part_2 (b text, a int); +</sql-statement> +<sql-statement> +insert into at_part_2 values ('1.234', 1024); +</sql-statement> +<sql-statement> +create index on at_partitioned (b); +</sql-statement> +<sql-statement> +create index on at_partitioned (a); +</sql-statement> +<sql-statement> +\d at_part_1 +</sql-statement> +Metacommand \d at_part_1 is not supported +<sql-statement> +\d at_part_2 +</sql-statement> +Metacommand \d at_part_2 is not supported +<sql-statement> +alter table at_partitioned attach partition at_part_2 for values from (1000) to (2000); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table at_partitioned attach partition at_part_2 for values from (1000) to (2000); + ^ +<sql-statement> +\d at_part_2 +</sql-statement> +Metacommand \d at_part_2 is not supported +<sql-statement> +alter table at_partitioned alter column b type numeric using b::numeric; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table at_partitioned alter column b type numeric using b::numeric; + ^ +<sql-statement> +\d at_part_1 +</sql-statement> +Metacommand \d at_part_1 is not supported +<sql-statement> +\d at_part_2 +</sql-statement> +Metacommand \d at_part_2 is not supported +<sql-statement> +drop table at_partitioned; +</sql-statement> +<sql-statement> +-- Alter column type when no table rewrite is required +-- Also check that comments are preserved +create table at_partitioned(id int, name varchar(64), unique (id, name)) + partition by hash(id); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- Alter column type when no table rewrite is required + ^ +<sql-statement> +comment on constraint at_partitioned_id_name_key on at_partitioned is 'parent constraint'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + comment on constraint at_partitioned_id_name_key on at_partitioned is 'parent constraint'; + ^ +<sql-statement> +comment on index at_partitioned_id_name_key is 'parent index'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + comment on index at_partitioned_id_name_key is 'parent index'; + ^ +<sql-statement> +create table at_partitioned_0 partition of at_partitioned + for values with (modulus 2, remainder 0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table at_partitioned_0 partition of at_partitioned + ^ +<sql-statement> +comment on constraint at_partitioned_0_id_name_key on at_partitioned_0 is 'child 0 constraint'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + comment on constraint at_partitioned_0_id_name_key on at_partitioned_0 is 'child 0 constraint'; + ^ +<sql-statement> +comment on index at_partitioned_0_id_name_key is 'child 0 index'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + comment on index at_partitioned_0_id_name_key is 'child 0 index'; + ^ +<sql-statement> +create table at_partitioned_1 partition of at_partitioned + for values with (modulus 2, remainder 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table at_partitioned_1 partition of at_partitioned + ^ +<sql-statement> +comment on constraint at_partitioned_1_id_name_key on at_partitioned_1 is 'child 1 constraint'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + comment on constraint at_partitioned_1_id_name_key on at_partitioned_1 is 'child 1 constraint'; + ^ +<sql-statement> +comment on index at_partitioned_1_id_name_key is 'child 1 index'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + comment on index at_partitioned_1_id_name_key is 'child 1 index'; + ^ +<sql-statement> +insert into at_partitioned values(1, 'foo'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.at_partitioned + +<sql-statement> +insert into at_partitioned values(3, 'bar'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.at_partitioned + +<sql-statement> +create temp table old_oids as + select relname, oid as oldoid, relfilenode as oldfilenode + from pg_class where relname like 'at_partitioned%'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create temp table old_oids as + ^ +<sql-statement> +select relname, + c.oid = oldoid as orig_oid, + case relfilenode + when 0 then 'none' + when c.oid then 'own' + when oldfilenode then 'orig' + else 'OTHER' + end as storage, + obj_description(c.oid, 'pg_class') as desc + from pg_class c left join old_oids using (relname) + where relname like 'at_partitioned%' + order by relname; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported using + select relname, + ^ +<sql-statement> +select conname, obj_description(oid, 'pg_constraint') as desc + from pg_constraint where conname like 'at_partitioned%' + order by conname; +</sql-statement> +-stdin-:<main>: 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> +alter table at_partitioned alter column name type varchar(127); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table at_partitioned alter column name type varchar(127); + ^ +<sql-statement> +-- Note: these tests currently show the wrong behavior for comments :-( +select relname, + c.oid = oldoid as orig_oid, + case relfilenode + when 0 then 'none' + when c.oid then 'own' + when oldfilenode then 'orig' + else 'OTHER' + end as storage, + obj_description(c.oid, 'pg_class') as desc + from pg_class c left join old_oids using (relname) + where relname like 'at_partitioned%' + order by relname; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported using + -- Note: these tests currently show the wrong behavior for comments :-( + ^ +<sql-statement> +select conname, obj_description(oid, 'pg_constraint') as desc + from pg_constraint where conname like 'at_partitioned%' + order by conname; +</sql-statement> +-stdin-:<main>: 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> +-- Don't remove this DROP, it exposes bug #15672 +drop table at_partitioned; +</sql-statement> +<sql-statement> +-- disallow recursive containment of row types +create temp table recur1 (f1 int); +</sql-statement> +<sql-statement> +alter table recur1 add column f2 recur1; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table recur1 add column f2 recur1; -- fails + ^ +<sql-statement> +alter table recur1 add column f2 recur1[]; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table recur1 add column f2 recur1[]; -- fails + ^ +<sql-statement> +create domain array_of_recur1 as recur1[]; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 272 + create domain array_of_recur1 as recur1[]; + ^ +<sql-statement> +alter table recur1 add column f2 array_of_recur1; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table recur1 add column f2 array_of_recur1; -- fails + ^ +<sql-statement> +create temp table recur2 (f1 int, f2 recur1); +</sql-statement> +<sql-statement> +alter table recur1 add column f2 recur2; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table recur1 add column f2 recur2; -- fails + ^ +<sql-statement> +alter table recur1 add column f2 int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table recur1 add column f2 int; + ^ +<sql-statement> +alter table recur1 alter column f2 type recur2; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table recur1 alter column f2 type recur2; -- fails + ^ +<sql-statement> +-- SET STORAGE may need to add a TOAST table +create table test_storage (a text); +</sql-statement> +<sql-statement> +alter table test_storage alter a set storage plain; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table test_storage alter a set storage plain; + ^ +<sql-statement> +alter table test_storage add b int default 0; -- rewrite table to remove its TOAST table +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table test_storage add b int default 0; -- rewrite table to remove its TOAST table + ^ +<sql-statement> +alter table test_storage alter a set storage extended; -- re-add TOAST table +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table test_storage alter a set storage extended; -- re-add TOAST table + ^ +<sql-statement> +select reltoastrelid <> 0 as has_toast_table +from pg_class +where oid = 'test_storage'::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_class + +<sql-statement> +-- test that SET STORAGE propagates to index correctly +create index test_storage_idx on test_storage (b, a); +</sql-statement> +<sql-statement> +alter table test_storage alter column a set storage external; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table test_storage alter column a set storage external; + ^ +<sql-statement> +\d+ test_storage +</sql-statement> +Metacommand \d+ test_storage is not supported +<sql-statement> +\d+ test_storage_idx +</sql-statement> +Metacommand \d+ test_storage_idx is not supported +<sql-statement> +-- ALTER COLUMN TYPE with a check constraint and a child table (bug #13779) +CREATE TABLE test_inh_check (a float check (a > 10.2), b float); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- ALTER COLUMN TYPE with a check constraint and a child table (bug #13779) + ^ +<sql-statement> +CREATE TABLE test_inh_check_child() INHERITS(test_inh_check); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE test_inh_check_child() INHERITS(test_inh_check); + ^ +<sql-statement> +\d test_inh_check +</sql-statement> +Metacommand \d test_inh_check is not supported +<sql-statement> +\d test_inh_check_child +</sql-statement> +Metacommand \d test_inh_check_child is not supported +<sql-statement> +select relname, conname, coninhcount, conislocal, connoinherit + from pg_constraint c, pg_class r + where relname like 'test_inh_check%' and c.conrelid = r.oid + 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.pg_constraint + +<sql-statement> +ALTER TABLE test_inh_check ALTER COLUMN a TYPE numeric; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_inh_check ALTER COLUMN a TYPE numeric; + ^ +<sql-statement> +\d test_inh_check +</sql-statement> +Metacommand \d test_inh_check is not supported +<sql-statement> +\d test_inh_check_child +</sql-statement> +Metacommand \d test_inh_check_child is not supported +<sql-statement> +select relname, conname, coninhcount, conislocal, connoinherit + from pg_constraint c, pg_class r + where relname like 'test_inh_check%' and c.conrelid = r.oid + 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.pg_constraint + +<sql-statement> +-- also try noinherit, local, and local+inherited cases +ALTER TABLE test_inh_check ADD CONSTRAINT bnoinherit CHECK (b > 100) NO INHERIT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- also try noinherit, local, and local+inherited cases + ^ +<sql-statement> +ALTER TABLE test_inh_check_child ADD CONSTRAINT blocal CHECK (b < 1000); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_inh_check_child ADD CONSTRAINT blocal CHECK (b < 1000); + ^ +<sql-statement> +ALTER TABLE test_inh_check_child ADD CONSTRAINT bmerged CHECK (b > 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_inh_check_child ADD CONSTRAINT bmerged CHECK (b > 1); + ^ +<sql-statement> +ALTER TABLE test_inh_check ADD CONSTRAINT bmerged CHECK (b > 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_inh_check ADD CONSTRAINT bmerged CHECK (b > 1); + ^ +<sql-statement> +\d test_inh_check +</sql-statement> +Metacommand \d test_inh_check is not supported +<sql-statement> +\d test_inh_check_child +</sql-statement> +Metacommand \d test_inh_check_child is not supported +<sql-statement> +select relname, conname, coninhcount, conislocal, connoinherit + from pg_constraint c, pg_class r + where relname like 'test_inh_check%' and c.conrelid = r.oid + 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.pg_constraint + +<sql-statement> +ALTER TABLE test_inh_check ALTER COLUMN b TYPE numeric; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_inh_check ALTER COLUMN b TYPE numeric; + ^ +<sql-statement> +\d test_inh_check +</sql-statement> +Metacommand \d test_inh_check is not supported +<sql-statement> +\d test_inh_check_child +</sql-statement> +Metacommand \d test_inh_check_child is not supported +<sql-statement> +select relname, conname, coninhcount, conislocal, connoinherit + from pg_constraint c, pg_class r + where relname like 'test_inh_check%' and c.conrelid = r.oid + 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.pg_constraint + +<sql-statement> +-- ALTER COLUMN TYPE with different schema in children +-- Bug at https://postgr.es/m/20170102225618.GA10071@telsasoft.com +CREATE TABLE test_type_diff (f1 int); +</sql-statement> +<sql-statement> +CREATE TABLE test_type_diff_c (extra smallint) INHERITS (test_type_diff); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE test_type_diff_c (extra smallint) INHERITS (test_type_diff); + ^ +<sql-statement> +ALTER TABLE test_type_diff ADD COLUMN f2 int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_type_diff ADD COLUMN f2 int; + ^ +<sql-statement> +INSERT INTO test_type_diff_c VALUES (1, 2, 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.test_type_diff_c + +<sql-statement> +ALTER TABLE test_type_diff ALTER COLUMN f2 TYPE bigint USING f2::bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_type_diff ALTER COLUMN f2 TYPE bigint USING f2::bigint; + ^ +<sql-statement> +CREATE TABLE test_type_diff2 (int_two int2, int_four int4, int_eight int8); +</sql-statement> +<sql-statement> +CREATE TABLE test_type_diff2_c1 (int_four int4, int_eight int8, int_two int2); +</sql-statement> +<sql-statement> +CREATE TABLE test_type_diff2_c2 (int_eight int8, int_two int2, int_four int4); +</sql-statement> +<sql-statement> +CREATE TABLE test_type_diff2_c3 (int_two int2, int_four int4, int_eight int8); +</sql-statement> +<sql-statement> +ALTER TABLE test_type_diff2_c1 INHERIT test_type_diff2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_type_diff2_c1 INHERIT test_type_diff2; + ^ +<sql-statement> +ALTER TABLE test_type_diff2_c2 INHERIT test_type_diff2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_type_diff2_c2 INHERIT test_type_diff2; + ^ +<sql-statement> +ALTER TABLE test_type_diff2_c3 INHERIT test_type_diff2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_type_diff2_c3 INHERIT test_type_diff2; + ^ +<sql-statement> +INSERT INTO test_type_diff2_c1 VALUES (1, 2, 3); +</sql-statement> +<sql-statement> +INSERT INTO test_type_diff2_c2 VALUES (4, 5, 6); +</sql-statement> +<sql-statement> +INSERT INTO test_type_diff2_c3 VALUES (7, 8, 9); +</sql-statement> +<sql-statement> +ALTER TABLE test_type_diff2 ALTER COLUMN int_four TYPE int8 USING int_four::int8; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_type_diff2 ALTER COLUMN int_four TYPE int8 USING int_four::int8; + ^ +<sql-statement> +-- whole-row references are disallowed +ALTER TABLE test_type_diff2 ALTER COLUMN int_four TYPE int4 USING (pg_column_size(test_type_diff2)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- whole-row references are disallowed + ^ +<sql-statement> +-- check for rollback of ANALYZE corrupting table property flags (bug #11638) +CREATE TABLE check_fk_presence_1 (id int PRIMARY KEY, t text); +</sql-statement> +<sql-statement> +CREATE TABLE check_fk_presence_2 (id int REFERENCES check_fk_presence_1, t text); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + CREATE TABLE check_fk_presence_2 (id int REFERENCES check_fk_presence_1, t text); + ^ +<sql-statement> +BEGIN; +</sql-statement> +<sql-statement> +ALTER TABLE check_fk_presence_2 DROP CONSTRAINT check_fk_presence_2_id_fkey; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE check_fk_presence_2 DROP CONSTRAINT check_fk_presence_2_id_fkey; + ^ +<sql-statement> +ANALYZE check_fk_presence_2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + ANALYZE check_fk_presence_2; + ^ +<sql-statement> +ROLLBACK; +</sql-statement> +<sql-statement> +\d check_fk_presence_2 +</sql-statement> +Metacommand \d check_fk_presence_2 is not supported +<sql-statement> +DROP TABLE check_fk_presence_1, check_fk_presence_2; +</sql-statement> +<sql-statement> +-- check column addition within a view (bug #14876) +create table at_base_table(id int, stuff text); +</sql-statement> +<sql-statement> +insert into at_base_table values (23, 'skidoo'); +</sql-statement> +<sql-statement> +create view at_view_1 as select * from at_base_table bt; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create view at_view_1 as select * from at_base_table bt; + ^ +<sql-statement> +create view at_view_2 as select *, to_json(v1) as j from at_view_1 v1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create view at_view_2 as select *, to_json(v1) as j from at_view_1 v1; + ^ +<sql-statement> +\d+ at_view_1 +</sql-statement> +Metacommand \d+ at_view_1 is not supported +<sql-statement> +\d+ at_view_2 +</sql-statement> +Metacommand \d+ at_view_2 is not supported +<sql-statement> +explain (verbose, costs off) select * from at_view_2; +</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 at_view_2; + ^ +<sql-statement> +select * from at_view_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.at_view_2 + +<sql-statement> +create or replace view at_view_1 as select *, 2+2 as more from at_base_table bt; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create or replace view at_view_1 as select *, 2+2 as more from at_base_table bt; + ^ +<sql-statement> +\d+ at_view_1 +</sql-statement> +Metacommand \d+ at_view_1 is not supported +<sql-statement> +\d+ at_view_2 +</sql-statement> +Metacommand \d+ at_view_2 is not supported +<sql-statement> +explain (verbose, costs off) select * from at_view_2; +</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 at_view_2; + ^ +<sql-statement> +select * from at_view_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.at_view_2 + +<sql-statement> +drop view at_view_2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'at_view_2' + drop view at_view_2; + ^ +<sql-statement> +drop view at_view_1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'at_view_1' + drop view at_view_1; + ^ +<sql-statement> +drop table at_base_table; +</sql-statement> +<sql-statement> +-- check adding a column not iself requiring a rewrite, together with +-- a column requiring a default (bug #16038) +-- ensure that rewrites aren't silently optimized away, removing the +-- value of the test +CREATE FUNCTION check_ddl_rewrite(p_tablename regclass, p_ddl text) +RETURNS boolean +LANGUAGE plpgsql AS $$ +DECLARE + v_relfilenode oid; +BEGIN + v_relfilenode := relfilenode FROM pg_class WHERE oid = p_tablename; + EXECUTE p_ddl; + RETURN v_relfilenode <> (SELECT relfilenode FROM pg_class WHERE oid = p_tablename); +END; +$$; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + -- check adding a column not iself requiring a rewrite, together with + ^ +<sql-statement> +CREATE TABLE rewrite_test(col text); +</sql-statement> +<sql-statement> +INSERT INTO rewrite_test VALUES ('something'); +</sql-statement> +<sql-statement> +INSERT INTO rewrite_test VALUES (NULL); +</sql-statement> +<sql-statement> +-- empty[12] don't need rewrite, but notempty[12]_rewrite will force one +SELECT check_ddl_rewrite('rewrite_test', $$ + ALTER TABLE rewrite_test + ADD COLUMN empty1 text, + ADD COLUMN notempty1_rewrite serial; +$$); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + -- empty[12] don't need rewrite, but notempty[12]_rewrite will force one + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ + -stdin-:<main>:2:8: Error: No such proc: check_ddl_rewrite + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ +<sql-statement> +SELECT check_ddl_rewrite('rewrite_test', $$ + ALTER TABLE rewrite_test + ADD COLUMN notempty2_rewrite serial, + ADD COLUMN empty2 text; +$$); +</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 check_ddl_rewrite('rewrite_test', $$ + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ + -stdin-:<main>:1:8: Error: No such proc: check_ddl_rewrite + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ +<sql-statement> +-- also check that fast defaults cause no problem, first without rewrite +SELECT check_ddl_rewrite('rewrite_test', $$ + ALTER TABLE rewrite_test + ADD COLUMN empty3 text, + ADD COLUMN notempty3_norewrite int default 42; +$$); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + -- also check that fast defaults cause no problem, first without rewrite + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ + -stdin-:<main>:2:8: Error: No such proc: check_ddl_rewrite + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ +<sql-statement> +SELECT check_ddl_rewrite('rewrite_test', $$ + ALTER TABLE rewrite_test + ADD COLUMN notempty4_norewrite int default 42, + ADD COLUMN empty4 text; +$$); +</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 check_ddl_rewrite('rewrite_test', $$ + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ + -stdin-:<main>:1:8: Error: No such proc: check_ddl_rewrite + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ +<sql-statement> +-- then with rewrite +SELECT check_ddl_rewrite('rewrite_test', $$ + ALTER TABLE rewrite_test + ADD COLUMN empty5 text, + ADD COLUMN notempty5_norewrite int default 42, + ADD COLUMN notempty5_rewrite serial; +$$); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + -- then with rewrite + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ + -stdin-:<main>:2:8: Error: No such proc: check_ddl_rewrite + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ +<sql-statement> +SELECT check_ddl_rewrite('rewrite_test', $$ + ALTER TABLE rewrite_test + ADD COLUMN notempty6_rewrite serial, + ADD COLUMN empty6 text, + ADD COLUMN notempty6_norewrite int default 42; +$$); +</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 check_ddl_rewrite('rewrite_test', $$ + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ + -stdin-:<main>:1:8: Error: No such proc: check_ddl_rewrite + SELECT check_ddl_rewrite('rewrite_test', $$ + ^ +<sql-statement> +-- cleanup +DROP FUNCTION check_ddl_rewrite(regclass, text); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386 + -- cleanup + ^ +<sql-statement> +DROP TABLE rewrite_test; +</sql-statement> +<sql-statement> +-- +-- lock levels +-- +drop type lockmodes; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373 + -- + ^ +<sql-statement> +create type lockmodes as enum ( + 'SIReadLock' +,'AccessShareLock' +,'RowShareLock' +,'RowExclusiveLock' +,'ShareUpdateExclusiveLock' +,'ShareLock' +,'ShareRowExclusiveLock' +,'ExclusiveLock' +,'AccessExclusiveLock' +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 315 + create type lockmodes as enum ( + ^ +<sql-statement> +drop view my_locks; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'my_locks' + drop view my_locks; + ^ +<sql-statement> +create or replace view my_locks as +select case when c.relname like 'pg_toast%' then 'pg_toast' else c.relname end, max(mode::lockmodes) as max_lockmode +from pg_locks l join pg_class c on l.relation = c.oid +where virtualtransaction = ( + select virtualtransaction + from pg_locks + where transactionid = pg_current_xact_id()::xid) +and locktype = 'relation' +and relnamespace != (select oid from pg_namespace where nspname = 'pg_catalog') +and c.relname != 'my_locks' +group by c.relname; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create or replace view my_locks as + ^ +<sql-statement> +create table alterlock (f1 int primary key, f2 text); +</sql-statement> +<sql-statement> +insert into alterlock values (1, 'foo'); +</sql-statement> +<sql-statement> +create table alterlock2 (f3 int primary key, f1 int); +</sql-statement> +<sql-statement> +insert into alterlock2 values (1, 1); +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock alter column f2 set statistics 150; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock alter column f2 set statistics 150; + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock cluster on alterlock_pkey; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock cluster on alterlock_pkey; + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +commit; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock set without cluster; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock set without cluster; + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +commit; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock set (fillfactor = 100); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock set (fillfactor = 100); + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +commit; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock reset (fillfactor); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock reset (fillfactor); + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +commit; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock set (toast.autovacuum_enabled = off); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock set (toast.autovacuum_enabled = off); + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +commit; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock set (autovacuum_enabled = off); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock set (autovacuum_enabled = off); + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +commit; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock alter column f2 set (n_distinct = 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock alter column f2 set (n_distinct = 1); + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- test that mixing options with different lock levels works as expected +begin; +</sql-statement> +<sql-statement> +alter table alterlock set (autovacuum_enabled = off, fillfactor = 80); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock set (autovacuum_enabled = off, fillfactor = 80); + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +commit; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock alter column f2 set storage extended; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock alter column f2 set storage extended; + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock alter column f2 set default 'x'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock alter column f2 set default 'x'; + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +create trigger ttdummy + before delete or update on alterlock + for each row + execute procedure + ttdummy (1, 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 283 + create trigger ttdummy + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +alter table alterlock2 add foreign key (f1) references alterlock (f1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock2 add foreign key (f1) references alterlock (f1); + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock2 +add constraint alterlock2nv foreign key (f1) references alterlock (f1) NOT VALID; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock2 + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +commit; +</sql-statement> +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter table alterlock2 validate constraint alterlock2nv; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alterlock2 validate constraint alterlock2nv; + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +create or replace view my_locks as +select case when c.relname like 'pg_toast%' then 'pg_toast' else c.relname end, max(mode::lockmodes) as max_lockmode +from pg_locks l join pg_class c on l.relation = c.oid +where virtualtransaction = ( + select virtualtransaction + from pg_locks + where transactionid = pg_current_xact_id()::xid) +and locktype = 'relation' +and relnamespace != (select oid from pg_namespace where nspname = 'pg_catalog') +and c.relname = 'my_locks' +group by c.relname; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create or replace view my_locks as + ^ +<sql-statement> +-- raise exception +alter table my_locks set (autovacuum_enabled = false); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- raise exception + ^ +<sql-statement> +alter view my_locks set (autovacuum_enabled = false); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter view my_locks set (autovacuum_enabled = false); + ^ +<sql-statement> +alter table my_locks reset (autovacuum_enabled); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table my_locks reset (autovacuum_enabled); + ^ +<sql-statement> +alter view my_locks reset (autovacuum_enabled); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter view my_locks reset (autovacuum_enabled); + ^ +<sql-statement> +begin; +</sql-statement> +<sql-statement> +alter view my_locks set (security_barrier=off); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter view my_locks set (security_barrier=off); + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +alter view my_locks reset (security_barrier); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter view my_locks reset (security_barrier); + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- this test intentionally applies the ALTER TABLE command against a view, but +-- uses a view option so we expect this to succeed. This form of SQL is +-- accepted for historical reasons, as shown in the docs for ALTER VIEW +begin; +</sql-statement> +<sql-statement> +alter table my_locks set (security_barrier=off); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table my_locks set (security_barrier=off); + ^ +<sql-statement> +select * from my_locks 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.my_locks + +<sql-statement> +alter table my_locks reset (security_barrier); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table my_locks reset (security_barrier); + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- cleanup +drop table alterlock2; +</sql-statement> +<sql-statement> +drop table alterlock; +</sql-statement> +<sql-statement> +drop view my_locks; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'my_locks' + drop view my_locks; + ^ +<sql-statement> +drop type lockmodes; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373 + drop type lockmodes; + ^ +<sql-statement> +-- +-- alter function +-- +create function test_strict(text) returns text as + 'select coalesce($1, ''got passed a null'');' + language sql returns null on null input; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + -- + ^ +<sql-statement> +select test_strict(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 test_strict(NULL); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select test_strict(NULL); + ^ + -stdin-:<main>:1:8: Error: No such proc: test_strict + select test_strict(NULL); + ^ +<sql-statement> +alter function test_strict(text) called on null input; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 262 + alter function test_strict(text) called on null input; + ^ +<sql-statement> +select test_strict(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 test_strict(NULL); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select test_strict(NULL); + ^ + -stdin-:<main>:1:8: Error: No such proc: test_strict + select test_strict(NULL); + ^ +<sql-statement> +create function non_strict(text) returns text as + 'select coalesce($1, ''got passed a null'');' + language sql called on null input; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function non_strict(text) returns text as + ^ +<sql-statement> +select non_strict(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 non_strict(NULL); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select non_strict(NULL); + ^ + -stdin-:<main>:1:8: Error: No such proc: non_strict + select non_strict(NULL); + ^ +<sql-statement> +alter function non_strict(text) returns null on null input; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 262 + alter function non_strict(text) returns null on null input; + ^ +<sql-statement> +select non_strict(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 non_strict(NULL); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select non_strict(NULL); + ^ + -stdin-:<main>:1:8: Error: No such proc: non_strict + select non_strict(NULL); + ^ +<sql-statement> +-- +-- alter object set schema +-- +create schema alter1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 292 + -- + ^ +<sql-statement> +create schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 292 + create schema alter2; + ^ +<sql-statement> +create table alter1.t1(f1 serial primary key, f2 int check (f2 > 0)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: Unknown cluster: alter1 + create table alter1.t1(f1 serial primary key, f2 int check (f2 > 0)); + ^ +<sql-statement> +create view alter1.v1 as select * from alter1.t1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: schemaname is not supported + create view alter1.v1 as select * from alter1.t1; + ^ +<sql-statement> +create function alter1.plus1(int) returns int as 'select $1+1' language sql; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function alter1.plus1(int) returns int as 'select $1+1' language sql; + ^ +<sql-statement> +create domain alter1.posint integer check (value > 0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 272 + create domain alter1.posint integer check (value > 0); + ^ +<sql-statement> +create type alter1.ctype as (f1 int, f2 text); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + create type alter1.ctype as (f1 int, f2 text); + ^ +<sql-statement> +create function alter1.same(alter1.ctype, alter1.ctype) returns boolean language sql +as 'select $1.f1 is not distinct from $2.f1 and $1.f2 is not distinct from $2.f2'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function alter1.same(alter1.ctype, alter1.ctype) returns boolean language sql + ^ +<sql-statement> +create operator alter1.=(procedure = alter1.same, leftarg = alter1.ctype, rightarg = alter1.ctype); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255 + create operator alter1.=(procedure = alter1.same, leftarg = alter1.ctype, rightarg = alter1.ctype); + ^ +<sql-statement> +create operator class alter1.ctype_hash_ops default for type alter1.ctype using hash as + operator 1 alter1.=(alter1.ctype, alter1.ctype); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 298 + create operator class alter1.ctype_hash_ops default for type alter1.ctype using hash as + ^ +<sql-statement> +create conversion alter1.latin1_to_utf8 for 'latin1' to 'utf8' from iso8859_1_to_utf8; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 296 + create conversion alter1.latin1_to_utf8 for 'latin1' to 'utf8' from iso8859_1_to_utf8; + ^ +<sql-statement> +create text search parser alter1.prs(start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255 + create text search parser alter1.prs(start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype); + ^ +<sql-statement> +create text search configuration alter1.cfg(parser = alter1.prs); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255 + create text search configuration alter1.cfg(parser = alter1.prs); + ^ +<sql-statement> +create text search template alter1.tmpl(init = dsimple_init, lexize = dsimple_lexize); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255 + create text search template alter1.tmpl(init = dsimple_init, lexize = dsimple_lexize); + ^ +<sql-statement> +create text search dictionary alter1.dict(template = alter1.tmpl); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255 + create text search dictionary alter1.dict(template = alter1.tmpl); + ^ +<sql-statement> +insert into alter1.t1(f2) values(11); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: Unknown cluster: alter1 + insert into alter1.t1(f2) values(11); + ^ +<sql-statement> +insert into alter1.t1(f2) values(12); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: Unknown cluster: alter1 + insert into alter1.t1(f2) values(12); + ^ +<sql-statement> +alter table alter1.t1 set schema alter1; -- no-op, same schema +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter table alter1.t1 set schema alter1; -- no-op, same schema + ^ +<sql-statement> +alter table alter1.t1 set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter table alter1.t1 set schema alter2; + ^ +<sql-statement> +alter table alter1.v1 set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter table alter1.v1 set schema alter2; + ^ +<sql-statement> +alter function alter1.plus1(int) set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter function alter1.plus1(int) set schema alter2; + ^ +<sql-statement> +alter domain alter1.posint set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter domain alter1.posint set schema alter2; + ^ +<sql-statement> +alter operator class alter1.ctype_hash_ops using hash set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter operator class alter1.ctype_hash_ops using hash set schema alter2; + ^ +<sql-statement> +alter operator family alter1.ctype_hash_ops using hash set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter operator family alter1.ctype_hash_ops using hash set schema alter2; + ^ +<sql-statement> +alter operator alter1.=(alter1.ctype, alter1.ctype) set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter operator alter1.=(alter1.ctype, alter1.ctype) set schema alter2; + ^ +<sql-statement> +alter function alter1.same(alter1.ctype, alter1.ctype) set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter function alter1.same(alter1.ctype, alter1.ctype) set schema alter2; + ^ +<sql-statement> +alter type alter1.ctype set schema alter1; -- no-op, same schema +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter type alter1.ctype set schema alter1; -- no-op, same schema + ^ +<sql-statement> +alter type alter1.ctype set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter type alter1.ctype set schema alter2; + ^ +<sql-statement> +alter conversion alter1.latin1_to_utf8 set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter conversion alter1.latin1_to_utf8 set schema alter2; + ^ +<sql-statement> +alter text search parser alter1.prs set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter text search parser alter1.prs set schema alter2; + ^ +<sql-statement> +alter text search configuration alter1.cfg set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter text search configuration alter1.cfg set schema alter2; + ^ +<sql-statement> +alter text search template alter1.tmpl set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter text search template alter1.tmpl set schema alter2; + ^ +<sql-statement> +alter text search dictionary alter1.dict set schema alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + alter text search dictionary alter1.dict set schema alter2; + ^ +<sql-statement> +-- this should succeed because nothing is left in alter1 +drop schema alter1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 228 + -- this should succeed because nothing is left in alter1 + ^ +<sql-statement> +insert into alter2.t1(f2) values(13); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: Unknown cluster: alter2 + insert into alter2.t1(f2) values(13); + ^ +<sql-statement> +insert into alter2.t1(f2) values(14); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: Unknown cluster: alter2 + insert into alter2.t1(f2) values(14); + ^ +<sql-statement> +select * from alter2.t1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:15: Error: Unknown cluster: alter2 + select * from alter2.t1; + ^ +<sql-statement> +select * from alter2.v1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:15: Error: Unknown cluster: alter2 + select * from alter2.v1; + ^ +<sql-statement> +select alter2.plus1(41); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:8: Error: FuncCall: expected pg_catalog, but got: alter2 + select alter2.plus1(41); + ^ +<sql-statement> +-- clean up +drop schema alter2 cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 228 + -- clean up + ^ +<sql-statement> +-- +-- composite types +-- +CREATE TYPE test_type AS (a int); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + -- + ^ +<sql-statement> +\d test_type +</sql-statement> +Metacommand \d test_type is not supported +<sql-statement> +ALTER TYPE nosuchtype ADD ATTRIBUTE b text; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE nosuchtype ADD ATTRIBUTE b text; -- fails + ^ +<sql-statement> +ALTER TYPE test_type ADD ATTRIBUTE b text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type ADD ATTRIBUTE b text; + ^ +<sql-statement> +\d test_type +</sql-statement> +Metacommand \d test_type is not supported +<sql-statement> +ALTER TYPE test_type ADD ATTRIBUTE b text; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type ADD ATTRIBUTE b text; -- fails + ^ +<sql-statement> +ALTER TYPE test_type ALTER ATTRIBUTE b SET DATA TYPE varchar; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type ALTER ATTRIBUTE b SET DATA TYPE varchar; + ^ +<sql-statement> +\d test_type +</sql-statement> +Metacommand \d test_type is not supported +<sql-statement> +ALTER TYPE test_type ALTER ATTRIBUTE b SET DATA TYPE integer; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type ALTER ATTRIBUTE b SET DATA TYPE integer; + ^ +<sql-statement> +\d test_type +</sql-statement> +Metacommand \d test_type is not supported +<sql-statement> +ALTER TYPE test_type DROP ATTRIBUTE b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type DROP ATTRIBUTE b; + ^ +<sql-statement> +\d test_type +</sql-statement> +Metacommand \d test_type is not supported +<sql-statement> +ALTER TYPE test_type DROP ATTRIBUTE c; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type DROP ATTRIBUTE c; -- fails + ^ +<sql-statement> +ALTER TYPE test_type DROP ATTRIBUTE IF EXISTS c; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type DROP ATTRIBUTE IF EXISTS c; + ^ +<sql-statement> +ALTER TYPE test_type DROP ATTRIBUTE a, ADD ATTRIBUTE d boolean; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type DROP ATTRIBUTE a, ADD ATTRIBUTE d boolean; + ^ +<sql-statement> +\d test_type +</sql-statement> +Metacommand \d test_type is not supported +<sql-statement> +ALTER TYPE test_type RENAME ATTRIBUTE a TO aa; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TYPE test_type RENAME ATTRIBUTE a TO aa; + ^ +<sql-statement> +ALTER TYPE test_type RENAME ATTRIBUTE d TO dd; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TYPE test_type RENAME ATTRIBUTE d TO dd; + ^ +<sql-statement> +\d test_type +</sql-statement> +Metacommand \d test_type is not supported +<sql-statement> +DROP TYPE test_type; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373 + DROP TYPE test_type; + ^ +<sql-statement> +CREATE TYPE test_type1 AS (a int, b text); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + CREATE TYPE test_type1 AS (a int, b text); + ^ +<sql-statement> +CREATE TABLE test_tbl1 (x int, y test_type1); +</sql-statement> +<sql-statement> +ALTER TYPE test_type1 ALTER ATTRIBUTE b TYPE varchar; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type1 ALTER ATTRIBUTE b TYPE varchar; -- fails + ^ +<sql-statement> +CREATE TYPE test_type2 AS (a int, b text); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + CREATE TYPE test_type2 AS (a int, b text); + ^ +<sql-statement> +CREATE TABLE test_tbl2 OF test_type2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: typed tables not supported + CREATE TABLE test_tbl2 OF test_type2; + ^ +<sql-statement> +CREATE TABLE test_tbl2_subclass () INHERITS (test_tbl2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE test_tbl2_subclass () INHERITS (test_tbl2); + ^ +<sql-statement> +\d test_type2 +</sql-statement> +Metacommand \d test_type2 is not supported +<sql-statement> +\d test_tbl2 +</sql-statement> +Metacommand \d test_tbl2 is not supported +<sql-statement> +ALTER TYPE test_type2 ADD ATTRIBUTE c text; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type2 ADD ATTRIBUTE c text; -- fails + ^ +<sql-statement> +ALTER TYPE test_type2 ADD ATTRIBUTE c text CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type2 ADD ATTRIBUTE c text CASCADE; + ^ +<sql-statement> +\d test_type2 +</sql-statement> +Metacommand \d test_type2 is not supported +<sql-statement> +\d test_tbl2 +</sql-statement> +Metacommand \d test_tbl2 is not supported +<sql-statement> +ALTER TYPE test_type2 ALTER ATTRIBUTE b TYPE varchar; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type2 ALTER ATTRIBUTE b TYPE varchar; -- fails + ^ +<sql-statement> +ALTER TYPE test_type2 ALTER ATTRIBUTE b TYPE varchar CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type2 ALTER ATTRIBUTE b TYPE varchar CASCADE; + ^ +<sql-statement> +\d test_type2 +</sql-statement> +Metacommand \d test_type2 is not supported +<sql-statement> +\d test_tbl2 +</sql-statement> +Metacommand \d test_tbl2 is not supported +<sql-statement> +ALTER TYPE test_type2 DROP ATTRIBUTE b; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type2 DROP ATTRIBUTE b; -- fails + ^ +<sql-statement> +ALTER TYPE test_type2 DROP ATTRIBUTE b CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type2 DROP ATTRIBUTE b CASCADE; + ^ +<sql-statement> +\d test_type2 +</sql-statement> +Metacommand \d test_type2 is not supported +<sql-statement> +\d test_tbl2 +</sql-statement> +Metacommand \d test_tbl2 is not supported +<sql-statement> +ALTER TYPE test_type2 RENAME ATTRIBUTE a TO aa; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TYPE test_type2 RENAME ATTRIBUTE a TO aa; -- fails + ^ +<sql-statement> +ALTER TYPE test_type2 RENAME ATTRIBUTE a TO aa CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TYPE test_type2 RENAME ATTRIBUTE a TO aa CASCADE; + ^ +<sql-statement> +\d test_type2 +</sql-statement> +Metacommand \d test_type2 is not supported +<sql-statement> +\d test_tbl2 +</sql-statement> +Metacommand \d test_tbl2 is not supported +<sql-statement> +\d test_tbl2_subclass +</sql-statement> +Metacommand \d test_tbl2_subclass is not supported +<sql-statement> +DROP TABLE test_tbl2_subclass; +</sql-statement> +<sql-statement> +CREATE TYPE test_typex AS (a int, b text); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + CREATE TYPE test_typex AS (a int, b text); + ^ +<sql-statement> +CREATE TABLE test_tblx (x int, y test_typex check ((y).a > 0)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + CREATE TABLE test_tblx (x int, y test_typex check ((y).a > 0)); + ^ +<sql-statement> +ALTER TYPE test_typex DROP ATTRIBUTE a; -- fails +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_typex DROP ATTRIBUTE a; -- fails + ^ +<sql-statement> +ALTER TYPE test_typex DROP ATTRIBUTE a CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_typex DROP ATTRIBUTE a CASCADE; + ^ +<sql-statement> +\d test_tblx +</sql-statement> +Metacommand \d test_tblx is not supported +<sql-statement> +DROP TABLE test_tblx; +</sql-statement> +<sql-statement> +DROP TYPE test_typex; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373 + DROP TYPE test_typex; + ^ +<sql-statement> +-- This test isn't that interesting on its own, but the purpose is to leave +-- behind a table to test pg_upgrade with. The table has a composite type +-- column in it, and the composite type has a dropped attribute. +CREATE TYPE test_type3 AS (a int); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + -- This test isn't that interesting on its own, but the purpose is to leave + ^ +<sql-statement> +CREATE TABLE test_tbl3 (c) AS SELECT '(1)'::test_type3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + CREATE TABLE test_tbl3 (c) AS SELECT '(1)'::test_type3; + ^ +<sql-statement> +ALTER TYPE test_type3 DROP ATTRIBUTE a, ADD ATTRIBUTE b int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE test_type3 DROP ATTRIBUTE a, ADD ATTRIBUTE b int; + ^ +<sql-statement> +CREATE TYPE test_type_empty AS (); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + CREATE TYPE test_type_empty AS (); + ^ +<sql-statement> +DROP TYPE test_type_empty; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373 + DROP TYPE test_type_empty; + ^ +<sql-statement> +-- +-- typed tables: OF / NOT OF +-- +CREATE TYPE tt_t0 AS (z inet, x int, y numeric(8,2)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + -- + ^ +<sql-statement> +ALTER TYPE tt_t0 DROP ATTRIBUTE z; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TYPE tt_t0 DROP ATTRIBUTE z; + ^ +<sql-statement> +CREATE TABLE tt0 (x int NOT NULL, y numeric(8,2)); -- OK +</sql-statement> +<sql-statement> +CREATE TABLE tt1 (x int, y bigint); -- wrong base type +</sql-statement> +<sql-statement> +CREATE TABLE tt2 (x int, y numeric(9,2)); -- wrong typmod +</sql-statement> +<sql-statement> +CREATE TABLE tt3 (y numeric(8,2), x int); -- wrong column order +</sql-statement> +<sql-statement> +CREATE TABLE tt4 (x int); -- too few columns +</sql-statement> +<sql-statement> +CREATE TABLE tt5 (x int, y numeric(8,2), z int); -- too few columns +</sql-statement> +<sql-statement> +CREATE TABLE tt6 () INHERITS (tt0); -- can't have a parent +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE tt6 () INHERITS (tt0); -- can't have a parent + ^ +<sql-statement> +CREATE TABLE tt7 (x int, q text, y numeric(8,2)); +</sql-statement> +<sql-statement> +ALTER TABLE tt7 DROP q; -- OK +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt7 DROP q; -- OK + ^ +<sql-statement> +ALTER TABLE tt0 OF tt_t0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt0 OF tt_t0; + ^ +<sql-statement> +ALTER TABLE tt1 OF tt_t0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt1 OF tt_t0; + ^ +<sql-statement> +ALTER TABLE tt2 OF tt_t0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt2 OF tt_t0; + ^ +<sql-statement> +ALTER TABLE tt3 OF tt_t0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt3 OF tt_t0; + ^ +<sql-statement> +ALTER TABLE tt4 OF tt_t0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt4 OF tt_t0; + ^ +<sql-statement> +ALTER TABLE tt5 OF tt_t0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt5 OF tt_t0; + ^ +<sql-statement> +ALTER TABLE tt6 OF tt_t0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt6 OF tt_t0; + ^ +<sql-statement> +ALTER TABLE tt7 OF tt_t0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt7 OF tt_t0; + ^ +<sql-statement> +CREATE TYPE tt_t1 AS (x int, y numeric(8,2)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + CREATE TYPE tt_t1 AS (x int, y numeric(8,2)); + ^ +<sql-statement> +ALTER TABLE tt7 OF tt_t1; -- reassign an already-typed table +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt7 OF tt_t1; -- reassign an already-typed table + ^ +<sql-statement> +ALTER TABLE tt7 NOT OF; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt7 NOT OF; + ^ +<sql-statement> +\d tt7 +</sql-statement> +Metacommand \d tt7 is not supported +<sql-statement> +-- make sure we can drop a constraint on the parent but it remains on the child +CREATE TABLE test_drop_constr_parent (c text CHECK (c IS NOT NULL)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- make sure we can drop a constraint on the parent but it remains on the child + ^ +<sql-statement> +CREATE TABLE test_drop_constr_child () INHERITS (test_drop_constr_parent); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE test_drop_constr_child () INHERITS (test_drop_constr_parent); + ^ +<sql-statement> +ALTER TABLE ONLY test_drop_constr_parent DROP CONSTRAINT "test_drop_constr_parent_c_check"; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY test_drop_constr_parent DROP CONSTRAINT "test_drop_constr_parent_c_check"; + ^ +<sql-statement> +-- should fail +INSERT INTO test_drop_constr_child (c) 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.test_drop_constr_child + +<sql-statement> +DROP TABLE test_drop_constr_parent CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + DROP TABLE test_drop_constr_parent CASCADE; + ^ +<sql-statement> +-- +-- IF EXISTS test +-- +ALTER TABLE IF EXISTS tt8 ADD COLUMN f int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 ADD CONSTRAINT xxx PRIMARY KEY(f); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE IF EXISTS tt8 ADD CONSTRAINT xxx PRIMARY KEY(f); + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 ADD CHECK (f BETWEEN 0 AND 10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE IF EXISTS tt8 ADD CHECK (f BETWEEN 0 AND 10); + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 ALTER COLUMN f SET DEFAULT 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE IF EXISTS tt8 ALTER COLUMN f SET DEFAULT 0; + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 RENAME COLUMN f TO f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE IF EXISTS tt8 RENAME COLUMN f TO f1; + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 SET SCHEMA alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + ALTER TABLE IF EXISTS tt8 SET SCHEMA alter2; + ^ +<sql-statement> +CREATE TABLE tt8(a int); +</sql-statement> +<sql-statement> +CREATE SCHEMA alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 292 + CREATE SCHEMA alter2; + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 ADD COLUMN f int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE IF EXISTS tt8 ADD COLUMN f int; + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 ADD CONSTRAINT xxx PRIMARY KEY(f); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE IF EXISTS tt8 ADD CONSTRAINT xxx PRIMARY KEY(f); + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 ADD CHECK (f BETWEEN 0 AND 10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE IF EXISTS tt8 ADD CHECK (f BETWEEN 0 AND 10); + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 ALTER COLUMN f SET DEFAULT 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE IF EXISTS tt8 ALTER COLUMN f SET DEFAULT 0; + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 RENAME COLUMN f TO f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE IF EXISTS tt8 RENAME COLUMN f TO f1; + ^ +<sql-statement> +ALTER TABLE IF EXISTS tt8 SET SCHEMA alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + ALTER TABLE IF EXISTS tt8 SET SCHEMA alter2; + ^ +<sql-statement> +\d alter2.tt8 +</sql-statement> +Metacommand \d alter2.tt8 is not supported +<sql-statement> +DROP TABLE alter2.tt8; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: Unknown cluster: alter2 + DROP TABLE alter2.tt8; + ^ +<sql-statement> +DROP SCHEMA alter2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 228 + DROP SCHEMA alter2; + ^ +<sql-statement> +-- +-- Check conflicts between index and CHECK constraint names +-- +CREATE TABLE tt9(c integer); +</sql-statement> +<sql-statement> +ALTER TABLE tt9 ADD CHECK(c > 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD CHECK(c > 1); + ^ +<sql-statement> +ALTER TABLE tt9 ADD CHECK(c > 2); -- picks nonconflicting name +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD CHECK(c > 2); -- picks nonconflicting name + ^ +<sql-statement> +ALTER TABLE tt9 ADD CONSTRAINT foo CHECK(c > 3); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD CONSTRAINT foo CHECK(c > 3); + ^ +<sql-statement> +ALTER TABLE tt9 ADD CONSTRAINT foo CHECK(c > 4); -- fail, dup name +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD CONSTRAINT foo CHECK(c > 4); -- fail, dup name + ^ +<sql-statement> +ALTER TABLE tt9 ADD UNIQUE(c); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD UNIQUE(c); + ^ +<sql-statement> +ALTER TABLE tt9 ADD UNIQUE(c); -- picks nonconflicting name +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD UNIQUE(c); -- picks nonconflicting name + ^ +<sql-statement> +ALTER TABLE tt9 ADD CONSTRAINT tt9_c_key UNIQUE(c); -- fail, dup name +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD CONSTRAINT tt9_c_key UNIQUE(c); -- fail, dup name + ^ +<sql-statement> +ALTER TABLE tt9 ADD CONSTRAINT foo UNIQUE(c); -- fail, dup name +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD CONSTRAINT foo UNIQUE(c); -- fail, dup name + ^ +<sql-statement> +ALTER TABLE tt9 ADD CONSTRAINT tt9_c_key CHECK(c > 5); -- fail, dup name +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD CONSTRAINT tt9_c_key CHECK(c > 5); -- fail, dup name + ^ +<sql-statement> +ALTER TABLE tt9 ADD CONSTRAINT tt9_c_key2 CHECK(c > 6); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD CONSTRAINT tt9_c_key2 CHECK(c > 6); + ^ +<sql-statement> +ALTER TABLE tt9 ADD UNIQUE(c); -- picks nonconflicting name +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE tt9 ADD UNIQUE(c); -- picks nonconflicting name + ^ +<sql-statement> +\d tt9 +</sql-statement> +Metacommand \d tt9 is not supported +<sql-statement> +DROP TABLE tt9; +</sql-statement> +<sql-statement> +-- Check that comments on constraints and indexes are not lost at ALTER TABLE. +CREATE TABLE comment_test ( + id int, + positive_col int CHECK (positive_col > 0), + indexed_col int, + CONSTRAINT comment_test_pk PRIMARY KEY (id)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- Check that comments on constraints and indexes are not lost at ALTER TABLE. + ^ +<sql-statement> +CREATE INDEX comment_test_index ON comment_test(indexed_col); +</sql-statement> +<sql-statement> +COMMENT ON COLUMN comment_test.id IS 'Column ''id'' on comment_test'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + COMMENT ON COLUMN comment_test.id IS 'Column ''id'' on comment_test'; + ^ +<sql-statement> +COMMENT ON INDEX comment_test_index IS 'Simple index on comment_test'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + COMMENT ON INDEX comment_test_index IS 'Simple index on comment_test'; + ^ +<sql-statement> +COMMENT ON CONSTRAINT comment_test_positive_col_check ON comment_test IS 'CHECK constraint on comment_test.positive_col'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + COMMENT ON CONSTRAINT comment_test_positive_col_check ON comment_test IS 'CHECK constraint on comment_test.positive_col'; + ^ +<sql-statement> +COMMENT ON CONSTRAINT comment_test_pk ON comment_test IS 'PRIMARY KEY constraint of comment_test'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + COMMENT ON CONSTRAINT comment_test_pk ON comment_test IS 'PRIMARY KEY constraint of comment_test'; + ^ +<sql-statement> +COMMENT ON INDEX comment_test_pk IS 'Index backing the PRIMARY KEY of comment_test'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + COMMENT ON INDEX comment_test_pk IS 'Index backing the PRIMARY KEY of comment_test'; + ^ +<sql-statement> +SELECT col_description('comment_test'::regclass, 1) as comment; +</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 col_description('comment_test'::regclass, 1) as comment; + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + SELECT col_description('comment_test'::regclass, 1) as comment; + ^ + -stdin-:<main>:1:8: Error: No such proc: col_description + SELECT col_description('comment_test'::regclass, 1) as comment; + ^ +<sql-statement> +SELECT indexrelid::regclass::text as index, obj_description(indexrelid, 'pg_class') as comment FROM pg_index where indrelid = 'comment_test'::regclass 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.pg_index + +<sql-statement> +SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment FROM pg_constraint where conrelid = 'comment_test'::regclass 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.pg_constraint + +<sql-statement> +-- Change the datatype of all the columns. ALTER TABLE is optimized to not +-- rebuild an index if the new data type is binary compatible with the old +-- one. Check do a dummy ALTER TABLE that doesn't change the datatype +-- first, to test that no-op codepath, and another one that does. +ALTER TABLE comment_test ALTER COLUMN indexed_col SET DATA TYPE int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Change the datatype of all the columns. ALTER TABLE is optimized to not + ^ +<sql-statement> +ALTER TABLE comment_test ALTER COLUMN indexed_col SET DATA TYPE text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE comment_test ALTER COLUMN indexed_col SET DATA TYPE text; + ^ +<sql-statement> +ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE int; + ^ +<sql-statement> +ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE text; + ^ +<sql-statement> +ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE int; + ^ +<sql-statement> +ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE comment_test ALTER COLUMN positive_col SET DATA TYPE bigint; + ^ +<sql-statement> +-- Check that the comments are intact. +SELECT col_description('comment_test'::regclass, 1) as comment; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + -- Check that the comments are intact. + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + SELECT col_description('comment_test'::regclass, 1) as comment; + ^ + -stdin-:<main>:2:8: Error: No such proc: col_description + SELECT col_description('comment_test'::regclass, 1) as comment; + ^ +<sql-statement> +SELECT indexrelid::regclass::text as index, obj_description(indexrelid, 'pg_class') as comment FROM pg_index where indrelid = 'comment_test'::regclass 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.pg_index + +<sql-statement> +SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment FROM pg_constraint where conrelid = 'comment_test'::regclass 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.pg_constraint + +<sql-statement> +-- Check compatibility for foreign keys and comments. This is done +-- separately as rebuilding the column type of the parent leads +-- to an error and would reduce the test scope. +CREATE TABLE comment_test_child ( + id text CONSTRAINT comment_test_child_fk REFERENCES comment_test); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- Check compatibility for foreign keys and comments. This is done + ^ +<sql-statement> +CREATE INDEX comment_test_child_fk ON comment_test_child(id); +</sql-statement> +<sql-statement> +COMMENT ON COLUMN comment_test_child.id IS 'Column ''id'' on comment_test_child'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + COMMENT ON COLUMN comment_test_child.id IS 'Column ''id'' on comment_test_child'; + ^ +<sql-statement> +COMMENT ON INDEX comment_test_child_fk IS 'Index backing the FOREIGN KEY of comment_test_child'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + COMMENT ON INDEX comment_test_child_fk IS 'Index backing the FOREIGN KEY of comment_test_child'; + ^ +<sql-statement> +COMMENT ON CONSTRAINT comment_test_child_fk ON comment_test_child IS 'FOREIGN KEY constraint of comment_test_child'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 258 + COMMENT ON CONSTRAINT comment_test_child_fk ON comment_test_child IS 'FOREIGN KEY constraint of comment_test_child'; + ^ +<sql-statement> +-- Change column type of parent +ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Change column type of parent + ^ +<sql-statement> +ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE int USING id::integer; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE comment_test ALTER COLUMN id SET DATA TYPE int USING id::integer; + ^ +<sql-statement> +-- Comments should be intact +SELECT col_description('comment_test_child'::regclass, 1) as comment; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + -- Comments should be intact + ^ + -stdin-:<main>:2:8: Error: At function: PgCall + SELECT col_description('comment_test_child'::regclass, 1) as comment; + ^ + -stdin-:<main>:2:8: Error: No such proc: col_description + SELECT col_description('comment_test_child'::regclass, 1) as comment; + ^ +<sql-statement> +SELECT indexrelid::regclass::text as index, obj_description(indexrelid, 'pg_class') as comment FROM pg_index where indrelid = 'comment_test_child'::regclass 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.pg_index + +<sql-statement> +SELECT conname as constraint, obj_description(oid, 'pg_constraint') as comment FROM pg_constraint where conrelid = 'comment_test_child'::regclass 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.pg_constraint + +<sql-statement> +-- Check that we map relation oids to filenodes and back correctly. Only +-- display bad mappings so the test output doesn't change all the time. A +-- filenode function call can return NULL for a relation dropped concurrently +-- with the call's surrounding query, so ignore a NULL mapped_oid for +-- relations that no longer exist after all calls finish. +CREATE TEMP TABLE filenode_mapping AS +SELECT + oid, mapped_oid, reltablespace, relfilenode, relname +FROM pg_class, + pg_filenode_relation(reltablespace, pg_relation_filenode(oid)) AS mapped_oid +WHERE relkind IN ('r', 'i', 'S', 't', 'm') AND mapped_oid IS DISTINCT FROM oid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + -- Check that we map relation oids to filenodes and back correctly. Only + ^ +<sql-statement> +SELECT m.* FROM filenode_mapping m LEFT JOIN pg_class c ON c.oid = m.oid +WHERE c.oid IS NOT NULL OR m.mapped_oid IS NOT 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.filenode_mapping + +<sql-statement> +-- Checks on creating and manipulation of user defined relations in +-- pg_catalog. +SHOW allow_system_table_mods; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: unrecognized configuration parameter "allow_system_table_mods" + -- Checks on creating and manipulation of user defined relations in + ^ +<sql-statement> +-- disallowed because of search_path issues with pg_dump +CREATE TABLE pg_catalog.new_system_table(); +</sql-statement> +<sql-statement> +-- instead create in public first, move to catalog +CREATE TABLE new_system_table(id serial primary key, othercol text); +</sql-statement> +<sql-statement> +ALTER TABLE new_system_table SET SCHEMA pg_catalog; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + ALTER TABLE new_system_table SET SCHEMA pg_catalog; + ^ +<sql-statement> +ALTER TABLE new_system_table SET SCHEMA public; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + ALTER TABLE new_system_table SET SCHEMA public; + ^ +<sql-statement> +ALTER TABLE new_system_table SET SCHEMA pg_catalog; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + ALTER TABLE new_system_table SET SCHEMA pg_catalog; + ^ +<sql-statement> +-- will be ignored -- already there: +ALTER TABLE new_system_table SET SCHEMA pg_catalog; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 308 + -- will be ignored -- already there: + ^ +<sql-statement> +ALTER TABLE new_system_table RENAME TO old_system_table; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + ALTER TABLE new_system_table RENAME TO old_system_table; + ^ +<sql-statement> +CREATE INDEX old_system_table__othercol ON old_system_table (othercol); +</sql-statement> +<sql-statement> +INSERT INTO old_system_table(othercol) VALUES ('somedata'), ('otherdata'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.old_system_table + +<sql-statement> +UPDATE old_system_table SET id = -id; +</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', 'mutationid'. + +<sql-statement> +DELETE FROM old_system_table WHERE othercol = 'somedata'; +</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', 'mutationid'. + +<sql-statement> +TRUNCATE old_system_table; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE old_system_table; + ^ +<sql-statement> +ALTER TABLE old_system_table DROP CONSTRAINT new_system_table_pkey; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE old_system_table DROP CONSTRAINT new_system_table_pkey; + ^ +<sql-statement> +ALTER TABLE old_system_table DROP COLUMN othercol; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE old_system_table DROP COLUMN othercol; + ^ +<sql-statement> +DROP TABLE old_system_table; +</sql-statement> +<sql-statement> +-- set logged +CREATE UNLOGGED TABLE unlogged1(f1 SERIAL PRIMARY KEY, f2 TEXT); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: UNLOGGED tables not supported + -- set logged + ^ +<sql-statement> +-- check relpersistence of an unlogged table +SELECT relname, relkind, relpersistence FROM pg_class WHERE relname ~ '^unlogged1' +UNION ALL +SELECT 'toast table', t.relkind, t.relpersistence FROM pg_class r JOIN pg_class t ON t.oid = r.reltoastrelid WHERE r.relname ~ '^unlogged1' +UNION ALL +SELECT 'toast index', ri.relkind, ri.relpersistence FROM pg_class r join pg_class t ON t.oid = r.reltoastrelid JOIN pg_index i ON i.indrelid = t.oid JOIN pg_class ri ON ri.oid = i.indexrelid WHERE r.relname ~ '^unlogged1' +ORDER BY relname; +</sql-statement> +-stdin-:<main>: 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_index + +<sql-statement> +CREATE UNLOGGED TABLE unlogged2(f1 SERIAL PRIMARY KEY, f2 INTEGER REFERENCES unlogged1); -- foreign key +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: UNLOGGED tables not supported + CREATE UNLOGGED TABLE unlogged2(f1 SERIAL PRIMARY KEY, f2 INTEGER REFERENCES unlogged1); -- foreign key + ^ +<sql-statement> +CREATE UNLOGGED TABLE unlogged3(f1 SERIAL PRIMARY KEY, f2 INTEGER REFERENCES unlogged3); -- self-referencing foreign key +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: UNLOGGED tables not supported + CREATE UNLOGGED TABLE unlogged3(f1 SERIAL PRIMARY KEY, f2 INTEGER REFERENCES unlogged3); -- self-referencing foreign key + ^ +<sql-statement> +ALTER TABLE unlogged3 SET LOGGED; -- skip self-referencing foreign key +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE unlogged3 SET LOGGED; -- skip self-referencing foreign key + ^ +<sql-statement> +ALTER TABLE unlogged2 SET LOGGED; -- fails because a foreign key to an unlogged table exists +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE unlogged2 SET LOGGED; -- fails because a foreign key to an unlogged table exists + ^ +<sql-statement> +ALTER TABLE unlogged1 SET LOGGED; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE unlogged1 SET LOGGED; + ^ +<sql-statement> +-- check relpersistence of an unlogged table after changing to permanent +SELECT relname, relkind, relpersistence FROM pg_class WHERE relname ~ '^unlogged1' +UNION ALL +SELECT 'toast table', t.relkind, t.relpersistence FROM pg_class r JOIN pg_class t ON t.oid = r.reltoastrelid WHERE r.relname ~ '^unlogged1' +UNION ALL +SELECT 'toast index', ri.relkind, ri.relpersistence FROM pg_class r join pg_class t ON t.oid = r.reltoastrelid JOIN pg_index i ON i.indrelid = t.oid JOIN pg_class ri ON ri.oid = i.indexrelid WHERE r.relname ~ '^unlogged1' +ORDER BY relname; +</sql-statement> +-stdin-:<main>: 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_index + +<sql-statement> +ALTER TABLE unlogged1 SET LOGGED; -- silently do nothing +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE unlogged1 SET LOGGED; -- silently do nothing + ^ +<sql-statement> +DROP TABLE unlogged3; +</sql-statement> +<sql-statement> +DROP TABLE unlogged2; +</sql-statement> +<sql-statement> +DROP TABLE unlogged1; +</sql-statement> +<sql-statement> +-- set unlogged +CREATE TABLE logged1(f1 SERIAL PRIMARY KEY, f2 TEXT); +</sql-statement> +<sql-statement> +-- check relpersistence of a permanent table +SELECT relname, relkind, relpersistence FROM pg_class WHERE relname ~ '^logged1' +UNION ALL +SELECT 'toast table', t.relkind, t.relpersistence FROM pg_class r JOIN pg_class t ON t.oid = r.reltoastrelid WHERE r.relname ~ '^logged1' +UNION ALL +SELECT 'toast index', ri.relkind, ri.relpersistence FROM pg_class r join pg_class t ON t.oid = r.reltoastrelid JOIN pg_index i ON i.indrelid = t.oid JOIN pg_class ri ON ri.oid = i.indexrelid WHERE r.relname ~ '^logged1' +ORDER BY relname; +</sql-statement> +-stdin-:<main>: 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_index + +<sql-statement> +CREATE TABLE logged2(f1 SERIAL PRIMARY KEY, f2 INTEGER REFERENCES logged1); -- foreign key +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + CREATE TABLE logged2(f1 SERIAL PRIMARY KEY, f2 INTEGER REFERENCES logged1); -- foreign key + ^ +<sql-statement> +CREATE TABLE logged3(f1 SERIAL PRIMARY KEY, f2 INTEGER REFERENCES logged3); -- self-referencing foreign key +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + CREATE TABLE logged3(f1 SERIAL PRIMARY KEY, f2 INTEGER REFERENCES logged3); -- self-referencing foreign key + ^ +<sql-statement> +ALTER TABLE logged1 SET UNLOGGED; -- fails because a foreign key from a permanent table exists +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE logged1 SET UNLOGGED; -- fails because a foreign key from a permanent table exists + ^ +<sql-statement> +ALTER TABLE logged3 SET UNLOGGED; -- skip self-referencing foreign key +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE logged3 SET UNLOGGED; -- skip self-referencing foreign key + ^ +<sql-statement> +ALTER TABLE logged2 SET UNLOGGED; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE logged2 SET UNLOGGED; + ^ +<sql-statement> +ALTER TABLE logged1 SET UNLOGGED; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE logged1 SET UNLOGGED; + ^ +<sql-statement> +-- check relpersistence of a permanent table after changing to unlogged +SELECT relname, relkind, relpersistence FROM pg_class WHERE relname ~ '^logged1' +UNION ALL +SELECT 'toast table', t.relkind, t.relpersistence FROM pg_class r JOIN pg_class t ON t.oid = r.reltoastrelid WHERE r.relname ~ '^logged1' +UNION ALL +SELECT 'toast index', ri.relkind, ri.relpersistence FROM pg_class r join pg_class t ON t.oid = r.reltoastrelid JOIN pg_index i ON i.indrelid = t.oid JOIN pg_class ri ON ri.oid = i.indexrelid WHERE r.relname ~ '^logged1' +ORDER BY relname; +</sql-statement> +-stdin-:<main>: 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_index + +<sql-statement> +ALTER TABLE logged1 SET UNLOGGED; -- silently do nothing +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE logged1 SET UNLOGGED; -- silently do nothing + ^ +<sql-statement> +DROP TABLE logged3; +</sql-statement> +<sql-statement> +DROP TABLE logged2; +</sql-statement> +<sql-statement> +DROP TABLE logged1; +</sql-statement> +<sql-statement> +-- test ADD COLUMN IF NOT EXISTS +CREATE TABLE test_add_column(c1 integer); +</sql-statement> +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN c2 integer; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN c2 integer; -- fail because c2 already exists +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +ALTER TABLE ONLY test_add_column + ADD COLUMN c2 integer; -- fail because c2 already exists +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY test_add_column + ^ +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN IF NOT EXISTS c2 integer; -- skipping because c2 already exists +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +ALTER TABLE ONLY test_add_column + ADD COLUMN IF NOT EXISTS c2 integer; -- skipping because c2 already exists +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY test_add_column + ^ +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN c2 integer, -- fail because c2 already exists + ADD COLUMN c3 integer primary key; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN IF NOT EXISTS c2 integer, -- skipping because c2 already exists + ADD COLUMN c3 integer primary key; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN IF NOT EXISTS c2 integer, -- skipping because c2 already exists + ADD COLUMN IF NOT EXISTS c3 integer primary key; -- skipping because c3 already exists +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN IF NOT EXISTS c2 integer, -- skipping because c2 already exists + ADD COLUMN IF NOT EXISTS c3 integer, -- skipping because c3 already exists + ADD COLUMN c4 integer REFERENCES test_add_column; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN IF NOT EXISTS c4 integer REFERENCES test_add_column; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN IF NOT EXISTS c5 SERIAL CHECK (c5 > 8); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +\d test_add_column +</sql-statement> +Metacommand \d test_add_column is not supported +<sql-statement> +ALTER TABLE test_add_column + ADD COLUMN IF NOT EXISTS c5 SERIAL CHECK (c5 > 10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE test_add_column + ^ +<sql-statement> +\d test_add_column* +</sql-statement> +Metacommand \d test_add_column* is not supported +<sql-statement> +DROP TABLE test_add_column; +</sql-statement> +<sql-statement> +\d test_add_column* +</sql-statement> +Metacommand \d test_add_column* is not supported +<sql-statement> +-- assorted cases with multiple ALTER TABLE steps +CREATE TABLE ataddindex(f1 INT); +</sql-statement> +<sql-statement> +INSERT INTO ataddindex VALUES (42), (43); +</sql-statement> +<sql-statement> +CREATE UNIQUE INDEX ataddindexi0 ON ataddindex(f1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: unique index creation is not supported yet + CREATE UNIQUE INDEX ataddindexi0 ON ataddindex(f1); + ^ +<sql-statement> +ALTER TABLE ataddindex + ADD PRIMARY KEY USING INDEX ataddindexi0, + ALTER f1 TYPE BIGINT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ataddindex + ^ +<sql-statement> +\d ataddindex +</sql-statement> +Metacommand \d ataddindex is not supported +<sql-statement> +DROP TABLE ataddindex; +</sql-statement> +<sql-statement> +CREATE TABLE ataddindex(f1 VARCHAR(10)); +</sql-statement> +<sql-statement> +INSERT INTO ataddindex(f1) VALUES ('foo'), ('a'); +</sql-statement> +<sql-statement> +ALTER TABLE ataddindex + ALTER f1 SET DATA TYPE TEXT, + ADD EXCLUDE ((f1 LIKE 'a') WITH =); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ataddindex + ^ +<sql-statement> +\d ataddindex +</sql-statement> +Metacommand \d ataddindex is not supported +<sql-statement> +DROP TABLE ataddindex; +</sql-statement> +<sql-statement> +CREATE TABLE ataddindex(id int, ref_id int); +</sql-statement> +<sql-statement> +ALTER TABLE ataddindex + ADD PRIMARY KEY (id), + ADD FOREIGN KEY (ref_id) REFERENCES ataddindex; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ataddindex + ^ +<sql-statement> +\d ataddindex +</sql-statement> +Metacommand \d ataddindex is not supported +<sql-statement> +DROP TABLE ataddindex; +</sql-statement> +<sql-statement> +CREATE TABLE ataddindex(id int, ref_id int); +</sql-statement> +<sql-statement> +ALTER TABLE ataddindex + ADD UNIQUE (id), + ADD FOREIGN KEY (ref_id) REFERENCES ataddindex (id); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ataddindex + ^ +<sql-statement> +\d ataddindex +</sql-statement> +Metacommand \d ataddindex is not supported +<sql-statement> +DROP TABLE ataddindex; +</sql-statement> +<sql-statement> +-- unsupported constraint types for partitioned tables +CREATE TABLE partitioned ( + a int, + b int +) PARTITION BY RANGE (a, (a+b+1)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- unsupported constraint types for partitioned tables + ^ +<sql-statement> +ALTER TABLE partitioned ADD EXCLUDE USING gist (a WITH &&); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE partitioned ADD EXCLUDE USING gist (a WITH &&); + ^ +<sql-statement> +-- cannot drop column that is part of the partition key +ALTER TABLE partitioned DROP COLUMN a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- cannot drop column that is part of the partition key + ^ +<sql-statement> +ALTER TABLE partitioned ALTER COLUMN a TYPE char(5); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE partitioned ALTER COLUMN a TYPE char(5); + ^ +<sql-statement> +ALTER TABLE partitioned DROP COLUMN b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE partitioned DROP COLUMN b; + ^ +<sql-statement> +ALTER TABLE partitioned ALTER COLUMN b TYPE char(5); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE partitioned ALTER COLUMN b TYPE char(5); + ^ +<sql-statement> +-- partitioned table cannot participate in regular inheritance +CREATE TABLE nonpartitioned ( + a int, + b int +); +</sql-statement> +<sql-statement> +ALTER TABLE partitioned INHERIT nonpartitioned; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE partitioned INHERIT nonpartitioned; + ^ +<sql-statement> +ALTER TABLE nonpartitioned INHERIT partitioned; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE nonpartitioned INHERIT partitioned; + ^ +<sql-statement> +-- cannot add NO INHERIT constraint to partitioned tables +ALTER TABLE partitioned ADD CONSTRAINT chk_a CHECK (a > 0) NO INHERIT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- cannot add NO INHERIT constraint to partitioned tables + ^ +<sql-statement> +DROP TABLE partitioned, nonpartitioned; +</sql-statement> +<sql-statement> +-- +-- ATTACH PARTITION +-- +-- check that target table is partitioned +CREATE TABLE unparted ( + a int +); +</sql-statement> +<sql-statement> +CREATE TABLE fail_part (like unparted); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE fail_part (like unparted); + ^ +<sql-statement> +ALTER TABLE unparted ATTACH PARTITION fail_part FOR VALUES IN ('a'); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE unparted ATTACH PARTITION fail_part FOR VALUES IN ('a'); + ^ +<sql-statement> +DROP TABLE unparted, fail_part; +</sql-statement> +<sql-statement> +-- check that partition bound is compatible +CREATE TABLE list_parted ( + a int NOT NULL, + b char(2) COLLATE "C", + CONSTRAINT check_a CHECK (a > 0) +) PARTITION BY LIST (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- check that partition bound is compatible + ^ +<sql-statement> +CREATE TABLE fail_part (LIKE list_parted); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE fail_part (LIKE list_parted); + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES FROM (1) TO (10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES FROM (1) TO (10); + ^ +<sql-statement> +DROP TABLE fail_part; +</sql-statement> +<sql-statement> +-- check that the table being attached exists +ALTER TABLE list_parted ATTACH PARTITION nonexistent FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- check that the table being attached exists + ^ +<sql-statement> +-- check ownership of the source table +CREATE ROLE regress_test_me; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 285 + -- check ownership of the source table + ^ +<sql-statement> +CREATE ROLE regress_test_not_me; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 285 + CREATE ROLE regress_test_not_me; + ^ +<sql-statement> +CREATE TABLE not_owned_by_me (LIKE list_parted); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE not_owned_by_me (LIKE list_parted); + ^ +<sql-statement> +ALTER TABLE not_owned_by_me OWNER TO regress_test_not_me; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE not_owned_by_me OWNER TO regress_test_not_me; + ^ +<sql-statement> +SET SESSION AUTHORIZATION regress_test_me; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: session_authorization + SET SESSION AUTHORIZATION regress_test_me; + ^ +<sql-statement> +CREATE TABLE owned_by_me ( + a int +) PARTITION BY LIST (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + CREATE TABLE owned_by_me ( + ^ +<sql-statement> +ALTER TABLE owned_by_me ATTACH PARTITION not_owned_by_me FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE owned_by_me ATTACH PARTITION not_owned_by_me FOR VALUES IN (1); + ^ +<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> +DROP TABLE owned_by_me, not_owned_by_me; +</sql-statement> +<sql-statement> +DROP ROLE regress_test_not_me; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 287 + DROP ROLE regress_test_not_me; + ^ +<sql-statement> +DROP ROLE regress_test_me; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 287 + DROP ROLE regress_test_me; + ^ +<sql-statement> +-- check that the table being attached is not part of regular inheritance +CREATE TABLE parent (LIKE list_parted); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- check that the table being attached is not part of regular inheritance + ^ +<sql-statement> +CREATE TABLE child () INHERITS (parent); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE child () INHERITS (parent); + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION child FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION child FOR VALUES IN (1); + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION parent FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION parent FOR VALUES IN (1); + ^ +<sql-statement> +DROP TABLE parent CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + DROP TABLE parent CASCADE; + ^ +<sql-statement> +-- check any TEMP-ness +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 + -- check any TEMP-ness + ^ +<sql-statement> +CREATE TABLE perm_part (a int); +</sql-statement> +<sql-statement> +ALTER TABLE temp_parted ATTACH PARTITION perm_part FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE temp_parted ATTACH PARTITION perm_part FOR VALUES IN (1); + ^ +<sql-statement> +DROP TABLE temp_parted, perm_part; +</sql-statement> +<sql-statement> +-- check that the table being attached is not a typed table +CREATE TYPE mytype AS (a int); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 314 + -- check that the table being attached is not a typed table + ^ +<sql-statement> +CREATE TABLE fail_part OF mytype; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: typed tables not supported + CREATE TABLE fail_part OF mytype; + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); + ^ +<sql-statement> +DROP TYPE mytype CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 373 + DROP TYPE mytype CASCADE; + ^ +<sql-statement> +-- check that the table being attached has only columns present in the parent +CREATE TABLE fail_part (like list_parted, c int); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- check that the table being attached has only columns present in the parent + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); + ^ +<sql-statement> +DROP TABLE fail_part; +</sql-statement> +<sql-statement> +-- check that the table being attached has every column of the parent +CREATE TABLE fail_part (a int NOT NULL); +</sql-statement> +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); + ^ +<sql-statement> +DROP TABLE fail_part; +</sql-statement> +<sql-statement> +-- check that columns match in type, collation and NOT NULL status +CREATE TABLE fail_part ( + b char(3), + a int NOT NULL +); +</sql-statement> +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); + ^ +<sql-statement> +ALTER TABLE fail_part ALTER b TYPE char (2) COLLATE "POSIX"; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE fail_part ALTER b TYPE char (2) COLLATE "POSIX"; + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); + ^ +<sql-statement> +DROP TABLE fail_part; +</sql-statement> +<sql-statement> +-- check that the table being attached has all constraints of the parent +CREATE TABLE fail_part ( + b char(2) COLLATE "C", + a int NOT NULL +); +</sql-statement> +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); + ^ +<sql-statement> +-- check that the constraint matches in definition with parent's constraint +ALTER TABLE fail_part ADD CONSTRAINT check_a CHECK (a >= 0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- check that the constraint matches in definition with parent's constraint + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); + ^ +<sql-statement> +DROP TABLE fail_part; +</sql-statement> +<sql-statement> +-- check the attributes and constraints after partition is attached +CREATE TABLE part_1 ( + a int NOT NULL, + b char(2) COLLATE "C", + CONSTRAINT check_a CHECK (a > 0) +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table constraint not supported + -- check the attributes and constraints after partition is attached + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION part_1 FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION part_1 FOR VALUES IN (1); + ^ +<sql-statement> +-- attislocal and conislocal are always false for merged attributes and constraints respectively. +SELECT attislocal, attinhcount FROM pg_attribute WHERE attrelid = 'part_1'::regclass AND attnum > 0; +</sql-statement> +-stdin-:<main>: 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_attribute + +<sql-statement> +SELECT conislocal, coninhcount FROM pg_constraint WHERE conrelid = 'part_1'::regclass AND conname = 'check_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.pg_constraint + +<sql-statement> +-- check that the new partition won't overlap with an existing partition +CREATE TABLE fail_part (LIKE part_1 INCLUDING CONSTRAINTS); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- check that the new partition won't overlap with an existing partition + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1); + ^ +<sql-statement> +DROP TABLE fail_part; +</sql-statement> +<sql-statement> +-- check that an existing table can be attached as a default partition +CREATE TABLE def_part (LIKE list_parted INCLUDING CONSTRAINTS); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- check that an existing table can be attached as a default partition + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION def_part DEFAULT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION def_part DEFAULT; + ^ +<sql-statement> +-- check attaching default partition fails if a default partition already +-- exists +CREATE TABLE fail_def_part (LIKE part_1 INCLUDING CONSTRAINTS); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- check attaching default partition fails if a default partition already + ^ +<sql-statement> +ALTER TABLE list_parted ATTACH PARTITION fail_def_part DEFAULT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted ATTACH PARTITION fail_def_part DEFAULT; + ^ +<sql-statement> +-- check validation when attaching list partitions +CREATE TABLE list_parted2 ( + a int, + b char +) PARTITION BY LIST (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- check validation when attaching list partitions + ^ +<sql-statement> +-- check that violating rows are correctly reported +CREATE TABLE part_2 (LIKE list_parted2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- check that violating rows are correctly reported + ^ +<sql-statement> +INSERT INTO part_2 VALUES (3, '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.part_2 + +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_2 FOR VALUES IN (2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_2 FOR VALUES IN (2); + ^ +<sql-statement> +-- should be ok after deleting the bad row +DELETE FROM part_2; +</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', 'mutationid'. + +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_2 FOR VALUES IN (2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_2 FOR VALUES IN (2); + ^ +<sql-statement> +-- check partition cannot be attached if default has some row for its values +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 + -- check partition cannot be attached if default has some row for its values + ^ +<sql-statement> +INSERT INTO list_parted2_def VALUES (11, 'z'); +</sql-statement> +-stdin-:<main>: 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_def + +<sql-statement> +CREATE TABLE part_3 (LIKE list_parted2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE part_3 (LIKE list_parted2); + ^ +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_3 FOR VALUES IN (11); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_3 FOR VALUES IN (11); + ^ +<sql-statement> +-- should be ok after deleting the bad row +DELETE FROM list_parted2_def WHERE a = 11; +</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', 'mutationid'. + +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_3 FOR VALUES IN (11); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_3 FOR VALUES IN (11); + ^ +<sql-statement> +-- adding constraints that describe the desired partition constraint +-- (or more restrictive) will help skip the validation scan +CREATE TABLE part_3_4 ( + LIKE list_parted2, + CONSTRAINT check_a CHECK (a IN (3)) +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- adding constraints that describe the desired partition constraint + ^ +<sql-statement> +-- however, if a list partition does not accept nulls, there should be +-- an explicit NOT NULL constraint on the partition key column for the +-- validation scan to be skipped; +ALTER TABLE list_parted2 ATTACH PARTITION part_3_4 FOR VALUES IN (3, 4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- however, if a list partition does not accept nulls, there should be + ^ +<sql-statement> +-- adding a NOT NULL constraint will cause the scan to be skipped +ALTER TABLE list_parted2 DETACH PARTITION part_3_4; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- adding a NOT NULL constraint will cause the scan to be skipped + ^ +<sql-statement> +ALTER TABLE part_3_4 ALTER a SET NOT NULL; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_3_4 ALTER a SET NOT NULL; + ^ +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_3_4 FOR VALUES IN (3, 4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_3_4 FOR VALUES IN (3, 4); + ^ +<sql-statement> +-- check if default partition scan skipped +ALTER TABLE list_parted2_def ADD CONSTRAINT check_a CHECK (a IN (5, 6)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- check if default partition scan skipped + ^ +<sql-statement> +CREATE TABLE part_55_66 PARTITION OF list_parted2 FOR VALUES IN (55, 66); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE part_55_66 PARTITION OF list_parted2 FOR VALUES IN (55, 66); + ^ +<sql-statement> +-- check validation when attaching range partitions +CREATE TABLE range_parted ( + 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 + -- check validation when attaching range partitions + ^ +<sql-statement> +-- check that violating rows are correctly reported +CREATE TABLE part1 ( + a int NOT NULL CHECK (a = 1), + b int NOT NULL CHECK (b >= 1 AND b <= 10) +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- check that violating rows are correctly reported + ^ +<sql-statement> +INSERT INTO part1 VALUES (1, 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.part1 + +<sql-statement> +-- Remember the TO bound is exclusive +ALTER TABLE range_parted ATTACH PARTITION part1 FOR VALUES FROM (1, 1) TO (1, 10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Remember the TO bound is exclusive + ^ +<sql-statement> +-- should be ok after deleting the bad row +DELETE FROM part1; +</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', 'mutationid'. + +<sql-statement> +ALTER TABLE range_parted ATTACH PARTITION part1 FOR VALUES FROM (1, 1) TO (1, 10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE range_parted ATTACH PARTITION part1 FOR VALUES FROM (1, 1) TO (1, 10); + ^ +<sql-statement> +-- adding constraints that describe the desired partition constraint +-- (or more restrictive) will help skip the validation scan +CREATE TABLE part2 ( + a int NOT NULL CHECK (a = 1), + b int NOT NULL CHECK (b >= 10 AND b < 18) +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- adding constraints that describe the desired partition constraint + ^ +<sql-statement> +ALTER TABLE range_parted ATTACH PARTITION part2 FOR VALUES FROM (1, 10) TO (1, 20); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE range_parted ATTACH PARTITION part2 FOR VALUES FROM (1, 10) TO (1, 20); + ^ +<sql-statement> +-- Create default partition +CREATE TABLE partr_def1 PARTITION OF range_parted DEFAULT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + -- Create default partition + ^ +<sql-statement> +-- Only one default partition is allowed, hence, following should give error +CREATE TABLE partr_def2 (LIKE part1 INCLUDING CONSTRAINTS); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- Only one default partition is allowed, hence, following should give error + ^ +<sql-statement> +ALTER TABLE range_parted ATTACH PARTITION partr_def2 DEFAULT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE range_parted ATTACH PARTITION partr_def2 DEFAULT; + ^ +<sql-statement> +-- Overlapping partitions cannot be attached, hence, following should give error +INSERT INTO partr_def1 VALUES (2, 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.partr_def1 + +<sql-statement> +CREATE TABLE part3 (LIKE range_parted); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE part3 (LIKE range_parted); + ^ +<sql-statement> +ALTER TABLE range_parted ATTACH partition part3 FOR VALUES FROM (2, 10) TO (2, 20); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE range_parted ATTACH partition part3 FOR VALUES FROM (2, 10) TO (2, 20); + ^ +<sql-statement> +-- Attaching partitions should be successful when there are no overlapping rows +ALTER TABLE range_parted ATTACH partition part3 FOR VALUES FROM (3, 10) TO (3, 20); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Attaching partitions should be successful when there are no overlapping rows + ^ +<sql-statement> +-- check that leaf partitions are scanned when attaching a partitioned +-- table +CREATE TABLE part_5 ( + LIKE list_parted2 +) PARTITION BY LIST (b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- check that leaf partitions are scanned when attaching a partitioned + ^ +<sql-statement> +-- check that violating rows are correctly reported +CREATE TABLE part_5_a PARTITION OF part_5 FOR VALUES IN ('a'); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + -- check that violating rows are correctly reported + ^ +<sql-statement> +INSERT INTO part_5_a (a, b) VALUES (6, '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.part_5_a + +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_5 FOR VALUES IN (5); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_5 FOR VALUES IN (5); + ^ +<sql-statement> +-- delete the faulting row and also add a constraint to skip the scan +DELETE FROM part_5_a WHERE a NOT IN (3); +</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', 'mutationid'. + +<sql-statement> +ALTER TABLE part_5 ADD CONSTRAINT check_a CHECK (a IS NOT NULL AND a = 5); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_5 ADD CONSTRAINT check_a CHECK (a IS NOT NULL AND a = 5); + ^ +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_5 FOR VALUES IN (5); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_5 FOR VALUES IN (5); + ^ +<sql-statement> +ALTER TABLE list_parted2 DETACH PARTITION part_5; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 DETACH PARTITION part_5; + ^ +<sql-statement> +ALTER TABLE part_5 DROP CONSTRAINT check_a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_5 DROP CONSTRAINT check_a; + ^ +<sql-statement> +-- scan should again be skipped, even though NOT NULL is now a column property +ALTER TABLE part_5 ADD CONSTRAINT check_a CHECK (a IN (5)), ALTER a SET NOT NULL; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- scan should again be skipped, even though NOT NULL is now a column property + ^ +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_5 FOR VALUES IN (5); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_5 FOR VALUES IN (5); + ^ +<sql-statement> +-- Check the case where attnos of the partitioning columns in the table being +-- attached differs from the parent. It should not affect the constraint- +-- checking logic that allows to skip the scan. +CREATE TABLE part_6 ( + c int, + LIKE list_parted2, + CONSTRAINT check_a CHECK (a IS NOT NULL AND a = 6) +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- Check the case where attnos of the partitioning columns in the table being + ^ +<sql-statement> +ALTER TABLE part_6 DROP c; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_6 DROP c; + ^ +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_6 FOR VALUES IN (6); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_6 FOR VALUES IN (6); + ^ +<sql-statement> +-- Similar to above, but the table being attached is a partitioned table +-- whose partition has still different attnos for the root partitioning +-- columns. +CREATE TABLE part_7 ( + LIKE list_parted2, + CONSTRAINT check_a CHECK (a IS NOT NULL AND a = 7) +) PARTITION BY LIST (b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- Similar to above, but the table being attached is a partitioned table + ^ +<sql-statement> +CREATE TABLE part_7_a_null ( + c int, + d int, + e int, + LIKE list_parted2, -- 'a' will have attnum = 4 + CONSTRAINT check_b CHECK (b IS NULL OR b = 'a'), + CONSTRAINT check_a CHECK (a IS NOT NULL AND a = 7) +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE part_7_a_null ( + ^ +<sql-statement> +ALTER TABLE part_7_a_null DROP c, DROP d, DROP e; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_7_a_null DROP c, DROP d, DROP e; + ^ +<sql-statement> +ALTER TABLE part_7 ATTACH PARTITION part_7_a_null FOR VALUES IN ('a', null); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_7 ATTACH PARTITION part_7_a_null FOR VALUES IN ('a', null); + ^ +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_7 FOR VALUES IN (7); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_7 FOR VALUES IN (7); + ^ +<sql-statement> +-- Same example, but check this time that the constraint correctly detects +-- violating rows +ALTER TABLE list_parted2 DETACH PARTITION part_7; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Same example, but check this time that the constraint correctly detects + ^ +<sql-statement> +ALTER TABLE part_7 DROP CONSTRAINT check_a; -- thusly, scan won't be skipped +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_7 DROP CONSTRAINT check_a; -- thusly, scan won't be skipped + ^ +<sql-statement> +INSERT INTO part_7 (a, b) VALUES (8, null), (9, '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.part_7 + +<sql-statement> +SELECT tableoid::regclass, a, b FROM part_7 order by 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.part_7 + +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION part_7 FOR VALUES IN (7); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION part_7 FOR VALUES IN (7); + ^ +<sql-statement> +-- check that leaf partitions of default partition are scanned when +-- attaching a partitioned table. +ALTER TABLE part_5 DROP CONSTRAINT check_a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- check that leaf partitions of default partition are scanned when + ^ +<sql-statement> +CREATE TABLE part5_def PARTITION OF part_5 DEFAULT PARTITION BY LIST(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE part5_def PARTITION OF part_5 DEFAULT PARTITION BY LIST(a); + ^ +<sql-statement> +CREATE TABLE part5_def_p1 PARTITION OF part5_def FOR VALUES IN (5); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE part5_def_p1 PARTITION OF part5_def FOR VALUES IN (5); + ^ +<sql-statement> +INSERT INTO part5_def_p1 VALUES (5, 'y'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.part5_def_p1 + +<sql-statement> +CREATE TABLE part5_p1 (LIKE part_5); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE part5_p1 (LIKE part_5); + ^ +<sql-statement> +ALTER TABLE part_5 ATTACH PARTITION part5_p1 FOR VALUES IN ('y'); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_5 ATTACH PARTITION part5_p1 FOR VALUES IN ('y'); + ^ +<sql-statement> +-- should be ok after deleting the bad row +DELETE FROM part5_def_p1 WHERE b = 'y'; +</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', 'mutationid'. + +<sql-statement> +ALTER TABLE part_5 ATTACH PARTITION part5_p1 FOR VALUES IN ('y'); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_5 ATTACH PARTITION part5_p1 FOR VALUES IN ('y'); + ^ +<sql-statement> +-- check that the table being attached is not already a partition +ALTER TABLE list_parted2 ATTACH PARTITION part_2 FOR VALUES IN (2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- check that the table being attached is not already a partition + ^ +<sql-statement> +-- check that circular inheritance is not allowed +ALTER TABLE part_5 ATTACH PARTITION list_parted2 FOR VALUES IN ('b'); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- check that circular inheritance is not allowed + ^ +<sql-statement> +ALTER TABLE list_parted2 ATTACH PARTITION list_parted2 FOR VALUES IN (0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ATTACH PARTITION list_parted2 FOR VALUES IN (0); + ^ +<sql-statement> +-- If a partitioned table being created or an existing table being attached +-- as a partition does not have a constraint that would allow validation scan +-- to be skipped, but an individual partition does, then the partition's +-- validation scan is skipped. +CREATE TABLE quuux (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 + -- If a partitioned table being created or an existing table being attached + ^ +<sql-statement> +CREATE TABLE quuux_default PARTITION OF quuux DEFAULT PARTITION BY LIST (b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE quuux_default PARTITION OF quuux DEFAULT PARTITION BY LIST (b); + ^ +<sql-statement> +CREATE TABLE quuux_default1 PARTITION OF quuux_default ( + CONSTRAINT check_1 CHECK (a IS NOT NULL AND a = 1) +) FOR VALUES IN ('b'); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE quuux_default1 PARTITION OF quuux_default ( + ^ +<sql-statement> +CREATE TABLE quuux1 (a int, b text); +</sql-statement> +<sql-statement> +ALTER TABLE quuux ATTACH PARTITION quuux1 FOR VALUES IN (1); -- validate! +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE quuux ATTACH PARTITION quuux1 FOR VALUES IN (1); -- validate! + ^ +<sql-statement> +CREATE TABLE quuux2 (a int, b text); +</sql-statement> +<sql-statement> +ALTER TABLE quuux ATTACH PARTITION quuux2 FOR VALUES IN (2); -- skip validation +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE quuux ATTACH PARTITION quuux2 FOR VALUES IN (2); -- skip validation + ^ +<sql-statement> +DROP TABLE quuux1, quuux2; +</sql-statement> +<sql-statement> +-- should validate for quuux1, but not for quuux2 +CREATE TABLE quuux1 PARTITION OF quuux FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + -- should validate for quuux1, but not for quuux2 + ^ +<sql-statement> +CREATE TABLE quuux2 PARTITION OF quuux FOR VALUES IN (2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE quuux2 PARTITION OF quuux FOR VALUES IN (2); + ^ +<sql-statement> +DROP TABLE quuux; +</sql-statement> +<sql-statement> +-- check validation when attaching hash partitions +-- Use hand-rolled hash functions and operator class to get predictable result +-- on different machines. part_test_int4_ops is defined in insert.sql. +-- check that the new partition won't overlap with an existing partition +CREATE TABLE hash_parted ( + a int, + b int +) PARTITION BY HASH (a part_test_int4_ops); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- check validation when attaching hash partitions + ^ +<sql-statement> +CREATE TABLE hpart_1 PARTITION OF hash_parted FOR VALUES WITH (MODULUS 4, 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 4, REMAINDER 0); + ^ +<sql-statement> +CREATE TABLE fail_part (LIKE hpart_1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE fail_part (LIKE hpart_1); + ^ +<sql-statement> +ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 8, REMAINDER 4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:70: Error: ERROR: unrecognized hash partition bound specification "MODULUS" + + ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 8, REMAINDER 4); + ^ +<sql-statement> +ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 8, REMAINDER 0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:70: Error: ERROR: unrecognized hash partition bound specification "MODULUS" + + ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 8, REMAINDER 0); + ^ +<sql-statement> +DROP TABLE fail_part; +</sql-statement> +<sql-statement> +-- check validation when attaching hash partitions +-- check that violating rows are correctly reported +CREATE TABLE hpart_2 (LIKE hash_parted); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- check validation when attaching hash partitions + ^ +<sql-statement> +INSERT INTO hpart_2 VALUES (3, 0); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.hpart_2 + +<sql-statement> +ALTER TABLE hash_parted ATTACH PARTITION hpart_2 FOR VALUES WITH (MODULUS 4, REMAINDER 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:68: Error: ERROR: unrecognized hash partition bound specification "MODULUS" + + ALTER TABLE hash_parted ATTACH PARTITION hpart_2 FOR VALUES WITH (MODULUS 4, REMAINDER 1); + ^ +<sql-statement> +-- should be ok after deleting the bad row +DELETE FROM hpart_2; +</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', 'mutationid'. + +<sql-statement> +ALTER TABLE hash_parted ATTACH PARTITION hpart_2 FOR VALUES WITH (MODULUS 4, REMAINDER 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:68: Error: ERROR: unrecognized hash partition bound specification "MODULUS" + + ALTER TABLE hash_parted ATTACH PARTITION hpart_2 FOR VALUES WITH (MODULUS 4, REMAINDER 1); + ^ +<sql-statement> +-- check that leaf partitions are scanned when attaching a partitioned +-- table +CREATE TABLE hpart_5 ( + LIKE hash_parted +) PARTITION BY LIST (b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- check that leaf partitions are scanned when attaching a partitioned + ^ +<sql-statement> +-- check that violating rows are correctly reported +CREATE TABLE hpart_5_a PARTITION OF hpart_5 FOR VALUES IN ('1', '2', '3'); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + -- check that violating rows are correctly reported + ^ +<sql-statement> +INSERT INTO hpart_5_a (a, b) VALUES (7, 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.hpart_5_a + +<sql-statement> +ALTER TABLE hash_parted ATTACH PARTITION hpart_5 FOR VALUES WITH (MODULUS 4, REMAINDER 2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:68: Error: ERROR: unrecognized hash partition bound specification "MODULUS" + + ALTER TABLE hash_parted ATTACH PARTITION hpart_5 FOR VALUES WITH (MODULUS 4, REMAINDER 2); + ^ +<sql-statement> +-- should be ok after deleting the bad row +DELETE FROM hpart_5_a; +</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', 'mutationid'. + +<sql-statement> +ALTER TABLE hash_parted ATTACH PARTITION hpart_5 FOR VALUES WITH (MODULUS 4, REMAINDER 2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:68: Error: ERROR: unrecognized hash partition bound specification "MODULUS" + + ALTER TABLE hash_parted ATTACH PARTITION hpart_5 FOR VALUES WITH (MODULUS 4, REMAINDER 2); + ^ +<sql-statement> +-- check that the table being attach is with valid modulus and remainder value +CREATE TABLE fail_part(LIKE hash_parted); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- check that the table being attach is with valid modulus and remainder value + ^ +<sql-statement> +ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 0, REMAINDER 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:70: Error: ERROR: unrecognized hash partition bound specification "MODULUS" + + ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 0, REMAINDER 1); + ^ +<sql-statement> +ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 8, REMAINDER 8); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:70: Error: ERROR: unrecognized hash partition bound specification "MODULUS" + + ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 8, REMAINDER 8); + ^ +<sql-statement> +ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 3, REMAINDER 2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:70: Error: ERROR: unrecognized hash partition bound specification "MODULUS" + + ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH (MODULUS 3, REMAINDER 2); + ^ +<sql-statement> +DROP TABLE fail_part; +</sql-statement> +<sql-statement> +-- fails with incorrect object type +CREATE VIEW at_v1 AS SELECT 1 as a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + -- fails with incorrect object type + ^ +<sql-statement> +ALTER TABLE at_v1 ATTACH PARTITION dummy default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE at_v1 ATTACH PARTITION dummy default; + ^ +<sql-statement> +DROP VIEW at_v1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: View not found: 'at_v1' + DROP VIEW at_v1; + ^ +<sql-statement> +-- +-- DETACH PARTITION +-- +-- check that the table is partitioned at all +CREATE TABLE regular_table (a int); +</sql-statement> +<sql-statement> +ALTER TABLE regular_table DETACH PARTITION any_name; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE regular_table DETACH PARTITION any_name; + ^ +<sql-statement> +DROP TABLE regular_table; +</sql-statement> +<sql-statement> +-- check that the partition being detached exists at all +ALTER TABLE list_parted2 DETACH PARTITION part_4; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- check that the partition being detached exists at all + ^ +<sql-statement> +ALTER TABLE hash_parted DETACH PARTITION hpart_4; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE hash_parted DETACH PARTITION hpart_4; + ^ +<sql-statement> +-- check that the partition being detached is actually a partition of the parent +CREATE TABLE not_a_part (a int); +</sql-statement> +<sql-statement> +ALTER TABLE list_parted2 DETACH PARTITION not_a_part; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 DETACH PARTITION not_a_part; + ^ +<sql-statement> +ALTER TABLE list_parted2 DETACH PARTITION part_1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 DETACH PARTITION part_1; + ^ +<sql-statement> +ALTER TABLE hash_parted DETACH PARTITION not_a_part; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE hash_parted DETACH PARTITION not_a_part; + ^ +<sql-statement> +DROP TABLE not_a_part; +</sql-statement> +<sql-statement> +-- check that, after being detached, attinhcount/coninhcount is dropped to 0 and +-- attislocal/conislocal is set to true +ALTER TABLE list_parted2 DETACH PARTITION part_3_4; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- check that, after being detached, attinhcount/coninhcount is dropped to 0 and + ^ +<sql-statement> +SELECT attinhcount, attislocal FROM pg_attribute WHERE attrelid = 'part_3_4'::regclass AND attnum > 0; +</sql-statement> +-stdin-:<main>: 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_attribute + +<sql-statement> +SELECT coninhcount, conislocal FROM pg_constraint WHERE conrelid = 'part_3_4'::regclass AND conname = 'check_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.pg_constraint + +<sql-statement> +DROP TABLE part_3_4; +</sql-statement> +<sql-statement> +-- check that a detached partition is not dropped on dropping a partitioned table +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 + -- check that a detached partition is not dropped on dropping a partitioned table + ^ +<sql-statement> +CREATE TABLE part_rp PARTITION OF range_parted2 FOR VALUES FROM (0) to (100); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE part_rp PARTITION OF range_parted2 FOR VALUES FROM (0) to (100); + ^ +<sql-statement> +ALTER TABLE range_parted2 DETACH PARTITION part_rp; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE range_parted2 DETACH PARTITION part_rp; + ^ +<sql-statement> +DROP TABLE range_parted2; +</sql-statement> +<sql-statement> +SELECT * from part_rp; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.part_rp + +<sql-statement> +DROP TABLE part_rp; +</sql-statement> +<sql-statement> +-- concurrent detach +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 + -- concurrent detach + ^ +<sql-statement> +CREATE TABLE part_rp PARTITION OF range_parted2 FOR VALUES FROM (0) to (100); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE part_rp PARTITION OF range_parted2 FOR VALUES FROM (0) to (100); + ^ +<sql-statement> +BEGIN; +</sql-statement> +<sql-statement> +-- doesn't work in a partition block +ALTER TABLE range_parted2 DETACH PARTITION part_rp CONCURRENTLY; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- doesn't work in a partition block + ^ +<sql-statement> +COMMIT; +</sql-statement> +<sql-statement> +CREATE TABLE part_rpd PARTITION OF range_parted2 DEFAULT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE part_rpd PARTITION OF range_parted2 DEFAULT; + ^ +<sql-statement> +-- doesn't work if there's a default partition +ALTER TABLE range_parted2 DETACH PARTITION part_rp CONCURRENTLY; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- doesn't work if there's a default partition + ^ +<sql-statement> +-- doesn't work for the default partition +ALTER TABLE range_parted2 DETACH PARTITION part_rpd CONCURRENTLY; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- doesn't work for the default partition + ^ +<sql-statement> +DROP TABLE part_rpd; +</sql-statement> +<sql-statement> +-- works fine +ALTER TABLE range_parted2 DETACH PARTITION part_rp CONCURRENTLY; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- works fine + ^ +<sql-statement> +\d+ range_parted2 +</sql-statement> +Metacommand \d+ range_parted2 is not supported +<sql-statement> +-- constraint should be created +\d part_rp +</sql-statement> +Metacommand \d part_rp is not supported +<sql-statement> +CREATE TABLE part_rp100 PARTITION OF range_parted2 (CHECK (a>=123 AND a<133 AND a IS NOT NULL)) FOR VALUES FROM (100) to (200); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE part_rp100 PARTITION OF range_parted2 (CHECK (a>=123 AND a<133 AND a IS NOT NULL)) FOR VALUES FROM (100) to (200); + ^ +<sql-statement> +ALTER TABLE range_parted2 DETACH PARTITION part_rp100 CONCURRENTLY; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE range_parted2 DETACH PARTITION part_rp100 CONCURRENTLY; + ^ +<sql-statement> +-- redundant constraint should not be created +\d part_rp100 +</sql-statement> +Metacommand \d part_rp100 is not supported +<sql-statement> +DROP TABLE range_parted2; +</sql-statement> +<sql-statement> +-- Check ALTER TABLE commands for partitioned tables and partitions +-- cannot add/drop column to/from *only* the parent +ALTER TABLE ONLY list_parted2 ADD COLUMN c int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Check ALTER TABLE commands for partitioned tables and partitions + ^ +<sql-statement> +ALTER TABLE ONLY list_parted2 DROP COLUMN b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY list_parted2 DROP COLUMN b; + ^ +<sql-statement> +-- cannot add a column to partition or drop an inherited one +ALTER TABLE part_2 ADD COLUMN c text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- cannot add a column to partition or drop an inherited one + ^ +<sql-statement> +ALTER TABLE part_2 DROP COLUMN b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_2 DROP COLUMN b; + ^ +<sql-statement> +-- Nor rename, alter type +ALTER TABLE part_2 RENAME COLUMN b to c; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 264 + -- Nor rename, alter type + ^ +<sql-statement> +ALTER TABLE part_2 ALTER COLUMN b TYPE text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_2 ALTER COLUMN b TYPE text; + ^ +<sql-statement> +-- cannot add/drop NOT NULL or check constraints to *only* the parent, when +-- partitions exist +ALTER TABLE ONLY list_parted2 ALTER b SET NOT NULL; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- cannot add/drop NOT NULL or check constraints to *only* the parent, when + ^ +<sql-statement> +ALTER TABLE ONLY list_parted2 ADD CONSTRAINT check_b CHECK (b <> 'zz'); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY list_parted2 ADD CONSTRAINT check_b CHECK (b <> 'zz'); + ^ +<sql-statement> +ALTER TABLE list_parted2 ALTER b SET NOT NULL; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ALTER b SET NOT NULL; + ^ +<sql-statement> +ALTER TABLE ONLY list_parted2 ALTER b DROP NOT NULL; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY list_parted2 ALTER b DROP NOT NULL; + ^ +<sql-statement> +ALTER TABLE list_parted2 ADD CONSTRAINT check_b CHECK (b <> 'zz'); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ADD CONSTRAINT check_b CHECK (b <> 'zz'); + ^ +<sql-statement> +ALTER TABLE ONLY list_parted2 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 ONLY list_parted2 DROP CONSTRAINT check_b; + ^ +<sql-statement> +-- It's alright though, if no partitions are yet created +CREATE TABLE parted_no_parts (a int) PARTITION BY LIST (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- It's alright though, if no partitions are yet created + ^ +<sql-statement> +ALTER TABLE ONLY parted_no_parts ALTER a SET NOT NULL; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY parted_no_parts ALTER a SET NOT NULL; + ^ +<sql-statement> +ALTER TABLE ONLY parted_no_parts ADD CONSTRAINT check_a CHECK (a > 0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY parted_no_parts ADD CONSTRAINT check_a CHECK (a > 0); + ^ +<sql-statement> +ALTER TABLE ONLY parted_no_parts ALTER a DROP NOT NULL; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY parted_no_parts ALTER a DROP NOT NULL; + ^ +<sql-statement> +ALTER TABLE ONLY parted_no_parts DROP CONSTRAINT check_a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE ONLY parted_no_parts DROP CONSTRAINT check_a; + ^ +<sql-statement> +DROP TABLE parted_no_parts; +</sql-statement> +<sql-statement> +-- cannot drop inherited NOT NULL or check constraints from partition +ALTER TABLE list_parted2 ALTER b SET NOT NULL, ADD CONSTRAINT check_a2 CHECK (a > 0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- cannot drop inherited NOT NULL or check constraints from partition + ^ +<sql-statement> +ALTER TABLE part_2 ALTER b DROP NOT NULL; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_2 ALTER b DROP NOT NULL; + ^ +<sql-statement> +ALTER TABLE part_2 DROP CONSTRAINT check_a2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_2 DROP CONSTRAINT check_a2; + ^ +<sql-statement> +-- Doesn't make sense to add NO INHERIT constraints on partitioned tables +ALTER TABLE list_parted2 add constraint check_b2 check (b <> 'zz') NO INHERIT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Doesn't make sense to add NO INHERIT constraints on partitioned tables + ^ +<sql-statement> +-- check that a partition cannot participate in regular inheritance +CREATE TABLE inh_test () INHERITS (part_2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + -- check that a partition cannot participate in regular inheritance + ^ +<sql-statement> +CREATE TABLE inh_test (LIKE part_2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + CREATE TABLE inh_test (LIKE part_2); + ^ +<sql-statement> +ALTER TABLE inh_test INHERIT part_2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE inh_test INHERIT part_2; + ^ +<sql-statement> +ALTER TABLE part_2 INHERIT inh_test; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE part_2 INHERIT inh_test; + ^ +<sql-statement> +-- cannot drop or alter type of partition key columns of lower level +-- partitioned tables; for example, part_5, which is list_parted2's +-- partition, is partitioned on b; +ALTER TABLE list_parted2 DROP COLUMN b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- cannot drop or alter type of partition key columns of lower level + ^ +<sql-statement> +ALTER TABLE list_parted2 ALTER COLUMN b TYPE text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE list_parted2 ALTER COLUMN b TYPE text; + ^ +<sql-statement> +-- dropping non-partition key columns should be allowed on the parent table. +ALTER TABLE list_parted DROP COLUMN b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- dropping non-partition key columns should be allowed on the parent table. + ^ +<sql-statement> +SELECT * FROM list_parted; +</sql-statement> +-stdin-:<main>: 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_parted + +<sql-statement> +-- cleanup +DROP TABLE list_parted, list_parted2, range_parted; +</sql-statement> +<sql-statement> +DROP TABLE fail_def_part; +</sql-statement> +<sql-statement> +DROP TABLE hash_parted; +</sql-statement> +<sql-statement> +-- more tests for certain multi-level partitioning scenarios +create table p (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 + -- more tests for certain multi-level partitioning scenarios + ^ +<sql-statement> +create table p1 (b int, a int not null) partition by range (b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + create table p1 (b int, a int not null) partition by range (b); + ^ +<sql-statement> +create table p11 (like p1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + create table p11 (like p1); + ^ +<sql-statement> +alter table p11 drop a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table p11 drop a; + ^ +<sql-statement> +alter table p11 add a int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table p11 add a int; + ^ +<sql-statement> +alter table p11 drop a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table p11 drop a; + ^ +<sql-statement> +alter table p11 add a int not null; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table p11 add a int not null; + ^ +<sql-statement> +-- attnum for key attribute 'a' is different in p, p1, and p11 +select attrelid::regclass, attname, attnum +from pg_attribute +where attname = 'a' + and (attrelid = 'p'::regclass + or attrelid = 'p1'::regclass + or attrelid = 'p11'::regclass) +order by attrelid::regclass::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.pg_attribute + +<sql-statement> +alter table p1 attach partition p11 for values from (2) to (5); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table p1 attach partition p11 for values from (2) to (5); + ^ +<sql-statement> +insert into p1 (a, b) values (2, 3); +</sql-statement> +<sql-statement> +-- check that partition validation scan correctly detects violating rows +alter table p attach partition p1 for values from (1, 2) to (1, 10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- check that partition validation scan correctly detects violating rows + ^ +<sql-statement> +-- cleanup +drop table p; +</sql-statement> +<sql-statement> +drop table p1; +</sql-statement> +<sql-statement> +-- validate constraint on partitioned tables should only scan leaf partitions +create table parted_validate_test (a int) partition by list (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- validate constraint on partitioned tables should only scan leaf partitions + ^ +<sql-statement> +create table parted_validate_test_1 partition of parted_validate_test for values in (0, 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table parted_validate_test_1 partition of parted_validate_test for values in (0, 1); + ^ +<sql-statement> +alter table parted_validate_test add constraint parted_validate_test_chka check (a > 0) not valid; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table parted_validate_test add constraint parted_validate_test_chka check (a > 0) not valid; + ^ +<sql-statement> +alter table parted_validate_test validate constraint parted_validate_test_chka; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table parted_validate_test validate constraint parted_validate_test_chka; + ^ +<sql-statement> +drop table parted_validate_test; +</sql-statement> +<sql-statement> +-- test alter column options +CREATE TABLE attmp(i integer); +</sql-statement> +<sql-statement> +INSERT INTO attmp VALUES (1); +</sql-statement> +<sql-statement> +ALTER TABLE attmp ALTER COLUMN i SET (n_distinct = 1, n_distinct_inherited = 2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp ALTER COLUMN i SET (n_distinct = 1, n_distinct_inherited = 2); + ^ +<sql-statement> +ALTER TABLE attmp ALTER COLUMN i RESET (n_distinct_inherited); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + ALTER TABLE attmp ALTER COLUMN i RESET (n_distinct_inherited); + ^ +<sql-statement> +ANALYZE attmp; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + ANALYZE attmp; + ^ +<sql-statement> +DROP TABLE attmp; +</sql-statement> +<sql-statement> +DROP USER regress_alter_table_user1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 287 + DROP USER regress_alter_table_user1; + ^ +<sql-statement> +-- check that violating rows are correctly reported when attaching as the +-- default partition +create table defpart_attach_test (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 violating rows are correctly reported when attaching as the + ^ +<sql-statement> +create table defpart_attach_test1 partition of defpart_attach_test for values in (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table defpart_attach_test1 partition of defpart_attach_test for values in (1); + ^ +<sql-statement> +create table defpart_attach_test_d (b int, a int); +</sql-statement> +<sql-statement> +alter table defpart_attach_test_d drop b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table defpart_attach_test_d drop b; + ^ +<sql-statement> +insert into defpart_attach_test_d values (1), (2); +</sql-statement> +<sql-statement> +-- error because its constraint as the default partition would be violated +-- by the row containing 1 +alter table defpart_attach_test attach partition defpart_attach_test_d default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- error because its constraint as the default partition would be violated + ^ +<sql-statement> +delete from defpart_attach_test_d where a = 1; +</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', 'mutationid'. + +<sql-statement> +alter table defpart_attach_test_d add check (a > 1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table defpart_attach_test_d add check (a > 1); + ^ +<sql-statement> +-- should be attached successfully and without needing to be scanned +alter table defpart_attach_test attach partition defpart_attach_test_d default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- should be attached successfully and without needing to be scanned + ^ +<sql-statement> +-- check that attaching a partition correctly reports any rows in the default +-- partition that should not be there for the new partition to be attached +-- successfully +create table defpart_attach_test_2 (like defpart_attach_test_d); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CreateStmt: alternative is not implemented yet : 389 + -- check that attaching a partition correctly reports any rows in the default + ^ +<sql-statement> +alter table defpart_attach_test attach partition defpart_attach_test_2 for values in (2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table defpart_attach_test attach partition defpart_attach_test_2 for values in (2); + ^ +<sql-statement> +drop table defpart_attach_test; +</sql-statement> +<sql-statement> +-- check combinations of temporary and permanent relations when attaching +-- partitions. +create table perm_part_parent (a int) partition by list (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- check combinations of temporary and permanent relations when attaching + ^ +<sql-statement> +create temp table temp_part_parent (a int) partition by list (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + create temp table temp_part_parent (a int) partition by list (a); + ^ +<sql-statement> +create table perm_part_child (a int); +</sql-statement> +<sql-statement> +create temp table temp_part_child (a int); +</sql-statement> +<sql-statement> +alter table temp_part_parent attach partition perm_part_child default; -- error +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table temp_part_parent attach partition perm_part_child default; -- error + ^ +<sql-statement> +alter table perm_part_parent attach partition temp_part_child default; -- error +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table perm_part_parent attach partition temp_part_child default; -- error + ^ +<sql-statement> +alter table temp_part_parent attach partition temp_part_child default; -- ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table temp_part_parent attach partition temp_part_child default; -- ok + ^ +<sql-statement> +drop table perm_part_parent cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + drop table perm_part_parent cascade; + ^ +<sql-statement> +drop table temp_part_parent cascade; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: CASCADE is not implemented + drop table temp_part_parent cascade; + ^ +<sql-statement> +-- check that attaching partitions to a table while it is being used is +-- prevented +create table tab_part_attach (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 attaching partitions to a table while it is being used is + ^ +<sql-statement> +create or replace function func_part_attach() returns trigger + language plpgsql as $$ + begin + execute 'create table tab_part_attach_1 (a int)'; + execute 'alter table tab_part_attach attach partition tab_part_attach_1 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_attach() returns trigger + ^ +<sql-statement> +create trigger trig_part_attach before insert on tab_part_attach + for each statement execute procedure func_part_attach(); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 283 + create trigger trig_part_attach before insert on tab_part_attach + ^ +<sql-statement> +insert into tab_part_attach 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_attach + +<sql-statement> +drop table tab_part_attach; +</sql-statement> +<sql-statement> +drop function func_part_attach(); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386 + drop function func_part_attach(); + ^ +<sql-statement> +-- test case where the partitioning operator is a SQL function whose +-- evaluation results in the table's relcache being rebuilt partway through +-- the execution of an ATTACH PARTITION command +create function at_test_sql_partop (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 + -- test case where the partitioning operator is a SQL function whose + ^ +<sql-statement> +create operator class at_test_sql_partop 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 at_test_sql_partop(int4, int4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 298 + create operator class at_test_sql_partop for type int4 using btree as + ^ +<sql-statement> +create table at_test_sql_partop (a int) partition by range (a at_test_sql_partop); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + create table at_test_sql_partop (a int) partition by range (a at_test_sql_partop); + ^ +<sql-statement> +create table at_test_sql_partop_1 (a int); +</sql-statement> +<sql-statement> +alter table at_test_sql_partop attach partition at_test_sql_partop_1 for values from (0) to (10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table at_test_sql_partop attach partition at_test_sql_partop_1 for values from (0) to (10); + ^ +<sql-statement> +drop table at_test_sql_partop; +</sql-statement> +<sql-statement> +drop operator class at_test_sql_partop using btree; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: Not supported object type for DROP + drop operator class at_test_sql_partop using btree; + ^ +<sql-statement> +drop function at_test_sql_partop; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386 + drop function at_test_sql_partop; + ^ +<sql-statement> +/* Test case for bug #16242 */ +-- We create a parent and child where the child has missing +-- non-null attribute values, and arrange to pass them through +-- tuple conversion from the child to the parent tupdesc +create table bar1 (a integer, b integer not null default 1) + partition by range (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + /* Test case for bug #16242 */ + ^ +<sql-statement> +create table bar2 (a integer); +</sql-statement> +<sql-statement> +insert into bar2 values (1); +</sql-statement> +<sql-statement> +alter table bar2 add column b integer not null default 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table bar2 add column b integer not null default 1; + ^ +<sql-statement> +-- (at this point bar2 contains tuple with natts=1) +alter table bar1 attach partition bar2 default; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- (at this point bar2 contains tuple with natts=1) + ^ +<sql-statement> +-- this works: +select * from bar1; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.bar1 + +<sql-statement> +-- this exercises tuple conversion: +create function xtrig() + returns trigger language plpgsql +as $$ + declare + r record; + begin + for r in select * from old loop + raise info 'a=%, b=%', r.a, r.b; + end loop; + return NULL; + end; +$$; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + -- this exercises tuple conversion: + ^ +<sql-statement> +create trigger xtrig + after update on bar1 + referencing old table as old + for each statement execute procedure xtrig(); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 283 + create trigger xtrig + ^ +<sql-statement> +update bar1 set a = a + 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', 'mutationid'. + +<sql-statement> +/* End test case for bug #16242 */ +/* Test case for bug #17409 */ +create table attbl (p1 int constraint pk_attbl primary key); +</sql-statement> +<sql-statement> +create table atref (c1 int references attbl(p1)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + create table atref (c1 int references attbl(p1)); + ^ +<sql-statement> +cluster attbl using pk_attbl; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 252 + cluster attbl using pk_attbl; + ^ +<sql-statement> +alter table attbl alter column p1 set data type bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table attbl alter column p1 set data type bigint; + ^ +<sql-statement> +alter table atref alter column c1 set data type bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atref alter column c1 set data type bigint; + ^ +<sql-statement> +drop table attbl, atref; +</sql-statement> +<sql-statement> +create table attbl (p1 int constraint pk_attbl primary key); +</sql-statement> +<sql-statement> +alter table attbl replica identity using index pk_attbl; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table attbl replica identity using index pk_attbl; + ^ +<sql-statement> +create table atref (c1 int references attbl(p1)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + create table atref (c1 int references attbl(p1)); + ^ +<sql-statement> +alter table attbl alter column p1 set data type bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table attbl alter column p1 set data type bigint; + ^ +<sql-statement> +alter table atref alter column c1 set data type bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table atref alter column c1 set data type bigint; + ^ +<sql-statement> +drop table attbl, atref; +</sql-statement> +<sql-statement> +/* End test case for bug #17409 */ +-- Test that ALTER TABLE rewrite preserves a clustered index +-- for normal indexes and indexes on constraints. +create table alttype_cluster (a int); +</sql-statement> +<sql-statement> +alter table alttype_cluster add primary key (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alttype_cluster add primary key (a); + ^ +<sql-statement> +create index alttype_cluster_ind on alttype_cluster (a); +</sql-statement> +<sql-statement> +alter table alttype_cluster cluster on alttype_cluster_ind; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alttype_cluster cluster on alttype_cluster_ind; + ^ +<sql-statement> +-- Normal index remains clustered. +select indexrelid::regclass, indisclustered from pg_index + where indrelid = 'alttype_cluster'::regclass + order by indexrelid::regclass::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.pg_index + +<sql-statement> +alter table alttype_cluster alter a type bigint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alttype_cluster alter a type bigint; + ^ +<sql-statement> +select indexrelid::regclass, indisclustered from pg_index + where indrelid = 'alttype_cluster'::regclass + order by indexrelid::regclass::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.pg_index + +<sql-statement> +-- Constraint index remains clustered. +alter table alttype_cluster cluster on alttype_cluster_pkey; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- Constraint index remains clustered. + ^ +<sql-statement> +select indexrelid::regclass, indisclustered from pg_index + where indrelid = 'alttype_cluster'::regclass + order by indexrelid::regclass::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.pg_index + +<sql-statement> +alter table alttype_cluster alter a type int; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table alttype_cluster alter a type int; + ^ +<sql-statement> +select indexrelid::regclass, indisclustered from pg_index + where indrelid = 'alttype_cluster'::regclass + order by indexrelid::regclass::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.pg_index + +<sql-statement> +drop table alttype_cluster; +</sql-statement> +<sql-statement> +-- +-- Check that attaching or detaching a partitioned partition correctly leads +-- to its partitions' constraint being updated to reflect the parent's +-- newly added/removed constraint +create table target_parted (a int, b 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 attach_parted (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 + create table attach_parted (a int, b int) partition by list (b); + ^ +<sql-statement> +create table attach_parted_part1 partition of attach_parted for values in (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table attach_parted_part1 partition of attach_parted for values in (1); + ^ +<sql-statement> +-- insert a row directly into the leaf partition so that its partition +-- constraint is built and stored in the relcache +insert into attach_parted_part1 values (1, 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.attach_parted_part1 + +<sql-statement> +-- the following better invalidate the partition constraint of the leaf +-- partition too... +alter table target_parted attach partition attach_parted for values in (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- the following better invalidate the partition constraint of the leaf + ^ +<sql-statement> +-- ...such that the following insert fails +insert into attach_parted_part1 values (2, 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.attach_parted_part1 + +<sql-statement> +-- ...and doesn't when the partition is detached along with its own partition +alter table target_parted detach partition attach_parted; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + -- ...and doesn't when the partition is detached along with its own partition + ^ +<sql-statement> +insert into attach_parted_part1 values (2, 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.attach_parted_part1 + diff --git a/ydb/library/yql/tests/postgresql/cases/alter_table.out b/ydb/library/yql/tests/postgresql/cases/alter_table.out index bc76e6c4985..59c30200800 100644 --- a/ydb/library/yql/tests/postgresql/cases/alter_table.out +++ b/ydb/library/yql/tests/postgresql/cases/alter_table.out @@ -38,3 +38,355 @@ DROP TABLE attmp; -- rename - check on both non-temp and temp tables -- CREATE TABLE attmp (regtable int); +CREATE TEMP TABLE attmp (attmptable int); +SELECT * FROM attmp; + regtable +---------- +(0 rows) + +-- +-- check renaming to a table's array type's autogenerated name +-- (the array type's name should get out of the way) +-- +CREATE TABLE attmp_array (id int); +CREATE TABLE attmp_array2 (id int); +DROP TABLE attmp_array; +-- renaming to table's own array type's name is an interesting corner case +CREATE TABLE attmp_array (id int); +-- rename statements with mismatching statement and object types +CREATE TABLE alter_idx_rename_test (a INT); +CREATE INDEX alter_idx_rename_test_idx ON alter_idx_rename_test (a); +CREATE INDEX alter_idx_rename_test_parted_idx ON alter_idx_rename_test_parted (a); +BEGIN; +COMMIT; +BEGIN; +COMMIT; +BEGIN; +COMMIT; +-- FOREIGN KEY CONSTRAINT adding TEST +CREATE TABLE attmp2 (a int primary key); +CREATE TABLE attmp3 (a int, b int); +CREATE TABLE attmp4 (a int, b int, unique(a,b)); +CREATE TABLE attmp5 (a int, b int); +-- Insert rows into attmp2 (pktable) +INSERT INTO attmp2 values (1); +INSERT INTO attmp2 values (2); +INSERT INTO attmp2 values (3); +INSERT INTO attmp2 values (4); +-- Insert rows into attmp3 +INSERT INTO attmp3 values (1,10); +INSERT INTO attmp3 values (1,20); +INSERT INTO attmp3 values (5,50); +INSERT INTO attmp3 values (5,50); +-- A NO INHERIT constraint should not be looked for in children during VALIDATE CONSTRAINT +create table parent_noinh_convalid (a int); +insert into parent_noinh_convalid values (1); +DROP TABLE attmp5; +DROP TABLE attmp4; +DROP TABLE attmp3; +DROP TABLE attmp2; +-- we leave nv_parent and children around to help test pg_dump logic +-- Foreign key adding test with mixed types +-- Note: these tables are TEMP to avoid name conflicts when this test +-- is run in parallel with foreign_key.sql. +CREATE TEMP TABLE PKTABLE (ptest1 int PRIMARY KEY); +INSERT INTO PKTABLE VALUES(42); +CREATE TEMP TABLE FKTABLE (ftest1 inet); +DROP TABLE FKTABLE; +-- This should succeed, even though they are different types, +-- because int=int8 exists and is a member of the integer opfamily +CREATE TEMP TABLE FKTABLE (ftest1 int8); +-- Check it actually works +INSERT INTO FKTABLE VALUES(42); -- should succeed +DROP TABLE FKTABLE; +-- This should fail, because we'd have to cast numeric to int which is +-- not an implicit coercion (or use numeric=numeric, but that's not part +-- of the integer opfamily) +CREATE TEMP TABLE FKTABLE (ftest1 numeric); +DROP TABLE FKTABLE; +DROP TABLE PKTABLE; +-- On the other hand, this should work because int implicitly promotes to +-- numeric, and we allow promotion on the FK side +CREATE TEMP TABLE PKTABLE (ptest1 numeric PRIMARY KEY); +INSERT INTO PKTABLE VALUES(42); +CREATE TEMP TABLE FKTABLE (ftest1 int); +-- Check it actually works +INSERT INTO FKTABLE VALUES(42); -- should succeed +DROP TABLE FKTABLE; +DROP TABLE PKTABLE; +CREATE TEMP TABLE PKTABLE (ptest1 int, ptest2 inet, + PRIMARY KEY(ptest1, ptest2)); +-- This should fail, because we just chose really odd types +CREATE TEMP TABLE FKTABLE (ftest1 cidr, ftest2 timestamp); +DROP TABLE FKTABLE; +-- Again, so should this... +CREATE TEMP TABLE FKTABLE (ftest1 cidr, ftest2 timestamp); +DROP TABLE FKTABLE; +-- This fails because we mixed up the column ordering +CREATE TEMP TABLE FKTABLE (ftest1 int, ftest2 inet); +DROP TABLE FKTABLE; +DROP TABLE PKTABLE; +-- Test that ALTER CONSTRAINT updates trigger deferrability properly +CREATE TEMP TABLE PKTABLE (ptest1 int primary key); +CREATE TEMP TABLE FKTABLE (ftest1 int); +-- temp tables should go away by themselves, need not drop them. +-- test check constraint adding +create table atacc1 ( test int ); +-- should succeed +insert into atacc1 (test) values (4); +drop table atacc1; +-- let's do one where the check fails when added +create table atacc1 ( test int ); +-- insert a soon to be failing row +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (4); +drop table atacc1; +-- let's do one where the check fails because the column doesn't exist +create table atacc1 ( test int ); +drop table atacc1; +-- something a little more complicated +create table atacc1 ( test int, test2 int, test3 int); +-- should succeed +insert into atacc1 (test,test2,test3) values (4,4,5); +drop table atacc1; +-- inheritance related tests +create table atacc1 (test int); +create table atacc2 (test2 int); +insert into atacc2 (test2) values (3); +drop table atacc2; +drop table atacc1; +-- same things with one created with INHERIT +create table atacc1 (test int); +create table atacc2 (test2 int); +select test2 from atacc2; + test2 +------- +(0 rows) + +drop table atacc1; +-- adding only to a parent is allowed as of 9.2 +create table atacc1 (test int); +-- check constraint is not there on child +insert into atacc2 (test) values (-3); +insert into atacc1 (test) values (3); +drop table atacc2; +drop table atacc1; +-- test unique constraint adding +create table atacc1 ( test int ) ; +-- insert first value +insert into atacc1 (test) values (2); +-- should succeed +insert into atacc1 (test) values (4); +drop table atacc1; +-- let's do one where the unique constraint fails when added +create table atacc1 ( test int ); +-- insert soon to be failing rows +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (3); +drop table atacc1; +-- let's do one where the unique constraint fails +-- because the column doesn't exist +create table atacc1 ( test int ); +drop table atacc1; +-- something a little more complicated +create table atacc1 ( test int, test2 int); +-- insert initial value +insert into atacc1 (test,test2) values (4,4); +-- should all succeed +insert into atacc1 (test,test2) values (4,5); +insert into atacc1 (test,test2) values (5,4); +insert into atacc1 (test,test2) values (5,5); +drop table atacc1; +-- lets do some naming tests +create table atacc1 (test int, test2 int, unique(test)); +-- should fail for @@ second one @@ +insert into atacc1 (test2, test) values (3, 3); +drop table atacc1; +-- test primary key constraint adding +create table atacc1 ( id serial, test int) ; +-- insert first value +insert into atacc1 (test) values (2); +-- should succeed +insert into atacc1 (test) values (4); +drop table atacc1; +-- let's do one where the primary key constraint fails when added +create table atacc1 ( test int ); +-- insert soon to be failing rows +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (3); +drop table atacc1; +-- let's do another one where the primary key constraint fails when added +create table atacc1 ( test int ); +-- insert soon to be failing row +insert into atacc1 (test) values (NULL); +insert into atacc1 (test) values (3); +drop table atacc1; +-- let's do one where the primary key constraint fails +-- because the column doesn't exist +create table atacc1 ( test int ); +drop table atacc1; +-- adding a new column as primary key to a non-empty table. +-- should fail unless the column has a non-null default value. +create table atacc1 ( test int ); +insert into atacc1 (test) values (0); +drop table atacc1; +-- this combination used to have order-of-execution problems (bug #15580) +create table atacc1 (a int); +insert into atacc1 values(1); +drop table atacc1; +-- additionally, we've seen issues with foreign key validation not being +-- properly delayed until after a table rewrite. Check that works ok. +create table atacc1 (a int primary key); +drop table atacc1; +-- we've also seen issues with check constraints being validated at the wrong +-- time when there's a pending table rewrite. +create table atacc1 (a bigint, b int); +insert into atacc1 values(1,1); +drop table atacc1; +-- same as above, but ensure the constraint violation is detected +create table atacc1 (a bigint, b int); +insert into atacc1 values(1,2); +drop table atacc1; +-- something a little more complicated +create table atacc1 ( test int, test2 int); +-- insert initial value +insert into atacc1 (test,test2) values (4,4); +-- should all succeed +insert into atacc1 (test,test2) values (4,5); +insert into atacc1 (test,test2) values (5,4); +insert into atacc1 (test,test2) values (5,5); +drop table atacc1; +-- lets do some naming tests +create table atacc1 (test int, test2 int, primary key(test)); +-- only first should succeed +insert into atacc1 (test2, test) values (3, 3); +drop table atacc1; +-- test setting columns to null and not null and vice versa +-- test checking for null values and primary key +create table atacc1 (test int not null); +insert into atacc1 values (null); +drop table atacc1; +-- set not null verified by constraints +create table atacc1 (test_a int, test_b int); +insert into atacc1 values (null, 1); +insert into atacc1 values (2, null); +drop table atacc1; +-- test inheritance +create table parent (a int); +insert into parent values (NULL); +drop table parent; +-- test setting and removing default values +create table def_test ( + c1 int4 default 5, + c2 text default 'initial_default' +); +drop table def_test; +-- test dropping columns +create table atacc1 (a int4 not null, b int4, c int4 not null, d int4); +insert into atacc1 values (1, 2, 3, 4); +select b,c,d from atacc1; + b | c | d +---+---+--- + 2 | 3 | 4 +(1 row) + +insert into atacc1 values (11, 12, 13); +insert into atacc1 (b,c,d) values (11,12,13); +-- try adding an oid column, should fail (not supported) +alter table atacc1 SET WITH OIDS; +ERROR: syntax error at or near "WITH" +LINE 1: alter table atacc1 SET WITH OIDS; + ^ +create table atacc2 (id int4 unique); +drop table atacc2; +-- test create as and select into +insert into atacc1 values (21, 22, 23); +drop table atacc1; +-- test inheritance +create table parent (a int, b int, c int); +insert into parent values (1, 2, 3); +drop table parent; +-- check error cases for inheritance column merging +create table parent (a float8, b numeric(10,4), c text collate "C"); +drop table parent; +-- test copy in/out +create table attest (a int4, b int4, c int4); +insert into attest values (1,2,3); +drop table attest; +-- test inheritance +create table dropColumn (a int, b int, e int); +create table renameColumn (a int); +-- Test corner cases in dropping of inherited columns +create table p1 (f1 int, f2 int); +create table p1 (f1 int, f2 int); +create table p1 (f1 int, f2 int); +create table p1 (f1 int, f2 int); +create table p1(id int, name text); +create table p2(id2 int, name text, height int); +-- IF EXISTS test +create table dropColumnExists (); +-- test attinhcount tracking with merged columns +create table depth0(); +-- test renumbering of child-table columns in inherited operations +create table p1 (f1 int); +create temp table foo (f1 text, f2 mytype, f3 text); +-- Test index handling in alter table column type (cf. bugs #15835, #15865) +create table anothertab(f1 int primary key, f2 int unique, + f3 int, f4 int, f5 int); +create index on anothertab(f2,f3); +drop table anothertab; +-- test that USING expressions are parsed before column alter type / drop steps +create table another (f1 int, f2 text, f3 text); +insert into another values(1, 'one', 'uno'); +insert into another values(2, 'two', 'due'); +insert into another values(3, 'three', 'tre'); +select * from another; + f1 | f2 | f3 +----+-------+----- + 1 | one | uno + 2 | two | due + 3 | three | tre +(3 rows) + +drop table another; +-- Create an index that skips WAL, then perform a SET DATA TYPE that skips +-- rewriting the index. +begin; +create table skip_wal_skip_rewrite_index (c varchar(10) primary key); +commit; +-- We disallow changing table's row type if it's used for storage +create table at_tab1 (a int, b text); +create table at_tab2 (x int, y at_tab1); +drop table at_tab2; +create table at_tab2 (x int, y at_tab1); +drop table at_tab1, at_tab2; +create table at_part_2 (b text, a int); +insert into at_part_2 values ('1.234', 1024); +create index on at_partitioned (b); +create index on at_partitioned (a); +-- disallow recursive containment of row types +create temp table recur1 (f1 int); +create temp table recur2 (f1 int, f2 recur1); +-- SET STORAGE may need to add a TOAST table +create table test_storage (a text); +-- test that SET STORAGE propagates to index correctly +create index test_storage_idx on test_storage (b, a); +-- ALTER COLUMN TYPE with different schema in children +-- Bug at https://postgr.es/m/20170102225618.GA10071@telsasoft.com +CREATE TABLE test_type_diff (f1 int); +CREATE TABLE test_type_diff2 (int_two int2, int_four int4, int_eight int8); +CREATE TABLE test_type_diff2_c1 (int_four int4, int_eight int8, int_two int2); +CREATE TABLE test_type_diff2_c2 (int_eight int8, int_two int2, int_four int4); +CREATE TABLE test_type_diff2_c3 (int_two int2, int_four int4, int_eight int8); +INSERT INTO test_type_diff2_c1 VALUES (1, 2, 3); +INSERT INTO test_type_diff2_c2 VALUES (4, 5, 6); +INSERT INTO test_type_diff2_c3 VALUES (7, 8, 9); +-- check for rollback of ANALYZE corrupting table property flags (bug #11638) +CREATE TABLE check_fk_presence_1 (id int PRIMARY KEY, t text); +BEGIN; +ROLLBACK; +-- check column addition within a view (bug #14876) +create table at_base_table(id int, stuff text); +insert into at_base_table values (23, 'skidoo'); diff --git a/ydb/library/yql/tests/postgresql/cases/alter_table.sql b/ydb/library/yql/tests/postgresql/cases/alter_table.sql index de42fcae9c2..83705726922 100644 --- a/ydb/library/yql/tests/postgresql/cases/alter_table.sql +++ b/ydb/library/yql/tests/postgresql/cases/alter_table.sql @@ -35,3 +35,332 @@ DROP TABLE attmp; -- rename - check on both non-temp and temp tables -- CREATE TABLE attmp (regtable int); +CREATE TEMP TABLE attmp (attmptable int); +SELECT * FROM attmp; +-- +-- check renaming to a table's array type's autogenerated name +-- (the array type's name should get out of the way) +-- +CREATE TABLE attmp_array (id int); +CREATE TABLE attmp_array2 (id int); +DROP TABLE attmp_array; +-- renaming to table's own array type's name is an interesting corner case +CREATE TABLE attmp_array (id int); +-- rename statements with mismatching statement and object types +CREATE TABLE alter_idx_rename_test (a INT); +CREATE INDEX alter_idx_rename_test_idx ON alter_idx_rename_test (a); +CREATE INDEX alter_idx_rename_test_parted_idx ON alter_idx_rename_test_parted (a); +BEGIN; +COMMIT; +BEGIN; +COMMIT; +BEGIN; +COMMIT; +-- FOREIGN KEY CONSTRAINT adding TEST +CREATE TABLE attmp2 (a int primary key); +CREATE TABLE attmp3 (a int, b int); +CREATE TABLE attmp4 (a int, b int, unique(a,b)); +CREATE TABLE attmp5 (a int, b int); +-- Insert rows into attmp2 (pktable) +INSERT INTO attmp2 values (1); +INSERT INTO attmp2 values (2); +INSERT INTO attmp2 values (3); +INSERT INTO attmp2 values (4); +-- Insert rows into attmp3 +INSERT INTO attmp3 values (1,10); +INSERT INTO attmp3 values (1,20); +INSERT INTO attmp3 values (5,50); +INSERT INTO attmp3 values (5,50); +-- A NO INHERIT constraint should not be looked for in children during VALIDATE CONSTRAINT +create table parent_noinh_convalid (a int); +insert into parent_noinh_convalid values (1); +DROP TABLE attmp5; +DROP TABLE attmp4; +DROP TABLE attmp3; +DROP TABLE attmp2; +-- we leave nv_parent and children around to help test pg_dump logic +-- Foreign key adding test with mixed types +-- Note: these tables are TEMP to avoid name conflicts when this test +-- is run in parallel with foreign_key.sql. +CREATE TEMP TABLE PKTABLE (ptest1 int PRIMARY KEY); +INSERT INTO PKTABLE VALUES(42); +CREATE TEMP TABLE FKTABLE (ftest1 inet); +DROP TABLE FKTABLE; +-- This should succeed, even though they are different types, +-- because int=int8 exists and is a member of the integer opfamily +CREATE TEMP TABLE FKTABLE (ftest1 int8); +-- Check it actually works +INSERT INTO FKTABLE VALUES(42); -- should succeed +DROP TABLE FKTABLE; +-- This should fail, because we'd have to cast numeric to int which is +-- not an implicit coercion (or use numeric=numeric, but that's not part +-- of the integer opfamily) +CREATE TEMP TABLE FKTABLE (ftest1 numeric); +DROP TABLE FKTABLE; +DROP TABLE PKTABLE; +-- On the other hand, this should work because int implicitly promotes to +-- numeric, and we allow promotion on the FK side +CREATE TEMP TABLE PKTABLE (ptest1 numeric PRIMARY KEY); +INSERT INTO PKTABLE VALUES(42); +CREATE TEMP TABLE FKTABLE (ftest1 int); +-- Check it actually works +INSERT INTO FKTABLE VALUES(42); -- should succeed +DROP TABLE FKTABLE; +DROP TABLE PKTABLE; +CREATE TEMP TABLE PKTABLE (ptest1 int, ptest2 inet, + PRIMARY KEY(ptest1, ptest2)); +-- This should fail, because we just chose really odd types +CREATE TEMP TABLE FKTABLE (ftest1 cidr, ftest2 timestamp); +DROP TABLE FKTABLE; +-- Again, so should this... +CREATE TEMP TABLE FKTABLE (ftest1 cidr, ftest2 timestamp); +DROP TABLE FKTABLE; +-- This fails because we mixed up the column ordering +CREATE TEMP TABLE FKTABLE (ftest1 int, ftest2 inet); +DROP TABLE FKTABLE; +DROP TABLE PKTABLE; +-- Test that ALTER CONSTRAINT updates trigger deferrability properly +CREATE TEMP TABLE PKTABLE (ptest1 int primary key); +CREATE TEMP TABLE FKTABLE (ftest1 int); +-- temp tables should go away by themselves, need not drop them. +-- test check constraint adding +create table atacc1 ( test int ); +-- should succeed +insert into atacc1 (test) values (4); +drop table atacc1; +-- let's do one where the check fails when added +create table atacc1 ( test int ); +-- insert a soon to be failing row +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (4); +drop table atacc1; +-- let's do one where the check fails because the column doesn't exist +create table atacc1 ( test int ); +drop table atacc1; +-- something a little more complicated +create table atacc1 ( test int, test2 int, test3 int); +-- should succeed +insert into atacc1 (test,test2,test3) values (4,4,5); +drop table atacc1; +-- inheritance related tests +create table atacc1 (test int); +create table atacc2 (test2 int); +insert into atacc2 (test2) values (3); +drop table atacc2; +drop table atacc1; +-- same things with one created with INHERIT +create table atacc1 (test int); +create table atacc2 (test2 int); +select test2 from atacc2; +drop table atacc1; +-- adding only to a parent is allowed as of 9.2 +create table atacc1 (test int); +-- check constraint is not there on child +insert into atacc2 (test) values (-3); +insert into atacc1 (test) values (3); +drop table atacc2; +drop table atacc1; +-- test unique constraint adding +create table atacc1 ( test int ) ; +-- insert first value +insert into atacc1 (test) values (2); +-- should succeed +insert into atacc1 (test) values (4); +drop table atacc1; +-- let's do one where the unique constraint fails when added +create table atacc1 ( test int ); +-- insert soon to be failing rows +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (3); +drop table atacc1; +-- let's do one where the unique constraint fails +-- because the column doesn't exist +create table atacc1 ( test int ); +drop table atacc1; +-- something a little more complicated +create table atacc1 ( test int, test2 int); +-- insert initial value +insert into atacc1 (test,test2) values (4,4); +-- should all succeed +insert into atacc1 (test,test2) values (4,5); +insert into atacc1 (test,test2) values (5,4); +insert into atacc1 (test,test2) values (5,5); +drop table atacc1; +-- lets do some naming tests +create table atacc1 (test int, test2 int, unique(test)); +-- should fail for @@ second one @@ +insert into atacc1 (test2, test) values (3, 3); +drop table atacc1; +-- test primary key constraint adding +create table atacc1 ( id serial, test int) ; +-- insert first value +insert into atacc1 (test) values (2); +-- should succeed +insert into atacc1 (test) values (4); +drop table atacc1; +-- let's do one where the primary key constraint fails when added +create table atacc1 ( test int ); +-- insert soon to be failing rows +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (2); +insert into atacc1 (test) values (3); +drop table atacc1; +-- let's do another one where the primary key constraint fails when added +create table atacc1 ( test int ); +-- insert soon to be failing row +insert into atacc1 (test) values (NULL); +insert into atacc1 (test) values (3); +drop table atacc1; +-- let's do one where the primary key constraint fails +-- because the column doesn't exist +create table atacc1 ( test int ); +drop table atacc1; +-- adding a new column as primary key to a non-empty table. +-- should fail unless the column has a non-null default value. +create table atacc1 ( test int ); +insert into atacc1 (test) values (0); +drop table atacc1; +-- this combination used to have order-of-execution problems (bug #15580) +create table atacc1 (a int); +insert into atacc1 values(1); +drop table atacc1; +-- additionally, we've seen issues with foreign key validation not being +-- properly delayed until after a table rewrite. Check that works ok. +create table atacc1 (a int primary key); +drop table atacc1; +-- we've also seen issues with check constraints being validated at the wrong +-- time when there's a pending table rewrite. +create table atacc1 (a bigint, b int); +insert into atacc1 values(1,1); +drop table atacc1; +-- same as above, but ensure the constraint violation is detected +create table atacc1 (a bigint, b int); +insert into atacc1 values(1,2); +drop table atacc1; +-- something a little more complicated +create table atacc1 ( test int, test2 int); +-- insert initial value +insert into atacc1 (test,test2) values (4,4); +-- should all succeed +insert into atacc1 (test,test2) values (4,5); +insert into atacc1 (test,test2) values (5,4); +insert into atacc1 (test,test2) values (5,5); +drop table atacc1; +-- lets do some naming tests +create table atacc1 (test int, test2 int, primary key(test)); +-- only first should succeed +insert into atacc1 (test2, test) values (3, 3); +drop table atacc1; +-- test setting columns to null and not null and vice versa +-- test checking for null values and primary key +create table atacc1 (test int not null); +insert into atacc1 values (null); +drop table atacc1; +-- set not null verified by constraints +create table atacc1 (test_a int, test_b int); +insert into atacc1 values (null, 1); +insert into atacc1 values (2, null); +drop table atacc1; +-- test inheritance +create table parent (a int); +insert into parent values (NULL); +drop table parent; +-- test setting and removing default values +create table def_test ( + c1 int4 default 5, + c2 text default 'initial_default' +); +drop table def_test; +-- test dropping columns +create table atacc1 (a int4 not null, b int4, c int4 not null, d int4); +insert into atacc1 values (1, 2, 3, 4); +select b,c,d from atacc1; +insert into atacc1 values (11, 12, 13); +insert into atacc1 (b,c,d) values (11,12,13); +-- try adding an oid column, should fail (not supported) +alter table atacc1 SET WITH OIDS; +create table atacc2 (id int4 unique); +drop table atacc2; +-- test create as and select into +insert into atacc1 values (21, 22, 23); +drop table atacc1; +-- test inheritance +create table parent (a int, b int, c int); +insert into parent values (1, 2, 3); +drop table parent; +-- check error cases for inheritance column merging +create table parent (a float8, b numeric(10,4), c text collate "C"); +drop table parent; +-- test copy in/out +create table attest (a int4, b int4, c int4); +insert into attest values (1,2,3); +drop table attest; +-- test inheritance +create table dropColumn (a int, b int, e int); +create table renameColumn (a int); +-- Test corner cases in dropping of inherited columns +create table p1 (f1 int, f2 int); +create table p1 (f1 int, f2 int); +create table p1 (f1 int, f2 int); +create table p1 (f1 int, f2 int); +create table p1(id int, name text); +create table p2(id2 int, name text, height int); +-- IF EXISTS test +create table dropColumnExists (); +-- test attinhcount tracking with merged columns +create table depth0(); +-- test renumbering of child-table columns in inherited operations +create table p1 (f1 int); +create temp table foo (f1 text, f2 mytype, f3 text); +-- Test index handling in alter table column type (cf. bugs #15835, #15865) +create table anothertab(f1 int primary key, f2 int unique, + f3 int, f4 int, f5 int); +create index on anothertab(f2,f3); +drop table anothertab; +-- test that USING expressions are parsed before column alter type / drop steps +create table another (f1 int, f2 text, f3 text); +insert into another values(1, 'one', 'uno'); +insert into another values(2, 'two', 'due'); +insert into another values(3, 'three', 'tre'); +select * from another; +drop table another; +-- Create an index that skips WAL, then perform a SET DATA TYPE that skips +-- rewriting the index. +begin; +create table skip_wal_skip_rewrite_index (c varchar(10) primary key); +commit; +-- We disallow changing table's row type if it's used for storage +create table at_tab1 (a int, b text); +create table at_tab2 (x int, y at_tab1); +drop table at_tab2; +create table at_tab2 (x int, y at_tab1); +drop table at_tab1, at_tab2; +create table at_part_2 (b text, a int); +insert into at_part_2 values ('1.234', 1024); +create index on at_partitioned (b); +create index on at_partitioned (a); +-- disallow recursive containment of row types +create temp table recur1 (f1 int); +create temp table recur2 (f1 int, f2 recur1); +-- SET STORAGE may need to add a TOAST table +create table test_storage (a text); +-- test that SET STORAGE propagates to index correctly +create index test_storage_idx on test_storage (b, a); +-- ALTER COLUMN TYPE with different schema in children +-- Bug at https://postgr.es/m/20170102225618.GA10071@telsasoft.com +CREATE TABLE test_type_diff (f1 int); +CREATE TABLE test_type_diff2 (int_two int2, int_four int4, int_eight int8); +CREATE TABLE test_type_diff2_c1 (int_four int4, int_eight int8, int_two int2); +CREATE TABLE test_type_diff2_c2 (int_eight int8, int_two int2, int_four int4); +CREATE TABLE test_type_diff2_c3 (int_two int2, int_four int4, int_eight int8); +INSERT INTO test_type_diff2_c1 VALUES (1, 2, 3); +INSERT INTO test_type_diff2_c2 VALUES (4, 5, 6); +INSERT INTO test_type_diff2_c3 VALUES (7, 8, 9); +-- check for rollback of ANALYZE corrupting table property flags (bug #11638) +CREATE TABLE check_fk_presence_1 (id int PRIMARY KEY, t text); +BEGIN; +ROLLBACK; +-- check column addition within a view (bug #14876) +create table at_base_table(id int, stuff text); +insert into at_base_table values (23, 'skidoo'); diff --git a/ydb/library/yql/tests/postgresql/cases/arrays.err b/ydb/library/yql/tests/postgresql/cases/arrays.err index 64a71fac380..a3af3d8777c 100644 --- a/ydb/library/yql/tests/postgresql/cases/arrays.err +++ b/ydb/library/yql/tests/postgresql/cases/arrays.err @@ -431,9 +431,27 @@ CREATE TEMP TABLE arrtest_s ( <sql-statement> INSERT INTO arrtest_s VALUES ('{1,2,3,4,5}', '{{1,2,3}, {4,5,6}, {7,8,9}}'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO arrtest_s VALUES ('{1,2,3,4,5}', '{{1,2,3}, {4,5,6}, {7,8,9}}'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "{1,2,3,4,5}" + + INSERT INTO arrtest_s VALUES ('{1,2,3,4,5}', '{{1,2,3}, {4,5,6}, {7,8,9}}'); + ^ <sql-statement> INSERT INTO arrtest_s VALUES ('[0:4]={1,2,3,4,5}', '[0:2][0:2]={{1,2,3}, {4,5,6}, {7,8,9}}'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO arrtest_s VALUES ('[0:4]={1,2,3,4,5}', '[0:2][0:2]={{1,2,3}, {4,5,6}, {7,8,9}}'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type smallint: "[0:4]={1,2,3,4,5}" + + INSERT INTO arrtest_s VALUES ('[0:4]={1,2,3,4,5}', '[0:2][0:2]={{1,2,3}, {4,5,6}, {7,8,9}}'); + ^ <sql-statement> SELECT * FROM arrtest_s; </sql-statement> @@ -589,6 +607,20 @@ CREATE TEMP TABLE arrtest1 (i int[], t text[]); <sql-statement> insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); </sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: YtWriteTable! + insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); + ^ + -stdin-:<main>:1:1: Error: Failed to convert type: List<Struct<'i':_pgint4,'t':_pgtext>> to List<Struct<'i':pgint4,'t':pgtext>> + insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); + ^ + -stdin-:<main>:1:1: Error: Failed to convert 'i': _pgint4 to pgint4 + insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); + ^ + -stdin-:<main>:1:1: Error: Table "arrtest1" row type differs from the written row type: Struct<i:pgint4!=_pgint4,t:pgtext!=_pgtext> + insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); + ^ <sql-statement> select * from arrtest1; </sql-statement> @@ -722,6 +754,20 @@ delete from arrtest1; <sql-statement> insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); </sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: YtWriteTable! + insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); + ^ + -stdin-:<main>:1:1: Error: Failed to convert type: List<Struct<'i':_pgint4,'t':_pgtext>> to List<Struct<'i':pgint4,'t':pgtext>> + insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); + ^ + -stdin-:<main>:1:1: Error: Failed to convert 'i': _pgint4 to pgint4 + insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); + ^ + -stdin-:<main>:1:1: Error: Table "arrtest1" row type differs from the written row type: Struct<i:pgint4!=_pgint4,t:pgtext!=_pgtext> + insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); + ^ <sql-statement> select * from arrtest1; </sql-statement> @@ -751,6 +797,20 @@ INSERT INTO arrtest2 VALUES( ARRAY['19620326','19931223','19970117']::timestamp[] ); </sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: YtWriteTable! + INSERT INTO arrtest2 VALUES( + ^ + -stdin-:<main>:1:1: Error: Failed to convert type: List<Struct<'d':_pgtimestamp,'f':_pgfloat8,'i':_pgint4,'n':_pgnumeric,'t':_pgtext>> to List<Struct<'d':pgtimestamp,'f':pgfloat8,'i':pgint4,'n':pgnumeric,'t':pgtext>> + INSERT INTO arrtest2 VALUES( + ^ + -stdin-:<main>:1:1: Error: Failed to convert 'd': _pgtimestamp to pgtimestamp + INSERT INTO arrtest2 VALUES( + ^ + -stdin-:<main>:1:1: Error: Table "arrtest2" row type differs from the written row type: Struct<d:pgtimestamp!=_pgtimestamp,f:pgfloat8!=_pgfloat8,i:pgint4!=_pgint4,n:pgnumeric!=_pgnumeric,t:pgtext!=_pgtext> + INSERT INTO arrtest2 VALUES( + ^ <sql-statement> -- some more test data CREATE TEMP TABLE arrtest_f (f0 int, f1 text, f2 float8); @@ -1715,22 +1775,76 @@ create temp table arr_tbl (f1 int[] unique); <sql-statement> insert into arr_tbl values ('{1,2,3}'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + insert into arr_tbl values ('{1,2,3}'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "{1,2,3}" + + insert into arr_tbl values ('{1,2,3}'); + ^ <sql-statement> insert into arr_tbl values ('{1,2}'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + insert into arr_tbl values ('{1,2}'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "{1,2}" + + insert into arr_tbl values ('{1,2}'); + ^ <sql-statement> -- failure expected: insert into arr_tbl values ('{1,2,3}'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- failure expected: + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "{1,2,3}" + + -- failure expected: + ^ <sql-statement> insert into arr_tbl values ('{2,3,4}'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + insert into arr_tbl values ('{2,3,4}'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "{2,3,4}" + + insert into arr_tbl values ('{2,3,4}'); + ^ <sql-statement> insert into arr_tbl values ('{1,5,3}'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + insert into arr_tbl values ('{1,5,3}'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "{1,5,3}" + + insert into arr_tbl values ('{1,5,3}'); + ^ <sql-statement> insert into arr_tbl values ('{1,2,10}'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + insert into arr_tbl values ('{1,2,10}'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "{1,2,10}" + + insert into arr_tbl values ('{1,2,10}'); + ^ <sql-statement> set enable_seqscan to off; </sql-statement> @@ -1760,6 +1874,15 @@ create temp table arr_pk_tbl (pk int4 primary key, f1 int[]); <sql-statement> insert into arr_pk_tbl values (1, '{1,2,3}'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + insert into arr_pk_tbl values (1, '{1,2,3}'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type integer: "{1,2,3}" + + insert into arr_pk_tbl values (1, '{1,2,3}'); + ^ <sql-statement> insert into arr_pk_tbl values (1, '{3,4,5}') on conflict (pk) do update set f1[1] = excluded.f1[1], f1[3] = excluded.f1[3] @@ -2176,12 +2299,10 @@ create type _comptype as enum('fooey'); <sql-statement> select * from comptable; </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table comptable + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.comptable - -stdin-:<main>: Error: Failed to parse row spec: No such type: comptype - <sql-statement> select c2[2].f2 from comptable; </sql-statement> @@ -2758,15 +2879,13 @@ select unnest(array[1,2,3]); <sql-statement> select * from unnest(array[1,2,3]); </sql-statement> --stdin-:<main>: Error: Type annotation +-stdin-:<main>: Fatal: Execution - -stdin-:<main>:1:1: Error: At function: ResWrite! + -stdin-:<main>:1:1: Fatal: Execution of node: Result select * from unnest(array[1,2,3]); ^ - -stdin-:<main>:1:1: Error: Expected persistable data, but got: List<Struct<'unnest':pganyelement>> - select * from unnest(array[1,2,3]); - ^ - -stdin-:<main>:1:1: Error: Persistable required. Atom, type, key, world, datasink, datasource, callable, resource, stream and lambda are not persistable + -stdin-:<main>:1:1: Fatal: ERROR: cannot display a value of type anyelement + select * from unnest(array[1,2,3]); ^ <sql-statement> @@ -3018,21 +3137,17 @@ create temp table t1 (f1 int8_tbl[]); <sql-statement> insert into t1 (f1[5].q1) values(42); </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table t1 + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.t1 - -stdin-:<main>: Error: Failed to parse row spec: No such type: int8_tbl - <sql-statement> select * from t1; </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table t1 + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.t1 - -stdin-:<main>: Error: Failed to parse row spec: No such type: int8_tbl - <sql-statement> update t1 set f1[5].q2 = 43; </sql-statement> @@ -3043,12 +3158,10 @@ update t1 set f1[5].q2 = 43; <sql-statement> select * from t1; </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table t1 + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.t1 - -stdin-:<main>: Error: Failed to parse row spec: No such type: int8_tbl - <sql-statement> -- Check that arrays of composites are safely detoasted when needed create temp table src (f1 text); diff --git a/ydb/library/yql/tests/postgresql/cases/arrays.out b/ydb/library/yql/tests/postgresql/cases/arrays.out index 4d465e1936e..cd59faf55b9 100644 --- a/ydb/library/yql/tests/postgresql/cases/arrays.out +++ b/ydb/library/yql/tests/postgresql/cases/arrays.out @@ -28,27 +28,16 @@ CREATE TEMP TABLE arrtest_s ( a int2[], b int2[][] ); -INSERT INTO arrtest_s VALUES ('{1,2,3,4,5}', '{{1,2,3}, {4,5,6}, {7,8,9}}'); -INSERT INTO arrtest_s VALUES ('[0:4]={1,2,3,4,5}', '[0:2][0:2]={{1,2,3}, {4,5,6}, {7,8,9}}'); INSERT INTO arrtest_s VALUES(NULL, NULL); -- -- test array extension -- CREATE TEMP TABLE arrtest1 (i int[], t text[]); -insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); -insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); -- -- array expressions and operators -- -- table creation and INSERTs CREATE TEMP TABLE arrtest2 (i integer ARRAY[4], f float8[], n numeric[], t text[], d timestamp[]); -INSERT INTO arrtest2 VALUES( - ARRAY[[[113,142],[1,147]]], - ARRAY[1.1,1.2,1.3]::float8[], - ARRAY[1.1,1.2,1.3], - ARRAY[[['aaa','aab'],['aba','abb'],['aca','acb']],[['baa','bab'],['bba','bbb'],['bca','bcb']]], - ARRAY['19620326','19931223','19970117']::timestamp[] -); -- some more test data CREATE TEMP TABLE arrtest_f (f0 int, f1 text, f2 float8); insert into arrtest_f values(1,'cat1',1.21); @@ -128,14 +117,8 @@ SELECT NULL::text[]::int[] AS "NULL"; -- test indexes on arrays create temp table arr_tbl (f1 int[] unique); -insert into arr_tbl values ('{1,2,3}'); -insert into arr_tbl values ('{1,2}'); -insert into arr_tbl values ('{2,3,4}'); -insert into arr_tbl values ('{1,5,3}'); -insert into arr_tbl values ('{1,2,10}'); -- test ON CONFLICT DO UPDATE with arrays create temp table arr_pk_tbl (pk int4 primary key, f1 int[]); -insert into arr_pk_tbl values (1, '{1,2,3}'); -- -- General array parser tests -- diff --git a/ydb/library/yql/tests/postgresql/cases/arrays.sql b/ydb/library/yql/tests/postgresql/cases/arrays.sql index 6ea0b28eb96..b9fe238d06f 100644 --- a/ydb/library/yql/tests/postgresql/cases/arrays.sql +++ b/ydb/library/yql/tests/postgresql/cases/arrays.sql @@ -18,27 +18,16 @@ CREATE TEMP TABLE arrtest_s ( a int2[], b int2[][] ); -INSERT INTO arrtest_s VALUES ('{1,2,3,4,5}', '{{1,2,3}, {4,5,6}, {7,8,9}}'); -INSERT INTO arrtest_s VALUES ('[0:4]={1,2,3,4,5}', '[0:2][0:2]={{1,2,3}, {4,5,6}, {7,8,9}}'); INSERT INTO arrtest_s VALUES(NULL, NULL); -- -- test array extension -- CREATE TEMP TABLE arrtest1 (i int[], t text[]); -insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); -insert into arrtest1 values(array[1,2,null,4], array['one','two',null,'four']); -- -- array expressions and operators -- -- table creation and INSERTs CREATE TEMP TABLE arrtest2 (i integer ARRAY[4], f float8[], n numeric[], t text[], d timestamp[]); -INSERT INTO arrtest2 VALUES( - ARRAY[[[113,142],[1,147]]], - ARRAY[1.1,1.2,1.3]::float8[], - ARRAY[1.1,1.2,1.3], - ARRAY[[['aaa','aab'],['aba','abb'],['aca','acb']],[['baa','bab'],['bba','bbb'],['bca','bcb']]], - ARRAY['19620326','19931223','19970117']::timestamp[] -); -- some more test data CREATE TEMP TABLE arrtest_f (f0 int, f1 text, f2 float8); insert into arrtest_f values(1,'cat1',1.21); @@ -73,14 +62,8 @@ SELECT CAST(ARRAY[[[[[['a','bb','ccc']]]]]] as text[]) as "{{{{{{a,bb,ccc}}}}}}" SELECT NULL::text[]::int[] AS "NULL"; -- test indexes on arrays create temp table arr_tbl (f1 int[] unique); -insert into arr_tbl values ('{1,2,3}'); -insert into arr_tbl values ('{1,2}'); -insert into arr_tbl values ('{2,3,4}'); -insert into arr_tbl values ('{1,5,3}'); -insert into arr_tbl values ('{1,2,10}'); -- test ON CONFLICT DO UPDATE with arrays create temp table arr_pk_tbl (pk int4 primary key, f1 int[]); -insert into arr_pk_tbl values (1, '{1,2,3}'); -- -- General array parser tests -- diff --git a/ydb/library/yql/tests/postgresql/cases/bit.out b/ydb/library/yql/tests/postgresql/cases/bit.out index d95c6968977..f62c350304d 100644 --- a/ydb/library/yql/tests/postgresql/cases/bit.out +++ b/ydb/library/yql/tests/postgresql/cases/bit.out @@ -289,12 +289,144 @@ INSERT INTO BIT_SHIFT_TABLE SELECT b>>1 FROM BIT_SHIFT_TABLE; INSERT INTO BIT_SHIFT_TABLE SELECT b>>2 FROM BIT_SHIFT_TABLE; INSERT INTO BIT_SHIFT_TABLE SELECT b>>4 FROM BIT_SHIFT_TABLE; INSERT INTO BIT_SHIFT_TABLE SELECT b>>8 FROM BIT_SHIFT_TABLE; +SELECT b, b >> 1 AS bsr, b << 1 AS bsl + FROM BIT_SHIFT_TABLE ; + b | bsr | bsl +------------------+------------------+------------------ + 1101100000000000 | 0110110000000000 | 1011000000000000 + 0110110000000000 | 0011011000000000 | 1101100000000000 + 0011011000000000 | 0001101100000000 | 0110110000000000 + 0001101100000000 | 0000110110000000 | 0011011000000000 + 0000110110000000 | 0000011011000000 | 0001101100000000 + 0000011011000000 | 0000001101100000 | 0000110110000000 + 0000001101100000 | 0000000110110000 | 0000011011000000 + 0000000110110000 | 0000000011011000 | 0000001101100000 + 0000000011011000 | 0000000001101100 | 0000000110110000 + 0000000001101100 | 0000000000110110 | 0000000011011000 + 0000000000110110 | 0000000000011011 | 0000000001101100 + 0000000000011011 | 0000000000001101 | 0000000000110110 + 0000000000001101 | 0000000000000110 | 0000000000011010 + 0000000000000110 | 0000000000000011 | 0000000000001100 + 0000000000000011 | 0000000000000001 | 0000000000000110 + 0000000000000001 | 0000000000000000 | 0000000000000010 +(16 rows) + +SELECT b, b >> 8 AS bsr8, b << 8 AS bsl8 + FROM BIT_SHIFT_TABLE ; + b | bsr8 | bsl8 +------------------+------------------+------------------ + 1101100000000000 | 0000000011011000 | 0000000000000000 + 0110110000000000 | 0000000001101100 | 0000000000000000 + 0011011000000000 | 0000000000110110 | 0000000000000000 + 0001101100000000 | 0000000000011011 | 0000000000000000 + 0000110110000000 | 0000000000001101 | 1000000000000000 + 0000011011000000 | 0000000000000110 | 1100000000000000 + 0000001101100000 | 0000000000000011 | 0110000000000000 + 0000000110110000 | 0000000000000001 | 1011000000000000 + 0000000011011000 | 0000000000000000 | 1101100000000000 + 0000000001101100 | 0000000000000000 | 0110110000000000 + 0000000000110110 | 0000000000000000 | 0011011000000000 + 0000000000011011 | 0000000000000000 | 0001101100000000 + 0000000000001101 | 0000000000000000 | 0000110100000000 + 0000000000000110 | 0000000000000000 | 0000011000000000 + 0000000000000011 | 0000000000000000 | 0000001100000000 + 0000000000000001 | 0000000000000000 | 0000000100000000 +(16 rows) + +SELECT b::bit(15), b::bit(15) >> 1 AS bsr, b::bit(15) << 1 AS bsl + FROM BIT_SHIFT_TABLE ; + b | bsr | bsl +-----------------+-----------------+----------------- + 110110000000000 | 011011000000000 | 101100000000000 + 011011000000000 | 001101100000000 | 110110000000000 + 001101100000000 | 000110110000000 | 011011000000000 + 000110110000000 | 000011011000000 | 001101100000000 + 000011011000000 | 000001101100000 | 000110110000000 + 000001101100000 | 000000110110000 | 000011011000000 + 000000110110000 | 000000011011000 | 000001101100000 + 000000011011000 | 000000001101100 | 000000110110000 + 000000001101100 | 000000000110110 | 000000011011000 + 000000000110110 | 000000000011011 | 000000001101100 + 000000000011011 | 000000000001101 | 000000000110110 + 000000000001101 | 000000000000110 | 000000000011010 + 000000000000110 | 000000000000011 | 000000000001100 + 000000000000011 | 000000000000001 | 000000000000110 + 000000000000001 | 000000000000000 | 000000000000010 + 000000000000000 | 000000000000000 | 000000000000000 +(16 rows) + +SELECT b::bit(15), b::bit(15) >> 8 AS bsr8, b::bit(15) << 8 AS bsl8 + FROM BIT_SHIFT_TABLE ; + b | bsr8 | bsl8 +-----------------+-----------------+----------------- + 110110000000000 | 000000001101100 | 000000000000000 + 011011000000000 | 000000000110110 | 000000000000000 + 001101100000000 | 000000000011011 | 000000000000000 + 000110110000000 | 000000000001101 | 000000000000000 + 000011011000000 | 000000000000110 | 100000000000000 + 000001101100000 | 000000000000011 | 110000000000000 + 000000110110000 | 000000000000001 | 011000000000000 + 000000011011000 | 000000000000000 | 101100000000000 + 000000001101100 | 000000000000000 | 110110000000000 + 000000000110110 | 000000000000000 | 011011000000000 + 000000000011011 | 000000000000000 | 001101100000000 + 000000000001101 | 000000000000000 | 000110100000000 + 000000000000110 | 000000000000000 | 000011000000000 + 000000000000011 | 000000000000000 | 000001100000000 + 000000000000001 | 000000000000000 | 000000100000000 + 000000000000000 | 000000000000000 | 000000000000000 +(16 rows) + CREATE TABLE VARBIT_SHIFT_TABLE(v BIT VARYING(20)); INSERT INTO VARBIT_SHIFT_TABLE VALUES (B'11011'); INSERT INTO VARBIT_SHIFT_TABLE SELECT CAST(v || B'0' AS BIT VARYING(6)) >>1 FROM VARBIT_SHIFT_TABLE; INSERT INTO VARBIT_SHIFT_TABLE SELECT CAST(v || B'00' AS BIT VARYING(8)) >>2 FROM VARBIT_SHIFT_TABLE; INSERT INTO VARBIT_SHIFT_TABLE SELECT CAST(v || B'0000' AS BIT VARYING(12)) >>4 FROM VARBIT_SHIFT_TABLE; INSERT INTO VARBIT_SHIFT_TABLE SELECT CAST(v || B'00000000' AS BIT VARYING(20)) >>8 FROM VARBIT_SHIFT_TABLE; +SELECT v, v >> 1 AS vsr, v << 1 AS vsl + FROM VARBIT_SHIFT_TABLE ; + v | vsr | vsl +----------------------+----------------------+---------------------- + 11011 | 01101 | 10110 + 011011 | 001101 | 110110 + 0011011 | 0001101 | 0110110 + 00011011 | 00001101 | 00110110 + 000011011 | 000001101 | 000110110 + 0000011011 | 0000001101 | 0000110110 + 00000011011 | 00000001101 | 00000110110 + 000000011011 | 000000001101 | 000000110110 + 0000000011011 | 0000000001101 | 0000000110110 + 00000000011011 | 00000000001101 | 00000000110110 + 000000000011011 | 000000000001101 | 000000000110110 + 0000000000011011 | 0000000000001101 | 0000000000110110 + 00000000000011011 | 00000000000001101 | 00000000000110110 + 000000000000011011 | 000000000000001101 | 000000000000110110 + 0000000000000011011 | 0000000000000001101 | 0000000000000110110 + 00000000000000011011 | 00000000000000001101 | 00000000000000110110 +(16 rows) + +SELECT v, v >> 8 AS vsr8, v << 8 AS vsl8 + FROM VARBIT_SHIFT_TABLE ; + v | vsr8 | vsl8 +----------------------+----------------------+---------------------- + 11011 | 00000 | 00000 + 011011 | 000000 | 000000 + 0011011 | 0000000 | 0000000 + 00011011 | 00000000 | 00000000 + 000011011 | 000000000 | 100000000 + 0000011011 | 0000000000 | 1100000000 + 00000011011 | 00000000000 | 01100000000 + 000000011011 | 000000000000 | 101100000000 + 0000000011011 | 0000000000000 | 1101100000000 + 00000000011011 | 00000000000000 | 01101100000000 + 000000000011011 | 000000000000000 | 001101100000000 + 0000000000011011 | 0000000000000000 | 0001101100000000 + 00000000000011011 | 00000000000000000 | 00001101100000000 + 000000000000011011 | 000000000000000000 | 000001101100000000 + 0000000000000011011 | 0000000000000000000 | 0000001101100000000 + 00000000000000011011 | 00000000000000000000 | 00000001101100000000 +(16 rows) + DROP TABLE BIT_SHIFT_TABLE; DROP TABLE VARBIT_SHIFT_TABLE; -- Get/Set bit diff --git a/ydb/library/yql/tests/postgresql/cases/bit.sql b/ydb/library/yql/tests/postgresql/cases/bit.sql index c46e4f96c87..736b3f7a4da 100644 --- a/ydb/library/yql/tests/postgresql/cases/bit.sql +++ b/ydb/library/yql/tests/postgresql/cases/bit.sql @@ -74,12 +74,24 @@ INSERT INTO BIT_SHIFT_TABLE SELECT b>>1 FROM BIT_SHIFT_TABLE; INSERT INTO BIT_SHIFT_TABLE SELECT b>>2 FROM BIT_SHIFT_TABLE; INSERT INTO BIT_SHIFT_TABLE SELECT b>>4 FROM BIT_SHIFT_TABLE; INSERT INTO BIT_SHIFT_TABLE SELECT b>>8 FROM BIT_SHIFT_TABLE; +SELECT b, b >> 1 AS bsr, b << 1 AS bsl + FROM BIT_SHIFT_TABLE ; +SELECT b, b >> 8 AS bsr8, b << 8 AS bsl8 + FROM BIT_SHIFT_TABLE ; +SELECT b::bit(15), b::bit(15) >> 1 AS bsr, b::bit(15) << 1 AS bsl + FROM BIT_SHIFT_TABLE ; +SELECT b::bit(15), b::bit(15) >> 8 AS bsr8, b::bit(15) << 8 AS bsl8 + FROM BIT_SHIFT_TABLE ; CREATE TABLE VARBIT_SHIFT_TABLE(v BIT VARYING(20)); INSERT INTO VARBIT_SHIFT_TABLE VALUES (B'11011'); INSERT INTO VARBIT_SHIFT_TABLE SELECT CAST(v || B'0' AS BIT VARYING(6)) >>1 FROM VARBIT_SHIFT_TABLE; INSERT INTO VARBIT_SHIFT_TABLE SELECT CAST(v || B'00' AS BIT VARYING(8)) >>2 FROM VARBIT_SHIFT_TABLE; INSERT INTO VARBIT_SHIFT_TABLE SELECT CAST(v || B'0000' AS BIT VARYING(12)) >>4 FROM VARBIT_SHIFT_TABLE; INSERT INTO VARBIT_SHIFT_TABLE SELECT CAST(v || B'00000000' AS BIT VARYING(20)) >>8 FROM VARBIT_SHIFT_TABLE; +SELECT v, v >> 1 AS vsr, v << 1 AS vsl + FROM VARBIT_SHIFT_TABLE ; +SELECT v, v >> 8 AS vsr8, v << 8 AS vsl8 + FROM VARBIT_SHIFT_TABLE ; DROP TABLE BIT_SHIFT_TABLE; DROP TABLE VARBIT_SHIFT_TABLE; -- Get/Set bit diff --git a/ydb/library/yql/tests/postgresql/cases/boolean.err b/ydb/library/yql/tests/postgresql/cases/boolean.err index f7581ce490d..08d82b2a78c 100644 --- a/ydb/library/yql/tests/postgresql/cases/boolean.err +++ b/ydb/library/yql/tests/postgresql/cases/boolean.err @@ -486,7 +486,7 @@ FROM booltbl3 ORDER BY o; CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool); </sql-statement> <sql-statement> -INSERT INTO booltbl4 (isfalse, istrue, isnul) VALUES (false, true, null); +INSERT INTO booltbl4 VALUES (false, true, null); </sql-statement> <sql-statement> \pset null '(null)' diff --git a/ydb/library/yql/tests/postgresql/cases/boolean.out b/ydb/library/yql/tests/postgresql/cases/boolean.out index 7968cce3330..df3bf261e24 100644 --- a/ydb/library/yql/tests/postgresql/cases/boolean.out +++ b/ydb/library/yql/tests/postgresql/cases/boolean.out @@ -303,7 +303,7 @@ INSERT INTO BOOLTBL3 (d, b, o) VALUES ('null', null, 3); -- correct. Use a table as source to prevent constant simplification -- to interfer. CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool); -INSERT INTO booltbl4 (isfalse, istrue, isnul) VALUES (false, true, null); +INSERT INTO booltbl4 VALUES (false, true, null); \pset null '(null)' -- AND expression need to return null if there's any nulls and not all -- of the value are true diff --git a/ydb/library/yql/tests/postgresql/cases/boolean.sql b/ydb/library/yql/tests/postgresql/cases/boolean.sql index 1bf491488ba..55f2b707f06 100644 --- a/ydb/library/yql/tests/postgresql/cases/boolean.sql +++ b/ydb/library/yql/tests/postgresql/cases/boolean.sql @@ -90,7 +90,7 @@ INSERT INTO BOOLTBL3 (d, b, o) VALUES ('null', null, 3); -- correct. Use a table as source to prevent constant simplification -- to interfer. CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool); -INSERT INTO booltbl4 (isfalse, istrue, isnul) VALUES (false, true, null); +INSERT INTO booltbl4 VALUES (false, true, null); \pset null '(null)' -- AND expression need to return null if there's any nulls and not all -- of the value are true diff --git a/ydb/library/yql/tests/postgresql/cases/case.out b/ydb/library/yql/tests/postgresql/cases/case.out index c1bf7dc9c62..17fa1f5d381 100644 --- a/ydb/library/yql/tests/postgresql/cases/case.out +++ b/ydb/library/yql/tests/postgresql/cases/case.out @@ -101,6 +101,111 @@ SELECT CASE 'a' WHEN 'a' THEN 1 ELSE 2 END; (1 row) -- +-- Examples of targets involving tables +-- +SELECT + CASE + WHEN i >= 3 THEN i + END AS ">= 3 or Null" + FROM CASE_TBL; + >= 3 or Null +-------------- + + + 3 + 4 +(4 rows) + +SELECT + CASE WHEN i >= 3 THEN (i + i) + ELSE i + END AS "Simplest Math" + FROM CASE_TBL; + Simplest Math +--------------- + 1 + 2 + 6 + 8 +(4 rows) + +SELECT i AS "Value", + CASE WHEN (i < 0) THEN 'small' + WHEN (i = 0) THEN 'zero' + WHEN (i = 1) THEN 'one' + WHEN (i = 2) THEN 'two' + ELSE 'big' + END AS "Category" + FROM CASE_TBL; + Value | Category +-------+---------- + 1 | one + 2 | two + 3 | big + 4 | big +(4 rows) + +SELECT + CASE WHEN ((i < 0) or (i < 0)) THEN 'small' + WHEN ((i = 0) or (i = 0)) THEN 'zero' + WHEN ((i = 1) or (i = 1)) THEN 'one' + WHEN ((i = 2) or (i = 2)) THEN 'two' + ELSE 'big' + END AS "Category" + FROM CASE_TBL; + Category +---------- + one + two + big + big +(4 rows) + +-- +-- Examples of qualifications involving tables +-- +-- +-- NULLIF() and COALESCE() +-- Shorthand forms for typical CASE constructs +-- defined in the SQL standard. +-- +SELECT * FROM CASE_TBL WHERE COALESCE(f,i) = 4; + i | f +---+--- + 4 | +(1 row) + +SELECT COALESCE(a.f, b.i, b.j) + FROM CASE_TBL a, CASE2_TBL b; + coalesce +---------- + 10.1 + 20.2 + -30.3 + 1 + 10.1 + 20.2 + -30.3 + 2 + 10.1 + 20.2 + -30.3 + 3 + 10.1 + 20.2 + -30.3 + 2 + 10.1 + 20.2 + -30.3 + 1 + 10.1 + 20.2 + -30.3 + -6 +(24 rows) + +-- -- Nested CASE expressions -- -- This test exercises a bug caused by aliasing econtext->caseValue_isNull diff --git a/ydb/library/yql/tests/postgresql/cases/case.sql b/ydb/library/yql/tests/postgresql/cases/case.sql index a052c3082a2..91f5ce0a9fb 100644 --- a/ydb/library/yql/tests/postgresql/cases/case.sql +++ b/ydb/library/yql/tests/postgresql/cases/case.sql @@ -56,6 +56,46 @@ SELECT CASE 1 WHEN 0 THEN 1/0 WHEN 1 THEN 1 ELSE 2/0 END; -- Test for cases involving untyped literals in test expression SELECT CASE 'a' WHEN 'a' THEN 1 ELSE 2 END; -- +-- Examples of targets involving tables +-- +SELECT + CASE + WHEN i >= 3 THEN i + END AS ">= 3 or Null" + FROM CASE_TBL; +SELECT + CASE WHEN i >= 3 THEN (i + i) + ELSE i + END AS "Simplest Math" + FROM CASE_TBL; +SELECT i AS "Value", + CASE WHEN (i < 0) THEN 'small' + WHEN (i = 0) THEN 'zero' + WHEN (i = 1) THEN 'one' + WHEN (i = 2) THEN 'two' + ELSE 'big' + END AS "Category" + FROM CASE_TBL; +SELECT + CASE WHEN ((i < 0) or (i < 0)) THEN 'small' + WHEN ((i = 0) or (i = 0)) THEN 'zero' + WHEN ((i = 1) or (i = 1)) THEN 'one' + WHEN ((i = 2) or (i = 2)) THEN 'two' + ELSE 'big' + END AS "Category" + FROM CASE_TBL; +-- +-- Examples of qualifications involving tables +-- +-- +-- NULLIF() and COALESCE() +-- Shorthand forms for typical CASE constructs +-- defined in the SQL standard. +-- +SELECT * FROM CASE_TBL WHERE COALESCE(f,i) = 4; +SELECT COALESCE(a.f, b.i, b.j) + FROM CASE_TBL a, CASE2_TBL b; +-- -- Nested CASE expressions -- -- This test exercises a bug caused by aliasing econtext->caseValue_isNull diff --git a/ydb/library/yql/tests/postgresql/cases/date.err b/ydb/library/yql/tests/postgresql/cases/date.err index 4b9c022e60a..2caf0f8957e 100644 --- a/ydb/library/yql/tests/postgresql/cases/date.err +++ b/ydb/library/yql/tests/postgresql/cases/date.err @@ -28,6 +28,15 @@ INSERT INTO DATE_TBL VALUES ('1997-02-28'); <sql-statement> INSERT INTO DATE_TBL VALUES ('1997-02-29'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO DATE_TBL VALUES ('1997-02-29'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "1997-02-29" + + INSERT INTO DATE_TBL VALUES ('1997-02-29'); + ^ <sql-statement> INSERT INTO DATE_TBL VALUES ('1997-03-01'); </sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/date.out b/ydb/library/yql/tests/postgresql/cases/date.out index 2ad9bdfb931..c9b3bb74d9e 100644 --- a/ydb/library/yql/tests/postgresql/cases/date.out +++ b/ydb/library/yql/tests/postgresql/cases/date.out @@ -9,6 +9,10 @@ INSERT INTO DATE_TBL VALUES ('1996-02-29'); INSERT INTO DATE_TBL VALUES ('1996-03-01'); INSERT INTO DATE_TBL VALUES ('1996-03-02'); INSERT INTO DATE_TBL VALUES ('1997-02-28'); +INSERT INTO DATE_TBL VALUES ('1997-02-29'); +ERROR: date/time field value out of range: "1997-02-29" +LINE 1: INSERT INTO DATE_TBL VALUES ('1997-02-29'); + ^ INSERT INTO DATE_TBL VALUES ('1997-03-01'); INSERT INTO DATE_TBL VALUES ('1997-03-02'); INSERT INTO DATE_TBL VALUES ('2000-04-01'); @@ -585,6 +589,52 @@ SELECT date '5874898-01-01'; -- out of range ERROR: date out of range: "5874898-01-01" LINE 1: SELECT date '5874898-01-01'; ^ +-- +-- Simple math +-- Leave most of it for the horology tests +-- +SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL; + Days From 2K +-------------- + -15607 + -15542 + -1403 + -1402 + -1401 + -1400 + -1037 + -1036 + -1035 + 91 + 92 + 93 + 13977 + 14343 + 14710 + -1475115 +(16 rows) + +SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL; + Days From Epoch +----------------- + -4650 + -4585 + 9554 + 9555 + 9556 + 9557 + 9920 + 9921 + 9922 + 11048 + 11049 + 11050 + 24934 + 25300 + 25667 + -1464158 +(16 rows) + SELECT date 'yesterday' - date 'today' AS "One day"; One day --------- diff --git a/ydb/library/yql/tests/postgresql/cases/date.sql b/ydb/library/yql/tests/postgresql/cases/date.sql index 59d6806785b..ad341d91b3a 100644 --- a/ydb/library/yql/tests/postgresql/cases/date.sql +++ b/ydb/library/yql/tests/postgresql/cases/date.sql @@ -9,6 +9,7 @@ INSERT INTO DATE_TBL VALUES ('1996-02-29'); INSERT INTO DATE_TBL VALUES ('1996-03-01'); INSERT INTO DATE_TBL VALUES ('1996-03-02'); INSERT INTO DATE_TBL VALUES ('1997-02-28'); +INSERT INTO DATE_TBL VALUES ('1997-02-29'); INSERT INTO DATE_TBL VALUES ('1997-03-01'); INSERT INTO DATE_TBL VALUES ('1997-03-02'); INSERT INTO DATE_TBL VALUES ('2000-04-01'); @@ -119,6 +120,12 @@ SELECT date '4714-11-24 BC'; SELECT date '4714-11-23 BC'; -- out of range SELECT date '5874897-12-31'; SELECT date '5874898-01-01'; -- out of range +-- +-- Simple math +-- Leave most of it for the horology tests +-- +SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL; +SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL; SELECT date 'yesterday' - date 'today' AS "One day"; SELECT date 'today' - date 'tomorrow' AS "One day"; SELECT date 'yesterday' - date 'tomorrow' AS "Two days"; diff --git a/ydb/library/yql/tests/postgresql/cases/insert.err b/ydb/library/yql/tests/postgresql/cases/insert.err index 7466912857a..dc5d6f10305 100644 --- a/ydb/library/yql/tests/postgresql/cases/insert.err +++ b/ydb/library/yql/tests/postgresql/cases/insert.err @@ -197,30 +197,24 @@ create table inserttest (f1 int, f2 int[], <sql-statement> insert into inserttest (f2[1], f2[2]) values (1,2); </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f2[1], f2[2]) values (3,4), (5,6); </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f2[1], f2[2]) select 7,8; </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f2[1], f2[2]) values (1,default); -- not supported </sql-statement> @@ -232,30 +226,24 @@ insert into inserttest (f2[1], f2[2]) values (1,default); -- not supported <sql-statement> insert into inserttest (f3.if1, f3.if2) values (1,array['foo']); </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f3.if1, f3.if2) values (1,'{foo}'), (2,'{bar}'); </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f3.if1, f3.if2) select 3, '{baz,quux}'; </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f3.if1, f3.if2) values (1,default); -- not supported </sql-statement> @@ -267,66 +255,52 @@ insert into inserttest (f3.if1, f3.if2) values (1,default); -- not supported <sql-statement> insert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar'); </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar'), ('baz', 'quux'); </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f3.if2[1], f3.if2[2]) select 'bear', 'beer'; </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar'); </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar'), ('baz', 'quux'); </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> insert into inserttest (f4[1].if2[1], f4[1].if2[2]) select 'bear', 'beer'; </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> select * from inserttest; </sql-statement> --stdin-:<main>: Error: Table metadata loading +-stdin-:<main>: Fatal: Table metadata loading - -stdin-:<main>: Error: Table inserttest + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.inserttest - -stdin-:<main>: Error: Failed to parse row spec: No such type: insert_test_type - <sql-statement> -- also check reverse-listing create table inserttest2 (f1 bigint, f2 text); diff --git a/ydb/library/yql/tests/postgresql/cases/int8.err b/ydb/library/yql/tests/postgresql/cases/int8.err index 65133bc12a1..d471839b8bf 100644 --- a/ydb/library/yql/tests/postgresql/cases/int8.err +++ b/ydb/library/yql/tests/postgresql/cases/int8.err @@ -6,19 +6,19 @@ CREATE TABLE INT8_TBL(q1 int8, q2 int8); </sql-statement> <sql-statement> -INSERT INTO INT8_TBL (q1, q2) VALUES(' 123 ',' 456'); +INSERT INTO INT8_TBL VALUES(' 123 ',' 456'); </sql-statement> <sql-statement> -INSERT INTO INT8_TBL (q1, q2) VALUES('123 ','4567890123456789'); +INSERT INTO INT8_TBL VALUES('123 ','4567890123456789'); </sql-statement> <sql-statement> -INSERT INTO INT8_TBL (q1, q2) VALUES('4567890123456789','123'); +INSERT INTO INT8_TBL VALUES('4567890123456789','123'); </sql-statement> <sql-statement> -INSERT INTO INT8_TBL (q1, q2) VALUES(+4567890123456789,'4567890123456789'); +INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789'); </sql-statement> <sql-statement> -INSERT INTO INT8_TBL (q1, q2) VALUES('+4567890123456789','-4567890123456789'); +INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789'); </sql-statement> <sql-statement> -- bad inputs diff --git a/ydb/library/yql/tests/postgresql/cases/int8.out b/ydb/library/yql/tests/postgresql/cases/int8.out index 79f74f7f0b5..0a0a9fa3bbc 100644 --- a/ydb/library/yql/tests/postgresql/cases/int8.out +++ b/ydb/library/yql/tests/postgresql/cases/int8.out @@ -3,11 +3,11 @@ -- Test int8 64-bit integers. -- CREATE TABLE INT8_TBL(q1 int8, q2 int8); -INSERT INTO INT8_TBL (q1, q2) VALUES(' 123 ',' 456'); -INSERT INTO INT8_TBL (q1, q2) VALUES('123 ','4567890123456789'); -INSERT INTO INT8_TBL (q1, q2) VALUES('4567890123456789','123'); -INSERT INTO INT8_TBL (q1, q2) VALUES(+4567890123456789,'4567890123456789'); -INSERT INTO INT8_TBL (q1, q2) VALUES('+4567890123456789','-4567890123456789'); +INSERT INTO INT8_TBL VALUES(' 123 ',' 456'); +INSERT INTO INT8_TBL VALUES('123 ','4567890123456789'); +INSERT INTO INT8_TBL VALUES('4567890123456789','123'); +INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789'); +INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789'); -- bad inputs INSERT INTO INT8_TBL(q1) VALUES (' '); ERROR: invalid input syntax for type bigint: " " diff --git a/ydb/library/yql/tests/postgresql/cases/int8.sql b/ydb/library/yql/tests/postgresql/cases/int8.sql index 4bf6979a8db..e76555b591a 100644 --- a/ydb/library/yql/tests/postgresql/cases/int8.sql +++ b/ydb/library/yql/tests/postgresql/cases/int8.sql @@ -3,11 +3,11 @@ -- Test int8 64-bit integers. -- CREATE TABLE INT8_TBL(q1 int8, q2 int8); -INSERT INTO INT8_TBL (q1, q2) VALUES(' 123 ',' 456'); -INSERT INTO INT8_TBL (q1, q2) VALUES('123 ','4567890123456789'); -INSERT INTO INT8_TBL (q1, q2) VALUES('4567890123456789','123'); -INSERT INTO INT8_TBL (q1, q2) VALUES(+4567890123456789,'4567890123456789'); -INSERT INTO INT8_TBL (q1, q2) VALUES('+4567890123456789','-4567890123456789'); +INSERT INTO INT8_TBL VALUES(' 123 ',' 456'); +INSERT INTO INT8_TBL VALUES('123 ','4567890123456789'); +INSERT INTO INT8_TBL VALUES('4567890123456789','123'); +INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789'); +INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789'); -- bad inputs INSERT INTO INT8_TBL(q1) VALUES (' '); INSERT INTO INT8_TBL(q1) VALUES ('xxx'); diff --git a/ydb/library/yql/tests/postgresql/cases/join.err b/ydb/library/yql/tests/postgresql/cases/join.err index 18e8ee3b123..0fbd4af8b1e 100644 --- a/ydb/library/yql/tests/postgresql/cases/join.err +++ b/ydb/library/yql/tests/postgresql/cases/join.err @@ -1680,4 +1680,3352 @@ create temp table a ( constraint a_pk primary key (code) ); </sql-statement> -(TFileError) (Error 17: File exists) util/system/file.cpp:918: can't open "/var/tmp/tmpiusnz1sx/a" with mode CreateNew (0x00000003) +<sql-statement> +create temp table b ( + a char not null, + num integer not null, + constraint b_pk primary key (a, num) +); +</sql-statement> +<sql-statement> +create temp table c ( + name char not null, + a char, + constraint c_pk primary key (name) +); +</sql-statement> +<sql-statement> +insert into a (code) values ('p'); +</sql-statement> +<sql-statement> +insert into a (code) values ('q'); +</sql-statement> +<sql-statement> +insert into b (a, num) values ('p', 1); +</sql-statement> +<sql-statement> +insert into b (a, num) values ('p', 2); +</sql-statement> +<sql-statement> +insert into c (name, a) values ('A', 'p'); +</sql-statement> +<sql-statement> +insert into c (name, a) values ('B', 'q'); +</sql-statement> +<sql-statement> +insert into c (name, a) values ('C', null); +</sql-statement> +<sql-statement> +select c.name, ss.code, ss.b_cnt, ss.const +from c left join + (select a.code, coalesce(b_grp.cnt, 0) as b_cnt, -1 as const + from a left join + (select count(1) as cnt, b.a from b group by b.a) as b_grp + on a.code = b_grp.a + ) as ss + on (c.a = ss.code) +order by c.name; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgSelect, At function: PgSetItem, At function: PgSelect, At function: PgSetItem + select c.name, ss.code, ss.b_cnt, ss.const + ^ + -stdin-:<main>:5:51: Error: No such column: a + (select count(1) as cnt, b.a from b group by b.a) as b_grp + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- +-- test incorrect handling of placeholders that only appear in targetlists, +-- per bug #6154 +-- +SELECT * FROM +( SELECT 1 as key1 ) sub1 +LEFT JOIN +( SELECT sub3.key3, sub4.value2, COALESCE(sub4.value2, 66) as value3 FROM + ( SELECT 1 as key3 ) sub3 + LEFT JOIN + ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM + ( SELECT 1 as key5 ) sub5 + LEFT JOIN + ( SELECT 2 as key6, 42 as value1 ) sub6 + ON sub5.key5 = sub6.key6 + ) sub4 + ON sub4.key5 = sub3.key3 +) sub2 +ON sub1.key1 = sub2.key3; +</sql-statement> +<sql-statement> +-- test the path using join aliases, too +SELECT * FROM +( SELECT 1 as key1 ) sub1 +LEFT JOIN +( SELECT sub3.key3, value2, COALESCE(value2, 66) as value3 FROM + ( SELECT 1 as key3 ) sub3 + LEFT JOIN + ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM + ( SELECT 1 as key5 ) sub5 + LEFT JOIN + ( SELECT 2 as key6, 42 as value1 ) sub6 + ON sub5.key5 = sub6.key6 + ) sub4 + ON sub4.key5 = sub3.key3 +) sub2 +ON sub1.key1 = sub2.key3; +</sql-statement> +<sql-statement> +-- +-- test case where a PlaceHolderVar is used as a nestloop parameter +-- +EXPLAIN (COSTS OFF) +SELECT qq, unique1 + FROM + ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1 + FULL OUTER JOIN + ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2 + USING (qq) + INNER JOIN tenk1 c ON qq = unique2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +SELECT qq, unique1 + FROM + ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1 + FULL OUTER JOIN + ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2 + USING (qq) + INNER JOIN tenk1 c ON qq = unique2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported using + SELECT qq, unique1 + ^ +<sql-statement> +-- +-- nested nestloops can require nested PlaceHolderVars +-- +create temp table nt1 ( + id int primary key, + a1 boolean, + a2 boolean +); +</sql-statement> +<sql-statement> +create temp table nt2 ( + id int primary key, + nt1_id int, + b1 boolean, + b2 boolean, + foreign key (nt1_id) references nt1(id) +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table constraint not supported + create temp table nt2 ( + ^ +<sql-statement> +create temp table nt3 ( + id int primary key, + nt2_id int, + c1 boolean, + foreign key (nt2_id) references nt2(id) +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table constraint not supported + create temp table nt3 ( + ^ +<sql-statement> +insert into nt1 values (1,true,true); +</sql-statement> +<sql-statement> +insert into nt1 values (2,true,false); +</sql-statement> +<sql-statement> +insert into nt1 values (3,false,false); +</sql-statement> +<sql-statement> +insert into nt2 values (1,1,true,true); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.nt2 + +<sql-statement> +insert into nt2 values (2,2,true,false); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.nt2 + +<sql-statement> +insert into nt2 values (3,3,false,false); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.nt2 + +<sql-statement> +insert into nt3 values (1,1,true); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.nt3 + +<sql-statement> +insert into nt3 values (2,2,false); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.nt3 + +<sql-statement> +insert into nt3 values (3,3,true); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.nt3 + +<sql-statement> +explain (costs off) +select nt3.id +from nt3 as nt3 + left join + (select nt2.*, (nt2.b1 and ss1.a3) AS b3 + from nt2 as nt2 + left join + (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1 + on ss1.id = nt2.nt1_id + ) as ss2 + on ss2.id = nt3.nt2_id +where nt3.id = 1 and ss2.b3; +</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 nt3.id +from nt3 as nt3 + left join + (select nt2.*, (nt2.b1 and ss1.a3) AS b3 + from nt2 as nt2 + left join + (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1 + on ss1.id = nt2.nt1_id + ) as ss2 + on ss2.id = nt3.nt2_id +where nt3.id = 1 and ss2.b3; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.nt2 + +<sql-statement> +-- +-- test case where a PlaceHolderVar is propagated into a subquery +-- +explain (costs off) +select * from + int8_tbl t1 left join + (select q1 as x, 42 as y from int8_tbl t2) ss + on t1.q2 = ss.x +where + 1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1) +order by 1,2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select * from + int8_tbl t1 left join + (select q1 as x, 42 as y from int8_tbl t2) ss + on t1.q2 = ss.x +where + 1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1) +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.int8_tbl + +<sql-statement> +-- +-- variant where a PlaceHolderVar is needed at a join, but not above the join +-- +explain (costs off) +select * from + int4_tbl as i41, + lateral + (select 1 as x from + (select i41.f1 as lat, + i42.f1 as loc from + int8_tbl as i81, int4_tbl as i42) as ss1 + right join int4_tbl as i43 on (i43.f1 > 1) + where ss1.loc = ss1.lat) as ss2 +where i41.f1 > 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select * from + int4_tbl as i41, + lateral + (select 1 as x from + (select i41.f1 as lat, + i42.f1 as loc from + int8_tbl as i81, int4_tbl as i42) as ss1 + right join int4_tbl as i43 on (i43.f1 > 1) + where ss1.loc = ss1.lat) as ss2 +where i41.f1 > 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +-- +-- test the corner cases FULL JOIN ON TRUE and FULL JOIN ON FALSE +-- +select * from int4_tbl a full join int4_tbl b on true; +</sql-statement> +-stdin-:<main>: 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 * from int4_tbl a full join int4_tbl b on false; +</sql-statement> +-stdin-:<main>: 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> +-- +-- test for ability to use a cartesian join when necessary +-- +create temp table q1 as select 1 as q1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + -- + ^ +<sql-statement> +create temp table q2 as select 0 as q2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + create temp table q2 as select 0 as q2; + ^ +<sql-statement> +analyze q1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze q1; + ^ +<sql-statement> +analyze q2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze q2; + ^ +<sql-statement> +explain (costs off) +select * from + tenk1 join int4_tbl on f1 = twothousand, + q1, q2 +where q1 = thousand or q2 = thousand; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) +select * from + tenk1 join int4_tbl on f1 = twothousand, + q1, q2 +where thousand = (q1 + q2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +-- +-- test ability to generate a suitable plan for a star-schema query +-- +explain (costs off) +select * from + tenk1, int8_tbl a, int8_tbl b +where thousand = a.q1 and tenthous = b.q1 and a.q2 = 1 and b.q2 = 2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +-- +-- test a corner case in which we shouldn't apply the star-schema optimization +-- +explain (costs off) +select t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from + tenk1 t1 + inner join int4_tbl i1 + left join (select v1.x2, v2.y1, 11 AS d1 + from (select 1,0 from onerow) v1(x1,x2) + left join (select 3,1 from onerow) v2(y1,y2) + on v1.x1 = v2.y2) subq1 + on (i1.f1 = subq1.x2) + on (t1.unique2 = subq1.d1) + left join tenk1 t2 + on (subq1.y1 = t2.unique1) +where t1.unique2 < 42 and t1.stringu1 > t2.stringu2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from + tenk1 t1 + inner join int4_tbl i1 + left join (select v1.x2, v2.y1, 11 AS d1 + from (select 1,0 from onerow) v1(x1,x2) + left join (select 3,1 from onerow) v2(y1,y2) + on v1.x1 = v2.y2) subq1 + on (i1.f1 = subq1.x2) + on (t1.unique2 = subq1.d1) + left join tenk1 t2 + on (subq1.y1 = t2.unique1) +where t1.unique2 < 42 and t1.stringu1 > t2.stringu2; +</sql-statement> +-stdin-:<main>: 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> +-- variant that isn't quite a star-schema case +select ss1.d1 from + tenk1 as t1 + inner join tenk1 as t2 + on t1.tenthous = t2.ten + inner join + int8_tbl as i8 + left join int4_tbl as i4 + inner join (select 64::information_schema.cardinal_number as d1 + from tenk1 t3, + lateral (select abs(t3.unique1) + random()) ss0(x) + where t3.fivethous < 0) as ss1 + on i4.f1 = ss1.d1 + on i8.q1 = i4.f1 + on t1.tenthous = ss1.d1 +where t1.unique1 < i4.f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + -- variant that isn't quite a star-schema case + ^ +<sql-statement> +-- this variant is foldable by the remove-useless-RESULT-RTEs code +explain (costs off) +select t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from + tenk1 t1 + inner join int4_tbl i1 + left join (select v1.x2, v2.y1, 11 AS d1 + from (values(1,0)) v1(x1,x2) + left join (values(3,1)) v2(y1,y2) + on v1.x1 = v2.y2) subq1 + on (i1.f1 = subq1.x2) + on (t1.unique2 = subq1.d1) + left join tenk1 t2 + on (subq1.y1 = t2.unique1) +where t1.unique2 < 42 and t1.stringu1 > t2.stringu2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- this variant is foldable by the remove-useless-RESULT-RTEs code + ^ +<sql-statement> +select t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from + tenk1 t1 + inner join int4_tbl i1 + left join (select v1.x2, v2.y1, 11 AS d1 + from (values(1,0)) v1(x1,x2) + left join (values(3,1)) v2(y1,y2) + on v1.x1 = v2.y2) subq1 + on (i1.f1 = subq1.x2) + on (t1.unique2 = subq1.d1) + left join tenk1 t2 + on (subq1.y1 = t2.unique1) +where t1.unique2 < 42 and t1.stringu1 > t2.stringu2; +</sql-statement> +-stdin-:<main>: 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> +-- Here's a variant that we can't fold too aggressively, though, +-- or we end up with noplace to evaluate the lateral PHV +explain (verbose, costs off) +select * from + (select 1 as x) ss1 left join (select 2 as y) ss2 on (true), + lateral (select ss2.y as z limit 1) ss3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- Here's a variant that we can't fold too aggressively, though, + ^ +<sql-statement> +select * from + (select 1 as x) ss1 left join (select 2 as y) ss2 on (true), + lateral (select ss2.y as z limit 1) ss3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +-- Test proper handling of appendrel PHVs during useless-RTE removal +explain (costs off) +select * from + (select 0 as z) as t1 + left join + (select true as a) as t2 + on true, + lateral (select true as b + union all + select a as b) as t3 +where b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- Test proper handling of appendrel PHVs during useless-RTE removal + ^ +<sql-statement> +select * from + (select 0 as z) as t1 + left join + (select true as a) as t2 + on true, + lateral (select true as b + union all + select a as b) as t3 +where b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +-- +-- test inlining of immutable functions +-- +create function f_immutable_int4(i integer) returns integer as +$$ begin return i; end; $$ language plpgsql immutable; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + -- + ^ +<sql-statement> +-- check optimization of function scan with join +explain (costs off) +select unique1 from tenk1, (select * from f_immutable_int4(1) x) x +where x = unique1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check optimization of function scan with join + ^ +<sql-statement> +explain (verbose, costs off) +select unique1, x.* +from tenk1, (select *, random() from f_immutable_int4(1) x) x +where x = unique1; +</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> +explain (costs off) +select unique1 from tenk1, f_immutable_int4(1) x where x = unique1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) +select unique1 from tenk1, lateral f_immutable_int4(1) x where x = unique1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) +select unique1 from tenk1, lateral f_immutable_int4(1) x where x in (select 17); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) +select unique1, x from tenk1 join f_immutable_int4(1) x on unique1 = x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) +select unique1, x from tenk1 left join f_immutable_int4(1) x on unique1 = x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) +select unique1, x from tenk1 right join f_immutable_int4(1) x on unique1 = x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) +select unique1, x from tenk1 full join f_immutable_int4(1) x on unique1 = x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +-- check that pullup of a const function allows further const-folding +explain (costs off) +select unique1 from tenk1, f_immutable_int4(1) x where x = 42; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check that pullup of a const function allows further const-folding + ^ +<sql-statement> +-- test inlining of immutable functions with PlaceHolderVars +explain (costs off) +select nt3.id +from nt3 as nt3 + left join + (select nt2.*, (nt2.b1 or i4 = 42) AS b3 + from nt2 as nt2 + left join + f_immutable_int4(0) i4 + on i4 = nt2.nt1_id + ) as ss2 + on ss2.id = nt3.nt2_id +where nt3.id = 1 and ss2.b3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- test inlining of immutable functions with PlaceHolderVars + ^ +<sql-statement> +drop function f_immutable_int4(int); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386 + drop function f_immutable_int4(int); + ^ +<sql-statement> +-- test inlining when function returns composite +create function mki8(bigint, bigint) returns int8_tbl as +$$select row($1,$2)::int8_tbl$$ language sql; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + -- test inlining when function returns composite + ^ +<sql-statement> +create function mki4(int) returns int4_tbl as +$$select row($1)::int4_tbl$$ language sql; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function mki4(int) returns int4_tbl as + ^ +<sql-statement> +explain (verbose, costs off) +select * from mki8(1,2); +</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 * from mki8(1,2); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select * from mki8(1,2); + ^ + -stdin-:<main>:1:15: Error: At function: PgCall + select * from mki8(1,2); + ^ + -stdin-:<main>:1:15: Error: No such proc: mki8 + select * from mki8(1,2); + ^ +<sql-statement> +explain (verbose, costs off) +select * from mki4(42); +</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 * from mki4(42); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select * from mki4(42); + ^ + -stdin-:<main>:1:15: Error: At function: PgCall + select * from mki4(42); + ^ + -stdin-:<main>:1:15: Error: No such proc: mki4 + select * from mki4(42); + ^ +<sql-statement> +drop function mki8(bigint, bigint); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386 + drop function mki8(bigint, bigint); + ^ +<sql-statement> +drop function mki4(int); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386 + drop function mki4(int); + ^ +<sql-statement> +-- +-- test extraction of restriction OR clauses from join OR clause +-- (we used to only do this for indexable clauses) +-- +explain (costs off) +select * from tenk1 a join tenk1 b on + (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.hundred = 4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +explain (costs off) +select * from tenk1 a join tenk1 b on + (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.ten = 4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) +select * from tenk1 a join tenk1 b on + (a.unique1 = 1 and b.unique1 = 2) or + ((a.unique2 = 3 or a.unique2 = 7) and b.hundred = 4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +-- +-- test placement of movable quals in a parameterized join tree +-- +explain (costs off) +select * from tenk1 t1 left join + (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2) + on t1.hundred = t2.hundred and t1.ten = t3.ten +where t1.unique1 = 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +explain (costs off) +select * from tenk1 t1 left join + (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2) + on t1.hundred = t2.hundred and t1.ten + t2.ten = t3.ten +where t1.unique1 = 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) +select count(*) from + tenk1 a join tenk1 b on a.unique1 = b.unique2 + left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand + join int4_tbl on b.thousand = 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 count(*) from + tenk1 a join tenk1 b on a.unique1 = b.unique2 + left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand + join int4_tbl on b.thousand = f1; +</sql-statement> +-stdin-:<main>: 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> +explain (costs off) +select b.unique1 from + tenk1 a join tenk1 b on a.unique1 = b.unique2 + left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand + join int4_tbl i1 on b.thousand = f1 + right join int4_tbl i2 on i2.f1 = b.tenthous + order by 1; +</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 b.unique1 from + tenk1 a join tenk1 b on a.unique1 = b.unique2 + left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand + join int4_tbl i1 on b.thousand = f1 + right join int4_tbl i2 on i2.f1 = b.tenthous + 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.tenk1 + +<sql-statement> +explain (costs off) +select * from + select unique1, q1, coalesce(unique1, -1) + q1 as fault + from int8_tbl left join tenk1 on (q2 = unique2) +) ss +where fault = 122 +order by fault; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:3:3: Error: ERROR: syntax error at or near "select" + + select unique1, q1, coalesce(unique1, -1) + q1 as fault + ^ +<sql-statement> +select * from + select unique1, q1, coalesce(unique1, -1) + q1 as fault + from int8_tbl left join tenk1 on (q2 = unique2) +) ss +where fault = 122 +order by fault; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:3: Error: ERROR: syntax error at or near "select" + + select unique1, q1, coalesce(unique1, -1) + q1 as fault + ^ +<sql-statement> +explain (costs off) +select * from +(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys) +left join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x +left join unnest(v1ys) as u1(u1y) on u1y = v2y; +</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 * from +(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys) +left join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x +left join unnest(v1ys) as u1(u1y) on u1y = v2y; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:4:18: Error: Columns are not allowed in: RANGE FUNCTION + left join unnest(v1ys) as u1(u1y) on u1y = v2y; + ^ +<sql-statement> +-- +-- test handling of potential equivalence clauses above outer joins +-- +explain (costs off) +select q1, unique2, thousand, hundred + from int8_tbl a left join tenk1 b on q1 = unique2 + where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select q1, unique2, thousand, hundred + from int8_tbl a left join tenk1 b on q1 = unique2 + where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123); +</sql-statement> +-stdin-:<main>: 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> +explain (costs off) +select f1, unique2, case when unique2 is null then f1 else 0 end + from int4_tbl a left join tenk1 b on f1 = unique2 + where (case when unique2 is null then f1 else 0 end) = 0; +</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, unique2, case when unique2 is null then f1 else 0 end + from int4_tbl a left join tenk1 b on f1 = unique2 + where (case when unique2 is null then f1 else 0 end) = 0; +</sql-statement> +-stdin-:<main>: 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> +-- +-- another case with equivalence clauses above outer joins (bug #8591) +-- +explain (costs off) +select a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand) + from tenk1 a left join tenk1 b on b.thousand = a.unique1 left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand) + where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand) + from tenk1 a left join tenk1 b on b.thousand = a.unique1 left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand) + where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44; +</sql-statement> +-stdin-:<main>: 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> +-- +-- check handling of join aliases when flattening multiple levels of subquery +-- +explain (verbose, costs off) +select foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from + (values (0),(1)) foo1(join_key) +left join + (select join_key, bug_field from + (select ss1.join_key, ss1.bug_field from + (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1 + ) foo2 + left join + (select unique2 as join_key from tenk1 i2) ss2 + using (join_key) + ) foo3 +using (join_key); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from + (values (0),(1)) foo1(join_key) +left join + (select join_key, bug_field from + (select ss1.join_key, ss1.bug_field from + (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1 + ) foo2 + left join + (select unique2 as join_key from tenk1 i2) ss2 + using (join_key) + ) foo3 +using (join_key); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported using + select foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from + ^ +<sql-statement> +-- +-- test successful handling of nested outer joins with degenerate join quals +-- +explain (verbose, costs off) +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); +</sql-statement> +-stdin-:<main>: 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> +explain (verbose, costs off) +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); +</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 t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); +</sql-statement> +-stdin-:<main>: 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> +explain (verbose, costs off) +select t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2 + where q1 = f1) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); +</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 t1.* from + text_tbl t1 + left join (select *, '***'::text as d1 from int8_tbl i8b1) b1 + left join int8_tbl i8 + left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2 + where q1 = f1) b2 + on (i8.q1 = b2.q1) + on (b2.d2 = b1.q2) + on (t1.f1 = b1.d1) + left join int4_tbl i4 + on (i8.q2 = i4.f1); +</sql-statement> +-stdin-:<main>: 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> +explain (verbose, costs off) +select * from + text_tbl t1 + inner join int8_tbl i8 + on i8.q2 = 456 + right join text_tbl t2 + on t1.f1 = 'doh!' + left join int4_tbl i4 + on i8.q1 = i4.f1; +</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 * from + text_tbl t1 + inner join int8_tbl i8 + on i8.q2 = 456 + right join text_tbl t2 + on t1.f1 = 'doh!' + left join int4_tbl i4 + on i8.q1 = i4.f1; +</sql-statement> +-stdin-:<main>: 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> +-- +-- test for appropriate join order in the presence of lateral references +-- +explain (verbose, costs off) +select * from + text_tbl t1 + left join int8_tbl i8 + on i8.q2 = 123, + lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss +where t1.f1 = ss.f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select * from + text_tbl t1 + left join int8_tbl i8 + on i8.q2 = 123, + lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss +where t1.f1 = ss.f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +explain (verbose, costs off) +select * from + text_tbl t1 + left join int8_tbl i8 + on i8.q2 = 123, + lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1, + lateral (select ss1.* from text_tbl t3 limit 1) as ss2 +where t1.f1 = ss2.f1; +</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 * from + text_tbl t1 + left join int8_tbl i8 + on i8.q2 = 123, + lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1, + lateral (select ss1.* from text_tbl t3 limit 1) as ss2 +where t1.f1 = ss2.f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +explain (verbose, costs off) +select 1 from + text_tbl as tt1 + inner join text_tbl as tt2 on (tt1.f1 = 'foo') + left join text_tbl as tt3 on (tt3.f1 = 'foo') + left join text_tbl as tt4 on (tt3.f1 = tt4.f1), + lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1 +where tt1.f1 = ss1.c0; +</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 1 from + text_tbl as tt1 + inner join text_tbl as tt2 on (tt1.f1 = 'foo') + left join text_tbl as tt3 on (tt3.f1 = 'foo') + left join text_tbl as tt4 on (tt3.f1 = tt4.f1), + lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1 +where tt1.f1 = ss1.c0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select 1 from + ^ +<sql-statement> +-- +-- check a case in which a PlaceHolderVar forces join order +-- +explain (verbose, costs off) +select ss2.* from + int4_tbl i41 + left join int8_tbl i8 + join (select i42.f1 as c1, i43.f1 as c2, 42 as c3 + from int4_tbl i42, int4_tbl i43) ss1 + on i8.q1 = ss1.c2 + on i41.f1 = ss1.c1, + lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2 +where ss1.c2 = 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select ss2.* from + int4_tbl i41 + left join int8_tbl i8 + join (select i42.f1 as c1, i43.f1 as c2, 42 as c3 + from int4_tbl i42, int4_tbl i43) ss1 + on i8.q1 = ss1.c2 + on i41.f1 = ss1.c1, + lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2 +where ss1.c2 = 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select ss2.* from + ^ +<sql-statement> +-- +-- test successful handling of full join underneath left join (bug #14105) +-- +explain (costs off) +select * from + (select 1 as id) as xx + left join + (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id)) + on (xx.id = coalesce(yy.id)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select * from + (select 1 as id) as xx + left join + (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id)) + on (xx.id = coalesce(yy.id)); +</sql-statement> +-stdin-:<main>: 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> +-- +-- test ability to push constants through outer join clauses +-- +explain (costs off) + select * from int4_tbl a left join tenk1 b on f1 = unique2 where f1 = 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +explain (costs off) + select * from tenk1 a full join tenk1 b using(unique2) where unique2 = 42; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +-- +-- test that quals attached to an outer join have correct semantics, +-- specifically that they don't re-use expressions computed below the join; +-- we force a mergejoin so that coalesce(b.q1, 1) appears as a join input +-- +set enable_hashjoin to off; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_hashjoin + -- + ^ +<sql-statement> +set enable_nestloop to off; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_nestloop + set enable_nestloop to off; + ^ +<sql-statement> +explain (verbose, costs off) + select a.q2, b.q1 + from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1) + where coalesce(b.q1, 1) > 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> +select a.q2, b.q1 + from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1) + where coalesce(b.q1, 1) > 0; +</sql-statement> +-stdin-:<main>: 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> +reset enable_hashjoin; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4 + reset enable_hashjoin; + ^ +<sql-statement> +reset enable_nestloop; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4 + reset enable_nestloop; + ^ +<sql-statement> +-- +-- test join removal +-- +begin; +</sql-statement> +<sql-statement> +CREATE TEMP TABLE a (id int PRIMARY KEY, b_id int); +</sql-statement> +<sql-statement> +CREATE TEMP TABLE b (id int PRIMARY KEY, c_id int); +</sql-statement> +<sql-statement> +CREATE TEMP TABLE c (id int PRIMARY KEY); +</sql-statement> +<sql-statement> +CREATE TEMP TABLE d (a int, b int); +</sql-statement> +<sql-statement> +INSERT INTO a VALUES (0, 0), (1, NULL); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: YtWriteTable! + INSERT INTO a VALUES (0, 0), (1, NULL); + ^ + -stdin-:<main>:1:1: Error: values have 2 columns, INSERT INTO expects: 1 + INSERT INTO a VALUES (0, 0), (1, NULL); + ^ +<sql-statement> +INSERT INTO b VALUES (0, 0), (1, NULL); +</sql-statement> +<sql-statement> +INSERT INTO c VALUES (0), (1); +</sql-statement> +<sql-statement> +INSERT INTO d VALUES (1,3), (2,2), (3,1); +</sql-statement> +<sql-statement> +-- all three cases should be optimizable into a simple seqscan +explain (costs off) SELECT a.* FROM a LEFT JOIN b ON a.b_id = b.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- all three cases should be optimizable into a simple seqscan + ^ +<sql-statement> +explain (costs off) SELECT b.* FROM b LEFT JOIN c ON b.c_id = c.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) SELECT b.* FROM b LEFT JOIN c ON b.c_id = c.id; + ^ +<sql-statement> +explain (costs off) + SELECT a.* FROM a LEFT JOIN (b left join c on b.c_id = c.id) + ON (a.b_id = b.id); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +-- check optimization of outer join within another special join +explain (costs off) +select id from a where id in ( + select b.id from b left join c on b.id = c.id +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check optimization of outer join within another special join + ^ +<sql-statement> +-- check that join removal works for a left join when joining a subquery +-- that is guaranteed to be unique by its GROUP BY clause +explain (costs off) +select d.* from d left join (select * from b group by b.id, b.c_id) s + on d.a = s.id and d.b = s.c_id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check that join removal works for a left join when joining a subquery + ^ +<sql-statement> +-- similarly, but keying off a DISTINCT clause +explain (costs off) +select d.* from d left join (select distinct * from b) s + on d.a = s.id and d.b = s.c_id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- similarly, but keying off a DISTINCT clause + ^ +<sql-statement> +-- join removal is not possible when the GROUP BY contains a column that is +-- not in the join condition. (Note: as of 9.6, we notice that b.id is a +-- primary key and so drop b.c_id from the GROUP BY of the resulting plan; +-- but this happens too late for join removal in the outer plan level.) +explain (costs off) +select d.* from d left join (select * from b group by b.id, b.c_id) s + on d.a = s.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- join removal is not possible when the GROUP BY contains a column that is + ^ +<sql-statement> +-- similarly, but keying off a DISTINCT clause +explain (costs off) +select d.* from d left join (select distinct * from b) s + on d.a = s.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- similarly, but keying off a DISTINCT clause + ^ +<sql-statement> +-- check join removal works when uniqueness of the join condition is enforced +-- by a UNION +explain (costs off) +select d.* from d left join (select id from a union select id from b) s + on d.a = s.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check join removal works when uniqueness of the join condition is enforced + ^ +<sql-statement> +-- check join removal with a cross-type comparison operator +explain (costs off) +select i8.* from int8_tbl i8 left join (select f1 from int4_tbl group by f1) i4 + on i8.q1 = i4.f1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check join removal with a cross-type comparison operator + ^ +<sql-statement> +-- check join removal with lateral references +explain (costs off) +select 1 from (select a.id FROM a left join b on a.b_id = b.id) q, + lateral generate_series(1, q.id) gs(i) where q.id = gs.i; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check join removal with lateral references + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +create temp table parent (k int primary key, pd int); +</sql-statement> +<sql-statement> +create temp table child (k int unique, cd int); +</sql-statement> +<sql-statement> +insert into parent values (1, 10), (2, 20), (3, 30); +</sql-statement> +<sql-statement> +insert into child values (1, 100), (4, 400); +</sql-statement> +<sql-statement> +-- this case is optimizable +select p.* from parent p left join child c on (p.k = c.k); +</sql-statement> +<sql-statement> +explain (costs off) + select p.* from parent p left join child c on (p.k = c.k); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +-- this case is not +select p.*, linked from parent p + left join (select c.*, true as linked from child c) as ss + on (p.k = ss.k); +</sql-statement> +<sql-statement> +explain (costs off) + select p.*, linked from parent p + left join (select c.*, true as linked from child c) as ss + on (p.k = ss.k); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +-- check for a 9.0rc1 bug: join removal breaks pseudoconstant qual handling +select p.* from + parent p left join child c on (p.k = c.k) + where p.k = 1 and p.k = 2; +</sql-statement> +<sql-statement> +explain (costs off) +select p.* from + parent p left join child c on (p.k = c.k) + where p.k = 1 and p.k = 2; +</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 p.* from + (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k + where p.k = 1 and p.k = 2; +</sql-statement> +<sql-statement> +explain (costs off) +select p.* from + (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k + where p.k = 1 and p.k = 2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +-- bug 5255: this is not optimizable by join removal +begin; +</sql-statement> +<sql-statement> +CREATE TEMP TABLE a (id int PRIMARY KEY); +</sql-statement> +<sql-statement> +CREATE TEMP TABLE b (id int PRIMARY KEY, a_id int); +</sql-statement> +<sql-statement> +INSERT INTO a VALUES (0), (1); +</sql-statement> +<sql-statement> +INSERT INTO b VALUES (0, 0), (1, NULL); +</sql-statement> +<sql-statement> +SELECT * FROM b LEFT JOIN a ON (b.a_id = a.id) WHERE (a.id IS NULL OR a.id > 0); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + SELECT * FROM b LEFT JOIN a ON (b.a_id = a.id) WHERE (a.id IS NULL OR a.id > 0); + ^ + -stdin-:<main>:1:33: Error: No such column: a_id + SELECT * FROM b LEFT JOIN a ON (b.a_id = a.id) WHERE (a.id IS NULL OR a.id > 0); + ^ + -stdin-:<main>:1:42: Error: No such column: id + SELECT * FROM b LEFT JOIN a ON (b.a_id = a.id) WHERE (a.id IS NULL OR a.id > 0); + ^ +<sql-statement> +SELECT b.* FROM b LEFT JOIN a ON (b.a_id = a.id) WHERE (a.id IS NULL OR a.id > 0); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + SELECT b.* FROM b LEFT JOIN a ON (b.a_id = a.id) WHERE (a.id IS NULL OR a.id > 0); + ^ + -stdin-:<main>:1:35: Error: No such column: a_id + SELECT b.* FROM b LEFT JOIN a ON (b.a_id = a.id) WHERE (a.id IS NULL OR a.id > 0); + ^ + -stdin-:<main>:1:44: Error: No such column: id + SELECT b.* FROM b LEFT JOIN a ON (b.a_id = a.id) WHERE (a.id IS NULL OR a.id > 0); + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- another join removal bug: this is not optimizable, either +begin; +</sql-statement> +<sql-statement> +create temp table innertab (id int8 primary key, dat1 int8); +</sql-statement> +<sql-statement> +insert into innertab values(123, 42); +</sql-statement> +<sql-statement> +SELECT * FROM + (SELECT 1 AS x) ss1 + LEFT JOIN + (SELECT q1, q2, COALESCE(dat1, q1) AS y + FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss2 + ON true; +</sql-statement> +-stdin-:<main>: 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> +rollback; +</sql-statement> +<sql-statement> +-- another join removal bug: we must clean up correctly when removing a PHV +begin; +</sql-statement> +<sql-statement> +create temp table uniquetbl (f1 text unique); +</sql-statement> +<sql-statement> +explain (costs off) +select t1.* from + uniquetbl as t1 + left join (select *, '***'::text as d1 from uniquetbl) t2 + on t1.f1 = t2.f1 + left join uniquetbl t3 + on t2.d1 = t3.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> +explain (costs off) +select t0.* +from + text_tbl t0 + left join + (select case t1.ten when 0 then 'doh!'::text else null::text end as case1, + t1.stringu2 + from tenk1 t1 + join int4_tbl i4 ON i4.f1 = t1.unique2 + left join uniquetbl u1 ON u1.f1 = t1.string4) ss + on t0.f1 = ss.case1 +where ss.stringu2 !~* ss.case1; +</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 t0.* +from + text_tbl t0 + left join + (select case t1.ten when 0 then 'doh!'::text else null::text end as case1, + t1.stringu2 + from tenk1 t1 + join int4_tbl i4 ON i4.f1 = t1.unique2 + left join uniquetbl u1 ON u1.f1 = t1.string4) ss + on t0.f1 = ss.case1 +where ss.stringu2 !~* ss.case1; +</sql-statement> +-stdin-:<main>: 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> +rollback; +</sql-statement> +<sql-statement> +-- test case to expose miscomputation of required relid set for a PHV +explain (verbose, costs off) +select i8.*, ss.v, t.unique2 + from int8_tbl i8 + left join int4_tbl i4 on i4.f1 = 1 + left join lateral (select i4.f1 + 1 as v) as ss on true + left join tenk1 t on t.unique2 = ss.v +where q2 = 456; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- test case to expose miscomputation of required relid set for a PHV + ^ +<sql-statement> +select i8.*, ss.v, t.unique2 + from int8_tbl i8 + left join int4_tbl i4 on i4.f1 = 1 + left join lateral (select i4.f1 + 1 as v) as ss on true + left join tenk1 t on t.unique2 = ss.v +where q2 = 456; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select i8.*, ss.v, t.unique2 + ^ +<sql-statement> +-- and check a related issue where we miscompute required relids for +-- a PHV that's been translated to a child rel +create temp table parttbl (a integer primary key) partition by range (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- and check a related issue where we miscompute required relids for + ^ +<sql-statement> +create temp table parttbl1 partition of parttbl for values from (1) to (100); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create temp table parttbl1 partition of parttbl for values from (1) to (100); + ^ +<sql-statement> +insert into parttbl values (11), (12); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.parttbl + +<sql-statement> +explain (costs off) +select * from + (select *, 12 as phv from parttbl) as ss + right join int4_tbl on true +where ss.a = ss.phv and f1 = 0; +</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 * from + (select *, 12 as phv from parttbl) as ss + right join int4_tbl on true +where ss.a = ss.phv and f1 = 0; +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.parttbl + +<sql-statement> +-- bug #8444: we've historically allowed duplicate aliases within aliased JOINs +select * from + int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = f1; -- error +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported alias + -- bug #8444: we've historically allowed duplicate aliases within aliased JOINs + ^ +<sql-statement> +select * from + int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = y.f1; -- error +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported alias + select * from + ^ +<sql-statement> +select * from + int8_tbl x join (int4_tbl x cross join int4_tbl y(ff)) j on q1 = f1; -- ok +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported alias + select * from + ^ +<sql-statement> +-- +-- Test hints given on incorrect column references are useful +-- +select t1.uunique1 from + tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer "t1" suggestion +</sql-statement> +-stdin-:<main>: 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 t2.uunique1 from + tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer "t2" suggestion +</sql-statement> +-stdin-:<main>: 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 uunique1 from + tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, suggest both at once +</sql-statement> +-stdin-:<main>: 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> +-- +-- Take care to reference the correct RTE +-- +select atts.relid::regclass, s.* from pg_stats s join + pg_attribute a on s.attname = a.attname and s.tablename = + a.attrelid::regclass::text join (select unnest(indkey) attnum, + indexrelid from pg_index i) atts on atts.attnum = a.attnum where + schemaname != 'pg_catalog'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:6:45: Error: Generator functions are not allowed in: SELECT + a.attrelid::regclass::text join (select unnest(indkey) attnum, + ^ +<sql-statement> +-- +-- Test LATERAL +-- +select unique2, x.* +from tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + -- + ^ +<sql-statement> +explain (costs off) + select unique2, x.* + from tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x; +</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 unique2, x.* +from int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select unique2, x.* + ^ +<sql-statement> +explain (costs off) + select unique2, x.* + from int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +explain (costs off) + select unique2, x.* + from int4_tbl x cross join lateral (select unique2 from tenk1 where f1 = unique1) ss; +</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 unique2, x.* +from int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select unique2, x.* + ^ +<sql-statement> +explain (costs off) + select unique2, x.* + from int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +-- check scoping of lateral versus parent references +-- the first of these should return int8_tbl.q2, the second int8_tbl.q1 +select *, (select r from (select q1 as q2) x, (select q2 as r) y) from 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> +select *, (select r from (select q1 as q2) x, lateral (select q2 as r) y) from int8_tbl; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:11: Error: RangeSubselect: unsupported lateral + select *, (select r from (select q1 as q2) x, lateral (select q2 as r) y) from int8_tbl; + ^ +<sql-statement> +-- lateral with function in FROM +select count(*) from tenk1 a, lateral generate_series(1,two) g; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeFunction: unsupported lateral + -- lateral with function in FROM + ^ +<sql-statement> +explain (costs off) + select count(*) from tenk1 a, lateral generate_series(1,two) 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> +explain (costs off) + select count(*) from tenk1 a cross join lateral generate_series(1,two) 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> +-- don't need the explicit LATERAL keyword for functions +explain (costs off) + select count(*) from tenk1 a, generate_series(1,two) g; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- don't need the explicit LATERAL keyword for functions + ^ +<sql-statement> +-- lateral with UNION ALL subselect +explain (costs off) + select * from generate_series(100,200) g, + lateral (select * from int8_tbl a where g = q1 union all + select * from int8_tbl b where g = q2) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- lateral with UNION ALL subselect + ^ +<sql-statement> +select * from generate_series(100,200) g, + lateral (select * from int8_tbl a where g = q1 union all + select * from int8_tbl b where g = q2) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from generate_series(100,200) g, + ^ +<sql-statement> +-- lateral with VALUES +explain (costs off) + select count(*) from tenk1 a, + tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- lateral with VALUES + ^ +<sql-statement> +select count(*) from tenk1 a, + tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select count(*) from tenk1 a, + ^ +<sql-statement> +-- lateral with VALUES, no flattening possible +explain (costs off) + select count(*) from tenk1 a, + tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- lateral with VALUES, no flattening possible + ^ +<sql-statement> +select count(*) from tenk1 a, + tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select count(*) from tenk1 a, + ^ +<sql-statement> +-- lateral injecting a strange outer join condition +explain (costs off) + select * from int8_tbl a, + int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z) + on x.q2 = ss.z + order by a.q1, a.q2, x.q1, x.q2, ss.z; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- lateral injecting a strange outer join condition + ^ +<sql-statement> +select * from int8_tbl a, + int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z) + on x.q2 = ss.z + order by a.q1, a.q2, x.q1, x.q2, ss.z; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from int8_tbl a, + ^ +<sql-statement> +-- lateral reference to a join alias variable +select * from (select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1, + lateral (select x) ss2(y); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + -- lateral reference to a join alias variable + ^ +<sql-statement> +select * from (select f1 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1, + lateral (values(x)) ss2(y); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from (select f1 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1, + ^ +<sql-statement> +select * from ((select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1) j, + lateral (select x) ss2(y); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported alias + select * from ((select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1) j, + ^ +<sql-statement> +-- lateral references requiring pullup +select * from (values(1)) x(lb), + lateral generate_series(lb,4) x4; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeFunction: unsupported lateral + -- lateral references requiring pullup + ^ +<sql-statement> +select * from (select f1/1000000000 from int4_tbl) x(lb), + lateral generate_series(lb,4) x4; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeFunction: unsupported lateral + select * from (select f1/1000000000 from int4_tbl) x(lb), + ^ +<sql-statement> +select * from (values(1)) x(lb), + lateral (values(lb)) y(lbcopy); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from (values(1)) x(lb), + ^ +<sql-statement> +select * from (values(1)) x(lb), + lateral (select lb from int4_tbl) y(lbcopy); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from (values(1)) x(lb), + ^ +<sql-statement> +select * from + int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1, + lateral (values(x.q1,y.q1,y.q2)) v(xq1,yq1,yq2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +select * from + int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1, + lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +select x.* from + int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1, + lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select x.* from + ^ +<sql-statement> +select v.* from + (int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1) + left join int4_tbl z on z.f1 = x.q2, + lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select v.* from + ^ +<sql-statement> +select v.* from + (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1) + left join int4_tbl z on z.f1 = x.q2, + lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select v.* from + ^ +<sql-statement> +select v.* from + (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1) + left join int4_tbl z on z.f1 = x.q2, + lateral (select x.q1,y.q1 from onerow union all select x.q2,y.q2 from onerow) v(vx,vy); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select v.* from + ^ +<sql-statement> +explain (verbose, costs off) +select * from + int8_tbl a left join + lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1; +</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 * from + int8_tbl a left join + lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +explain (verbose, costs off) +select * from + int8_tbl a left join + lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1; +</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 * from + int8_tbl a left join + lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +-- lateral can result in join conditions appearing below their +-- real semantic level +explain (verbose, costs off) +select * from int4_tbl i left join + lateral (select * from int2_tbl j where i.f1 = j.f1) k on true; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- lateral can result in join conditions appearing below their + ^ +<sql-statement> +select * from int4_tbl i left join + lateral (select * from int2_tbl j where i.f1 = j.f1) k on true; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from int4_tbl i left join + ^ +<sql-statement> +explain (verbose, costs off) +select * from int4_tbl i left join + lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true; +</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 * from int4_tbl i left join + lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from int4_tbl i left join + ^ +<sql-statement> +explain (verbose, costs off) +select * from int4_tbl a, + lateral ( + select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2) + ) ss; +</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 * from int4_tbl a, + lateral ( + select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2) + ) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from int4_tbl a, + ^ +<sql-statement> +-- lateral reference in a PlaceHolderVar evaluated at join level +explain (verbose, costs off) +select * from + int8_tbl a left join lateral + (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from + int8_tbl b cross join int8_tbl c) ss + on a.q2 = ss.bq1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- lateral reference in a PlaceHolderVar evaluated at join level + ^ +<sql-statement> +select * from + int8_tbl a left join lateral + (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from + int8_tbl b cross join int8_tbl c) ss + on a.q2 = ss.bq1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +-- case requiring nested PlaceHolderVars +explain (verbose, costs off) +select * from + int8_tbl c left join ( + int8_tbl a left join (select q1, coalesce(q2,42) as x from int8_tbl b) ss1 + on a.q2 = ss1.q1 + cross join + lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2 + ) on c.q2 = ss2.q1, + lateral (select ss2.y offset 0) ss3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- case requiring nested PlaceHolderVars + ^ +<sql-statement> +-- case that breaks the old ph_may_need optimization +explain (verbose, costs off) +select c.*,a.*,ss1.q1,ss2.q1,ss3.* from + int8_tbl c left join ( + int8_tbl a left join + (select q1, coalesce(q2,f1) as x from int8_tbl b, int4_tbl b2 + where q1 < f1) ss1 + on a.q2 = ss1.q1 + cross join + lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2 + ) on c.q2 = ss2.q1, + lateral (select * from int4_tbl i where ss2.y > f1) ss3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- case that breaks the old ph_may_need optimization + ^ +<sql-statement> +-- check processing of postponed quals (bug #9041) +explain (verbose, costs off) +select * from + (select 1 as x offset 0) x cross join (select 2 as y offset 0) y + left join lateral ( + select * from (select 3 as z offset 0) z where z.z = x.x + ) zz on zz.z = y.y; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check processing of postponed quals (bug #9041) + ^ +<sql-statement> +-- check dummy rels with lateral references (bug #15694) +explain (verbose, costs off) +select * from int8_tbl i8 left join lateral + (select *, i8.q2 from int4_tbl where false) ss on true; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check dummy rels with lateral references (bug #15694) + ^ +<sql-statement> +explain (verbose, costs off) +select * from int8_tbl i8 left join lateral + (select *, i8.q2 from int4_tbl i1, int4_tbl i2 where false) ss on true; +</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> +-- check handling of nested appendrels inside LATERAL +select * from + ((select 2 as v) union all (select 3 as v)) as q1 + cross join lateral + ((select * from + ((select 4 as v) union all (select 5 as v)) as q3) + union all + (select q1.v) + ) as q2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + -- check handling of nested appendrels inside LATERAL + ^ +<sql-statement> +-- check the number of columns specified +SELECT * FROM (int8_tbl i cross join int4_tbl j) ss(a,b,c,d); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: JoinExpr: unsupported alias + -- check the number of columns specified + ^ +<sql-statement> +-- check we don't try to do a unique-ified semijoin with LATERAL +explain (verbose, costs off) +select * from + (values (0,9998), (1,1000)) v(id,x), + lateral (select f1 from int4_tbl + where f1 = any (select unique1 from tenk1 + where unique2 = v.x offset 0)) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check we don't try to do a unique-ified semijoin with LATERAL + ^ +<sql-statement> +select * from + (values (0,9998), (1,1000)) v(id,x), + lateral (select f1 from int4_tbl + where f1 = any (select unique1 from tenk1 + where unique2 = v.x offset 0)) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from + ^ +<sql-statement> +-- check proper extParam/allParam handling (this isn't exactly a LATERAL issue, +-- but we can make the test case much more compact with LATERAL) +explain (verbose, costs off) +select * from (values (0), (1)) v(id), +lateral (select * from int8_tbl t1, + lateral (select * from + (select * from int8_tbl t2 + where q1 = any (select q2 from int8_tbl t3 + where q2 = (select greatest(t1.q1,t2.q2)) + and (select v.id=0)) offset 0) ss2) ss + where t1.q1 = ss.q2) ss0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check proper extParam/allParam handling (this isn't exactly a LATERAL issue, + ^ +<sql-statement> +select * from (values (0), (1)) v(id), +lateral (select * from int8_tbl t1, + lateral (select * from + (select * from int8_tbl t2 + where q1 = any (select q2 from int8_tbl t3 + where q2 = (select greatest(t1.q1,t2.q2)) + and (select v.id=0)) offset 0) ss2) ss + where t1.q1 = ss.q2) ss0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select * from (values (0), (1)) v(id), + ^ +<sql-statement> +-- test some error cases where LATERAL should have been used but wasn't +select f1,g from int4_tbl a, (select f1 as g) 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.int4_tbl + +<sql-statement> +select f1,g from int4_tbl a, (select a.f1 as g) 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.int4_tbl + +<sql-statement> +select f1,g from int4_tbl a cross join (select f1 as g) 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.int4_tbl + +<sql-statement> +select f1,g from int4_tbl a cross join (select a.f1 as g) 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.int4_tbl + +<sql-statement> +-- SQL:2008 says the left table is in scope but illegal to access here +select f1,g from int4_tbl a right join lateral generate_series(0, a.f1) g on true; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeFunction: unsupported lateral + -- SQL:2008 says the left table is in scope but illegal to access here + ^ +<sql-statement> +select f1,g from int4_tbl a full join lateral generate_series(0, a.f1) g on true; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeFunction: unsupported lateral + select f1,g from int4_tbl a full join lateral generate_series(0, a.f1) g on true; + ^ +<sql-statement> +-- check we complain about ambiguous table references +select * from + int8_tbl x cross join (int4_tbl x cross join lateral (select x.f1) ss); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + -- check we complain about ambiguous table references + ^ +<sql-statement> +-- LATERAL can be used to put an aggregate into the FROM clause of its query +select 1 from tenk1 a, lateral (select max(a.unique1) from int4_tbl b) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + -- LATERAL can be used to put an aggregate into the FROM clause of its query + ^ +<sql-statement> +-- check behavior of LATERAL in UPDATE/DELETE +create temp table xx1 as select f1 as x1, -f1 as x2 from int4_tbl; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + -- check behavior of LATERAL in UPDATE/DELETE + ^ +<sql-statement> +-- error, can't do this: +update xx1 set x2 = f1 from (select * from int4_tbl where f1 = x1) ss; +</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', 'mutationid'. + +<sql-statement> +update xx1 set x2 = f1 from (select * from int4_tbl where f1 = xx1.x1) ss; +</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', 'mutationid'. + +<sql-statement> +-- can't do it even with LATERAL: +update xx1 set x2 = f1 from lateral (select * from int4_tbl where f1 = x1) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + -- can't do it even with LATERAL: + ^ +<sql-statement> +-- we might in future allow something like this, but for now it's an error: +update xx1 set x2 = f1 from xx1, lateral (select * from int4_tbl where f1 = x1) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + -- we might in future allow something like this, but for now it's an error: + ^ +<sql-statement> +-- also errors: +delete from xx1 using (select * from int4_tbl where f1 = x1) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: using is not supported + -- also errors: + ^ +<sql-statement> +delete from xx1 using (select * from int4_tbl where f1 = xx1.x1) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: using is not supported + delete from xx1 using (select * from int4_tbl where f1 = xx1.x1) ss; + ^ +<sql-statement> +delete from xx1 using lateral (select * from int4_tbl where f1 = x1) ss; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: using is not supported + delete from xx1 using lateral (select * from int4_tbl where f1 = x1) ss; + ^ +<sql-statement> +-- +-- test LATERAL reference propagation down a multi-level inheritance hierarchy +-- produced for a multi-level partitioned table hierarchy. +-- +create table join_pt1 (a int, b int, c varchar) partition by range(a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- + ^ +<sql-statement> +create table join_pt1p1 partition of join_pt1 for values from (0) to (100) partition by range(b); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table join_pt1p1 partition of join_pt1 for values from (0) to (100) partition by range(b); + ^ +<sql-statement> +create table join_pt1p2 partition of join_pt1 for values from (100) to (200); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table join_pt1p2 partition of join_pt1 for values from (100) to (200); + ^ +<sql-statement> +create table join_pt1p1p1 partition of join_pt1p1 for values from (0) to (100); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + create table join_pt1p1p1 partition of join_pt1p1 for values from (0) to (100); + ^ +<sql-statement> +insert into join_pt1 values (1, 1, 'x'), (101, 101, 'y'); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.join_pt1 + +<sql-statement> +create table join_ut1 (a int, b int, c varchar); +</sql-statement> +<sql-statement> +insert into join_ut1 values (101, 101, 'y'), (2, 2, 'z'); +</sql-statement> +<sql-statement> +explain (verbose, costs off) +select t1.b, ss.phv from join_ut1 t1 left join lateral + (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv + from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss + on t1.a = ss.t2a order by t1.a; +</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 t1.b, ss.phv from join_ut1 t1 left join lateral + (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv + from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss + on t1.a = ss.t2a order by t1.a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RangeSubselect: unsupported lateral + select t1.b, ss.phv from join_ut1 t1 left join lateral + ^ +<sql-statement> +drop table join_pt1; +</sql-statement> +<sql-statement> +drop table join_ut1; +</sql-statement> +<sql-statement> +-- +-- test estimation behavior with multi-column foreign key and constant qual +-- +begin; +</sql-statement> +<sql-statement> +create table fkest (x integer, x10 integer, x10b integer, x100 integer); +</sql-statement> +<sql-statement> +insert into fkest select x, x/10, x/10, x/100 from generate_series(1,1000) x; +</sql-statement> +<sql-statement> +create unique index on fkest(x, x10, x100); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: unique index creation is not supported yet + create unique index on fkest(x, x10, x100); + ^ +<sql-statement> +analyze fkest; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze fkest; + ^ +<sql-statement> +explain (costs off) +select * from fkest f1 + join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100) + join fkest f3 on f1.x = f3.x + where f1.x100 = 2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +alter table fkest add constraint fk + foreign key (x, x10b, x100) references fkest (x, x10, x100); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table fkest add constraint fk + ^ +<sql-statement> +explain (costs off) +select * from fkest f1 + join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100) + join fkest f3 on f1.x = f3.x + where f1.x100 = 2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- +-- test that foreign key join estimation performs sanely for outer joins +-- +begin; +</sql-statement> +<sql-statement> +create table fkest (a int, b int, c int unique, primary key(a,b)); +</sql-statement> +<sql-statement> +create table fkest1 (a int, b int, primary key(a,b)); +</sql-statement> +<sql-statement> +insert into fkest select x/10, x%10, x from generate_series(1,1000) x; +</sql-statement> +<sql-statement> +insert into fkest1 select x/10, x%10 from generate_series(1,1000) x; +</sql-statement> +<sql-statement> +alter table fkest1 + add constraint fkest1_a_b_fkey foreign key (a,b) references fkest; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 244 + alter table fkest1 + ^ +<sql-statement> +analyze fkest; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze fkest; + ^ +<sql-statement> +analyze fkest1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze fkest1; + ^ +<sql-statement> +explain (costs off) +select * +from fkest f + left join fkest1 f1 on f.a = f1.a and f.b = f1.b + left join fkest1 f2 on f.a = f2.a and f.b = f2.b + left join fkest1 f3 on f.a = f3.a and f.b = f3.b +where f.c = 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- +-- test planner's ability to mark joins as unique +-- +create table j1 (id int primary key); +</sql-statement> +<sql-statement> +create table j2 (id int primary key); +</sql-statement> +<sql-statement> +create table j3 (id int); +</sql-statement> +<sql-statement> +insert into j1 values(1),(2),(3); +</sql-statement> +<sql-statement> +insert into j2 values(1),(2),(3); +</sql-statement> +<sql-statement> +insert into j3 values(1),(1); +</sql-statement> +<sql-statement> +analyze j1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze j1; + ^ +<sql-statement> +analyze j2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze j2; + ^ +<sql-statement> +analyze j3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze j3; + ^ +<sql-statement> +-- ensure join is properly marked as unique +explain (verbose, costs off) +select * from j1 inner join j2 on j1.id = j2.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure join is properly marked as unique + ^ +<sql-statement> +-- ensure join is not unique when not an equi-join +explain (verbose, costs off) +select * from j1 inner join j2 on j1.id > j2.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure join is not unique when not an equi-join + ^ +<sql-statement> +-- ensure non-unique rel is not chosen as inner +explain (verbose, costs off) +select * from j1 inner join j3 on j1.id = j3.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure non-unique rel is not chosen as inner + ^ +<sql-statement> +-- ensure left join is marked as unique +explain (verbose, costs off) +select * from j1 left join j2 on j1.id = j2.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure left join is marked as unique + ^ +<sql-statement> +-- ensure right join is marked as unique +explain (verbose, costs off) +select * from j1 right join j2 on j1.id = j2.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure right join is marked as unique + ^ +<sql-statement> +-- ensure full join is marked as unique +explain (verbose, costs off) +select * from j1 full join j2 on j1.id = j2.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure full join is marked as unique + ^ +<sql-statement> +-- a clauseless (cross) join can't be unique +explain (verbose, costs off) +select * from j1 cross join j2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- a clauseless (cross) join can't be unique + ^ +<sql-statement> +-- ensure a natural join is marked as unique +explain (verbose, costs off) +select * from j1 natural join j2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure a natural join is marked as unique + ^ +<sql-statement> +-- ensure a distinct clause allows the inner to become unique +explain (verbose, costs off) +select * from j1 +inner join (select distinct id from j3) j3 on j1.id = j3.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure a distinct clause allows the inner to become unique + ^ +<sql-statement> +-- ensure group by clause allows the inner to become unique +explain (verbose, costs off) +select * from j1 +inner join (select id from j3 group by id) j3 on j1.id = j3.id; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure group by clause allows the inner to become unique + ^ +<sql-statement> +drop table j1; +</sql-statement> +<sql-statement> +drop table j2; +</sql-statement> +<sql-statement> +drop table j3; +</sql-statement> +<sql-statement> +-- test more complex permutations of unique joins +create table j1 (id1 int, id2 int, primary key(id1,id2)); +</sql-statement> +<sql-statement> +create table j2 (id1 int, id2 int, primary key(id1,id2)); +</sql-statement> +<sql-statement> +create table j3 (id1 int, id2 int, primary key(id1,id2)); +</sql-statement> +<sql-statement> +insert into j1 values(1,1),(1,2); +</sql-statement> +<sql-statement> +insert into j2 values(1,1); +</sql-statement> +<sql-statement> +insert into j3 values(1,1); +</sql-statement> +<sql-statement> +analyze j1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze j1; + ^ +<sql-statement> +analyze j2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze j2; + ^ +<sql-statement> +analyze j3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze j3; + ^ +<sql-statement> +-- ensure there's no unique join when not all columns which are part of the +-- unique index are seen in the join clause +explain (verbose, costs off) +select * from j1 +inner join j2 on j1.id1 = j2.id1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure there's no unique join when not all columns which are part of the + ^ +<sql-statement> +-- ensure proper unique detection with multiple join quals +explain (verbose, costs off) +select * from j1 +inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure proper unique detection with multiple join quals + ^ +<sql-statement> +-- ensure we don't detect the join to be unique when quals are not part of the +-- join condition +explain (verbose, costs off) +select * from j1 +inner join j2 on j1.id1 = j2.id1 where j1.id2 = 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- ensure we don't detect the join to be unique when quals are not part of the + ^ +<sql-statement> +-- as above, but for left joins. +explain (verbose, costs off) +select * from j1 +left join j2 on j1.id1 = j2.id1 where j1.id2 = 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- as above, but for left joins. + ^ +<sql-statement> +-- validate logic in merge joins which skips mark and restore. +-- it should only do this if all quals which were used to detect the unique +-- are present as join quals, and not plain quals. +set enable_nestloop to 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_nestloop + -- validate logic in merge joins which skips mark and restore. + ^ +<sql-statement> +set enable_hashjoin to 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_hashjoin + set enable_hashjoin to 0; + ^ +<sql-statement> +set enable_sort to 0; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported name: enable_sort + set enable_sort to 0; + ^ +<sql-statement> +-- create indexes that will be preferred over the PKs to perform the join +create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: partial index is not supported yet + -- create indexes that will be preferred over the PKs to perform the join + ^ +<sql-statement> +create index j2_id1_idx on j2 (id1) where id1 % 1000 = 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: partial index is not supported yet + create index j2_id1_idx on j2 (id1) where id1 % 1000 = 1; + ^ +<sql-statement> +-- need an additional row in j2, if we want j2_id1_idx to be preferred +insert into j2 values(1,2); +</sql-statement> +<sql-statement> +analyze j2; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + analyze j2; + ^ +<sql-statement> +explain (costs off) select * from j1 +inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2 +where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) select * from j1 + ^ +<sql-statement> +select * from j1 +inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2 +where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select * from j1 + ^ + -stdin-:<main>:1:1: Error: Duplicated member: id1 + select * from j1 + ^ +<sql-statement> +-- Exercise array keys mark/restore B-Tree code +explain (costs off) select * from j1 +inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2 +where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1 and j2.id1 = any (array[1]); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- Exercise array keys mark/restore B-Tree code + ^ +<sql-statement> +select * from j1 +inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2 +where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1 and j2.id1 = any (array[1]); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:3:58: Error: A_Expr_Kind unsupported value: 1 + where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1 and j2.id1 = any (array[1]); + ^ +<sql-statement> +-- Exercise array keys "find extreme element" B-Tree code +explain (costs off) select * from j1 +inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2 +where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1 and j2.id1 >= any (array[1,5]); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- Exercise array keys "find extreme element" B-Tree code + ^ +<sql-statement> +select * from j1 +inner join j2 on j1.id1 = j2.id1 and j1.id2 = j2.id2 +where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1 and j2.id1 >= any (array[1,5]); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:3:58: Error: A_Expr_Kind unsupported value: 1 + where j1.id1 % 1000 = 1 and j2.id1 % 1000 = 1 and j2.id1 >= any (array[1,5]); + ^ +<sql-statement> +reset enable_nestloop; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4 + reset enable_nestloop; + ^ +<sql-statement> +reset enable_hashjoin; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4 + reset enable_hashjoin; + ^ +<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> +drop table j1; +</sql-statement> +<sql-statement> +drop table j2; +</sql-statement> +<sql-statement> +drop table j3; +</sql-statement> +<sql-statement> +-- check that semijoin inner is not seen as unique for a portion of the outerrel +explain (verbose, costs off) +select t1.unique1, t2.hundred +from onek t1, tenk1 t2 +where exists (select 1 from tenk1 t3 + where t3.thousand = t1.unique1 and t3.tenthous = t2.hundred) + and t1.unique1 < 1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- check that semijoin inner is not seen as unique for a portion of the outerrel + ^ +<sql-statement> +-- ... unless it actually is unique +create table j3 as select unique1, tenthous from onek; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 277 + -- ... unless it actually is unique + ^ +<sql-statement> +vacuum analyze j3; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 275 + vacuum analyze j3; + ^ +<sql-statement> +create unique index on j3(unique1, tenthous); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: unique index creation is not supported yet + create unique index on j3(unique1, tenthous); + ^ +<sql-statement> +explain (verbose, costs off) +select t1.unique1, t2.hundred +from onek t1, tenk1 t2 +where exists (select 1 from j3 + where j3.unique1 = t1.unique1 and j3.tenthous = t2.hundred) + and t1.unique1 < 1; +</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> +drop table j3; +</sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/join.out b/ydb/library/yql/tests/postgresql/cases/join.out index a87e5e6408b..23e3266f5b5 100644 --- a/ydb/library/yql/tests/postgresql/cases/join.out +++ b/ydb/library/yql/tests/postgresql/cases/join.out @@ -34,6 +34,79 @@ INSERT INTO J2_TBL VALUES (NULL, 0); -- useful in some tests below create temp table onerow(); -- +-- CORRELATION NAMES +-- Make sure that table/column aliases are supported +-- before diving into more complex join syntax. +-- +SELECT * + FROM J1_TBL AS tx; + i | j | t +---+---+------- + 1 | 4 | one + 2 | 3 | two + 3 | 2 | three + 4 | 1 | four + 5 | 0 | five + 6 | 6 | six + 7 | 7 | seven + 8 | 8 | eight + 0 | | zero + | | null + | 0 | zero +(11 rows) + +SELECT * + FROM J1_TBL tx; + i | j | t +---+---+------- + 1 | 4 | one + 2 | 3 | two + 3 | 2 | three + 4 | 1 | four + 5 | 0 | five + 6 | 6 | six + 7 | 7 | seven + 8 | 8 | eight + 0 | | zero + | | null + | 0 | zero +(11 rows) + +SELECT * + FROM J1_TBL AS t1 (a, b, c); + a | b | c +---+---+------- + 1 | 4 | one + 2 | 3 | two + 3 | 2 | three + 4 | 1 | four + 5 | 0 | five + 6 | 6 | six + 7 | 7 | seven + 8 | 8 | eight + 0 | | zero + | | null + | 0 | zero +(11 rows) + +SELECT * + FROM J1_TBL t1 (a, b, c); + a | b | c +---+---+------- + 1 | 4 | one + 2 | 3 | two + 3 | 2 | three + 4 | 1 | four + 5 | 0 | five + 6 | 6 | six + 7 | 7 | seven + 8 | 8 | eight + 0 | | zero + | | null + | 0 | zero +(11 rows) + +-- -- More complicated constructs -- -- @@ -61,6 +134,75 @@ insert into y values (1,111); insert into y values (2,222); insert into y values (3,333); insert into y values (4,null); +select * from x; + x1 | x2 +----+---- + 1 | 11 + 2 | 22 + 3 | + 4 | 44 + 5 | +(5 rows) + +select * from y; + y1 | y2 +----+----- + 1 | 111 + 2 | 222 + 3 | 333 + 4 | +(4 rows) + +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1); + x1 | x2 | y1 | y2 | xx1 | xx2 +----+----+----+-----+-----+----- + 1 | 11 | 1 | 111 | 1 | 11 + 2 | 22 | 2 | 222 | 2 | 22 + 3 | | 3 | 333 | 3 | + 4 | 44 | 4 | | 4 | 44 + 5 | | | | 5 | +(5 rows) + +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1 and xx2 is not null); + x1 | x2 | y1 | y2 | xx1 | xx2 +----+----+----+-----+-----+----- + 1 | 11 | 1 | 111 | 1 | 11 + 2 | 22 | 2 | 222 | 2 | 22 + 3 | | 3 | 333 | | + 4 | 44 | 4 | | 4 | 44 + 5 | | | | | +(5 rows) + +-- these should NOT give the same answers as above +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1) where (x2 is not null); + x1 | x2 | y1 | y2 | xx1 | xx2 +----+----+----+-----+-----+----- + 1 | 11 | 1 | 111 | 1 | 11 + 2 | 22 | 2 | 222 | 2 | 22 + 4 | 44 | 4 | | 4 | 44 +(3 rows) + +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1) where (y2 is not null); + x1 | x2 | y1 | y2 | xx1 | xx2 +----+----+----+-----+-----+----- + 1 | 11 | 1 | 111 | 1 | 11 + 2 | 22 | 2 | 222 | 2 | 22 + 3 | | 3 | 333 | 3 | +(3 rows) + +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1) where (xx2 is not null); + x1 | x2 | y1 | y2 | xx1 | xx2 +----+----+----+-----+-----+----- + 1 | 11 | 1 | 111 | 1 | 11 + 2 | 22 | 2 | 222 | 2 | 22 + 4 | 44 | 4 | | 4 | 44 +(3 rows) + -- try that with GEQO too begin; rollback; @@ -137,6 +279,15 @@ create temp table zt2 (f2 int primary key); create temp table zt3 (f3 int primary key); insert into zt1 values(53); insert into zt2 values(53); +select * from + zt2 left join zt3 on (f2 = f3) + left join zt1 on (f3 = f1) +where f2 = 53; + f2 | f3 | f1 +----+----+---- + 53 | | +(1 row) + -- -- test for sane behavior with noncanonical merge clauses, per bug #4926 -- @@ -160,3 +311,81 @@ rollback; -- test incorrect failure to NULL pulled-up subexpressions -- begin; +create temp table a ( + code char not null, + constraint a_pk primary key (code) +); +create temp table b ( + a char not null, + num integer not null, + constraint b_pk primary key (a, num) +); +create temp table c ( + name char not null, + a char, + constraint c_pk primary key (name) +); +insert into a (code) values ('p'); +insert into a (code) values ('q'); +insert into b (a, num) values ('p', 1); +insert into b (a, num) values ('p', 2); +insert into c (name, a) values ('A', 'p'); +insert into c (name, a) values ('B', 'q'); +insert into c (name, a) values ('C', null); +rollback; +-- +-- test incorrect handling of placeholders that only appear in targetlists, +-- per bug #6154 +-- +SELECT * FROM +( SELECT 1 as key1 ) sub1 +LEFT JOIN +( SELECT sub3.key3, sub4.value2, COALESCE(sub4.value2, 66) as value3 FROM + ( SELECT 1 as key3 ) sub3 + LEFT JOIN + ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM + ( SELECT 1 as key5 ) sub5 + LEFT JOIN + ( SELECT 2 as key6, 42 as value1 ) sub6 + ON sub5.key5 = sub6.key6 + ) sub4 + ON sub4.key5 = sub3.key3 +) sub2 +ON sub1.key1 = sub2.key3; + key1 | key3 | value2 | value3 +------+------+--------+-------- + 1 | 1 | 1 | 1 +(1 row) + +-- test the path using join aliases, too +SELECT * FROM +( SELECT 1 as key1 ) sub1 +LEFT JOIN +( SELECT sub3.key3, value2, COALESCE(value2, 66) as value3 FROM + ( SELECT 1 as key3 ) sub3 + LEFT JOIN + ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM + ( SELECT 1 as key5 ) sub5 + LEFT JOIN + ( SELECT 2 as key6, 42 as value1 ) sub6 + ON sub5.key5 = sub6.key6 + ) sub4 + ON sub4.key5 = sub3.key3 +) sub2 +ON sub1.key1 = sub2.key3; + key1 | key3 | value2 | value3 +------+------+--------+-------- + 1 | 1 | 1 | 1 +(1 row) + +-- +-- nested nestloops can require nested PlaceHolderVars +-- +create temp table nt1 ( + id int primary key, + a1 boolean, + a2 boolean +); +insert into nt1 values (1,true,true); +insert into nt1 values (2,true,false); +insert into nt1 values (3,false,false); diff --git a/ydb/library/yql/tests/postgresql/cases/join.sql b/ydb/library/yql/tests/postgresql/cases/join.sql index 1f05f60ce23..fd1820a7d99 100644 --- a/ydb/library/yql/tests/postgresql/cases/join.sql +++ b/ydb/library/yql/tests/postgresql/cases/join.sql @@ -34,6 +34,19 @@ INSERT INTO J2_TBL VALUES (NULL, 0); -- useful in some tests below create temp table onerow(); -- +-- CORRELATION NAMES +-- Make sure that table/column aliases are supported +-- before diving into more complex join syntax. +-- +SELECT * + FROM J1_TBL AS tx; +SELECT * + FROM J1_TBL tx; +SELECT * + FROM J1_TBL AS t1 (a, b, c); +SELECT * + FROM J1_TBL t1 (a, b, c); +-- -- More complicated constructs -- -- @@ -61,6 +74,19 @@ insert into y values (1,111); insert into y values (2,222); insert into y values (3,333); insert into y values (4,null); +select * from x; +select * from y; +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1); +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1 and xx2 is not null); +-- these should NOT give the same answers as above +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1) where (x2 is not null); +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1) where (y2 is not null); +select * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2) +on (x1 = xx1) where (xx2 is not null); -- try that with GEQO too begin; rollback; @@ -137,6 +163,10 @@ create temp table zt2 (f2 int primary key); create temp table zt3 (f3 int primary key); insert into zt1 values(53); insert into zt2 values(53); +select * from + zt2 left join zt3 on (f2 = f3) + left join zt1 on (f3 = f1) +where f2 = 53; -- -- test for sane behavior with noncanonical merge clauses, per bug #4926 -- @@ -156,3 +186,71 @@ rollback; -- test incorrect failure to NULL pulled-up subexpressions -- begin; +create temp table a ( + code char not null, + constraint a_pk primary key (code) +); +create temp table b ( + a char not null, + num integer not null, + constraint b_pk primary key (a, num) +); +create temp table c ( + name char not null, + a char, + constraint c_pk primary key (name) +); +insert into a (code) values ('p'); +insert into a (code) values ('q'); +insert into b (a, num) values ('p', 1); +insert into b (a, num) values ('p', 2); +insert into c (name, a) values ('A', 'p'); +insert into c (name, a) values ('B', 'q'); +insert into c (name, a) values ('C', null); +rollback; +-- +-- test incorrect handling of placeholders that only appear in targetlists, +-- per bug #6154 +-- +SELECT * FROM +( SELECT 1 as key1 ) sub1 +LEFT JOIN +( SELECT sub3.key3, sub4.value2, COALESCE(sub4.value2, 66) as value3 FROM + ( SELECT 1 as key3 ) sub3 + LEFT JOIN + ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM + ( SELECT 1 as key5 ) sub5 + LEFT JOIN + ( SELECT 2 as key6, 42 as value1 ) sub6 + ON sub5.key5 = sub6.key6 + ) sub4 + ON sub4.key5 = sub3.key3 +) sub2 +ON sub1.key1 = sub2.key3; +-- test the path using join aliases, too +SELECT * FROM +( SELECT 1 as key1 ) sub1 +LEFT JOIN +( SELECT sub3.key3, value2, COALESCE(value2, 66) as value3 FROM + ( SELECT 1 as key3 ) sub3 + LEFT JOIN + ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM + ( SELECT 1 as key5 ) sub5 + LEFT JOIN + ( SELECT 2 as key6, 42 as value1 ) sub6 + ON sub5.key5 = sub6.key6 + ) sub4 + ON sub4.key5 = sub3.key3 +) sub2 +ON sub1.key1 = sub2.key3; +-- +-- nested nestloops can require nested PlaceHolderVars +-- +create temp table nt1 ( + id int primary key, + a1 boolean, + a2 boolean +); +insert into nt1 values (1,true,true); +insert into nt1 values (2,true,false); +insert into nt1 values (3,false,false); diff --git a/ydb/library/yql/tests/postgresql/cases/json.err b/ydb/library/yql/tests/postgresql/cases/json.err index 0c022e4c992..8090f3a3ef4 100644 --- a/ydb/library/yql/tests/postgresql/cases/json.err +++ b/ydb/library/yql/tests/postgresql/cases/json.err @@ -302,50 +302,6 @@ 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: invalid input syntax for type json -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: ...[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ - - 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> @@ -3480,15 +3436,6 @@ FROM foo; <sql-statement> SELECT json_object_agg(name, type) FROM foo; </sql-statement> --stdin-:<main>: Fatal: Execution - - -stdin-:<main>:1:1: Fatal: Execution of node: YtMapReduce! - SELECT json_object_agg(name, type) FROM foo; - ^ - -stdin-:<main>:1:1: Fatal: ERROR: field name must not be null - - SELECT json_object_agg(name, type) FROM foo; - ^ <sql-statement> INSERT INTO foo VALUES (999999, NULL, 'bar'); </sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/json.out b/ydb/library/yql/tests/postgresql/cases/json.out index aecd7a8f8cd..5d0e9761173 100644 --- a/ydb/library/yql/tests/postgresql/cases/json.out +++ b/ydb/library/yql/tests/postgresql/cases/json.out @@ -293,6 +293,149 @@ 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}}'); +SELECT test_json -> 'x' +FROM test_json +WHERE json_type = 'scalar'; + ?column? +---------- + +(1 row) + +SELECT test_json -> 'x' +FROM test_json +WHERE json_type = 'array'; + ?column? +---------- + +(1 row) + +SELECT test_json -> 'x' +FROM test_json +WHERE json_type = 'object'; + ?column? +---------- + +(1 row) + +SELECT test_json->'field2' +FROM test_json +WHERE json_type = 'object'; + ?column? +---------- + "val2" +(1 row) + +SELECT test_json->>'field2' +FROM test_json +WHERE json_type = 'object'; + ?column? +---------- + val2 +(1 row) + +SELECT test_json -> 2 +FROM test_json +WHERE json_type = 'scalar'; + ?column? +---------- + +(1 row) + +SELECT test_json -> 2 +FROM test_json +WHERE json_type = 'array'; + ?column? +---------- + "two" +(1 row) + +SELECT test_json -> -1 +FROM test_json +WHERE json_type = 'array'; + ?column? +---------- + {"f1":9} +(1 row) + +SELECT test_json -> 2 +FROM test_json +WHERE json_type = 'object'; + ?column? +---------- + +(1 row) + +SELECT test_json->>2 +FROM test_json +WHERE json_type = 'array'; + ?column? +---------- + two +(1 row) + +SELECT test_json ->> 6 FROM test_json WHERE json_type = 'array'; + ?column? +---------- + [1,2,3] +(1 row) + +SELECT test_json ->> 7 FROM test_json WHERE json_type = 'array'; + ?column? +---------- + {"f1":9} +(1 row) + +SELECT test_json ->> 'field4' FROM test_json WHERE json_type = 'object'; + ?column? +---------- + 4 +(1 row) + +SELECT test_json ->> 'field5' FROM test_json WHERE json_type = 'object'; + ?column? +---------- + [1,2,3] +(1 row) + +SELECT test_json ->> 'field6' FROM test_json WHERE json_type = 'object'; + ?column? +---------- + {"f1":9} +(1 row) + +-- nulls +select (test_json->'field3') is null as expect_false +from test_json +where json_type = 'object'; + expect_false +-------------- + f +(1 row) + +select (test_json->>'field3') is null as expect_true +from test_json +where json_type = 'object'; + expect_true +------------- + t +(1 row) + +select (test_json->3) is null as expect_false +from test_json +where json_type = 'array'; + expect_false +-------------- + f +(1 row) + +select (test_json->>3) is null as expect_true +from test_json +where json_type = 'array'; + expect_true +------------- + t +(1 row) + -- corner cases select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> null::text; ?column? @@ -548,6 +691,12 @@ CREATE TEMP TABLE foo (serial_num int, name text, type text); INSERT INTO foo VALUES (847001,'t15','GE1043'); INSERT INTO foo VALUES (847002,'t16','GE1043'); INSERT INTO foo VALUES (847003,'sub-alpha','GESS90'); +SELECT json_object_agg(name, type) FROM foo; + json_object_agg +---------------------------------------------------------------- + { "t15" : "GE1043", "t16" : "GE1043", "sub-alpha" : "GESS90" } +(1 row) + INSERT INTO foo VALUES (999999, NULL, 'bar'); SELECT json_object_agg(name, type) FROM foo; ERROR: field name must not be null diff --git a/ydb/library/yql/tests/postgresql/cases/json.sql b/ydb/library/yql/tests/postgresql/cases/json.sql index 4ffff12e0d9..e2aff9ce8fc 100644 --- a/ydb/library/yql/tests/postgresql/cases/json.sql +++ b/ydb/library/yql/tests/postgresql/cases/json.sql @@ -68,6 +68,54 @@ 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}}'); +SELECT test_json -> 'x' +FROM test_json +WHERE json_type = 'scalar'; +SELECT test_json -> 'x' +FROM test_json +WHERE json_type = 'array'; +SELECT test_json -> 'x' +FROM test_json +WHERE json_type = 'object'; +SELECT test_json->'field2' +FROM test_json +WHERE json_type = 'object'; +SELECT test_json->>'field2' +FROM test_json +WHERE json_type = 'object'; +SELECT test_json -> 2 +FROM test_json +WHERE json_type = 'scalar'; +SELECT test_json -> 2 +FROM test_json +WHERE json_type = 'array'; +SELECT test_json -> -1 +FROM test_json +WHERE json_type = 'array'; +SELECT test_json -> 2 +FROM test_json +WHERE json_type = 'object'; +SELECT test_json->>2 +FROM test_json +WHERE json_type = 'array'; +SELECT test_json ->> 6 FROM test_json WHERE json_type = 'array'; +SELECT test_json ->> 7 FROM test_json WHERE json_type = 'array'; +SELECT test_json ->> 'field4' FROM test_json WHERE json_type = 'object'; +SELECT test_json ->> 'field5' FROM test_json WHERE json_type = 'object'; +SELECT test_json ->> 'field6' FROM test_json WHERE json_type = 'object'; +-- nulls +select (test_json->'field3') is null as expect_false +from test_json +where json_type = 'object'; +select (test_json->>'field3') is null as expect_true +from test_json +where json_type = 'object'; +select (test_json->3) is null as expect_false +from test_json +where json_type = 'array'; +select (test_json->>3) is null as expect_true +from test_json +where json_type = 'array'; -- corner cases select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> null::text; select '{"a": [{"b": "c"}, {"b": "cc"}]}'::json -> null::int; @@ -131,6 +179,7 @@ CREATE TEMP TABLE foo (serial_num int, name text, type text); INSERT INTO foo VALUES (847001,'t15','GE1043'); INSERT INTO foo VALUES (847002,'t16','GE1043'); INSERT INTO foo VALUES (847003,'sub-alpha','GESS90'); +SELECT json_object_agg(name, type) FROM foo; INSERT INTO foo VALUES (999999, NULL, 'bar'); SELECT json_object_agg(name, type) FROM foo; -- json_object diff --git a/ydb/library/yql/tests/postgresql/cases/jsonb.err b/ydb/library/yql/tests/postgresql/cases/jsonb.err index 4b12809f223..a50125419e3 100644 --- a/ydb/library/yql/tests/postgresql/cases/jsonb.err +++ b/ydb/library/yql/tests/postgresql/cases/jsonb.err @@ -302,50 +302,6 @@ 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: invalid input syntax for type json -DETAIL: The input string ended unexpectedly. -CONTEXT: JSON data, line 1: ...[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ - - 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> @@ -1643,15 +1599,6 @@ FROM foo; <sql-statement> SELECT jsonb_object_agg(name, type) FROM foo; </sql-statement> --stdin-:<main>: Fatal: Execution - - -stdin-:<main>:1:1: Fatal: Execution of node: YtMapReduce! - SELECT jsonb_object_agg(name, type) FROM foo; - ^ - -stdin-:<main>:1:1: Fatal: ERROR: field name must not be null - - SELECT jsonb_object_agg(name, type) FROM foo; - ^ <sql-statement> INSERT INTO foo VALUES (999999, NULL, 'bar'); </sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/jsonb.out b/ydb/library/yql/tests/postgresql/cases/jsonb.out index eb0e6281b09..5397706482a 100644 --- a/ydb/library/yql/tests/postgresql/cases/jsonb.out +++ b/ydb/library/yql/tests/postgresql/cases/jsonb.out @@ -294,6 +294,145 @@ 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}}'); +SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'scalar'; + ?column? +---------- + +(1 row) + +SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'array'; + ?column? +---------- + +(1 row) + +SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'object'; + ?column? +---------- + +(1 row) + +SELECT test_json -> 'field2' FROM test_jsonb WHERE json_type = 'object'; + ?column? +---------- + "val2" +(1 row) + +SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'scalar'; + ?column? +---------- + +(1 row) + +SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'array'; + ?column? +---------- + +(1 row) + +SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'object'; + ?column? +---------- + val2 +(1 row) + +SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'scalar'; + ?column? +---------- + +(1 row) + +SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'array'; + ?column? +---------- + "two" +(1 row) + +SELECT test_json -> 9 FROM test_jsonb WHERE json_type = 'array'; + ?column? +---------- + +(1 row) + +SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'object'; + ?column? +---------- + +(1 row) + +SELECT test_json ->> 6 FROM test_jsonb WHERE json_type = 'array'; + ?column? +----------- + [1, 2, 3] +(1 row) + +SELECT test_json ->> 7 FROM test_jsonb WHERE json_type = 'array'; + ?column? +----------- + {"f1": 9} +(1 row) + +SELECT test_json ->> 'field4' FROM test_jsonb WHERE json_type = 'object'; + ?column? +---------- + 4 +(1 row) + +SELECT test_json ->> 'field5' FROM test_jsonb WHERE json_type = 'object'; + ?column? +----------- + [1, 2, 3] +(1 row) + +SELECT test_json ->> 'field6' FROM test_jsonb WHERE json_type = 'object'; + ?column? +----------- + {"f1": 9} +(1 row) + +SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'scalar'; + ?column? +---------- + +(1 row) + +SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'array'; + ?column? +---------- + two +(1 row) + +SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'object'; + ?column? +---------- + +(1 row) + +-- nulls +SELECT (test_json->'field3') IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'object'; + expect_false +-------------- + f +(1 row) + +SELECT (test_json->>'field3') IS NULL AS expect_true FROM test_jsonb WHERE json_type = 'object'; + expect_true +------------- + t +(1 row) + +SELECT (test_json->3) IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'array'; + expect_false +-------------- + f +(1 row) + +SELECT (test_json->>3) IS NULL AS expect_true FROM test_jsonb WHERE json_type = 'array'; + expect_true +------------- + t +(1 row) + -- corner cases select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb -> null::text; ?column? @@ -1052,6 +1191,12 @@ CREATE TEMP TABLE foo (serial_num int, name text, type text); INSERT INTO foo VALUES (847001,'t15','GE1043'); INSERT INTO foo VALUES (847002,'t16','GE1043'); INSERT INTO foo VALUES (847003,'sub-alpha','GESS90'); +SELECT jsonb_object_agg(name, type) FROM foo; + jsonb_object_agg +----------------------------------------------------------- + {"t15": "GE1043", "t16": "GE1043", "sub-alpha": "GESS90"} +(1 row) + INSERT INTO foo VALUES (999999, NULL, 'bar'); SELECT jsonb_object_agg(name, type) FROM foo; ERROR: field name must not be null diff --git a/ydb/library/yql/tests/postgresql/cases/jsonb.sql b/ydb/library/yql/tests/postgresql/cases/jsonb.sql index d497888782c..8cc890e8ce1 100644 --- a/ydb/library/yql/tests/postgresql/cases/jsonb.sql +++ b/ydb/library/yql/tests/postgresql/cases/jsonb.sql @@ -74,6 +74,30 @@ 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}}'); +SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'scalar'; +SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'array'; +SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'object'; +SELECT test_json -> 'field2' FROM test_jsonb WHERE json_type = 'object'; +SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'scalar'; +SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'array'; +SELECT test_json ->> 'field2' FROM test_jsonb WHERE json_type = 'object'; +SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'scalar'; +SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'array'; +SELECT test_json -> 9 FROM test_jsonb WHERE json_type = 'array'; +SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'object'; +SELECT test_json ->> 6 FROM test_jsonb WHERE json_type = 'array'; +SELECT test_json ->> 7 FROM test_jsonb WHERE json_type = 'array'; +SELECT test_json ->> 'field4' FROM test_jsonb WHERE json_type = 'object'; +SELECT test_json ->> 'field5' FROM test_jsonb WHERE json_type = 'object'; +SELECT test_json ->> 'field6' FROM test_jsonb WHERE json_type = 'object'; +SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'scalar'; +SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'array'; +SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'object'; +-- nulls +SELECT (test_json->'field3') IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'object'; +SELECT (test_json->>'field3') IS NULL AS expect_true FROM test_jsonb WHERE json_type = 'object'; +SELECT (test_json->3) IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'array'; +SELECT (test_json->>3) IS NULL AS expect_true FROM test_jsonb WHERE json_type = 'array'; -- corner cases select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb -> null::text; select '{"a": [{"b": "c"}, {"b": "cc"}]}'::jsonb -> null::int; @@ -213,6 +237,7 @@ CREATE TEMP TABLE foo (serial_num int, name text, type text); INSERT INTO foo VALUES (847001,'t15','GE1043'); INSERT INTO foo VALUES (847002,'t16','GE1043'); INSERT INTO foo VALUES (847003,'sub-alpha','GESS90'); +SELECT jsonb_object_agg(name, type) FROM foo; INSERT INTO foo VALUES (999999, NULL, 'bar'); SELECT jsonb_object_agg(name, type) FROM foo; -- jsonb_object diff --git a/ydb/library/yql/tests/postgresql/cases/numeric.out b/ydb/library/yql/tests/postgresql/cases/numeric.out index 9d6249544b4..e9970b3d374 100644 --- a/ydb/library/yql/tests/postgresql/cases/numeric.out +++ b/ydb/library/yql/tests/postgresql/cases/numeric.out @@ -543,47 +543,15 @@ SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected INSERT INTO num_result SELECT id, 0, SQRT(ABS(val)) FROM num_data; -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; - id1 | result | expected ------+--------+---------- -(0 rows) - INSERT INTO num_result SELECT id, 0, LN(ABS(val)) FROM num_data WHERE val != '0.0'; -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; - id1 | result | expected ------+--------+---------- -(0 rows) - INSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val)) FROM num_data WHERE val != '0.0'; -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; - id1 | result | expected ------+--------+---------- -(0 rows) - INSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200)))) FROM num_data WHERE val != '0.0'; -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; - id1 | result | expected ------+--------+---------- -(0 rows) - SELECT 'inf'::numeric / '0'; ERROR: division by zero SELECT '-inf'::numeric / '0'; @@ -726,6 +694,16 @@ SELECT power('-inf'::numeric, 'inf'); Infinity (1 row) +-- ****************************** +-- * 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; + avg +------------------------ + -13430913.592242320700 +(1 row) + -- Check for appropriate rounding and overflow CREATE TABLE fract_only (id int, val numeric(4,4)); INSERT INTO fract_only VALUES (1, '0.0'); @@ -967,6 +945,358 @@ FROM generate_series(0, 110, 10) x; 110 | 0 | 0 (12 rows) +-- +-- TO_CHAR() +-- +SELECT to_char(val, '9G999G999G999G999G999') + FROM num_data; + to_char +------------------------ + 0 + 0 + -34,338,492 + 4 + 7,799,461 + 16,397 + 93,902 + -83,028,485 + 74,881 + -24,926,804 +(10 rows) + +SELECT to_char(val, '9G999G999G999G999G999D999G999G999G999G999') + FROM num_data; + to_char +-------------------------------------------- + .000,000,000,000,000 + .000,000,000,000,000 + -34,338,492.215,397,047,000,000 + 4.310,000,000,000,000 + 7,799,461.411,900,000,000,000 + 16,397.038,491,000,000,000 + 93,901.577,630,260,000,000 + -83,028,485.000,000,000,000,000 + 74,881.000,000,000,000,000 + -24,926,804.045,047,420,000,000 +(10 rows) + +SELECT to_char(val, '9999999999999999.999999999999999PR') + FROM num_data; + to_char +------------------------------------ + .000000000000000 + .000000000000000 + <34338492.215397047000000> + 4.310000000000000 + 7799461.411900000000000 + 16397.038491000000000 + 93901.577630260000000 + <83028485.000000000000000> + 74881.000000000000000 + <24926804.045047420000000> +(10 rows) + +SELECT to_char(val, '9999999999999999.999999999999999S') + FROM num_data; + to_char +----------------------------------- + .000000000000000+ + .000000000000000+ + 34338492.215397047000000- + 4.310000000000000+ + 7799461.411900000000000+ + 16397.038491000000000+ + 93901.577630260000000+ + 83028485.000000000000000- + 74881.000000000000000+ + 24926804.045047420000000- +(10 rows) + +SELECT to_char(val, 'MI9999999999999999.999999999999999') FROM num_data; + to_char +----------------------------------- + .000000000000000 + .000000000000000 + - 34338492.215397047000000 + 4.310000000000000 + 7799461.411900000000000 + 16397.038491000000000 + 93901.577630260000000 + - 83028485.000000000000000 + 74881.000000000000000 + - 24926804.045047420000000 +(10 rows) + +SELECT to_char(val, 'FMS9999999999999999.999999999999999') FROM num_data; + to_char +--------------------- + +0. + +0. + -34338492.215397047 + +4.31 + +7799461.4119 + +16397.038491 + +93901.57763026 + -83028485. + +74881. + -24926804.04504742 +(10 rows) + +SELECT to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data; + to_char +---------------------- + 0. + 0. + <34338492.215397047> + 4.31 + 7799461.4119 + 16397.038491 + 93901.57763026 + <83028485.> + 74881. + <24926804.04504742> +(10 rows) + +SELECT to_char(val, 'SG9999999999999999.999999999999999th') FROM num_data; + to_char +----------------------------------- + + .000000000000000 + + .000000000000000 + - 34338492.215397047000000 + + 4.310000000000000 + + 7799461.411900000000000 + + 16397.038491000000000 + + 93901.577630260000000 + - 83028485.000000000000000 + + 74881.000000000000000 + - 24926804.045047420000000 +(10 rows) + +SELECT to_char(val, '0999999999999999.999999999999999') FROM num_data; + to_char +----------------------------------- + 0000000000000000.000000000000000 + 0000000000000000.000000000000000 + -0000000034338492.215397047000000 + 0000000000000004.310000000000000 + 0000000007799461.411900000000000 + 0000000000016397.038491000000000 + 0000000000093901.577630260000000 + -0000000083028485.000000000000000 + 0000000000074881.000000000000000 + -0000000024926804.045047420000000 +(10 rows) + +SELECT to_char(val, 'S0999999999999999.999999999999999') FROM num_data; + to_char +----------------------------------- + +0000000000000000.000000000000000 + +0000000000000000.000000000000000 + -0000000034338492.215397047000000 + +0000000000000004.310000000000000 + +0000000007799461.411900000000000 + +0000000000016397.038491000000000 + +0000000000093901.577630260000000 + -0000000083028485.000000000000000 + +0000000000074881.000000000000000 + -0000000024926804.045047420000000 +(10 rows) + +SELECT to_char(val, 'FM0999999999999999.999999999999999') FROM num_data; + to_char +----------------------------- + 0000000000000000. + 0000000000000000. + -0000000034338492.215397047 + 0000000000000004.31 + 0000000007799461.4119 + 0000000000016397.038491 + 0000000000093901.57763026 + -0000000083028485. + 0000000000074881. + -0000000024926804.04504742 +(10 rows) + +SELECT to_char(val, 'FM9999999999999999.099999999999999') FROM num_data; + to_char +--------------------- + .0 + .0 + -34338492.215397047 + 4.31 + 7799461.4119 + 16397.038491 + 93901.57763026 + -83028485.0 + 74881.0 + -24926804.04504742 +(10 rows) + +SELECT to_char(val, 'FM9999999999990999.990999999999999') FROM num_data; + to_char +--------------------- + 0000.000 + 0000.000 + -34338492.215397047 + 0004.310 + 7799461.4119 + 16397.038491 + 93901.57763026 + -83028485.000 + 74881.000 + -24926804.04504742 +(10 rows) + +SELECT to_char(val, 'FM0999999999999999.999909999999999') FROM num_data; + to_char +----------------------------- + 0000000000000000.00000 + 0000000000000000.00000 + -0000000034338492.215397047 + 0000000000000004.31000 + 0000000007799461.41190 + 0000000000016397.038491 + 0000000000093901.57763026 + -0000000083028485.00000 + 0000000000074881.00000 + -0000000024926804.04504742 +(10 rows) + +SELECT to_char(val, 'FM9999999990999999.099999999999999') FROM num_data; + to_char +--------------------- + 0000000.0 + 0000000.0 + -34338492.215397047 + 0000004.31 + 7799461.4119 + 0016397.038491 + 0093901.57763026 + -83028485.0 + 0074881.0 + -24926804.04504742 +(10 rows) + +SELECT to_char(val, 'L9999999999999999.099999999999999') FROM num_data; + to_char +------------------------------------ + .000000000000000 + .000000000000000 + -34338492.215397047000000 + 4.310000000000000 + 7799461.411900000000000 + 16397.038491000000000 + 93901.577630260000000 + -83028485.000000000000000 + 74881.000000000000000 + -24926804.045047420000000 +(10 rows) + +SELECT to_char(val, 'FM9999999999999999.99999999999999') FROM num_data; + to_char +--------------------- + 0. + 0. + -34338492.215397047 + 4.31 + 7799461.4119 + 16397.038491 + 93901.57763026 + -83028485. + 74881. + -24926804.04504742 +(10 rows) + +SELECT to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data; + to_char +----------------------------------------------------------------------- + +. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + -3 4 3 3 8 4 9 2 . 2 1 5 3 9 7 0 4 7 0 0 0 0 0 0 0 0 + +4 . 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +7 7 9 9 4 6 1 . 4 1 1 9 0 0 0 0 0 0 0 0 0 0 0 0 0 + +1 6 3 9 7 . 0 3 8 4 9 1 0 0 0 0 0 0 0 0 0 0 0 + +9 3 9 0 1 . 5 7 7 6 3 0 2 6 0 0 0 0 0 0 0 0 0 + -8 3 0 2 8 4 8 5 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +7 4 8 8 1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + -2 4 9 2 6 8 0 4 . 0 4 5 0 4 7 4 2 0 0 0 0 0 0 0 0 0 +(10 rows) + +SELECT to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data; + to_char +------------------------------------------------------- + +0 . + +0 . + -3 4 3 3 8 4 9 2 . 2 1 5 3 9 7 0 4 7 + +4 . 3 1 + +7 7 9 9 4 6 1 . 4 1 1 9 + +1 6 3 9 7 . 0 3 8 4 9 1 + +9 3 9 0 1 . 5 7 7 6 3 0 2 6 + -8 3 0 2 8 4 8 5 . + +7 4 8 8 1 . + -2 4 9 2 6 8 0 4 . 0 4 5 0 4 7 4 2 +(10 rows) + +SELECT to_char(val, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM num_data; + to_char +----------------------------------------------------------- + text 9999 "text between quote marks" 0 + text 9999 "text between quote marks" 0 + text -3 9999 433 "text between quote marks" 8492 + text 9999 "text between quote marks" 4 + text 9999 779 "text between quote marks" 9461 + text 9999 1 "text between quote marks" 6397 + text 9999 9 "text between quote marks" 3902 + text -8 9999 302 "text between quote marks" 8485 + text 9999 7 "text between quote marks" 4881 + text -2 9999 492 "text between quote marks" 6804 +(10 rows) + +SELECT to_char(val, '999999SG9999999999') FROM num_data; + to_char +------------------- + + 0 + + 0 + - 34338492 + + 4 + + 7799461 + + 16397 + + 93902 + - 83028485 + + 74881 + - 24926804 +(10 rows) + +SELECT to_char(val, 'FM9999999999999999.999999999999999') FROM num_data; + to_char +--------------------- + 0. + 0. + -34338492.215397047 + 4.31 + 7799461.4119 + 16397.038491 + 93901.57763026 + -83028485. + 74881. + -24926804.04504742 +(10 rows) + +SELECT to_char(val, '9.999EEEE') FROM num_data; + to_char +------------ + 0.000e+00 + 0.000e+00 + -3.434e+07 + 4.310e+00 + 7.799e+06 + 1.640e+04 + 9.390e+04 + -8.303e+07 + 7.488e+04 + -2.493e+07 +(10 rows) + SELECT to_char('100'::numeric, 'FM999.9'); to_char --------- diff --git a/ydb/library/yql/tests/postgresql/cases/numeric.sql b/ydb/library/yql/tests/postgresql/cases/numeric.sql index 6b6bb8f5b3c..d34f2c99b0b 100644 --- a/ydb/library/yql/tests/postgresql/cases/numeric.sql +++ b/ydb/library/yql/tests/postgresql/cases/numeric.sql @@ -511,31 +511,15 @@ SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected AND t1.result != round(t2.expected, 80); INSERT INTO num_result SELECT id, 0, SQRT(ABS(val)) FROM num_data; -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; INSERT INTO num_result SELECT id, 0, LN(ABS(val)) FROM num_data WHERE val != '0.0'; -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; INSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val)) FROM num_data WHERE val != '0.0'; -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; INSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200)))) FROM num_data WHERE val != '0.0'; -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; SELECT 'inf'::numeric / '0'; SELECT '-inf'::numeric / '0'; SELECT 'nan'::numeric / '0'; @@ -580,6 +564,11 @@ SELECT power('-inf'::numeric, '3'); SELECT power('-inf'::numeric, '4.5'); SELECT power('-inf'::numeric, '0'); SELECT power('-inf'::numeric, 'inf'); +-- ****************************** +-- * 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; -- Check for appropriate rounding and overflow CREATE TABLE fract_only (id int, val numeric(4,4)); INSERT INTO fract_only VALUES (1, '0.0'); @@ -665,6 +654,36 @@ FROM generate_series(0, 110, 10) x; SELECT x, width_bucket(x::float8, 100, 10, 9) as flt, width_bucket(x::numeric, 100, 10, 9) as num FROM generate_series(0, 110, 10) x; +-- +-- TO_CHAR() +-- +SELECT to_char(val, '9G999G999G999G999G999') + FROM num_data; +SELECT to_char(val, '9G999G999G999G999G999D999G999G999G999G999') + FROM num_data; +SELECT to_char(val, '9999999999999999.999999999999999PR') + FROM num_data; +SELECT to_char(val, '9999999999999999.999999999999999S') + FROM num_data; +SELECT to_char(val, 'MI9999999999999999.999999999999999') FROM num_data; +SELECT to_char(val, 'FMS9999999999999999.999999999999999') FROM num_data; +SELECT to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data; +SELECT to_char(val, 'SG9999999999999999.999999999999999th') FROM num_data; +SELECT to_char(val, '0999999999999999.999999999999999') FROM num_data; +SELECT to_char(val, 'S0999999999999999.999999999999999') FROM num_data; +SELECT to_char(val, 'FM0999999999999999.999999999999999') FROM num_data; +SELECT to_char(val, 'FM9999999999999999.099999999999999') FROM num_data; +SELECT to_char(val, 'FM9999999999990999.990999999999999') FROM num_data; +SELECT to_char(val, 'FM0999999999999999.999909999999999') FROM num_data; +SELECT to_char(val, 'FM9999999990999999.099999999999999') FROM num_data; +SELECT to_char(val, 'L9999999999999999.099999999999999') FROM num_data; +SELECT to_char(val, 'FM9999999999999999.99999999999999') FROM num_data; +SELECT to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data; +SELECT to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data; +SELECT to_char(val, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM num_data; +SELECT to_char(val, '999999SG9999999999') FROM num_data; +SELECT to_char(val, 'FM9999999999999999.999999999999999') FROM num_data; +SELECT to_char(val, '9.999EEEE') FROM num_data; SELECT to_char('100'::numeric, 'FM999.9'); SELECT to_char('100'::numeric, 'FM999.'); SELECT to_char('100'::numeric, 'FM999'); diff --git a/ydb/library/yql/tests/postgresql/cases/select_having.out b/ydb/library/yql/tests/postgresql/cases/select_having.out index b0a1d99dad9..e8be510b015 100644 --- a/ydb/library/yql/tests/postgresql/cases/select_having.out +++ b/ydb/library/yql/tests/postgresql/cases/select_having.out @@ -13,6 +13,42 @@ INSERT INTO test_having VALUES (6, 4, 'cccc', 'g'); INSERT INTO test_having VALUES (7, 4, 'cccc', 'h'); INSERT INTO test_having VALUES (8, 4, 'CCCC', 'I'); INSERT INTO test_having VALUES (9, 4, 'CCCC', 'j'); +SELECT b, c FROM test_having + GROUP BY b, c HAVING count(*) = 1 ORDER BY b, c; + b | c +---+---------- + 1 | XXXX + 3 | bbbb +(2 rows) + +-- 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; + b | c +---+---------- + 3 | BBBB + 3 | bbbb +(2 rows) + +SELECT lower(c), count(c) FROM test_having + GROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a) + ORDER BY lower(c); + lower | count +-------+------- + bbbb | 3 + cccc | 4 + xxxx | 1 +(3 rows) + +SELECT c, max(a) FROM test_having + GROUP BY c HAVING count(*) > 2 OR min(a) = max(a) + ORDER BY c; + c | max +----------+----- + XXXX | 0 + bbbb | 5 +(2 rows) + -- test degenerate cases involving HAVING without GROUP BY -- Per SQL spec, these should generate 0 or 1 row, even without aggregates SELECT min(a), max(a) FROM test_having HAVING min(a) = max(a); @@ -20,6 +56,12 @@ SELECT min(a), max(a) FROM test_having HAVING min(a) = max(a); -----+----- (0 rows) +SELECT min(a), max(a) FROM test_having HAVING min(a) < max(a); + min | max +-----+----- + 0 | 9 +(1 row) + -- the really degenerate case: need not scan table at all SELECT 1 AS one FROM test_having HAVING 1 > 2; one diff --git a/ydb/library/yql/tests/postgresql/cases/select_having.sql b/ydb/library/yql/tests/postgresql/cases/select_having.sql index 79003b7d3c8..96a412d59d8 100644 --- a/ydb/library/yql/tests/postgresql/cases/select_having.sql +++ b/ydb/library/yql/tests/postgresql/cases/select_having.sql @@ -13,9 +13,21 @@ INSERT INTO test_having VALUES (6, 4, 'cccc', 'g'); INSERT INTO test_having VALUES (7, 4, 'cccc', 'h'); INSERT INTO test_having VALUES (8, 4, 'CCCC', 'I'); INSERT INTO test_having VALUES (9, 4, 'CCCC', 'j'); +SELECT b, c FROM test_having + GROUP BY b, c HAVING count(*) = 1 ORDER BY b, c; +-- 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; +SELECT lower(c), count(c) FROM test_having + GROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a) + ORDER BY lower(c); +SELECT c, max(a) FROM test_having + GROUP BY c HAVING count(*) > 2 OR min(a) = max(a) + ORDER BY c; -- test degenerate cases involving HAVING without GROUP BY -- Per SQL spec, these should generate 0 or 1 row, even without aggregates SELECT min(a), max(a) FROM test_having HAVING min(a) = max(a); +SELECT min(a), max(a) FROM test_having HAVING min(a) < max(a); -- the really degenerate case: need not scan table at all SELECT 1 AS one FROM test_having HAVING 1 > 2; SELECT 1 AS one FROM test_having HAVING 1 < 2; diff --git a/ydb/library/yql/tests/postgresql/cases/select_implicit.err b/ydb/library/yql/tests/postgresql/cases/select_implicit.err index 6fbf9e3067c..2d57cf52715 100644 --- a/ydb/library/yql/tests/postgresql/cases/select_implicit.err +++ b/ydb/library/yql/tests/postgresql/cases/select_implicit.err @@ -101,7 +101,7 @@ SELECT c, count(*) FROM test_missing_target GROUP BY 3; -stdin-:<main>:3:54: Error: GROUP BY: position 3 is not in select list SELECT c, count(*) FROM test_missing_target GROUP BY 3; ^ --stdin-:<main>: Fatal: ydb/library/yql/ast/yql_expr.h:1748: no children +-stdin-:<main>: Fatal: ydb/library/yql/ast/yql_expr.h:1769: no children <sql-statement> -- group w/o existing GROUP BY and ORDER BY target under ambiguous condition diff --git a/ydb/library/yql/tests/postgresql/cases/select_implicit.err.1 b/ydb/library/yql/tests/postgresql/cases/select_implicit.err.1 index 6fbf9e3067c..2d57cf52715 100644 --- a/ydb/library/yql/tests/postgresql/cases/select_implicit.err.1 +++ b/ydb/library/yql/tests/postgresql/cases/select_implicit.err.1 @@ -101,7 +101,7 @@ SELECT c, count(*) FROM test_missing_target GROUP BY 3; -stdin-:<main>:3:54: Error: GROUP BY: position 3 is not in select list SELECT c, count(*) FROM test_missing_target GROUP BY 3; ^ --stdin-:<main>: Fatal: ydb/library/yql/ast/yql_expr.h:1748: no children +-stdin-:<main>: Fatal: ydb/library/yql/ast/yql_expr.h:1769: no children <sql-statement> -- group w/o existing GROUP BY and ORDER BY target under ambiguous condition diff --git a/ydb/library/yql/tests/postgresql/cases/select_implicit.err.2 b/ydb/library/yql/tests/postgresql/cases/select_implicit.err.2 index 6fbf9e3067c..2d57cf52715 100644 --- a/ydb/library/yql/tests/postgresql/cases/select_implicit.err.2 +++ b/ydb/library/yql/tests/postgresql/cases/select_implicit.err.2 @@ -101,7 +101,7 @@ SELECT c, count(*) FROM test_missing_target GROUP BY 3; -stdin-:<main>:3:54: Error: GROUP BY: position 3 is not in select list SELECT c, count(*) FROM test_missing_target GROUP BY 3; ^ --stdin-:<main>: Fatal: ydb/library/yql/ast/yql_expr.h:1748: no children +-stdin-:<main>: Fatal: ydb/library/yql/ast/yql_expr.h:1769: no children <sql-statement> -- group w/o existing GROUP BY and ORDER BY target under ambiguous condition diff --git a/ydb/library/yql/tests/postgresql/cases/select_implicit.out b/ydb/library/yql/tests/postgresql/cases/select_implicit.out index a6719709bfe..507640d5667 100644 --- a/ydb/library/yql/tests/postgresql/cases/select_implicit.out +++ b/ydb/library/yql/tests/postgresql/cases/select_implicit.out @@ -17,6 +17,77 @@ INSERT INTO test_missing_target VALUES (6, 4, 'cccc', 'g'); INSERT INTO test_missing_target VALUES (7, 4, 'cccc', 'h'); INSERT INTO test_missing_target VALUES (8, 4, 'CCCC', 'I'); INSERT INTO test_missing_target VALUES (9, 4, 'CCCC', 'j'); +-- w/ existing GROUP BY target +SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c; + c | count +----------+------- + ABAB | 2 + BBBB | 2 + CCCC | 2 + XXXX | 1 + bbbb | 1 + cccc | 2 +(6 rows) + +-- w/o existing GROUP BY target using a relation name in GROUP BY clause +SELECT count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c; + count +------- + 2 + 2 + 2 + 1 + 1 + 2 +(6 rows) + +-- w/o existing GROUP BY target and w/o existing same ORDER BY target +SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b; + count +------- + 1 + 2 + 3 + 4 +(4 rows) + +-- w/ existing GROUP BY target using a relation name in target +SELECT test_missing_target.b, count(*) + FROM test_missing_target GROUP BY b ORDER BY b; + b | count +---+------- + 1 | 1 + 2 | 2 + 3 | 3 + 4 | 4 +(4 rows) + +-- w/o existing GROUP BY target +SELECT c FROM test_missing_target ORDER BY a; + c +---------- + XXXX + ABAB + ABAB + BBBB + BBBB + bbbb + cccc + cccc + CCCC + CCCC +(10 rows) + +-- w/o existing ORDER BY target +SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b desc; + count +------- + 4 + 3 + 2 + 1 +(4 rows) + -- group using reference number SELECT count(*) FROM test_missing_target ORDER BY 1 desc; count @@ -24,5 +95,151 @@ SELECT count(*) FROM test_missing_target ORDER BY 1 desc; 10 (1 row) +-- order using reference number +SELECT c, count(*) FROM test_missing_target GROUP BY 1 ORDER BY 1; + c | count +----------+------- + ABAB | 2 + BBBB | 2 + CCCC | 2 + XXXX | 1 + bbbb | 1 + cccc | 2 +(6 rows) + +-- order expression w/ target under ambiguous condition +-- failure NOT expected +SELECT a/2, a/2 FROM test_missing_target + ORDER BY a/2; + ?column? | ?column? +----------+---------- + 0 | 0 + 0 | 0 + 1 | 1 + 1 | 1 + 2 | 2 + 2 | 2 + 3 | 3 + 3 | 3 + 4 | 4 + 4 | 4 +(10 rows) + +-- group expression w/ target under ambiguous condition +-- failure NOT expected +SELECT a/2, a/2 FROM test_missing_target + GROUP BY a/2 ORDER BY a/2; + ?column? | ?column? +----------+---------- + 0 | 0 + 1 | 1 + 2 | 2 + 3 | 3 + 4 | 4 +(5 rows) + +-- group w/ existing GROUP BY target under ambiguous condition +SELECT x.b, count(*) FROM test_missing_target x, test_missing_target y + WHERE x.a = y.a + GROUP BY x.b ORDER BY x.b; + b | count +---+------- + 1 | 1 + 2 | 2 + 3 | 3 + 4 | 4 +(4 rows) + +-- group w/o existing GROUP BY target under ambiguous condition +SELECT count(*) FROM test_missing_target x, test_missing_target y + WHERE x.a = y.a + GROUP BY x.b ORDER BY x.b; + count +------- + 1 + 2 + 3 + 4 +(4 rows) + +-- Functions and expressions +-- w/ existing GROUP BY target +SELECT a%2, count(b) FROM test_missing_target +GROUP BY test_missing_target.a%2 +ORDER BY test_missing_target.a%2; + ?column? | count +----------+------- + 0 | 5 + 1 | 5 +(2 rows) + +-- w/o existing GROUP BY target using a relation name in GROUP BY clause +SELECT count(c) FROM test_missing_target +GROUP BY lower(test_missing_target.c) +ORDER BY lower(test_missing_target.c); + count +------- + 2 + 3 + 4 + 1 +(4 rows) + +-- w/o existing GROUP BY target and w/o existing same ORDER BY target +SELECT count(b) FROM test_missing_target GROUP BY b/2 ORDER BY b/2; + count +------- + 1 + 5 + 4 +(3 rows) + +-- w/ existing GROUP BY target using a relation name in target +SELECT lower(test_missing_target.c), count(c) + FROM test_missing_target GROUP BY lower(c) ORDER BY lower(c); + lower | count +-------+------- + abab | 2 + bbbb | 3 + cccc | 4 + xxxx | 1 +(4 rows) + +-- w/o existing GROUP BY target +SELECT a FROM test_missing_target ORDER BY upper(d); + a +--- + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +(10 rows) + +-- w/o existing ORDER BY target +SELECT count(b) FROM test_missing_target + GROUP BY (b + 1) / 2 ORDER BY (b + 1) / 2 desc; + count +------- + 7 + 3 +(2 rows) + +-- group w/ existing GROUP BY target under ambiguous condition +SELECT x.b/2, count(x.b) FROM test_missing_target x, test_missing_target y + WHERE x.a = y.a + GROUP BY x.b/2 ORDER BY x.b/2; + ?column? | count +----------+------- + 0 | 1 + 1 | 5 + 2 | 4 +(3 rows) + -- Cleanup DROP TABLE test_missing_target; diff --git a/ydb/library/yql/tests/postgresql/cases/select_implicit.sql b/ydb/library/yql/tests/postgresql/cases/select_implicit.sql index 746abb2902f..23088cfd226 100644 --- a/ydb/library/yql/tests/postgresql/cases/select_implicit.sql +++ b/ydb/library/yql/tests/postgresql/cases/select_implicit.sql @@ -17,7 +17,61 @@ INSERT INTO test_missing_target VALUES (6, 4, 'cccc', 'g'); INSERT INTO test_missing_target VALUES (7, 4, 'cccc', 'h'); INSERT INTO test_missing_target VALUES (8, 4, 'CCCC', 'I'); INSERT INTO test_missing_target VALUES (9, 4, 'CCCC', 'j'); +-- w/ existing GROUP BY target +SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c; +-- w/o existing GROUP BY target using a relation name in GROUP BY clause +SELECT count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c; +-- w/o existing GROUP BY target and w/o existing same ORDER BY target +SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b; +-- w/ existing GROUP BY target using a relation name in target +SELECT test_missing_target.b, count(*) + FROM test_missing_target GROUP BY b ORDER BY b; +-- w/o existing GROUP BY target +SELECT c FROM test_missing_target ORDER BY a; +-- w/o existing ORDER BY target +SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b desc; -- group using reference number SELECT count(*) FROM test_missing_target ORDER BY 1 desc; +-- order using reference number +SELECT c, count(*) FROM test_missing_target GROUP BY 1 ORDER BY 1; +-- order expression w/ target under ambiguous condition +-- failure NOT expected +SELECT a/2, a/2 FROM test_missing_target + ORDER BY a/2; +-- group expression w/ target under ambiguous condition +-- failure NOT expected +SELECT a/2, a/2 FROM test_missing_target + GROUP BY a/2 ORDER BY a/2; +-- group w/ existing GROUP BY target under ambiguous condition +SELECT x.b, count(*) FROM test_missing_target x, test_missing_target y + WHERE x.a = y.a + GROUP BY x.b ORDER BY x.b; +-- group w/o existing GROUP BY target under ambiguous condition +SELECT count(*) FROM test_missing_target x, test_missing_target y + WHERE x.a = y.a + GROUP BY x.b ORDER BY x.b; +-- Functions and expressions +-- w/ existing GROUP BY target +SELECT a%2, count(b) FROM test_missing_target +GROUP BY test_missing_target.a%2 +ORDER BY test_missing_target.a%2; +-- w/o existing GROUP BY target using a relation name in GROUP BY clause +SELECT count(c) FROM test_missing_target +GROUP BY lower(test_missing_target.c) +ORDER BY lower(test_missing_target.c); +-- w/o existing GROUP BY target and w/o existing same ORDER BY target +SELECT count(b) FROM test_missing_target GROUP BY b/2 ORDER BY b/2; +-- w/ existing GROUP BY target using a relation name in target +SELECT lower(test_missing_target.c), count(c) + FROM test_missing_target GROUP BY lower(c) ORDER BY lower(c); +-- w/o existing GROUP BY target +SELECT a FROM test_missing_target ORDER BY upper(d); +-- w/o existing ORDER BY target +SELECT count(b) FROM test_missing_target + GROUP BY (b + 1) / 2 ORDER BY (b + 1) / 2 desc; +-- group w/ existing GROUP BY target under ambiguous condition +SELECT x.b/2, count(x.b) FROM test_missing_target x, test_missing_target y + WHERE x.a = y.a + GROUP BY x.b/2 ORDER BY x.b/2; -- Cleanup DROP TABLE test_missing_target; diff --git a/ydb/library/yql/tests/postgresql/cases/strings.err b/ydb/library/yql/tests/postgresql/cases/strings.err index b1dba062938..f52e6dfa11e 100644 --- a/ydb/library/yql/tests/postgresql/cases/strings.err +++ b/ydb/library/yql/tests/postgresql/cases/strings.err @@ -992,56 +992,58 @@ SELECT 'hawkeye' NOT LIKE 'indio%' AS "true"; <sql-statement> SELECT 'hawkeye' LIKE 'h%eye' AS "true"; </sql-statement> -VERIFY failed (2024-02-12T15:29:38.490512Z): +VERIFY failed (2024-02-18T13:38:24.295369+0300): util/generic/ptr.h:110 operator->(): requirement ptr failed -NPrivate::InternalPanicImpl(int, char const*, char const*, int, int, int, TBasicStringBuf<char, std::__y1::char_traits<char> >, char const*, unsigned long)+600 (0x9628AF8) -NPrivate::Panic(NPrivate::TStaticBuf const&, int, char const*, char const*, char const*, ...)+285 (0x961EA0D) -NYql::NTypeAnnImpl::TExtContext::LoadUdfMetadata(TVector<NYql::IUdfResolver::TFunction*, std::__y1::allocator<NYql::IUdfResolver::TFunction*> > const&)+901 (0xBC09405) -NYql::NTypeAnnImpl::UdfWrapper(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::NTypeAnnImpl::TExtContext&)+4791 (0xBC4DA17) -NYql::NTypeAnnImpl::TExtCallableTypeAnnotationTransformer::ProcessCore(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+269 (0xBCB6D6D) -NYql::TCallableTransformerBase<NYql::NTypeAnnImpl::TExtCallableTypeAnnotationTransformer>::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+320 (0xBCB64B0) -NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+152 (0xA154F88) -??+0 (0xBDC2154) -??+0 (0xBDC168D) -??+0 (0xBDC120E) -??+0 (0xBDC168D) -??+0 (0xBDC168D) -??+0 (0xBDC168D) -??+0 (0xBDC168D) -??+0 (0xBDC228E) -??+0 (0xBDC168D) -??+0 (0xBDC120E) -??+0 (0xBDC120E) -??+0 (0xBDC120E) -??+0 (0xBDC168D) -??+0 (0xBDC120E) -??+0 (0xBDC120E) -??+0 (0xBDC120E) -??+0 (0xBDC168D) -??+0 (0xBDC168D) -??+0 (0xBDC168D) -??+0 (0xBDBF6E7) -NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+152 (0xA154F88) -??+0 (0xA155695) -NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+152 (0xA154F88) -NYql::AsyncTransformStepImpl(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool, bool, TBasicStringBuf<char, std::__y1::char_traits<char> > const&)+290 (0xA153A62) -NYql::AsyncTransform(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool)+66 (0xA1543C2) -NYql::TProgram::AsyncTransformWithFallback(bool)+81 (0xB07D941) -??+0 (0xB08EF10) -NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)+3035 (0xB07B92B) -??+0 (0xB078A7A) -NYql::TProgram::Run(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)+129 (0xB07AD11) -Main(int, char**)+4719 (0x9507F7F) -main+338 (0x950A1A2) -__libc_start_main+243 (0x7F6F09D6B083) -??+0 (0x949E029) -??? at ???:0:0 +NPrivate::InternalPanicImpl(int, char const*, char const*, int, int, int, TBasicStringBuf<char, std::__y1::char_traits<char> >, char const*, unsigned long)+600 (0x98F4308) +NPrivate::Panic(NPrivate::TStaticBuf const&, int, char const*, char const*, char const*, ...)+285 (0x98EA21D) +NYql::NTypeAnnImpl::TExtContext::LoadUdfMetadata(TVector<NYql::IUdfResolver::TFunction*, std::__y1::allocator<NYql::IUdfResolver::TFunction*> > const&)+901 (0xCA45875) +NYql::NTypeAnnImpl::UdfWrapper(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::NTypeAnnImpl::TExtContext&)+4791 (0xCA89E97) +NYql::NTypeAnnImpl::TExtCallableTypeAnnotationTransformer::ProcessCore(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+269 (0xCAF3A8D) +NYql::TCallableTransformerBase<NYql::NTypeAnnImpl::TExtCallableTypeAnnotationTransformer>::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+320 (0xCAF31D0) +NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+152 (0xAFFFD28) +??+0 (0xCBFF174) +??+0 (0xCBFE6AD) +??+0 (0xCBFE22E) +??+0 (0xCBFE6AD) +??+0 (0xCBFE6AD) +??+0 (0xCBFE6AD) +??+0 (0xCBFE6AD) +??+0 (0xCBFF2AE) +??+0 (0xCBFE6AD) +??+0 (0xCBFE22E) +??+0 (0xCBFE22E) +??+0 (0xCBFE22E) +??+0 (0xCBFE6AD) +??+0 (0xCBFE22E) +??+0 (0xCBFE22E) +??+0 (0xCBFE22E) +??+0 (0xCBFE6AD) +??+0 (0xCBFE6AD) +??+0 (0xCBFE6AD) +??+0 (0xCBFC707) +NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+152 (0xAFFFD28) +??+0 (0xB000435) +NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)+152 (0xAFFFD28) +NYql::AsyncTransformStepImpl(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool, bool, TBasicStringBuf<char, std::__y1::char_traits<char> > const&)+290 (0xAFFE802) +NYql::AsyncTransform(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool)+66 (0xAFFF162) +NYql::TProgram::AsyncTransformWithFallback(bool)+81 (0xBF2B5E1) +??+0 (0xBF3CBB0) +NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)+3035 (0xBF295CB) +??+0 (0xBF2671A) +NYql::TProgram::Run(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)+129 (0xBF289B1) +Main(int, char**)+5795 (0x97D20C3) +main+338 (0x97D45B2) +??+0 (0x7F8457E29D90) +__libc_start_main+128 (0x7F8457E29E40) +??+0 (0x9766029) +__GI_raise at ../sysdeps/posix/raise.c:26:0 +__GI_abort at ./stdlib/abort.c:79:0 NPrivate::InternalPanicImpl(int, char const*, char const*, int, int, int, TBasicStringBuf<char, std::__y1::char_traits<char> >, char const*, unsigned long) at /-S/util/system/yassert.cpp:90:0 NPrivate::Panic(NPrivate::TStaticBuf const&, int, char const*, char const*, char const*, ...) at /-S/util/system/yassert.cpp:55:0 TPointerCommon<TIntrusiveConstPtr<NYql::IUdfResolver, TDefaultIntrusivePtrOps<NYql::IUdfResolver> >, NYql::IUdfResolver const>::operator->() const at /-S/util/generic/ptr.h:110:0 NYql::NTypeAnnImpl::TExtContext::LoadUdfMetadata(TVector<NYql::IUdfResolver::TFunction*, std::__y1::allocator<NYql::IUdfResolver::TFunction*> > const&) at /-S/ydb/library/yql/core/type_ann/type_ann_core.cpp:454:0 -NYql::NTypeAnnImpl::UdfWrapper(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::NTypeAnnImpl::TExtContext&) at /-S/ydb/library/yql/core/type_ann/type_ann_core.cpp:7222:0 +NYql::NTypeAnnImpl::UdfWrapper(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::NTypeAnnImpl::TExtContext&) at /-S/ydb/library/yql/core/type_ann/type_ann_core.cpp:7238:0 NYql::NTypeAnnImpl::TExtCallableTypeAnnotationTransformer::ProcessCore(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/type_ann/type_ann_core.cpp:0:0 NYql::TCallableTransformerBase<NYql::NTypeAnnImpl::TExtCallableTypeAnnotationTransformer>::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_callable_transform.h:46:0 NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 @@ -1072,17 +1074,18 @@ NYql::(anonymous namespace)::TCompositeGraphTransformer::DoTransform(TIntrusiveP NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 NYql::AsyncTransformStepImpl(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool, bool, TBasicStringBuf<char, std::__y1::char_traits<char> > const&) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:312:0 NYql::AsyncTransform(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:364:0 -NYql::TProgram::AsyncTransformWithFallback(bool) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:1149:0 -NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0::operator()(NThreading::TFuture<void> const&) const at /-S/ydb/library/yql/core/facade/yql_facade.cpp:1023:0 -NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()::operator()() const at /-S/library/cpp/threading/future/core/future-inl.h:726:0 -void NThreading::NImpl::SetValue<NYql::IGraphTransformer::TStatus, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()>(NThreading::TPromise<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>&, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()&&) at /-S/library/cpp/threading/future/core/future-inl.h:486:0 -NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&) at /-S/library/cpp/threading/future/core/future-inl.h:726:0 -NThreading::TFuture<void> const& NThreading::TFuture<void>::Subscribe<NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /-S/library/cpp/threading/future/core/future-inl.h:711:0 -NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /-S/library/cpp/threading/future/core/future-inl.h:725:0 -NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:1014:0 -NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::SyncExecution<TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool, TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&>(NYql::TProgram*, NThreading::TFuture<NYql::IGraphTransformer::TStatus> (NYql::TProgram::*)(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool), TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:69:0 -NYql::TProgram::Run(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:949:0 -Main(int, char**) at /-S/ydb/library/yql/tools/pgrun/pgrun.cpp:1206:0 -main at /-S/ydb/library/yql/tools/pgrun/pgrun.cpp:1242:0 -??? at ???:0:0 +NYql::TProgram::AsyncTransformWithFallback(bool) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:1149:0 +NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0::operator()(NThreading::TFuture<void> const&) const at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:1023:0 +NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()::operator()() const at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:726:0 +void NThreading::NImpl::SetValue<NYql::IGraphTransformer::TStatus, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()>(NThreading::TPromise<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>&, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()&&) at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:486:0 +NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&) at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:726:0 +NThreading::TFuture<void> const& NThreading::TFuture<void>::Subscribe<NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:711:0 +NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:725:0 +NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:1014:0 +NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::SyncExecution<TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool, TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&>(NYql::TProgram*, NThreading::TFuture<NYql::IGraphTransformer::TStatus> (NYql::TProgram::*)(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool), TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:69:0 +NYql::TProgram::Run(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:949:0 +Main(int, char**) at /home/marsaly/ydbwork/ydb/ydb/library/yql/tools/pgrun/pgrun.cpp:1260:0 +main at /home/marsaly/ydbwork/ydb/ydb/library/yql/tools/pgrun/pgrun.cpp:1300:0 +__libc_start_call_main at ../sysdeps/nptl/libc_start_call_main.h:58:0 +__libc_start_main_impl at ../csu/libc-start.c:392:0 ??? at ???:0:0 diff --git a/ydb/library/yql/tests/postgresql/cases/subselect.err b/ydb/library/yql/tests/postgresql/cases/subselect.err index 380efb3eced..4b22de891ce 100644 --- a/ydb/library/yql/tests/postgresql/cases/subselect.err +++ b/ydb/library/yql/tests/postgresql/cases/subselect.err @@ -22,19 +22,19 @@ SELECT * FROM ((SELECT 1 AS x)) ss; </sql-statement> NYql::TAggregateExpander::CollectTraits() at /-S/ydb/library/yql/core/yql_aggregate_expander.cpp:146:0 NYql::TAggregateExpander::ExpandAggregate() at /-S/ydb/library/yql/core/yql_aggregate_expander.cpp:23:0 -NYql::ExpandAggregatePeepholeImpl(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, bool, bool) at /-S/ydb/library/yql/core/yql_aggregate_expander.h:136:0 +NYql::ExpandAggregatePeepholeImpl(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, bool, bool) at /-S/ydb/library/yql/core/yql_aggregate_expander.h:134:0 NYql::ExpandAggregatePeephole(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&) at /-S/ydb/library/yql/core/yql_aggregate_expander.cpp:2928:0 -NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) const at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:2131:0 +NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) const at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:2257:0 decltype(std::declval<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&>()(std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&>(), std::declval<NYql::TExprContext&>())) std::__y1::__invoke[abi:v160005]<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&>(NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:394:0 TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > std::__y1::__invoke_void_return_wrapper<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, false>::__call<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&>(NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:478:0 std::__y1::__function::__alloc_func<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0, std::__y1::allocator<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0>, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>::operator()[abi:v160005](TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:185:0 std::__y1::__function::__func<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0, std::__y1::allocator<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0>, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:356:0 -TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:201:0 -TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:159:0 -NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::OptimizeExprInternal<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>, std::__y1::unordered_map<NYql::TExprNode const*, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, std::__y1::hash<NYql::TExprNode const*>, std::__y1::equal_to<NYql::TExprNode const*>, std::__y1::allocator<std::__y1::pair<NYql::TExprNode const* const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > > > > const*, NYql::TExprContext&, NYql::TOptimizeExprSettings const&) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:454:0 -NYql::OptimizeExpr(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>, NYql::TExprContext&, NYql::TOptimizeExprSettings const&) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:500:0 -NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:2126:0 -NYql::(anonymous namespace)::CreatePeepHoleCommonStageTransformer(NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, NYql::TPeepholeSettings const&)::$_0::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:7800:0 +TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:213:0 +TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:171:0 +NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::OptimizeExprInternal<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>, std::__y1::unordered_map<NYql::TExprNode const*, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, std::__y1::hash<NYql::TExprNode const*>, std::__y1::equal_to<NYql::TExprNode const*>, std::__y1::allocator<std::__y1::pair<NYql::TExprNode const* const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > > > > const*, NYql::TExprContext&, NYql::TOptimizeExprSettings const&) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:466:0 +NYql::OptimizeExpr(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>, NYql::TExprContext&, NYql::TOptimizeExprSettings const&) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:512:0 +NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:2252:0 +NYql::(anonymous namespace)::CreatePeepHoleCommonStageTransformer(NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, NYql::TPeepholeSettings const&)::$_0::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:7954:0 NYql::TFunctorTransformer<NYql::(anonymous namespace)::CreatePeepHoleCommonStageTransformer(NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, NYql::TPeepholeSettings const&)::$_0>::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:273:0 NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 NYql::(anonymous namespace)::TCompositeGraphTransformer::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)::'lambda'()::operator()() const at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:48:0 @@ -43,22 +43,22 @@ NYql::(anonymous namespace)::TCompositeGraphTransformer::DoTransform(TIntrusiveP NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 NYql::AsyncTransformStepImpl(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool, bool, TBasicStringBuf<char, std::__y1::char_traits<char> > const&) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:312:0 NYql::InstantTransform(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:348:0 -NYql::DoPeepHoleOptimizeNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::IGraphTransformer&, NYql::IGraphTransformer&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:7898:0 -NYql::PeepHoleOptimizeNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, bool&, NYql::TPeepholeSettings const&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:7921:0 +NYql::DoPeepHoleOptimizeNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::IGraphTransformer&, NYql::IGraphTransformer&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:8052:0 +NYql::PeepHoleOptimizeNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, bool&, NYql::TPeepholeSettings const&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:8075:0 NYql::PeepHoleOptimizeBeforeExec(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, TIntrusivePtr<NYql::TYtState, TDefaultIntrusivePtrOps<NYql::TYtState> > const&, bool&, NYql::TExprContext&) at /-S/ydb/library/yql/providers/yt/provider/yql_yt_optimize.cpp:662:0 -NYql::(anonymous namespace)::TYtDataSourceExecTransformer::HandleResOrPull(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/ydb/library/yql/providers/yt/provider/yql_yt_datasource_exec.cpp:138:0 -std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/ydb/library/yql/providers/common/transform/yql_exec.h:58:0 -decltype(std::declval<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>()(std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&>(), std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&>(), std::declval<NYql::TExprContext&>())) std::__y1::__invoke[abi:v160005]<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&>(NYql::(anonymous namespace)::TYtDataSourceExecTransformer&&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:394:0 -std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > std::__y1::__invoke_void_return_wrapper<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > >, false>::__call<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&>(std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:478:0 -std::__y1::__function::__alloc_func<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&), std::__y1::allocator<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>, std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()[abi:v160005](TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:185:0 -std::__y1::__function::__func<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&), std::__y1::allocator<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>, std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:356:0 +NYql::(anonymous namespace)::TYtDataSourceExecTransformer::HandleResOrPull(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/providers/yt/provider/yql_yt_datasource_exec.cpp:138:0 +std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /home/marsaly/ydbwork/ydb/ydb/library/yql/providers/common/transform/yql_exec.h:58:0 +decltype(std::declval<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>()(std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&>(), std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&>(), std::declval<NYql::TExprContext&>())) std::__y1::__invoke[abi:v160005]<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&>(NYql::(anonymous namespace)::TYtDataSourceExecTransformer&&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:394:0 +std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > std::__y1::__invoke_void_return_wrapper<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > >, false>::__call<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&>(std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:478:0 +std::__y1::__function::__alloc_func<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&), std::__y1::allocator<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>, std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()[abi:v160005](TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:185:0 +std::__y1::__function::__func<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&), std::__y1::allocator<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>, std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:356:0 std::__y1::__function::__value_func<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()[abi:v160005](TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:510:0 std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:1156:0 NYql::TExecTransformerBase::CallbackTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/providers/common/transform/yql_exec.cpp:27:0 -NYql::TAsyncCallbackTransformer<NYql::TExecTransformerBase>::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:332:0 +NYql::TAsyncCallbackTransformer<NYql::TExecTransformerBase>::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/yql_graph_transformer.h:332:0 NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 -NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::TResultCallableExecutionTransformer::HandleFillOrPull<NYql::NNodes::NGenerated::TResultStub<NYql::NNodes::TExprBase, NYql::NNodes::NGenerated::TResOrPullBaseStub<NYql::NNodes::TExprBase, NYql::NNodes::TCallable, NYql::NNodes::TCoAtom, NYql::NNodes::NGenerated::TCoNameValueTupleListStub<NYql::NNodes::TExprBase, NYql::NNodes::TListBase, NYql::NNodes::NGenerated::TCoNameValueTupleStub<NYql::NNodes::TExprBase, NYql::NNodes::TCoAtom> > > > >(NYql::NNodes::TExprBase, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::IDataProvider&) at /-S/ydb/library/yql/providers/result/provider/yql_result_provider.cpp:609:0 -NYql::(anonymous namespace)::TResultCallableExecutionTransformer::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/providers/result/provider/yql_result_provider.cpp:248:0 +NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::TResultCallableExecutionTransformer::HandleFillOrPull<NYql::NNodes::NGenerated::TResultStub<NYql::NNodes::TExprBase, NYql::NNodes::NGenerated::TResOrPullBaseStub<NYql::NNodes::TExprBase, NYql::NNodes::TCallable, NYql::NNodes::TCoAtom, NYql::NNodes::NGenerated::TCoNameValueTupleListStub<NYql::NNodes::TExprBase, NYql::NNodes::TListBase, NYql::NNodes::NGenerated::TCoNameValueTupleStub<NYql::NNodes::TExprBase, NYql::NNodes::TCoAtom> > > > >(NYql::NNodes::TExprBase, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::IDataProvider&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/providers/result/provider/yql_result_provider.cpp:609:0 +NYql::(anonymous namespace)::TResultCallableExecutionTransformer::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/providers/result/provider/yql_result_provider.cpp:248:0 NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 NYql::(anonymous namespace)::TExecutionTransformer::ExecuteCallable(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, unsigned int) at /-S/ydb/library/yql/core/yql_execution.cpp:447:0 NYql::(anonymous namespace)::TExecutionTransformer::ExecuteNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, unsigned int) at /-S/ydb/library/yql/core/yql_execution.cpp:274:0 @@ -74,17 +74,18 @@ NYql::(anonymous namespace)::TCompositeGraphTransformer::DoTransform(TIntrusiveP NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 NYql::AsyncTransformStepImpl(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool, bool, TBasicStringBuf<char, std::__y1::char_traits<char> > const&) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:312:0 NYql::AsyncTransform(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:364:0 -NYql::TProgram::AsyncTransformWithFallback(bool) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:1149:0 -NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0::operator()(NThreading::TFuture<void> const&) const at /-S/ydb/library/yql/core/facade/yql_facade.cpp:1023:0 -NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()::operator()() const at /-S/library/cpp/threading/future/core/future-inl.h:726:0 -void NThreading::NImpl::SetValue<NYql::IGraphTransformer::TStatus, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()>(NThreading::TPromise<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>&, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()&&) at /-S/library/cpp/threading/future/core/future-inl.h:486:0 -NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&) at /-S/library/cpp/threading/future/core/future-inl.h:726:0 -NThreading::TFuture<void> const& NThreading::TFuture<void>::Subscribe<NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /-S/library/cpp/threading/future/core/future-inl.h:711:0 -NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /-S/library/cpp/threading/future/core/future-inl.h:725:0 -NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:1014:0 -NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::SyncExecution<TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool, TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&>(NYql::TProgram*, NThreading::TFuture<NYql::IGraphTransformer::TStatus> (NYql::TProgram::*)(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool), TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:69:0 -NYql::TProgram::Run(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:949:0 -Main(int, char**) at /-S/ydb/library/yql/tools/pgrun/pgrun.cpp:1206:0 -main at /-S/ydb/library/yql/tools/pgrun/pgrun.cpp:1242:0 -??? at ???:0:0 +NYql::TProgram::AsyncTransformWithFallback(bool) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:1149:0 +NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0::operator()(NThreading::TFuture<void> const&) const at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:1023:0 +NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()::operator()() const at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:726:0 +void NThreading::NImpl::SetValue<NYql::IGraphTransformer::TStatus, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()>(NThreading::TPromise<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>&, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()&&) at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:486:0 +NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&) at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:726:0 +NThreading::TFuture<void> const& NThreading::TFuture<void>::Subscribe<NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:711:0 +NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:725:0 +NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:1014:0 +NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::SyncExecution<TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool, TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&>(NYql::TProgram*, NThreading::TFuture<NYql::IGraphTransformer::TStatus> (NYql::TProgram::*)(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool), TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:69:0 +NYql::TProgram::Run(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:949:0 +Main(int, char**) at /home/marsaly/ydbwork/ydb/ydb/library/yql/tools/pgrun/pgrun.cpp:1260:0 +main at /home/marsaly/ydbwork/ydb/ydb/library/yql/tools/pgrun/pgrun.cpp:1300:0 +__libc_start_call_main at ../sysdeps/nptl/libc_start_call_main.h:58:0 +__libc_start_main_impl at ../csu/libc-start.c:392:0 ??? at ???:0:0 diff --git a/ydb/library/yql/tests/postgresql/cases/text.err b/ydb/library/yql/tests/postgresql/cases/text.err index c156283fddc..bc09ac9361c 100644 --- a/ydb/library/yql/tests/postgresql/cases/text.err +++ b/ydb/library/yql/tests/postgresql/cases/text.err @@ -11,10 +11,10 @@ SELECT text 'this is a text string' = text 'this is a text strin' AS false; CREATE TABLE TEXT_TBL (f1 text); </sql-statement> <sql-statement> -INSERT INTO TEXT_TBL (f1) VALUES ('doh!'); +INSERT INTO TEXT_TBL VALUES ('doh!'); </sql-statement> <sql-statement> -INSERT INTO TEXT_TBL (f1) VALUES ('hi de ho neighbor'); +INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor'); </sql-statement> <sql-statement> SELECT * FROM TEXT_TBL; diff --git a/ydb/library/yql/tests/postgresql/cases/text.out b/ydb/library/yql/tests/postgresql/cases/text.out index 334728e4ea9..6ca05df56d5 100644 --- a/ydb/library/yql/tests/postgresql/cases/text.out +++ b/ydb/library/yql/tests/postgresql/cases/text.out @@ -14,8 +14,8 @@ SELECT text 'this is a text string' = text 'this is a text strin' AS false; (1 row) CREATE TABLE TEXT_TBL (f1 text); -INSERT INTO TEXT_TBL (f1) VALUES ('doh!'); -INSERT INTO TEXT_TBL (f1) VALUES ('hi de ho neighbor'); +INSERT INTO TEXT_TBL VALUES ('doh!'); +INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor'); SELECT * FROM TEXT_TBL; f1 ------------------- diff --git a/ydb/library/yql/tests/postgresql/cases/text.sql b/ydb/library/yql/tests/postgresql/cases/text.sql index b92059d2f5d..d68af4afd44 100644 --- a/ydb/library/yql/tests/postgresql/cases/text.sql +++ b/ydb/library/yql/tests/postgresql/cases/text.sql @@ -4,8 +4,8 @@ SELECT text 'this is a text string' = text 'this is a text string' AS true; SELECT text 'this is a text string' = text 'this is a text strin' AS false; CREATE TABLE TEXT_TBL (f1 text); -INSERT INTO TEXT_TBL (f1) VALUES ('doh!'); -INSERT INTO TEXT_TBL (f1) VALUES ('hi de ho neighbor'); +INSERT INTO TEXT_TBL VALUES ('doh!'); +INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor'); SELECT * FROM TEXT_TBL; select reverse('abcde'); select i, left('ahoj', i), right('ahoj', i) from generate_series(-5, 5) t(i) order by i; diff --git a/ydb/library/yql/tests/postgresql/cases/time.err b/ydb/library/yql/tests/postgresql/cases/time.err index 0497f99afea..65c77502de8 100644 --- a/ydb/library/yql/tests/postgresql/cases/time.err +++ b/ydb/library/yql/tests/postgresql/cases/time.err @@ -14,9 +14,27 @@ INSERT INTO TIME_TBL VALUES ('01:00'); -- as of 7.4, timezone spec should be accepted and ignored INSERT INTO TIME_TBL VALUES ('02:03 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- as of 7.4, timezone spec should be accepted and ignored + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time: "02:03 PST" + + -- as of 7.4, timezone spec should be accepted and ignored + ^ <sql-statement> INSERT INTO TIME_TBL VALUES ('11:59 EDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIME_TBL VALUES ('11:59 EDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time: "11:59 EDT" + + INSERT INTO TIME_TBL VALUES ('11:59 EDT'); + ^ <sql-statement> INSERT INTO TIME_TBL VALUES ('12:00'); </sql-statement> @@ -32,13 +50,40 @@ INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM'); <sql-statement> INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized + + INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); + ^ <sql-statement> INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized + + INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); + ^ <sql-statement> -- this should fail (the timezone offset is not known) INSERT INTO TIME_TBL VALUES ('15:36:39 America/New_York'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- this should fail (the timezone offset is not known) + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized + + -- this should fail (the timezone offset is not known) + ^ <sql-statement> SELECT f1 AS "Time" FROM TIME_TBL; </sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/time.out b/ydb/library/yql/tests/postgresql/cases/time.out index 6c74e267ce2..5c5d511cfd6 100644 --- a/ydb/library/yql/tests/postgresql/cases/time.out +++ b/ydb/library/yql/tests/postgresql/cases/time.out @@ -4,15 +4,10 @@ CREATE TABLE TIME_TBL (f1 time(2)); INSERT INTO TIME_TBL VALUES ('00:00'); INSERT INTO TIME_TBL VALUES ('01:00'); --- as of 7.4, timezone spec should be accepted and ignored -INSERT INTO TIME_TBL VALUES ('02:03 PST'); -INSERT INTO TIME_TBL VALUES ('11:59 EDT'); INSERT INTO TIME_TBL VALUES ('12:00'); INSERT INTO TIME_TBL VALUES ('12:01'); INSERT INTO TIME_TBL VALUES ('23:59'); INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM'); -INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); -INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); SELECT f1 AS "None" FROM TIME_TBL WHERE f1 < '00:00'; None ------ diff --git a/ydb/library/yql/tests/postgresql/cases/time.sql b/ydb/library/yql/tests/postgresql/cases/time.sql index 67c9fb00234..73e96064f18 100644 --- a/ydb/library/yql/tests/postgresql/cases/time.sql +++ b/ydb/library/yql/tests/postgresql/cases/time.sql @@ -4,15 +4,10 @@ CREATE TABLE TIME_TBL (f1 time(2)); INSERT INTO TIME_TBL VALUES ('00:00'); INSERT INTO TIME_TBL VALUES ('01:00'); --- as of 7.4, timezone spec should be accepted and ignored -INSERT INTO TIME_TBL VALUES ('02:03 PST'); -INSERT INTO TIME_TBL VALUES ('11:59 EDT'); INSERT INTO TIME_TBL VALUES ('12:00'); INSERT INTO TIME_TBL VALUES ('12:01'); INSERT INTO TIME_TBL VALUES ('23:59'); INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM'); -INSERT INTO TIME_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); -INSERT INTO TIME_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); SELECT f1 AS "None" FROM TIME_TBL WHERE f1 < '00:00'; -- Check edge cases SELECT '23:59:59.999999'::time; diff --git a/ydb/library/yql/tests/postgresql/cases/timestamp.err b/ydb/library/yql/tests/postgresql/cases/timestamp.err index be7515c1167..0700d1e3adc 100644 --- a/ydb/library/yql/tests/postgresql/cases/timestamp.err +++ b/ydb/library/yql/tests/postgresql/cases/timestamp.err @@ -25,9 +25,27 @@ INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow'); -- time zone should be ignored by this data type INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow EST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- time zone should be ignored by this data type + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "tomorrow EST" + + -- time zone should be ignored by this data type + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow zulu'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow zulu'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "tomorrow zulu" + + INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow zulu'); + ^ <sql-statement> SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'today'; </sql-statement> @@ -76,14 +94,6 @@ SELECT count(*) AS two FROM TIMESTAMP_TBL WHERE d1 = timestamp(2) without time z <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> @@ -109,22 +119,76 @@ INSERT INTO TIMESTAMP_TBL VALUES ('epoch'); -- Postgres v6.0 standard output format INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- Postgres v6.0 standard output format + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "Mon Feb 10 17:32:01 1997 PST" + + -- Postgres v6.0 standard output format + ^ <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> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- Variations on Postgres v6.1 standard output format + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "Mon Feb 10 17:32:01.000001 1997 PST" + + -- Variations on Postgres v6.1 standard output format + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "Mon Feb 10 17:32:01.999999 1997 PST" + + INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "Mon Feb 10 17:32:01.4 1997 PST" + + INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "Mon Feb 10 17:32:01.5 1997 PST" + + INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "Mon Feb 10 17:32:01.6 1997 PST" + + INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); + ^ <sql-statement> -- ISO 8601 format INSERT INTO TIMESTAMP_TBL VALUES ('1997-01-02'); @@ -182,15 +246,51 @@ INSERT INTO TIMESTAMP_TBL VALUES ('1997/02/10 17:32:01-0800'); <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('1997-02-10 17:32:01 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('1997-02-10 17:32:01 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "1997-02-10 17:32:01 PST" + + INSERT INTO TIMESTAMP_TBL VALUES ('1997-02-10 17:32:01 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('Feb-10-1997 17:32:01 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('Feb-10-1997 17:32:01 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "Feb-10-1997 17:32:01 PST" + + INSERT INTO TIMESTAMP_TBL VALUES ('Feb-10-1997 17:32:01 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('02-10-1997 17:32:01 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('02-10-1997 17:32:01 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "02-10-1997 17:32:01 PST" + + INSERT INTO TIMESTAMP_TBL VALUES ('02-10-1997 17:32:01 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "19970210 173201 PST" + + INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 PST'); + ^ <sql-statement> set datestyle to ymd; </sql-statement> @@ -202,9 +302,27 @@ set datestyle to ymd; <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('97FEB10 5:32:01PM UTC'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('97FEB10 5:32:01PM UTC'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "97FEB10 5:32:01PM UTC" + + INSERT INTO TIMESTAMP_TBL VALUES ('97FEB10 5:32:01PM UTC'); + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('97/02/10 17:32:01 UTC'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('97/02/10 17:32:01 UTC'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "97/02/10 17:32:01 UTC" + + INSERT INTO TIMESTAMP_TBL VALUES ('97/02/10 17:32:01 UTC'); + ^ <sql-statement> reset datestyle; </sql-statement> @@ -216,17 +334,53 @@ reset datestyle; <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('1997.041 17:32:01 UTC'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('1997.041 17:32:01 UTC'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "1997.041 17:32:01 UTC" + + INSERT INTO TIMESTAMP_TBL VALUES ('1997.041 17:32:01 UTC'); + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 America/New_York'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 America/New_York'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized + + INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 America/New_York'); + ^ <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> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- this fails (even though TZ is a no-op, we still look it up) + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/does_not_exist" not recognized + + -- this fails (even though TZ is a no-op, we still look it up) + ^ <sql-statement> -- Check date conversion and date arithmetic INSERT INTO TIMESTAMP_TBL VALUES ('1997-06-10 18:32:01 PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- Check date conversion and date arithmetic + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp: "1997-06-10 18:32:01 PDT" + + -- Check date conversion and date arithmetic + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997'); </sql-statement> @@ -299,6 +453,15 @@ INSERT INTO TIMESTAMP_TBL VALUES ('Feb 28 17:32:01 1997'); <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('Feb 29 17:32:01 1997'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('Feb 29 17:32:01 1997'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "Feb 29 17:32:01 1997" + + INSERT INTO TIMESTAMP_TBL VALUES ('Feb 29 17:32:01 1997'); + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('Mar 01 17:32:01 1997'); </sql-statement> @@ -324,9 +487,27 @@ INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 2001'); -- Currently unsupported syntax and ranges INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 -0097'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- Currently unsupported syntax and ranges + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone displacement out of range: "Feb 16 17:32:01 -0097" + + -- Currently unsupported syntax and ranges + ^ <sql-statement> INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: timestamp out of range: "Feb 16 17:32:01 5097 BC" + + INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC'); + ^ <sql-statement> SELECT d1 FROM TIMESTAMP_TBL; </sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/timestamp.out b/ydb/library/yql/tests/postgresql/cases/timestamp.out index cce1af13bf6..839291be3f9 100644 --- a/ydb/library/yql/tests/postgresql/cases/timestamp.out +++ b/ydb/library/yql/tests/postgresql/cases/timestamp.out @@ -11,9 +11,18 @@ BEGIN; INSERT INTO TIMESTAMP_TBL VALUES ('today'); INSERT INTO TIMESTAMP_TBL VALUES ('yesterday'); INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow'); --- time zone should be ignored by this data type -INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow EST'); -INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow zulu'); +SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'today'; + one +----- + 1 +(1 row) + +SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'yesterday'; + one +----- + 1 +(1 row) + COMMIT; -- 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 @@ -44,14 +53,6 @@ COMMIT; INSERT INTO TIMESTAMP_TBL VALUES ('-infinity'); INSERT INTO TIMESTAMP_TBL VALUES ('infinity'); INSERT INTO TIMESTAMP_TBL VALUES ('epoch'); --- Postgres v6.0 standard output format -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST'); --- Variations on Postgres v6.1 standard output format -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.000001 1997 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); -- ISO 8601 format INSERT INTO TIMESTAMP_TBL VALUES ('1997-01-02'); INSERT INTO TIMESTAMP_TBL VALUES ('1997-01-02 03:04:05'); @@ -72,16 +73,11 @@ INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997 -0800'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 5:32PM 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('1997/02/10 17:32:01-0800'); -INSERT INTO TIMESTAMP_TBL VALUES ('1997-02-10 17:32:01 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Feb-10-1997 17:32:01 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('02-10-1997 17:32:01 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('97FEB10 5:32:01PM UTC'); -INSERT INTO TIMESTAMP_TBL VALUES ('97/02/10 17:32:01 UTC'); -INSERT INTO TIMESTAMP_TBL VALUES ('1997.041 17:32:01 UTC'); -INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 America/New_York'); --- Check date conversion and date arithmetic -INSERT INTO TIMESTAMP_TBL VALUES ('1997-06-10 18:32:01 PDT'); +-- 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'); +ERROR: time zone "america/does_not_exist" not recognized +LINE 1: INSERT INTO TIMESTAMP_TBL VALUES ('19970710 173201 America/D... + ^ INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 11 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 12 17:32:01 1997'); @@ -105,6 +101,10 @@ INSERT INTO TIMESTAMP_TBL VALUES ('Dec 30 17:32:01 1996'); INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 1996'); INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 28 17:32:01 1997'); +INSERT INTO TIMESTAMP_TBL VALUES ('Feb 29 17:32:01 1997'); +ERROR: date/time field value out of range: "Feb 29 17:32:01 1997" +LINE 1: INSERT INTO TIMESTAMP_TBL VALUES ('Feb 29 17:32:01 1997'); + ^ INSERT INTO TIMESTAMP_TBL VALUES ('Mar 01 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Dec 30 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 1997'); @@ -112,6 +112,15 @@ INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 1999'); INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 2000'); INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 2000'); INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 2001'); +-- Currently unsupported syntax and ranges +INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 -0097'); +ERROR: time zone displacement out of range: "Feb 16 17:32:01 -0097" +LINE 1: INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 -0097'); + ^ +INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC'); +ERROR: timestamp out of range: "Feb 16 17:32:01 5097 BC" +LINE 1: INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC')... + ^ SELECT '4714-11-23 23:59:59 BC'::timestamp; -- out of range ERROR: timestamp out of range: "4714-11-23 23:59:59 BC" LINE 1: SELECT '4714-11-23 23:59:59 BC'::timestamp; diff --git a/ydb/library/yql/tests/postgresql/cases/timestamp.sql b/ydb/library/yql/tests/postgresql/cases/timestamp.sql index 0524098ee5e..fc138b9121e 100644 --- a/ydb/library/yql/tests/postgresql/cases/timestamp.sql +++ b/ydb/library/yql/tests/postgresql/cases/timestamp.sql @@ -11,9 +11,8 @@ BEGIN; INSERT INTO TIMESTAMP_TBL VALUES ('today'); INSERT INTO TIMESTAMP_TBL VALUES ('yesterday'); INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow'); --- time zone should be ignored by this data type -INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow EST'); -INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow zulu'); +SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'today'; +SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'yesterday'; COMMIT; -- 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 @@ -29,14 +28,6 @@ COMMIT; INSERT INTO TIMESTAMP_TBL VALUES ('-infinity'); INSERT INTO TIMESTAMP_TBL VALUES ('infinity'); INSERT INTO TIMESTAMP_TBL VALUES ('epoch'); --- Postgres v6.0 standard output format -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST'); --- Variations on Postgres v6.1 standard output format -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.000001 1997 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); -- ISO 8601 format INSERT INTO TIMESTAMP_TBL VALUES ('1997-01-02'); INSERT INTO TIMESTAMP_TBL VALUES ('1997-01-02 03:04:05'); @@ -57,16 +48,8 @@ INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997 -0800'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 5:32PM 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('1997/02/10 17:32:01-0800'); -INSERT INTO TIMESTAMP_TBL VALUES ('1997-02-10 17:32:01 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('Feb-10-1997 17:32:01 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('02-10-1997 17:32:01 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 PST'); -INSERT INTO TIMESTAMP_TBL VALUES ('97FEB10 5:32:01PM UTC'); -INSERT INTO TIMESTAMP_TBL VALUES ('97/02/10 17:32:01 UTC'); -INSERT INTO TIMESTAMP_TBL VALUES ('1997.041 17:32:01 UTC'); -INSERT INTO TIMESTAMP_TBL VALUES ('19970210 173201 America/New_York'); --- Check date conversion and date arithmetic -INSERT INTO TIMESTAMP_TBL VALUES ('1997-06-10 18:32:01 PDT'); +-- 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'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 10 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 11 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 12 17:32:01 1997'); @@ -90,6 +73,7 @@ INSERT INTO TIMESTAMP_TBL VALUES ('Dec 30 17:32:01 1996'); INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 1996'); INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Feb 28 17:32:01 1997'); +INSERT INTO TIMESTAMP_TBL VALUES ('Feb 29 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Mar 01 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Dec 30 17:32:01 1997'); INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 1997'); @@ -97,6 +81,9 @@ INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 1999'); INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 2000'); INSERT INTO TIMESTAMP_TBL VALUES ('Dec 31 17:32:01 2000'); INSERT INTO TIMESTAMP_TBL VALUES ('Jan 01 17:32:01 2001'); +-- Currently unsupported syntax and ranges +INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 -0097'); +INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC'); SELECT '4714-11-23 23:59:59 BC'::timestamp; -- out of range SELECT '294277-01-01 00:00:00'::timestamp; -- out of range -- verify date_bin behaves the same as date_trunc for relevant intervals diff --git a/ydb/library/yql/tests/postgresql/cases/timestamptz.err b/ydb/library/yql/tests/postgresql/cases/timestamptz.err index 7141efec134..3e1ccc0d358 100644 --- a/ydb/library/yql/tests/postgresql/cases/timestamptz.err +++ b/ydb/library/yql/tests/postgresql/cases/timestamptz.err @@ -24,9 +24,27 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow'); <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow EST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow EST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "tomorrow EST" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow EST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow zulu'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow zulu'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "tomorrow zulu" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow zulu'); + ^ <sql-statement> SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'today'; </sql-statement> @@ -39,9 +57,27 @@ SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone <sql-statement> SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow EST'; </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtMap! + SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow EST'; + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "tomorrow EST" + + SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow EST'; + ^ <sql-statement> SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow zulu'; </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtMap! + SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow zulu'; + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "tomorrow zulu" + + SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow zulu'; + ^ <sql-statement> COMMIT; </sql-statement> @@ -81,14 +117,6 @@ SELECT count(*) AS two FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp(2) with time zo <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> @@ -114,22 +142,76 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('epoch'); -- Postgres v6.0 standard output format INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- Postgres v6.0 standard output format + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Mon Feb 10 17:32:01 1997 PST" + + -- Postgres v6.0 standard output format + ^ <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> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- Variations on Postgres v6.1 standard output format + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Mon Feb 10 17:32:01.000001 1997 PST" + + -- Variations on Postgres v6.1 standard output format + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Mon Feb 10 17:32:01.999999 1997 PST" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Mon Feb 10 17:32:01.4 1997 PST" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Mon Feb 10 17:32:01.5 1997 PST" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Mon Feb 10 17:32:01.6 1997 PST" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); + ^ <sql-statement> -- ISO 8601 format INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-01-02'); @@ -187,15 +269,51 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997/02/10 17:32:01-0800'); <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-02-10 17:32:01 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-02-10 17:32:01 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "1997-02-10 17:32:01 PST" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-02-10 17:32:01 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb-10-1997 17:32:01 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb-10-1997 17:32:01 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Feb-10-1997 17:32:01 PST" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb-10-1997 17:32:01 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('02-10-1997 17:32:01 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('02-10-1997 17:32:01 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "02-10-1997 17:32:01 PST" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('02-10-1997 17:32:01 PST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "19970210 173201 PST" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 PST'); + ^ <sql-statement> set datestyle to ymd; </sql-statement> @@ -207,9 +325,27 @@ set datestyle to ymd; <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('97FEB10 5:32:01PM UTC'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('97FEB10 5:32:01PM UTC'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "97FEB10 5:32:01PM UTC" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('97FEB10 5:32:01PM UTC'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('97/02/10 17:32:01 UTC'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('97/02/10 17:32:01 UTC'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "97/02/10 17:32:01 UTC" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('97/02/10 17:32:01 UTC'); + ^ <sql-statement> reset datestyle; </sql-statement> @@ -221,10 +357,28 @@ reset datestyle; <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997.041 17:32:01 UTC'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997.041 17:32:01 UTC'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "1997.041 17:32:01 UTC" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997.041 17:32:01 UTC'); + ^ <sql-statement> -- timestamps at different timezones INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 America/New_York'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- timestamps at different timezones + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized + + -- timestamps at different timezones + ^ <sql-statement> SELECT '19970210 173201' AT TIME ZONE 'America/New_York'; </sql-statement> @@ -240,6 +394,15 @@ SELECT '19970210 173201' AT TIME ZONE 'America/New_York'; <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/New_York'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/New_York'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/New_York'); + ^ <sql-statement> SELECT '19970710 173201' AT TIME ZONE 'America/New_York'; </sql-statement> @@ -255,6 +418,15 @@ SELECT '19970710 173201' AT TIME ZONE 'America/New_York'; <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/Does_not_exist'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/Does_not_exist'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/does_not_exist" not recognized + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/Does_not_exist'); + ^ <sql-statement> SELECT '19970710 173201' AT TIME ZONE 'America/Does_not_exist'; </sql-statement> @@ -320,6 +492,15 @@ SELECT '205000-01-10 17:32:01 Europe/Helsinki'::timestamptz; -- non-DST -- Check date conversion and date arithmetic INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-06-10 18:32:01 PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- Check date conversion and date arithmetic + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "1997-06-10 18:32:01 PDT" + + -- Check date conversion and date arithmetic + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997'); </sql-statement> @@ -392,6 +573,15 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 28 17:32:01 1997'); <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 29 17:32:01 1997'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 29 17:32:01 1997'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: date/time field value out of range: "Feb 29 17:32:01 1997" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 29 17:32:01 1997'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mar 01 17:32:01 1997'); </sql-statement> @@ -417,9 +607,27 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 2001'); -- Currently unsupported syntax and ranges INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 -0097'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- Currently unsupported syntax and ranges + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone displacement out of range: "Feb 16 17:32:01 -0097" + + -- Currently unsupported syntax and ranges + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 5097 BC'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 5097 BC'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: timestamp out of range: "Feb 16 17:32:01 5097 BC" + + INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 5097 BC'); + ^ <sql-statement> -- Alternative field order that we've historically supported (sort of) -- with regular and POSIXy timezone specs @@ -904,21 +1112,75 @@ CREATE TABLE TIMESTAMPTZ_TST (a int , b timestamptz); -- Test year field value with len > 4 INSERT INTO TIMESTAMPTZ_TST VALUES(1, 'Sat Mar 12 23:58:48 1000 IST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- Test year field value with len > 4 + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Sat Mar 12 23:58:48 1000 IST" + + -- Test year field value with len > 4 + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TST VALUES(2, 'Sat Mar 12 23:58:48 10000 IST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TST VALUES(2, 'Sat Mar 12 23:58:48 10000 IST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Sat Mar 12 23:58:48 10000 IST" + + INSERT INTO TIMESTAMPTZ_TST VALUES(2, 'Sat Mar 12 23:58:48 10000 IST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TST VALUES(3, 'Sat Mar 12 23:58:48 100000 IST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TST VALUES(3, 'Sat Mar 12 23:58:48 100000 IST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "Sat Mar 12 23:58:48 100000 IST" + + INSERT INTO TIMESTAMPTZ_TST VALUES(3, 'Sat Mar 12 23:58:48 100000 IST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TST VALUES(3, '10000 Mar 12 23:58:48 IST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TST VALUES(3, '10000 Mar 12 23:58:48 IST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "10000 Mar 12 23:58:48 IST" + + INSERT INTO TIMESTAMPTZ_TST VALUES(3, '10000 Mar 12 23:58:48 IST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TST VALUES(4, '100000312 23:58:48 IST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TST VALUES(4, '100000312 23:58:48 IST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "100000312 23:58:48 IST" + + INSERT INTO TIMESTAMPTZ_TST VALUES(4, '100000312 23:58:48 IST'); + ^ <sql-statement> INSERT INTO TIMESTAMPTZ_TST VALUES(4, '1000000312 23:58:48 IST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMESTAMPTZ_TST VALUES(4, '1000000312 23:58:48 IST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type timestamp with time zone: "1000000312 23:58:48 IST" + + INSERT INTO TIMESTAMPTZ_TST VALUES(4, '1000000312 23:58:48 IST'); + ^ <sql-statement> --Verify data SELECT * FROM TIMESTAMPTZ_TST ORDER BY a; @@ -2337,3 +2599,12 @@ select * from tmptz where f1 at time zone 'utc' = '2017-01-18 00:00'; <sql-statement> select * from tmptz where f1 at time zone 'utc' = '2017-01-18 00:00'; </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtMap! + select * from tmptz where f1 at time zone 'utc' = '2017-01-18 00:00'; + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "utc" not recognized + + select * from tmptz where f1 at time zone 'utc' = '2017-01-18 00:00'; + ^ diff --git a/ydb/library/yql/tests/postgresql/cases/timestamptz.out b/ydb/library/yql/tests/postgresql/cases/timestamptz.out index e10c0aa7c3f..6dd9d013b25 100644 --- a/ydb/library/yql/tests/postgresql/cases/timestamptz.out +++ b/ydb/library/yql/tests/postgresql/cases/timestamptz.out @@ -11,8 +11,24 @@ BEGIN; INSERT INTO TIMESTAMPTZ_TBL VALUES ('today'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('yesterday'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow EST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow zulu'); +SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'today'; + one +----- + 1 +(1 row) + +SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow'; + one +----- + 1 +(1 row) + +SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'yesterday'; + one +----- + 1 +(1 row) + COMMIT; -- 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 @@ -43,14 +59,6 @@ COMMIT; INSERT INTO TIMESTAMPTZ_TBL VALUES ('-infinity'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('infinity'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('epoch'); --- Postgres v6.0 standard output format -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST'); --- Variations on Postgres v6.1 standard output format -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.000001 1997 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); -- ISO 8601 format INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-01-02'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-01-02 03:04:05'); @@ -71,20 +79,12 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997 -0800'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 5:32PM 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997/02/10 17:32:01-0800'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-02-10 17:32:01 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb-10-1997 17:32:01 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('02-10-1997 17:32:01 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('97FEB10 5:32:01PM UTC'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('97/02/10 17:32:01 UTC'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997.041 17:32:01 UTC'); --- timestamps at different timezones -INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 America/New_York'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/New_York'); +INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/Does_not_exist'); +ERROR: time zone "america/does_not_exist" not recognized +LINE 1: INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America... + ^ SELECT '19970710 173201' AT TIME ZONE 'America/Does_not_exist'; ERROR: time zone "America/Does_not_exist" not recognized --- Check date conversion and date arithmetic -INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-06-10 18:32:01 PDT'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 11 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 12 17:32:01 1997'); @@ -108,6 +108,10 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 30 17:32:01 1996'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 1996'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 28 17:32:01 1997'); +INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 29 17:32:01 1997'); +ERROR: date/time field value out of range: "Feb 29 17:32:01 1997" +LINE 1: INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 29 17:32:01 1997'); + ^ INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mar 01 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 30 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 1997'); @@ -115,6 +119,15 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 1999'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 2000'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 2000'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 2001'); +-- Currently unsupported syntax and ranges +INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 -0097'); +ERROR: time zone displacement out of range: "Feb 16 17:32:01 -0097" +LINE 1: INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 -0097')... + ^ +INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 5097 BC'); +ERROR: timestamp out of range: "Feb 16 17:32:01 5097 BC" +LINE 1: INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 5097 BC... + ^ SELECT '4714-11-23 23:59:59+00 BC'::timestamptz; -- out of range ERROR: timestamp out of range: "4714-11-23 23:59:59+00 BC" LINE 1: SELECT '4714-11-23 23:59:59+00 BC'::timestamptz; @@ -180,13 +193,6 @@ SELECT to_char(now(), 'OF') as "OF", to_char(now(), 'TZH:TZM') as "TZH:TZM"; (1 row) CREATE TABLE TIMESTAMPTZ_TST (a int , b timestamptz); --- Test year field value with len > 4 -INSERT INTO TIMESTAMPTZ_TST VALUES(1, 'Sat Mar 12 23:58:48 1000 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(2, 'Sat Mar 12 23:58:48 10000 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(3, 'Sat Mar 12 23:58:48 100000 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(3, '10000 Mar 12 23:58:48 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(4, '100000312 23:58:48 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(4, '1000000312 23:58:48 IST'); --Cleanup DROP TABLE TIMESTAMPTZ_TST; -- these should fail diff --git a/ydb/library/yql/tests/postgresql/cases/timestamptz.sql b/ydb/library/yql/tests/postgresql/cases/timestamptz.sql index 80ffa4add6f..3981216255b 100644 --- a/ydb/library/yql/tests/postgresql/cases/timestamptz.sql +++ b/ydb/library/yql/tests/postgresql/cases/timestamptz.sql @@ -11,8 +11,9 @@ BEGIN; INSERT INTO TIMESTAMPTZ_TBL VALUES ('today'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('yesterday'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow EST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow zulu'); +SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'today'; +SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow'; +SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'yesterday'; COMMIT; -- 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 @@ -28,14 +29,6 @@ COMMIT; INSERT INTO TIMESTAMPTZ_TBL VALUES ('-infinity'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('infinity'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('epoch'); --- Postgres v6.0 standard output format -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST'); --- Variations on Postgres v6.1 standard output format -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.000001 1997 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); -- ISO 8601 format INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-01-02'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-01-02 03:04:05'); @@ -56,19 +49,8 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997 -0800'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 5:32PM 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997/02/10 17:32:01-0800'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-02-10 17:32:01 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb-10-1997 17:32:01 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('02-10-1997 17:32:01 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 PST'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('97FEB10 5:32:01PM UTC'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('97/02/10 17:32:01 UTC'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997.041 17:32:01 UTC'); --- timestamps at different timezones -INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970210 173201 America/New_York'); -INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/New_York'); +INSERT INTO TIMESTAMPTZ_TBL VALUES ('19970710 173201 America/Does_not_exist'); SELECT '19970710 173201' AT TIME ZONE 'America/Does_not_exist'; --- Check date conversion and date arithmetic -INSERT INTO TIMESTAMPTZ_TBL VALUES ('1997-06-10 18:32:01 PDT'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 10 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 11 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 12 17:32:01 1997'); @@ -92,6 +74,7 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 30 17:32:01 1996'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 1996'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 28 17:32:01 1997'); +INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 29 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Mar 01 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 30 17:32:01 1997'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 1997'); @@ -99,6 +82,9 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 1999'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 2000'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Dec 31 17:32:01 2000'); INSERT INTO TIMESTAMPTZ_TBL VALUES ('Jan 01 17:32:01 2001'); +-- Currently unsupported syntax and ranges +INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 -0097'); +INSERT INTO TIMESTAMPTZ_TBL VALUES ('Feb 16 17:32:01 5097 BC'); SELECT '4714-11-23 23:59:59+00 BC'::timestamptz; -- out of range SELECT '294277-01-01 00:00:00+00'::timestamptz; -- out of range SELECT '294277-12-31 16:00:00-08'::timestamptz; -- out of range @@ -123,13 +109,6 @@ SELECT to_char(d, 'FF1 FF2 FF3 FF4 FF5 FF6 ff1 ff2 ff3 ff4 ff5 ff6 MS US') ) d(d); SELECT to_char(now(), 'OF') as "OF", to_char(now(), 'TZH:TZM') as "TZH:TZM"; CREATE TABLE TIMESTAMPTZ_TST (a int , b timestamptz); --- Test year field value with len > 4 -INSERT INTO TIMESTAMPTZ_TST VALUES(1, 'Sat Mar 12 23:58:48 1000 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(2, 'Sat Mar 12 23:58:48 10000 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(3, 'Sat Mar 12 23:58:48 100000 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(3, '10000 Mar 12 23:58:48 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(4, '100000312 23:58:48 IST'); -INSERT INTO TIMESTAMPTZ_TST VALUES(4, '1000000312 23:58:48 IST'); --Cleanup DROP TABLE TIMESTAMPTZ_TST; -- these should fail diff --git a/ydb/library/yql/tests/postgresql/cases/timetz.err b/ydb/library/yql/tests/postgresql/cases/timetz.err index aa4722fde0d..e5f18d8a9d2 100644 --- a/ydb/library/yql/tests/postgresql/cases/timetz.err +++ b/ydb/library/yql/tests/postgresql/cases/timetz.err @@ -7,51 +7,186 @@ CREATE TABLE TIMETZ_TBL (f1 time(2) with time zone); <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('00:01 PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('00:01 PDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "00:01 PDT" + + INSERT INTO TIMETZ_TBL VALUES ('00:01 PDT'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('01:00 PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('01:00 PDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "01:00 PDT" + + INSERT INTO TIMETZ_TBL VALUES ('01:00 PDT'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('02:03 PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('02:03 PDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "02:03 PDT" + + INSERT INTO TIMETZ_TBL VALUES ('02:03 PDT'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('07:07 PST'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('07:07 PST'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "07:07 PST" + + INSERT INTO TIMETZ_TBL VALUES ('07:07 PST'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('08:08 EDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('08:08 EDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "08:08 EDT" + + INSERT INTO TIMETZ_TBL VALUES ('08:08 EDT'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('11:59 PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('11:59 PDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "11:59 PDT" + + INSERT INTO TIMETZ_TBL VALUES ('11:59 PDT'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('12:00 PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('12:00 PDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "12:00 PDT" + + INSERT INTO TIMETZ_TBL VALUES ('12:00 PDT'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('12:01 PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('12:01 PDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "12:01 PDT" + + INSERT INTO TIMETZ_TBL VALUES ('12:01 PDT'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('23:59 PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('23:59 PDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "23:59 PDT" + + INSERT INTO TIMETZ_TBL VALUES ('23:59 PDT'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('11:59:59.99 PM PDT'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('11:59:59.99 PM PDT'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "11:59:59.99 PM PDT" + + INSERT INTO TIMETZ_TBL VALUES ('11:59:59.99 PM PDT'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized + + INSERT INTO TIMETZ_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); + ^ <sql-statement> INSERT INTO TIMETZ_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO TIMETZ_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized + + INSERT INTO TIMETZ_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); + ^ <sql-statement> -- this should fail (the timezone offset is not known) INSERT INTO TIMETZ_TBL VALUES ('15:36:39 America/New_York'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- this should fail (the timezone offset is not known) + ^ + -stdin-:<main>:1:1: Fatal: ERROR: time zone "america/new_york" not recognized + + -- this should fail (the timezone offset is not known) + ^ <sql-statement> -- this should fail (timezone not specified without a date) INSERT INTO TIMETZ_TBL VALUES ('15:36:39 m2'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- this should fail (timezone not specified without a date) + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "15:36:39 m2" + + -- this should fail (timezone not specified without a date) + ^ <sql-statement> -- this should fail (dynamic timezone abbreviation without a date) INSERT INTO TIMETZ_TBL VALUES ('15:36:39 MSK m2'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + -- this should fail (dynamic timezone abbreviation without a date) + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "15:36:39 MSK m2" + + -- this should fail (dynamic timezone abbreviation without a date) + ^ <sql-statement> SELECT f1 AS "Time TZ" FROM TIMETZ_TBL; </sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/timetz.out b/ydb/library/yql/tests/postgresql/cases/timetz.out index 543762a0330..85ebff73e23 100644 --- a/ydb/library/yql/tests/postgresql/cases/timetz.out +++ b/ydb/library/yql/tests/postgresql/cases/timetz.out @@ -2,18 +2,16 @@ -- TIMETZ -- CREATE TABLE TIMETZ_TBL (f1 time(2) with time zone); -INSERT INTO TIMETZ_TBL VALUES ('00:01 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('01:00 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('02:03 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('07:07 PST'); -INSERT INTO TIMETZ_TBL VALUES ('08:08 EDT'); -INSERT INTO TIMETZ_TBL VALUES ('11:59 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('12:00 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('12:01 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('23:59 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('11:59:59.99 PM PDT'); -INSERT INTO TIMETZ_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); -INSERT INTO TIMETZ_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); +-- this should fail (timezone not specified without a date) +INSERT INTO TIMETZ_TBL VALUES ('15:36:39 m2'); +ERROR: invalid input syntax for type time with time zone: "15:36:39 m2" +LINE 1: INSERT INTO TIMETZ_TBL VALUES ('15:36:39 m2'); + ^ +-- this should fail (dynamic timezone abbreviation without a date) +INSERT INTO TIMETZ_TBL VALUES ('15:36:39 MSK m2'); +ERROR: invalid input syntax for type time with time zone: "15:36:39 MSK m2" +LINE 1: INSERT INTO TIMETZ_TBL VALUES ('15:36:39 MSK m2'); + ^ SELECT f1 AS "None" FROM TIMETZ_TBL WHERE f1 < '00:00-07'; None ------ diff --git a/ydb/library/yql/tests/postgresql/cases/timetz.sql b/ydb/library/yql/tests/postgresql/cases/timetz.sql index b563d228638..ec6d015187e 100644 --- a/ydb/library/yql/tests/postgresql/cases/timetz.sql +++ b/ydb/library/yql/tests/postgresql/cases/timetz.sql @@ -2,18 +2,10 @@ -- TIMETZ -- CREATE TABLE TIMETZ_TBL (f1 time(2) with time zone); -INSERT INTO TIMETZ_TBL VALUES ('00:01 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('01:00 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('02:03 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('07:07 PST'); -INSERT INTO TIMETZ_TBL VALUES ('08:08 EDT'); -INSERT INTO TIMETZ_TBL VALUES ('11:59 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('12:00 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('12:01 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('23:59 PDT'); -INSERT INTO TIMETZ_TBL VALUES ('11:59:59.99 PM PDT'); -INSERT INTO TIMETZ_TBL VALUES ('2003-03-07 15:36:39 America/New_York'); -INSERT INTO TIMETZ_TBL VALUES ('2003-07-07 15:36:39 America/New_York'); +-- this should fail (timezone not specified without a date) +INSERT INTO TIMETZ_TBL VALUES ('15:36:39 m2'); +-- this should fail (dynamic timezone abbreviation without a date) +INSERT INTO TIMETZ_TBL VALUES ('15:36:39 MSK m2'); SELECT f1 AS "None" FROM TIMETZ_TBL WHERE f1 < '00:00-07'; -- -- test EXTRACT diff --git a/ydb/library/yql/tests/postgresql/cases/truncate.err b/ydb/library/yql/tests/postgresql/cases/truncate.err index ac677ace9a6..2e30af1edb7 100644 --- a/ydb/library/yql/tests/postgresql/cases/truncate.err +++ b/ydb/library/yql/tests/postgresql/cases/truncate.err @@ -661,4 +661,613 @@ CREATE SEQUENCE truncate_a_id1 START WITH 33; CREATE TABLE truncate_a (id serial, id1 integer default nextval('truncate_a_id1')); </sql-statement> -(TFileError) (Error 17: File exists) util/system/file.cpp:918: can't open "/var/tmp/tmp5zgko71f/truncate_a" with mode CreateNew (0x00000003) +<sql-statement> +ALTER SEQUENCE truncate_a_id1 OWNED BY truncate_a.id1; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 279 + ALTER SEQUENCE truncate_a_id1 OWNED BY truncate_a.id1; + ^ +<sql-statement> +INSERT INTO truncate_a 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', 'mutationid'. + +<sql-statement> +INSERT INTO truncate_a 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', 'mutationid'. + +<sql-statement> +SELECT * FROM truncate_a; +</sql-statement> +<sql-statement> +TRUNCATE truncate_a; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE truncate_a; + ^ +<sql-statement> +INSERT INTO truncate_a 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', 'mutationid'. + +<sql-statement> +INSERT INTO truncate_a 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', 'mutationid'. + +<sql-statement> +SELECT * FROM truncate_a; +</sql-statement> +<sql-statement> +TRUNCATE truncate_a RESTART IDENTITY; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE truncate_a RESTART IDENTITY; + ^ +<sql-statement> +INSERT INTO truncate_a 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', 'mutationid'. + +<sql-statement> +INSERT INTO truncate_a 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', 'mutationid'. + +<sql-statement> +SELECT * FROM truncate_a; +</sql-statement> +<sql-statement> +CREATE TABLE truncate_b (id int GENERATED ALWAYS AS IDENTITY (START WITH 44)); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + CREATE TABLE truncate_b (id int GENERATED ALWAYS AS IDENTITY (START WITH 44)); + ^ +<sql-statement> +INSERT INTO truncate_b 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', 'mutationid'. + +<sql-statement> +INSERT INTO truncate_b 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', 'mutationid'. + +<sql-statement> +SELECT * FROM truncate_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.truncate_b + +<sql-statement> +TRUNCATE truncate_b; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE truncate_b; + ^ +<sql-statement> +INSERT INTO truncate_b 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', 'mutationid'. + +<sql-statement> +INSERT INTO truncate_b 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', 'mutationid'. + +<sql-statement> +SELECT * FROM truncate_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.truncate_b + +<sql-statement> +TRUNCATE truncate_b RESTART IDENTITY; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE truncate_b RESTART IDENTITY; + ^ +<sql-statement> +INSERT INTO truncate_b 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', 'mutationid'. + +<sql-statement> +INSERT INTO truncate_b 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', 'mutationid'. + +<sql-statement> +SELECT * FROM truncate_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.truncate_b + +<sql-statement> +-- check rollback of a RESTART IDENTITY operation +BEGIN; +</sql-statement> +<sql-statement> +TRUNCATE truncate_a RESTART IDENTITY; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE truncate_a RESTART IDENTITY; + ^ +<sql-statement> +INSERT INTO truncate_a 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', 'mutationid'. + +<sql-statement> +SELECT * FROM truncate_a; +</sql-statement> +<sql-statement> +ROLLBACK; +</sql-statement> +<sql-statement> +INSERT INTO truncate_a 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', 'mutationid'. + +<sql-statement> +INSERT INTO truncate_a 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', 'mutationid'. + +<sql-statement> +SELECT * FROM truncate_a; +</sql-statement> +<sql-statement> +DROP TABLE truncate_a; +</sql-statement> +<sql-statement> +SELECT nextval('truncate_a_id1'); -- fail, seq should have been dropped +</sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + SELECT nextval('truncate_a_id1'); -- fail, seq should have been dropped + ^ + -stdin-:<main>:1:1: Fatal: ERROR: relation "truncate_a_id1" does not exist + + SELECT nextval('truncate_a_id1'); -- fail, seq should have been dropped + ^ +<sql-statement> +-- partitioned table +CREATE TABLE truncparted (a int, b char) PARTITION BY LIST (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- partitioned table + ^ +<sql-statement> +-- error, can't truncate a partitioned table +TRUNCATE ONLY truncparted; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + -- error, can't truncate a partitioned table + ^ +<sql-statement> +CREATE TABLE truncparted1 PARTITION OF truncparted FOR VALUES IN (1); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE truncparted1 PARTITION OF truncparted FOR VALUES IN (1); + ^ +<sql-statement> +INSERT INTO truncparted VALUES (1, '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.truncparted + +<sql-statement> +-- error, must truncate partitions +TRUNCATE ONLY truncparted; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + -- error, must truncate partitions + ^ +<sql-statement> +TRUNCATE truncparted; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE truncparted; + ^ +<sql-statement> +DROP TABLE truncparted; +</sql-statement> +<sql-statement> +-- foreign key on partitioned table: partition key is referencing column. +-- Make sure truncate did execute on all tables +CREATE FUNCTION tp_ins_data() RETURNS void LANGUAGE plpgsql AS $$ + BEGIN + INSERT INTO truncprim VALUES (1), (100), (150); + INSERT INTO truncpart VALUES (1), (100), (150); + END +$$; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + -- foreign key on partitioned table: partition key is referencing column. + ^ +<sql-statement> +CREATE FUNCTION tp_chk_data(OUT pktb regclass, OUT pkval int, OUT fktb regclass, OUT fkval int) + RETURNS SETOF record LANGUAGE plpgsql AS $$ + BEGIN + RETURN QUERY SELECT + pk.tableoid::regclass, pk.a, fk.tableoid::regclass, fk.a + FROM truncprim pk FULL JOIN truncpart fk USING (a) + ORDER BY 2, 4; + END +$$; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + CREATE FUNCTION tp_chk_data(OUT pktb regclass, OUT pkval int, OUT fktb regclass, OUT fkval int) + ^ +<sql-statement> +CREATE TABLE truncprim (a int PRIMARY KEY); +</sql-statement> +<sql-statement> +CREATE TABLE truncpart (a int REFERENCES truncprim) + PARTITION BY RANGE (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + CREATE TABLE truncpart (a int REFERENCES truncprim) + ^ +<sql-statement> +CREATE TABLE truncpart_1 PARTITION OF truncpart FOR VALUES FROM (0) TO (100); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE truncpart_1 PARTITION OF truncpart FOR VALUES FROM (0) TO (100); + ^ +<sql-statement> +CREATE TABLE truncpart_2 PARTITION OF truncpart FOR VALUES FROM (100) TO (200) + PARTITION BY RANGE (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE truncpart_2 PARTITION OF truncpart FOR VALUES FROM (100) TO (200) + ^ +<sql-statement> +CREATE TABLE truncpart_2_1 PARTITION OF truncpart_2 FOR VALUES FROM (100) TO (150); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE truncpart_2_1 PARTITION OF truncpart_2 FOR VALUES FROM (100) TO (150); + ^ +<sql-statement> +CREATE TABLE truncpart_2_d PARTITION OF truncpart_2 DEFAULT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE truncpart_2_d PARTITION OF truncpart_2 DEFAULT; + ^ +<sql-statement> +TRUNCATE TABLE truncprim; -- should fail +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE TABLE truncprim; -- should fail + ^ +<sql-statement> +select tp_ins_data(); +</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 tp_ins_data(); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select tp_ins_data(); + ^ + -stdin-:<main>:1:8: Error: No such proc: tp_ins_data + select tp_ins_data(); + ^ +<sql-statement> +-- should truncate everything +TRUNCATE TABLE truncprim, truncpart; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + -- should truncate everything + ^ +<sql-statement> +select * from tp_chk_data(); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select * from tp_chk_data(); + ^ + -stdin-:<main>:1:15: Error: At function: PgCall + select * from tp_chk_data(); + ^ + -stdin-:<main>:1:15: Error: No such proc: tp_chk_data + select * from tp_chk_data(); + ^ +<sql-statement> +select tp_ins_data(); +</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 tp_ins_data(); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select tp_ins_data(); + ^ + -stdin-:<main>:1:8: Error: No such proc: tp_ins_data + select tp_ins_data(); + ^ +<sql-statement> +-- should truncate everything +TRUNCATE TABLE truncprim CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + -- should truncate everything + ^ +<sql-statement> +SELECT * FROM tp_chk_data(); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + SELECT * FROM tp_chk_data(); + ^ + -stdin-:<main>:1:15: Error: At function: PgCall + SELECT * FROM tp_chk_data(); + ^ + -stdin-:<main>:1:15: Error: No such proc: tp_chk_data + SELECT * FROM tp_chk_data(); + ^ +<sql-statement> +SELECT tp_ins_data(); +</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 tp_ins_data(); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + SELECT tp_ins_data(); + ^ + -stdin-:<main>:1:8: Error: No such proc: tp_ins_data + SELECT tp_ins_data(); + ^ +<sql-statement> +-- should truncate all partitions +TRUNCATE TABLE truncpart; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + -- should truncate all partitions + ^ +<sql-statement> +SELECT * FROM tp_chk_data(); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + SELECT * FROM tp_chk_data(); + ^ + -stdin-:<main>:1:15: Error: At function: PgCall + SELECT * FROM tp_chk_data(); + ^ + -stdin-:<main>:1:15: Error: No such proc: tp_chk_data + SELECT * FROM tp_chk_data(); + ^ +<sql-statement> +DROP TABLE truncprim, truncpart; +</sql-statement> +<sql-statement> +DROP FUNCTION tp_ins_data(), tp_chk_data(); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: DropStmt: alternative is not implemented yet : 386 + DROP FUNCTION tp_ins_data(), tp_chk_data(); + ^ +<sql-statement> +-- test cascade when referencing a partitioned table +CREATE TABLE trunc_a (a INT PRIMARY KEY) PARTITION BY RANGE (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- test cascade when referencing a partitioned table + ^ +<sql-statement> +CREATE TABLE trunc_a1 PARTITION OF trunc_a FOR VALUES FROM (0) TO (10); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE trunc_a1 PARTITION OF trunc_a FOR VALUES FROM (0) TO (10); + ^ +<sql-statement> +CREATE TABLE trunc_a2 PARTITION OF trunc_a FOR VALUES FROM (10) TO (20) + PARTITION BY RANGE (a); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE trunc_a2 PARTITION OF trunc_a FOR VALUES FROM (10) TO (20) + ^ +<sql-statement> +CREATE TABLE trunc_a21 PARTITION OF trunc_a2 FOR VALUES FROM (10) TO (12); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE trunc_a21 PARTITION OF trunc_a2 FOR VALUES FROM (10) TO (12); + ^ +<sql-statement> +CREATE TABLE trunc_a22 PARTITION OF trunc_a2 FOR VALUES FROM (12) TO (16); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE trunc_a22 PARTITION OF trunc_a2 FOR VALUES FROM (12) TO (16); + ^ +<sql-statement> +CREATE TABLE trunc_a2d PARTITION OF trunc_a2 DEFAULT; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE trunc_a2d PARTITION OF trunc_a2 DEFAULT; + ^ +<sql-statement> +CREATE TABLE trunc_a3 PARTITION OF trunc_a FOR VALUES FROM (20) TO (30); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE trunc_a3 PARTITION OF trunc_a FOR VALUES FROM (20) TO (30); + ^ +<sql-statement> +INSERT INTO trunc_a VALUES (0), (5), (10), (15), (20), (25); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.trunc_a + +<sql-statement> +-- truncate a partition cascading to a table +CREATE TABLE ref_b ( + b INT PRIMARY KEY, + a INT REFERENCES trunc_a(a) ON DELETE CASCADE +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: column constraint not supported + -- truncate a partition cascading to a table + ^ +<sql-statement> +INSERT INTO ref_b VALUES (10, 0), (50, 5), (100, 10), (150, 15); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.ref_b + +<sql-statement> +TRUNCATE TABLE trunc_a1 CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE TABLE trunc_a1 CASCADE; + ^ +<sql-statement> +SELECT a FROM ref_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.ref_b + +<sql-statement> +DROP TABLE ref_b; +</sql-statement> +<sql-statement> +-- truncate a partition cascading to a partitioned table +CREATE TABLE ref_c ( + c INT PRIMARY KEY, + a INT REFERENCES trunc_a(a) ON DELETE CASCADE +) PARTITION BY RANGE (c); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: PARTITION BY clause not supported + -- truncate a partition cascading to a partitioned table + ^ +<sql-statement> +CREATE TABLE ref_c1 PARTITION OF ref_c FOR VALUES FROM (100) TO (200); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE ref_c1 PARTITION OF ref_c FOR VALUES FROM (100) TO (200); + ^ +<sql-statement> +CREATE TABLE ref_c2 PARTITION OF ref_c FOR VALUES FROM (200) TO (300); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: table inheritance not supported + CREATE TABLE ref_c2 PARTITION OF ref_c FOR VALUES FROM (200) TO (300); + ^ +<sql-statement> +INSERT INTO ref_c VALUES (100, 10), (150, 15), (200, 20), (250, 25); +</sql-statement> +-stdin-:<main>: Fatal: Table metadata loading + + -stdin-:<main>: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.ref_c + +<sql-statement> +TRUNCATE TABLE trunc_a21 CASCADE; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 257 + TRUNCATE TABLE trunc_a21 CASCADE; + ^ +<sql-statement> +SELECT a as "from table ref_c" FROM ref_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.ref_c + +<sql-statement> +SELECT a as "from table trunc_a" FROM trunc_a ORDER BY 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.trunc_a + +<sql-statement> +DROP TABLE trunc_a, ref_c; +</sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/truncate.out b/ydb/library/yql/tests/postgresql/cases/truncate.out index 0f25ec0ad46..44685492240 100644 --- a/ydb/library/yql/tests/postgresql/cases/truncate.out +++ b/ydb/library/yql/tests/postgresql/cases/truncate.out @@ -2,9 +2,23 @@ CREATE TABLE truncate_a (col1 integer primary key); INSERT INTO truncate_a VALUES (1); INSERT INTO truncate_a VALUES (2); +SELECT * FROM truncate_a; + col1 +------ + 1 + 2 +(2 rows) + -- Roll truncate back BEGIN; ROLLBACK; +SELECT * FROM truncate_a; + col1 +------ + 1 + 2 +(2 rows) + -- Commit the truncate this time BEGIN; COMMIT; @@ -26,6 +40,13 @@ ROLLBACK; BEGIN; ROLLBACK; BEGIN; +SELECT * FROM trunc_f; + col1 +------ + 1 + 2 +(2 rows) + ROLLBACK; -- Test ON TRUNCATE triggers CREATE TABLE trunc_trigger_test (f1 int, f2 text, f3 text); @@ -53,3 +74,14 @@ SELECT * FROM trunc_trigger_log; DROP TABLE trunc_trigger_test; DROP TABLE trunc_trigger_log; +CREATE TABLE truncate_a (id serial, + id1 integer default nextval('truncate_a_id1')); +-- check rollback of a RESTART IDENTITY operation +BEGIN; +ROLLBACK; +DROP TABLE truncate_a; +SELECT nextval('truncate_a_id1'); -- fail, seq should have been dropped +ERROR: relation "truncate_a_id1" does not exist +LINE 1: SELECT nextval('truncate_a_id1'); + ^ +CREATE TABLE truncprim (a int PRIMARY KEY); diff --git a/ydb/library/yql/tests/postgresql/cases/truncate.sql b/ydb/library/yql/tests/postgresql/cases/truncate.sql index 72efec79d8f..f76c95b9a7d 100644 --- a/ydb/library/yql/tests/postgresql/cases/truncate.sql +++ b/ydb/library/yql/tests/postgresql/cases/truncate.sql @@ -2,9 +2,11 @@ CREATE TABLE truncate_a (col1 integer primary key); INSERT INTO truncate_a VALUES (1); INSERT INTO truncate_a VALUES (2); +SELECT * FROM truncate_a; -- Roll truncate back BEGIN; ROLLBACK; +SELECT * FROM truncate_a; -- Commit the truncate this time BEGIN; COMMIT; @@ -26,6 +28,7 @@ ROLLBACK; BEGIN; ROLLBACK; BEGIN; +SELECT * FROM trunc_f; ROLLBACK; -- Test ON TRUNCATE triggers CREATE TABLE trunc_trigger_test (f1 int, f2 text, f3 text); @@ -40,3 +43,11 @@ INSERT INTO trunc_trigger_test VALUES(1, 'foo', 'bar'), (2, 'baz', 'quux'); SELECT * FROM trunc_trigger_log; DROP TABLE trunc_trigger_test; DROP TABLE trunc_trigger_log; +CREATE TABLE truncate_a (id serial, + id1 integer default nextval('truncate_a_id1')); +-- check rollback of a RESTART IDENTITY operation +BEGIN; +ROLLBACK; +DROP TABLE truncate_a; +SELECT nextval('truncate_a_id1'); -- fail, seq should have been dropped +CREATE TABLE truncprim (a int PRIMARY KEY); diff --git a/ydb/library/yql/tests/postgresql/cases/union.err b/ydb/library/yql/tests/postgresql/cases/union.err index f65e6a42d44..72beea0cc9d 100644 --- a/ydb/library/yql/tests/postgresql/cases/union.err +++ b/ydb/library/yql/tests/postgresql/cases/union.err @@ -7,20 +7,20 @@ SELECT 1 AS two UNION SELECT 2 ORDER BY 1; </sql-statement> NYql::TAggregateExpander::CollectTraits() at /-S/ydb/library/yql/core/yql_aggregate_expander.cpp:146:0 NYql::TAggregateExpander::ExpandAggregate() at /-S/ydb/library/yql/core/yql_aggregate_expander.cpp:23:0 -NYql::ExpandAggregatePeepholeImpl(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, bool, bool) at /-S/ydb/library/yql/core/yql_aggregate_expander.h:136:0 +NYql::ExpandAggregatePeepholeImpl(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, bool, bool) at /-S/ydb/library/yql/core/yql_aggregate_expander.h:134:0 NYql::ExpandAggregatePeephole(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&) at /-S/ydb/library/yql/core/yql_aggregate_expander.cpp:2928:0 -NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) const at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:2131:0 +NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) const at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:2257:0 decltype(std::declval<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&>()(std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&>(), std::declval<NYql::TExprContext&>())) std::__y1::__invoke[abi:v160005]<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&>(NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:394:0 TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > std::__y1::__invoke_void_return_wrapper<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, false>::__call<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&>(NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:478:0 std::__y1::__function::__alloc_func<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0, std::__y1::allocator<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0>, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>::operator()[abi:v160005](TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:185:0 std::__y1::__function::__func<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0, std::__y1::allocator<NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&)::$_0>, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:356:0 -TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:201:0 -TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:159:0 -TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:159:0 -NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::OptimizeExprInternal<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>, std::__y1::unordered_map<NYql::TExprNode const*, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, std::__y1::hash<NYql::TExprNode const*>, std::__y1::equal_to<NYql::TExprNode const*>, std::__y1::allocator<std::__y1::pair<NYql::TExprNode const* const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > > > > const*, NYql::TExprContext&, NYql::TOptimizeExprSettings const&) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:454:0 -NYql::OptimizeExpr(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>, NYql::TExprContext&, NYql::TOptimizeExprSettings const&) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:500:0 -NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:2126:0 -NYql::(anonymous namespace)::CreatePeepHoleCommonStageTransformer(NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, NYql::TPeepholeSettings const&)::$_0::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:7800:0 +TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:213:0 +TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:171:0 +TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > NYql::(anonymous namespace)::OptimizeNode<NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::(anonymous namespace)::TOptimizationContext<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >&, unsigned long) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:171:0 +NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::OptimizeExprInternal<std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> >(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>, std::__y1::unordered_map<NYql::TExprNode const*, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, std::__y1::hash<NYql::TExprNode const*>, std::__y1::equal_to<NYql::TExprNode const*>, std::__y1::allocator<std::__y1::pair<NYql::TExprNode const* const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > > > > const*, NYql::TExprContext&, NYql::TOptimizeExprSettings const&) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:466:0 +NYql::OptimizeExpr(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, std::__y1::function<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)>, NYql::TExprContext&, NYql::TOptimizeExprSettings const&) at /-S/ydb/library/yql/core/yql_expr_optimize.cpp:512:0 +NYql::(anonymous namespace)::PeepHoleCommonStage(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&)> > > const&, std::__y1::unordered_map<std::__y1::basic_string_view<char, std::__y1::char_traits<char> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&), std::__y1::hash<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::equal_to<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > >, std::__y1::allocator<std::__y1::pair<std::__y1::basic_string_view<char, std::__y1::char_traits<char> > const, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > (* const)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&, NYql::TTypeAnnotationContext&)> > > const&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:2252:0 +NYql::(anonymous namespace)::CreatePeepHoleCommonStageTransformer(NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, NYql::TPeepholeSettings const&)::$_0::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:7954:0 NYql::TFunctorTransformer<NYql::(anonymous namespace)::CreatePeepHoleCommonStageTransformer(NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, NYql::TPeepholeSettings const&)::$_0>::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:273:0 NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 NYql::(anonymous namespace)::TCompositeGraphTransformer::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)::'lambda'()::operator()() const at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:48:0 @@ -29,22 +29,22 @@ NYql::(anonymous namespace)::TCompositeGraphTransformer::DoTransform(TIntrusiveP NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 NYql::AsyncTransformStepImpl(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool, bool, TBasicStringBuf<char, std::__y1::char_traits<char> > const&) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:312:0 NYql::InstantTransform(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:348:0 -NYql::DoPeepHoleOptimizeNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::IGraphTransformer&, NYql::IGraphTransformer&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:7898:0 -NYql::PeepHoleOptimizeNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, bool&, NYql::TPeepholeSettings const&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:7921:0 +NYql::DoPeepHoleOptimizeNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::IGraphTransformer&, NYql::IGraphTransformer&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:8052:0 +NYql::PeepHoleOptimizeNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::TTypeAnnotationContext&, NYql::IGraphTransformer*, bool&, NYql::TPeepholeSettings const&) at /-S/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp:8075:0 NYql::PeepHoleOptimizeBeforeExec(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, TIntrusivePtr<NYql::TYtState, TDefaultIntrusivePtrOps<NYql::TYtState> > const&, bool&, NYql::TExprContext&) at /-S/ydb/library/yql/providers/yt/provider/yql_yt_optimize.cpp:662:0 -NYql::(anonymous namespace)::TYtDataSourceExecTransformer::HandleResOrPull(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /-S/ydb/library/yql/providers/yt/provider/yql_yt_datasource_exec.cpp:138:0 -std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/ydb/library/yql/providers/common/transform/yql_exec.h:58:0 -decltype(std::declval<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>()(std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&>(), std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&>(), std::declval<NYql::TExprContext&>())) std::__y1::__invoke[abi:v160005]<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&>(NYql::(anonymous namespace)::TYtDataSourceExecTransformer&&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:394:0 -std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > std::__y1::__invoke_void_return_wrapper<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > >, false>::__call<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&>(std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:478:0 -std::__y1::__function::__alloc_func<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&), std::__y1::allocator<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>, std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()[abi:v160005](TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:185:0 -std::__y1::__function::__func<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&), std::__y1::allocator<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>, std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:356:0 +NYql::(anonymous namespace)::TYtDataSourceExecTransformer::HandleResOrPull(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/providers/yt/provider/yql_yt_datasource_exec.cpp:138:0 +std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /home/marsaly/ydbwork/ydb/ydb/library/yql/providers/common/transform/yql_exec.h:58:0 +decltype(std::declval<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>()(std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&>(), std::declval<TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&>(), std::declval<NYql::TExprContext&>())) std::__y1::__invoke[abi:v160005]<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&>(NYql::(anonymous namespace)::TYtDataSourceExecTransformer&&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:394:0 +std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > std::__y1::__invoke_void_return_wrapper<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > >, false>::__call<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&>(std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/contrib/libs/cxxsupp/libcxx/include/__functional/invoke.h:478:0 +std::__y1::__function::__alloc_func<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&), std::__y1::allocator<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>, std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()[abi:v160005](TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:185:0 +std::__y1::__function::__func<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&), std::__y1::allocator<std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> NYql::TExecTransformerBase::Hndl<NYql::(anonymous namespace)::TYtDataSourceExecTransformer>(std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (NYql::(anonymous namespace)::TYtDataSourceExecTransformer::*)(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, NYql::TExprContext&))::'lambda'(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>, std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:356:0 std::__y1::__function::__value_func<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()[abi:v160005](TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:510:0 std::__y1::function<std::__y1::pair<NYql::IGraphTransformer::TStatus, NThreading::TFuture<std::__y1::function<NYql::IGraphTransformer::TStatus (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)> > > (TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&)>::operator()(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) const at /-S/contrib/libs/cxxsupp/libcxx/include/__functional/function.h:1156:0 NYql::TExecTransformerBase::CallbackTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/providers/common/transform/yql_exec.cpp:27:0 -NYql::TAsyncCallbackTransformer<NYql::TExecTransformerBase>::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:332:0 +NYql::TAsyncCallbackTransformer<NYql::TExecTransformerBase>::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/yql_graph_transformer.h:332:0 NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 -NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::TResultCallableExecutionTransformer::HandleFillOrPull<NYql::NNodes::NGenerated::TResultStub<NYql::NNodes::TExprBase, NYql::NNodes::NGenerated::TResOrPullBaseStub<NYql::NNodes::TExprBase, NYql::NNodes::TCallable, NYql::NNodes::TCoAtom, NYql::NNodes::NGenerated::TCoNameValueTupleListStub<NYql::NNodes::TExprBase, NYql::NNodes::TListBase, NYql::NNodes::NGenerated::TCoNameValueTupleStub<NYql::NNodes::TExprBase, NYql::NNodes::TCoAtom> > > > >(NYql::NNodes::TExprBase, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::IDataProvider&) at /-S/ydb/library/yql/providers/result/provider/yql_result_provider.cpp:609:0 -NYql::(anonymous namespace)::TResultCallableExecutionTransformer::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/providers/result/provider/yql_result_provider.cpp:248:0 +NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::TResultCallableExecutionTransformer::HandleFillOrPull<NYql::NNodes::NGenerated::TResultStub<NYql::NNodes::TExprBase, NYql::NNodes::NGenerated::TResOrPullBaseStub<NYql::NNodes::TExprBase, NYql::NNodes::TCallable, NYql::NNodes::TCoAtom, NYql::NNodes::NGenerated::TCoNameValueTupleListStub<NYql::NNodes::TExprBase, NYql::NNodes::TListBase, NYql::NNodes::NGenerated::TCoNameValueTupleStub<NYql::NNodes::TExprBase, NYql::NNodes::TCoAtom> > > > >(NYql::NNodes::TExprBase, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, NYql::IDataProvider&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/providers/result/provider/yql_result_provider.cpp:609:0 +NYql::(anonymous namespace)::TResultCallableExecutionTransformer::DoTransform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/providers/result/provider/yql_result_provider.cpp:248:0 NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 NYql::(anonymous namespace)::TExecutionTransformer::ExecuteCallable(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, unsigned int) at /-S/ydb/library/yql/core/yql_execution.cpp:447:0 NYql::(anonymous namespace)::TExecutionTransformer::ExecuteNode(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> > const&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, unsigned int) at /-S/ydb/library/yql/core/yql_execution.cpp:274:0 @@ -60,17 +60,18 @@ NYql::(anonymous namespace)::TCompositeGraphTransformer::DoTransform(TIntrusiveP NYql::TGraphTransformerBase::Transform(TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&) at /-S/ydb/library/yql/core/yql_graph_transformer.h:160:0 NYql::AsyncTransformStepImpl(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool, bool, TBasicStringBuf<char, std::__y1::char_traits<char> > const&) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:312:0 NYql::AsyncTransform(NYql::IGraphTransformer&, TIntrusivePtr<NYql::TExprNode, TDefaultIntrusivePtrOps<NYql::TExprNode> >&, NYql::TExprContext&, bool) at /-S/ydb/library/yql/core/yql_graph_transformer.cpp:364:0 -NYql::TProgram::AsyncTransformWithFallback(bool) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:1149:0 -NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0::operator()(NThreading::TFuture<void> const&) const at /-S/ydb/library/yql/core/facade/yql_facade.cpp:1023:0 -NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()::operator()() const at /-S/library/cpp/threading/future/core/future-inl.h:726:0 -void NThreading::NImpl::SetValue<NYql::IGraphTransformer::TStatus, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()>(NThreading::TPromise<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>&, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()&&) at /-S/library/cpp/threading/future/core/future-inl.h:486:0 -NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&) at /-S/library/cpp/threading/future/core/future-inl.h:726:0 -NThreading::TFuture<void> const& NThreading::TFuture<void>::Subscribe<NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /-S/library/cpp/threading/future/core/future-inl.h:711:0 -NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /-S/library/cpp/threading/future/core/future-inl.h:725:0 -NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:1014:0 -NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::SyncExecution<TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool, TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&>(NYql::TProgram*, NThreading::TFuture<NYql::IGraphTransformer::TStatus> (NYql::TProgram::*)(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool), TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:69:0 -NYql::TProgram::Run(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /-S/ydb/library/yql/core/facade/yql_facade.cpp:949:0 -Main(int, char**) at /-S/ydb/library/yql/tools/pgrun/pgrun.cpp:1206:0 -main at /-S/ydb/library/yql/tools/pgrun/pgrun.cpp:1242:0 -??? at ???:0:0 +NYql::TProgram::AsyncTransformWithFallback(bool) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:1149:0 +NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0::operator()(NThreading::TFuture<void> const&) const at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:1023:0 +NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()::operator()() const at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:726:0 +void NThreading::NImpl::SetValue<NYql::IGraphTransformer::TStatus, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()>(NThreading::TPromise<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>&, NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&)::'lambda'()&&) at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:486:0 +NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)::operator()(NThreading::TFuture<void> const&) at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:726:0 +NThreading::TFuture<void> const& NThreading::TFuture<void>::Subscribe<NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const::'lambda'(NThreading::TFuture<void> const&)>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:711:0 +NThreading::TFuture<NThreading::NImpl::TFutureType<NThreading::NImpl::TFutureCallResult<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0, void>::TType>::TType> NThreading::TFuture<void>::Apply<NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0>(NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool)::$_0&&) const at /home/marsaly/ydbwork/ydb/library/cpp/threading/future/core/future-inl.h:725:0 +NYql::TProgram::RunAsync(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:1014:0 +NYql::IGraphTransformer::TStatus NYql::(anonymous namespace)::SyncExecution<TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool, TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&>(NYql::TProgram*, NThreading::TFuture<NYql::IGraphTransformer::TStatus> (NYql::TProgram::*)(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool), TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*&, IOutputStream*&, IOutputStream*&, bool&) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:69:0 +NYql::TProgram::Run(TBasicString<char, std::__y1::char_traits<char> > const&, IOutputStream*, IOutputStream*, IOutputStream*, bool) at /home/marsaly/ydbwork/ydb/ydb/library/yql/core/facade/yql_facade.cpp:949:0 +Main(int, char**) at /home/marsaly/ydbwork/ydb/ydb/library/yql/tools/pgrun/pgrun.cpp:1260:0 +main at /home/marsaly/ydbwork/ydb/ydb/library/yql/tools/pgrun/pgrun.cpp:1300:0 +__libc_start_call_main at ../sysdeps/nptl/libc_start_call_main.h:58:0 +__libc_start_main_impl at ../csu/libc-start.c:392:0 ??? at ???:0:0 diff --git a/ydb/library/yql/tests/postgresql/cases/update.out b/ydb/library/yql/tests/postgresql/cases/update.out index 1a9afb30ab0..1d5832a5a53 100644 --- a/ydb/library/yql/tests/postgresql/cases/update.out +++ b/ydb/library/yql/tests/postgresql/cases/update.out @@ -12,6 +12,13 @@ CREATE TABLE upsert_test ( ); INSERT INTO update_test VALUES (5, 10, 'foo'); INSERT INTO update_test(b, a) VALUES (15, 10); +SELECT * FROM update_test; + a | b | c +----+----+----- + 5 | 10 | foo + 10 | 15 | +(2 rows) + -- -- Test multiple-set-clause syntax -- diff --git a/ydb/library/yql/tests/postgresql/cases/update.sql b/ydb/library/yql/tests/postgresql/cases/update.sql index 1a9afb30ab0..bb17fb332ba 100644 --- a/ydb/library/yql/tests/postgresql/cases/update.sql +++ b/ydb/library/yql/tests/postgresql/cases/update.sql @@ -12,6 +12,7 @@ CREATE TABLE upsert_test ( ); INSERT INTO update_test VALUES (5, 10, 'foo'); INSERT INTO update_test(b, a) VALUES (15, 10); +SELECT * FROM update_test; -- -- Test multiple-set-clause syntax -- diff --git a/ydb/library/yql/tests/postgresql/cases/window.err b/ydb/library/yql/tests/postgresql/cases/window.err index 969b9011dd8..3bc80315fa4 100644 --- a/ydb/library/yql/tests/postgresql/cases/window.err +++ b/ydb/library/yql/tests/postgresql/cases/window.err @@ -1856,6 +1856,15 @@ insert into datetimes values (9, '19:00', '19:00 BST', '9 years', '2007-10-19 10:23:54+01', '2007-10-19 10:23:54'), (10, '20:00', '20:00 BST', '10 years', '2008-10-19 10:23:54+01', '2008-10-19 10:23:54'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + insert into datetimes values + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid input syntax for type time with time zone: "11:00 BST" + + insert into datetimes values + ^ <sql-statement> select id, f_time, first_value(id) over w, last_value(id) over w from datetimes @@ -3074,9 +3083,42 @@ ORDER BY p, i; -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem -- test strict and non-strict cases ^ - -stdin-:<main>:19:29: Error: No such column: P - WINDOW wnd AS (PARTITION BY P ORDER BY i ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- test strict and non-strict cases + ^ + -stdin-:<main>:4:2: Error: At function: PgWindowCall + logging_agg_nonstrict(v) over wnd as nstrict, + ^ + -stdin-:<main>:4:2: Error: Unsupported function: logging_agg_nonstrict + logging_agg_nonstrict(v) over wnd as nstrict, + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- test strict and non-strict cases + ^ + -stdin-:<main>:5:2: Error: At function: PgWindowCall + logging_agg_nonstrict_initcond(v) over wnd as nstrict_init, + ^ + -stdin-:<main>:5:2: Error: Unsupported function: logging_agg_nonstrict_initcond + logging_agg_nonstrict_initcond(v) over wnd as nstrict_init, + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- test strict and non-strict cases + ^ + -stdin-:<main>:6:2: Error: At function: PgWindowCall + logging_agg_strict(v::text) over wnd as strict, + ^ + -stdin-:<main>:6:2: Error: Unsupported function: logging_agg_strict + logging_agg_strict(v::text) over wnd as strict, + ^ + -stdin-:<main>:1:1: Error: At function: PgResultItem + -- test strict and non-strict cases + ^ + -stdin-:<main>:7:2: Error: At function: PgWindowCall + logging_agg_strict_initcond(v) over wnd as strict_init + ^ + -stdin-:<main>:7:2: Error: Unsupported function: logging_agg_strict_initcond + logging_agg_strict_initcond(v) over wnd as strict_init + ^ <sql-statement> -- and again, but with filter SELECT @@ -3417,14 +3459,6 @@ SELECT a, b, SUM(b) OVER(ORDER BY A ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) FROM (VALUES(1,1::numeric),(2,2),(3,'NaN'),(4,3),(5,4)) t(a,b); </sql-statement> --stdin-:<main>: Error: Type annotation - - -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem - -- ensure aggregate over numeric properly recovers from NaN values - ^ - -stdin-:<main>:3:29: Error: No such column: A - SUM(b) OVER(ORDER BY A ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - ^ <sql-statement> -- It might be tempting for someone to add an inverse trans function for -- float and double precision. This should not be done as it can give incorrect diff --git a/ydb/library/yql/tests/postgresql/cases/window.out b/ydb/library/yql/tests/postgresql/cases/window.out index b96ff63dea1..2775c986397 100644 --- a/ydb/library/yql/tests/postgresql/cases/window.out +++ b/ydb/library/yql/tests/postgresql/cases/window.out @@ -18,6 +18,23 @@ INSERT INTO empsalary VALUES ('sales', 3, 4800, '2007-08-01'), ('develop', 8, 6000, '2006-10-01'), ('develop', 11, 5200, '2007-08-15'); +-- 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); + sum | count +-------+------- + 3500 | 1 + 7400 | 2 + 11600 | 3 + 16100 | 4 + 25700 | 6 + 25700 | 6 + 30700 | 7 + 41100 | 9 + 41100 | 9 + 47100 | 10 +(10 rows) + -- Test in_range for other numeric datatypes create temp table numerics( id int, @@ -34,14 +51,3 @@ create temp table datetimes( f_timestamptz timestamptz, f_timestamp timestamp ); -insert into datetimes values -(1, '11:00', '11:00 BST', '1 year', '2000-10-19 10:23:54+01', '2000-10-19 10:23:54'), -(2, '12:00', '12:00 BST', '2 years', '2001-10-19 10:23:54+01', '2001-10-19 10:23:54'), -(3, '13:00', '13:00 BST', '3 years', '2001-10-19 10:23:54+01', '2001-10-19 10:23:54'), -(4, '14:00', '14:00 BST', '4 years', '2002-10-19 10:23:54+01', '2002-10-19 10:23:54'), -(5, '15:00', '15:00 BST', '5 years', '2003-10-19 10:23:54+01', '2003-10-19 10:23:54'), -(6, '15:00', '15:00 BST', '5 years', '2004-10-19 10:23:54+01', '2004-10-19 10:23:54'), -(7, '17:00', '17:00 BST', '7 years', '2005-10-19 10:23:54+01', '2005-10-19 10:23:54'), -(8, '18:00', '18:00 BST', '8 years', '2006-10-19 10:23:54+01', '2006-10-19 10:23:54'), -(9, '19:00', '19:00 BST', '9 years', '2007-10-19 10:23:54+01', '2007-10-19 10:23:54'), -(10, '20:00', '20:00 BST', '10 years', '2008-10-19 10:23:54+01', '2008-10-19 10:23:54'); diff --git a/ydb/library/yql/tests/postgresql/cases/window.sql b/ydb/library/yql/tests/postgresql/cases/window.sql index b96ff63dea1..8986102ab8c 100644 --- a/ydb/library/yql/tests/postgresql/cases/window.sql +++ b/ydb/library/yql/tests/postgresql/cases/window.sql @@ -18,6 +18,9 @@ INSERT INTO empsalary VALUES ('sales', 3, 4800, '2007-08-01'), ('develop', 8, 6000, '2006-10-01'), ('develop', 11, 5200, '2007-08-15'); +-- 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); -- Test in_range for other numeric datatypes create temp table numerics( id int, @@ -34,14 +37,3 @@ create temp table datetimes( f_timestamptz timestamptz, f_timestamp timestamp ); -insert into datetimes values -(1, '11:00', '11:00 BST', '1 year', '2000-10-19 10:23:54+01', '2000-10-19 10:23:54'), -(2, '12:00', '12:00 BST', '2 years', '2001-10-19 10:23:54+01', '2001-10-19 10:23:54'), -(3, '13:00', '13:00 BST', '3 years', '2001-10-19 10:23:54+01', '2001-10-19 10:23:54'), -(4, '14:00', '14:00 BST', '4 years', '2002-10-19 10:23:54+01', '2002-10-19 10:23:54'), -(5, '15:00', '15:00 BST', '5 years', '2003-10-19 10:23:54+01', '2003-10-19 10:23:54'), -(6, '15:00', '15:00 BST', '5 years', '2004-10-19 10:23:54+01', '2004-10-19 10:23:54'), -(7, '17:00', '17:00 BST', '7 years', '2005-10-19 10:23:54+01', '2005-10-19 10:23:54'), -(8, '18:00', '18:00 BST', '8 years', '2006-10-19 10:23:54+01', '2006-10-19 10:23:54'), -(9, '19:00', '19:00 BST', '9 years', '2007-10-19 10:23:54+01', '2007-10-19 10:23:54'), -(10, '20:00', '20:00 BST', '10 years', '2008-10-19 10:23:54+01', '2008-10-19 10:23:54'); diff --git a/ydb/library/yql/tests/postgresql/cases/xml.err b/ydb/library/yql/tests/postgresql/cases/xml.err index 2472c19cffa..feccb0fe747 100644 --- a/ydb/library/yql/tests/postgresql/cases/xml.err +++ b/ydb/library/yql/tests/postgresql/cases/xml.err @@ -13,6 +13,18 @@ INSERT INTO xmltest VALUES (2, '<value>two</value>'); <sql-statement> INSERT INTO xmltest VALUES (3, '<wrong'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO xmltest VALUES (3, '<wrong'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid XML document +DETAIL: line 1: Couldn't find end of Start Tag wrong line 1 + <wrong + ^ + + INSERT INTO xmltest VALUES (3, '<wrong'); + ^ <sql-statement> SELECT * FROM xmltest; </sql-statement> @@ -655,6 +667,18 @@ SELECT '<>' IS NOT DOCUMENT; <sql-statement> SELECT xmlagg(data) FROM xmltest; </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + SELECT xmlagg(data) FROM xmltest; + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid XML document +DETAIL: line 1: Extra content at the end of the document + <value>one</value><value>two</value> + ^ + + SELECT xmlagg(data) FROM xmltest; + ^ <sql-statement> SELECT xmlagg(data) FROM xmltest WHERE id > 10; </sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/xml.err.1 b/ydb/library/yql/tests/postgresql/cases/xml.err.1 index 2472c19cffa..feccb0fe747 100644 --- a/ydb/library/yql/tests/postgresql/cases/xml.err.1 +++ b/ydb/library/yql/tests/postgresql/cases/xml.err.1 @@ -13,6 +13,18 @@ INSERT INTO xmltest VALUES (2, '<value>two</value>'); <sql-statement> INSERT INTO xmltest VALUES (3, '<wrong'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO xmltest VALUES (3, '<wrong'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid XML document +DETAIL: line 1: Couldn't find end of Start Tag wrong line 1 + <wrong + ^ + + INSERT INTO xmltest VALUES (3, '<wrong'); + ^ <sql-statement> SELECT * FROM xmltest; </sql-statement> @@ -655,6 +667,18 @@ SELECT '<>' IS NOT DOCUMENT; <sql-statement> SELECT xmlagg(data) FROM xmltest; </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + SELECT xmlagg(data) FROM xmltest; + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid XML document +DETAIL: line 1: Extra content at the end of the document + <value>one</value><value>two</value> + ^ + + SELECT xmlagg(data) FROM xmltest; + ^ <sql-statement> SELECT xmlagg(data) FROM xmltest WHERE id > 10; </sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/xml.err.2 b/ydb/library/yql/tests/postgresql/cases/xml.err.2 index 2472c19cffa..feccb0fe747 100644 --- a/ydb/library/yql/tests/postgresql/cases/xml.err.2 +++ b/ydb/library/yql/tests/postgresql/cases/xml.err.2 @@ -13,6 +13,18 @@ INSERT INTO xmltest VALUES (2, '<value>two</value>'); <sql-statement> INSERT INTO xmltest VALUES (3, '<wrong'); </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: YtFill! + INSERT INTO xmltest VALUES (3, '<wrong'); + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid XML document +DETAIL: line 1: Couldn't find end of Start Tag wrong line 1 + <wrong + ^ + + INSERT INTO xmltest VALUES (3, '<wrong'); + ^ <sql-statement> SELECT * FROM xmltest; </sql-statement> @@ -655,6 +667,18 @@ SELECT '<>' IS NOT DOCUMENT; <sql-statement> SELECT xmlagg(data) FROM xmltest; </sql-statement> +-stdin-:<main>: Fatal: Execution + + -stdin-:<main>:1:1: Fatal: Execution of node: Result + SELECT xmlagg(data) FROM xmltest; + ^ + -stdin-:<main>:1:1: Fatal: ERROR: invalid XML document +DETAIL: line 1: Extra content at the end of the document + <value>one</value><value>two</value> + ^ + + SELECT xmlagg(data) FROM xmltest; + ^ <sql-statement> SELECT xmlagg(data) FROM xmltest WHERE id > 10; </sql-statement> diff --git a/ydb/library/yql/tests/postgresql/cases/xml.out b/ydb/library/yql/tests/postgresql/cases/xml.out index 229e655ca49..7e539c8abd6 100644 --- a/ydb/library/yql/tests/postgresql/cases/xml.out +++ b/ydb/library/yql/tests/postgresql/cases/xml.out @@ -4,6 +4,13 @@ CREATE TABLE xmltest ( ); INSERT INTO xmltest VALUES (1, '<value>one</value>'); INSERT INTO xmltest VALUES (2, '<value>two</value>'); +SELECT * FROM xmltest; + id | data +----+-------------------- + 1 | <value>one</value> + 2 | <value>two</value> +(2 rows) + SELECT xmlcomment('test'); xmlcomment ------------- diff --git a/ydb/library/yql/tests/postgresql/cases/xml.sql b/ydb/library/yql/tests/postgresql/cases/xml.sql index dde652e3ed8..1eb81a6b29c 100644 --- a/ydb/library/yql/tests/postgresql/cases/xml.sql +++ b/ydb/library/yql/tests/postgresql/cases/xml.sql @@ -4,6 +4,7 @@ CREATE TABLE xmltest ( ); INSERT INTO xmltest VALUES (1, '<value>one</value>'); INSERT INTO xmltest VALUES (2, '<value>two</value>'); +SELECT * FROM xmltest; SELECT xmlcomment('test'); SELECT xmlcomment('-test'); SELECT xmlcomment('test-'); diff --git a/ydb/library/yql/tests/postgresql/patches/boolean.out.patch b/ydb/library/yql/tests/postgresql/patches/boolean.out.patch deleted file mode 100644 index 41699dcb1ec..00000000000 --- a/ydb/library/yql/tests/postgresql/patches/boolean.out.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- boolean.out -+++ boolean.out -@@ -469,7 +469,7 @@ FROM booltbl3 ORDER BY o; - -- correct. Use a table as source to prevent constant simplification - -- to interfer. - CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool); --INSERT INTO booltbl4 VALUES (false, true, null); -+INSERT INTO booltbl4 (isfalse, istrue, isnul) VALUES (false, true, null); - \pset null '(null)' - -- AND expression need to return null if there's any nulls and not all - -- of the value are true diff --git a/ydb/library/yql/tests/postgresql/patches/boolean.sql.patch b/ydb/library/yql/tests/postgresql/patches/boolean.sql.patch deleted file mode 100644 index b74329b0d75..00000000000 --- a/ydb/library/yql/tests/postgresql/patches/boolean.sql.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- boolean.sql -+++ boolean.sql -@@ -224,7 +224,7 @@ FROM booltbl3 ORDER BY o; - -- correct. Use a table as source to prevent constant simplification - -- to interfer. - CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool); --INSERT INTO booltbl4 VALUES (false, true, null); -+INSERT INTO booltbl4 (isfalse, istrue, isnul) VALUES (false, true, null); - \pset null '(null)' - - -- AND expression need to return null if there's any nulls and not all diff --git a/ydb/library/yql/tests/postgresql/patches/int8.out.patch b/ydb/library/yql/tests/postgresql/patches/int8.out.patch deleted file mode 100644 index d3a8223d8c0..00000000000 --- a/ydb/library/yql/tests/postgresql/patches/int8.out.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- int8.out -+++ int8.out -@@ -3,11 +3,11 @@ - -- Test int8 64-bit integers. - -- - CREATE TABLE INT8_TBL(q1 int8, q2 int8); --INSERT INTO INT8_TBL VALUES(' 123 ',' 456'); --INSERT INTO INT8_TBL VALUES('123 ','4567890123456789'); --INSERT INTO INT8_TBL VALUES('4567890123456789','123'); --INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789'); --INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789'); -+INSERT INTO INT8_TBL (q1, q2) VALUES(' 123 ',' 456'); -+INSERT INTO INT8_TBL (q1, q2) VALUES('123 ','4567890123456789'); -+INSERT INTO INT8_TBL (q1, q2) VALUES('4567890123456789','123'); -+INSERT INTO INT8_TBL (q1, q2) VALUES(+4567890123456789,'4567890123456789'); -+INSERT INTO INT8_TBL (q1, q2) VALUES('+4567890123456789','-4567890123456789'); - -- bad inputs - INSERT INTO INT8_TBL(q1) VALUES (' '); - ERROR: invalid input syntax for type bigint: " " diff --git a/ydb/library/yql/tests/postgresql/patches/int8.sql.patch b/ydb/library/yql/tests/postgresql/patches/int8.sql.patch deleted file mode 100644 index a9a9499d1fd..00000000000 --- a/ydb/library/yql/tests/postgresql/patches/int8.sql.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- int8.sql -+++ int8.sql -@@ -4,11 +4,11 @@ - -- - CREATE TABLE INT8_TBL(q1 int8, q2 int8); - --INSERT INTO INT8_TBL VALUES(' 123 ',' 456'); --INSERT INTO INT8_TBL VALUES('123 ','4567890123456789'); --INSERT INTO INT8_TBL VALUES('4567890123456789','123'); --INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789'); --INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789'); -+INSERT INTO INT8_TBL (q1, q2) VALUES(' 123 ',' 456'); -+INSERT INTO INT8_TBL (q1, q2) VALUES('123 ','4567890123456789'); -+INSERT INTO INT8_TBL (q1, q2) VALUES('4567890123456789','123'); -+INSERT INTO INT8_TBL (q1, q2) VALUES(+4567890123456789,'4567890123456789'); -+INSERT INTO INT8_TBL (q1, q2) VALUES('+4567890123456789','-4567890123456789'); - - -- bad inputs - INSERT INTO INT8_TBL(q1) VALUES (' '); diff --git a/ydb/library/yql/tests/postgresql/patches/json.out.patch b/ydb/library/yql/tests/postgresql/patches/json.out.patch new file mode 100644 index 00000000000..8dcd51878dc --- /dev/null +++ b/ydb/library/yql/tests/postgresql/patches/json.out.patch @@ -0,0 +1,18 @@ +--- json.out ++++ json.out +@@ -202,15 +202,6 @@ LINE 1: SELECT '{"abc":1,3}'::json; + ^ + DETAIL: Expected string, but found "3". + CONTEXT: JSON data, line 1: {"abc":1,3... +--- Recursion. +-SET max_stack_depth = '100kB'; +-SELECT repeat('[', 10000)::json; +-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; +-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. +-RESET max_stack_depth; + -- Miscellaneous stuff. + SELECT 'true'::json; -- OK + json diff --git a/ydb/library/yql/tests/postgresql/patches/json.sql.patch b/ydb/library/yql/tests/postgresql/patches/json.sql.patch new file mode 100644 index 00000000000..fa455f15060 --- /dev/null +++ b/ydb/library/yql/tests/postgresql/patches/json.sql.patch @@ -0,0 +1,15 @@ +--- json.sql ++++ json.sql +@@ -41,12 +41,6 @@ SELECT '{"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}}'::json; -- OK + SELECT '{"abc":1:2}'::json; -- ERROR, colon in wrong spot + SELECT '{"abc":1,3}'::json; -- ERROR, no value + +--- Recursion. +-SET max_stack_depth = '100kB'; +-SELECT repeat('[', 10000)::json; +-SELECT repeat('{"a":', 10000)::json; +-RESET max_stack_depth; +- + -- Miscellaneous stuff. + SELECT 'true'::json; -- OK + SELECT 'false'::json; -- OK diff --git a/ydb/library/yql/tests/postgresql/patches/jsonb.out.patch b/ydb/library/yql/tests/postgresql/patches/jsonb.out.patch new file mode 100644 index 00000000000..e14bc869b65 --- /dev/null +++ b/ydb/library/yql/tests/postgresql/patches/jsonb.out.patch @@ -0,0 +1,18 @@ +--- jsonb.out ++++ jsonb.out +@@ -202,15 +202,6 @@ LINE 1: SELECT '{"abc":1,3}'::jsonb; + ^ + DETAIL: Expected string, but found "3". + CONTEXT: JSON data, line 1: {"abc":1,3... +--- Recursion. +-SET max_stack_depth = '100kB'; +-SELECT repeat('[', 10000)::jsonb; +-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; +-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. +-RESET max_stack_depth; + -- Miscellaneous stuff. + SELECT 'true'::jsonb; -- OK + jsonb diff --git a/ydb/library/yql/tests/postgresql/patches/jsonb.sql.patch b/ydb/library/yql/tests/postgresql/patches/jsonb.sql.patch new file mode 100644 index 00000000000..99853df8ecf --- /dev/null +++ b/ydb/library/yql/tests/postgresql/patches/jsonb.sql.patch @@ -0,0 +1,15 @@ +--- jsonb.sql ++++ jsonb.sql +@@ -41,12 +41,6 @@ SELECT '{"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}}'::jsonb; -- OK + SELECT '{"abc":1:2}'::jsonb; -- ERROR, colon in wrong spot + SELECT '{"abc":1,3}'::jsonb; -- ERROR, no value + +--- Recursion. +-SET max_stack_depth = '100kB'; +-SELECT repeat('[', 10000)::jsonb; +-SELECT repeat('{"a":', 10000)::jsonb; +-RESET max_stack_depth; +- + -- Miscellaneous stuff. + SELECT 'true'::jsonb; -- OK + SELECT 'false'::jsonb; -- OK diff --git a/ydb/library/yql/tests/postgresql/patches/text.out.patch b/ydb/library/yql/tests/postgresql/patches/text.out.patch deleted file mode 100644 index 532827f6aaf..00000000000 --- a/ydb/library/yql/tests/postgresql/patches/text.out.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- text.out -+++ text.out -@@ -14,8 +14,8 @@ SELECT text 'this is a text string' = text 'this is a text strin' AS false; - (1 row) - - CREATE TABLE TEXT_TBL (f1 text); --INSERT INTO TEXT_TBL VALUES ('doh!'); --INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor'); -+INSERT INTO TEXT_TBL (f1) VALUES ('doh!'); -+INSERT INTO TEXT_TBL (f1) VALUES ('hi de ho neighbor'); - SELECT * FROM TEXT_TBL; - f1 - ------------------- diff --git a/ydb/library/yql/tests/postgresql/patches/text.sql.patch b/ydb/library/yql/tests/postgresql/patches/text.sql.patch deleted file mode 100644 index 56fea446704..00000000000 --- a/ydb/library/yql/tests/postgresql/patches/text.sql.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- text.sql -+++ text.sql -@@ -8,8 +8,8 @@ SELECT text 'this is a text string' = text 'this is a text strin' AS false; - - CREATE TABLE TEXT_TBL (f1 text); - --INSERT INTO TEXT_TBL VALUES ('doh!'); --INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor'); -+INSERT INTO TEXT_TBL (f1) VALUES ('doh!'); -+INSERT INTO TEXT_TBL (f1) VALUES ('hi de ho neighbor'); - - SELECT * FROM TEXT_TBL; - diff --git a/ydb/library/yql/tests/postgresql/pg_tests.csv b/ydb/library/yql/tests/postgresql/pg_tests.csv index b765e0df350..9b380c692fb 100644 --- a/ydb/library/yql/tests/postgresql/pg_tests.csv +++ b/ydb/library/yql/tests/postgresql/pg_tests.csv @@ -1,56 +1,56 @@ testcase,statements,successful,ratio
+aggregates,416,84,20.19
+alter_table,1679,233,13.88
+arrays,410,108,26.34
+bit,115,90,78.26
+boolean,93,79,84.95
+case,63,35,55.56
+char,25,16,64.0
comments,7,7,100.0
-select_distinct_on,4,0,0.0
-jsonpath_encoding,31,31,100.0
-unicode,13,4,30.77
-select_distinct,46,1,2.17
-limit,84,5,5.95
+create_misc,76,3,3.95
+create_table,368,43,11.68
+date,264,202,76.52
dbsize,24,20,83.33
+delete,10,5,50.0
expressions,63,14,22.22
-numerology,24,8,33.33
-select_into,67,3,4.48
-json_encoding,42,42,100.0
-jsonpath,169,152,89.94
+float4,96,82,85.42
+float8,168,139,82.74
functional_deps,40,7,17.5
-subselect,234,5,2.14
-union,186,0,0.0
-jsonb_jsonpath,427,88,20.61
-create_misc,76,3,3.95
-text,76,16,21.05
horology,306,79,25.82
-alter_table,1679,11,0.66
-strings,390,104,26.67
-delete,10,5,50.0
insert,357,15,4.2
-create_table,368,43,11.68
-update,288,22,7.64
-select,88,9,10.23
-name,40,22,55.0
-time,39,33,84.62
-oid,27,27,100.0
-timetz,45,29,64.44
-case,63,29,46.03
-float4,96,82,85.42
-date,264,199,75.38
-interval,168,115,68.45
-truncate,193,33,17.1
int2,49,47,95.92
int4,70,68,97.14
-boolean,93,79,84.95
-json,454,114,25.11
-float8,168,139,82.74
-bit,115,84,73.04
-aggregates,416,66,15.87
-char,25,16,64.0
-arrays,410,119,29.02
-varchar,24,15,62.5
-jsonb,1017,381,37.46
int8,142,126,88.73
-timestamp,145,97,66.9
-xml,234,17,7.26
-timestamptz,315,114,36.19
-select_having,23,16,69.57
-join,591,106,17.94
+interval,168,115,68.45
+join,591,134,22.67
+json,450,133,29.56
+json_encoding,42,42,100.0
+jsonb,1013,404,39.88
+jsonb_jsonpath,427,88,20.61
+jsonpath,169,152,89.94
+jsonpath_encoding,31,31,100.0
+limit,84,5,5.95
+name,40,22,55.0
+numeric,915,813,88.85
+numerology,24,8,33.33
+oid,27,27,100.0
+select,88,9,10.23
+select_distinct,46,1,2.17
+select_distinct_on,4,0,0.0
+select_having,23,19,82.61
+select_implicit,44,28,63.64
+select_into,67,3,4.48
+strings,390,104,26.67
+subselect,234,5,2.14
+text,76,16,21.05
+time,39,29,74.36
+timestamp,145,86,59.31
+timestamptz,315,97,30.79
+timetz,45,19,42.22
+truncate,193,41,21.24
+unicode,13,4,30.77
+union,186,0,0.0
+update,288,23,7.99
+varchar,24,15,62.5
window,298,5,1.68
-select_implicit,44,13,29.55
-numeric,915,793,86.67
+xml,234,18,7.69
diff --git a/ydb/library/yql/tests/postgresql/status.md b/ydb/library/yql/tests/postgresql/status.md index 6b7b643ae7a..84ea9f5c0a2 100644 --- a/ydb/library/yql/tests/postgresql/status.md +++ b/ydb/library/yql/tests/postgresql/status.md @@ -8,54 +8,54 @@ || 4 | varchar | 24 | 15 (+13) | 62.5 | 19.01.2024 | YQL-17603 || || 5 | text | 76 | 16 (+1) | 21.05 | 22.01.2024 | YQL-17605 || || 6 | int2 | 49 | 47 | 95.92 | 29.09.2023 | YQL-17612 || -|| 7 | int4 | 70 | 70 | 100.0 | 29.09.2023 | || -|| 8 | int8 | 142 | 134 (+21) | 94.37 | 26.01.2024 | YQL-17614 || +|| 7 | int4 | 70 | 68 | 97.14 | 18.02.2024 | YQL-17663 || +|| 8 | int8 | 142 | 126 | 88.73 | 18.02.2024 | YQL-17614 || || 9 | oid | 27 | 27 (+6) | 100.0 | 22.01.2024 | YQL-17623 || || 10 | float4 | 96 | 82 (+2) | 85.42 | 26.01.2024 | YQL-17586 || -|| 11 | float8 | 168 | 140 (+8) | 83.33 | 26.01.2024 | YQL-17628 || -|| 12 | bit | 115 | 84 | 73.04 | 12.12.2023 | YQL-17634 || -|| 13 | numeric | 915 | 794 (+73) | 86.78 | 26.01.2024 | YQL-17629 || +|| 11 | float8 | 168 | 139 | 82.74 | 18.02.2024 | YQL-17628 || +|| 12 | bit | 115 | 90 | 78.26 | 18.02.2024 | YQL-17634 || +|| 13 | numeric | 915 | 813 (+343) | 88.85 | 18.02.2024 | YQL-17629 || || 14 | uuid | 36 | 0 | 0.0 | 02.05.2023 | YQL-17636 || -|| 15 | strings | 390 | 103 (+17) | 26.41 | 26.01.2024 | YQL-17587 || +|| 15 | strings | 390 | 104 (+1) | 26.67 | 18.02.2024 | YQL-17587 || || 16 | numerology | 24 | 8 | 33.33 | 26.07.2023 | || -|| 17 | date | 264 | 200 | 75.76 | 12.12.2023 | || -|| 18 | time | 39 | 33 | 84.62 | 12.12.2023 | || -|| 19 | timetz | 45 | 29 | 64.44 | 12.12.2023 | || -|| 20 | timestamp | 145 | 98 | 67.59 | 12.12.2023 | || -|| 21 | timestamptz | 315 | 114 (+6) | 36.19 | 26.01.2024 | || -|| 22 | interval | 168 | 115 | 68.45 | 25.10.2023 | || -|| 23 | horology | 306 | 79 | 25.82 | 10.08.2023 | SET, DateStyle, TimeZone, автоматически назначаемые имена колонкам-выражениям, SET TIME ZOME, RESET TIME ZONE, интервальный тип ПГ, || +|| 17 | date | 264 | 202 | 76.52 | 18.02.2024 | YQL-17733 || +|| 18 | time | 39 | 29 | 74.36 | 30.01.2024 | YQL-17738 || +|| 19 | timetz | 45 | 19 | 42.22 | 30.01.2024 | YQL-17739 || +|| 20 | timestamp | 145 | 86 | 59.31 | 18.02.2024 | YQL-17692 || +|| 21 | timestamptz | 315 | 97 | 30.79 | 30.01.2024 | YQL-17693 || +|| 22 | interval | 168 | 115 | 68.45 | 25.10.2023 | YQL-17786 || +|| 23 | horology | 306 | 79 | 25.82 | 10.08.2023 | YQL-17856 || || 24 | comments | 7 | 7 | 100.0 | 25.05.2023 | || -|| 25 | expressions | 63 | 14 | 22.22 | 25.10.2023 | || +|| 25 | expressions | 63 | 14 | 22.22 | 25.10.2023 | YQL-17784 || || 26 | unicode | 13 | 4 | 30.77 | 10.08.2023 | || -|| 27 | create_table | 368 | 43 | 11.68 | 12.12.2023 | CREATE UNLOGGED TABLE, REINDEX, PREPARE ... SELECT, DEALLOCATE, \gexec, pg_class, pg_attribute, CREATE TABLE PARTITION OF || -|| 28 | insert | 357 | 15 | 4.2 | 12.12.2023 | CREATE TEMP TABLE, ALTER TABLE, DROP TABLE, CREATE TYPE, CREATE RULE, \d+, DROP TYPE, create table...partition by range, create table ... partition of ..., tableoid::regclass, create or replace function, create operator, || -|| 29 | create_misc | 76 | 3 | 3.95 | 29.09.2023 | || -|| 30 | select | 88 | 9 | 10.23 | 12.12.2023 | порядок сортировки в виде ORDER BY поле using > или <, а также NULLS FIRST/LAST; ANALYZE, переменные enable_seqscan, enable_bitmapscan, enable_sort, whole-row Var referencing a subquery, подзапросы внутри values, INSERT INTO ... DEFAULT VALUES, Range sub select unsupported lateral, CREATE INDEX, DROP INDEX, explain (опции costs, analyze, timing, summary), SELECT 1 AS x ORDER BY x; CREATE FUNCTION, DROP FUNCTION, table inheritance, PARTITION BY || -|| 31 | select_into | 67 | 3 | 4.48 | 27.07.2023 | || -|| 32 | select_distinct | 46 | 1 | 2.17 | 27.07.2023 | || +|| 27 | create_table | 368 | 43 | 11.68 | 12.12.2023 | YQL-17664 || +|| 28 | insert | 357 | 15 | 4.2 | 12.12.2023 | YQL-17785 || +|| 29 | create_misc | 76 | 3 | 3.95 | 29.09.2023 | YQL-17855 || +|| 30 | select | 88 | 9 | 10.23 | 12.12.2023 | YQL-17858 || +|| 31 | select_into | 67 | 3 | 4.48 | 27.07.2023 | YQL-17787 || +|| 32 | select_distinct | 46 | 1 | 2.17 | 27.07.2023 | YQL-17857 || || 33 | select_distinct_on | 4 | 0 | 0.0 | 25.05.2023 | || -|| 34 | select_implicit | 44 | 13 | 29.55 | 12.12.2023 | || -|| 35 | select_having | 23 | 16 | 69.57 | 12.12.2023 | || +|| 34 | select_implicit | 44 | 28 (+15) | 63.64 | 30.01.2024 | YQL-17737 || +|| 35 | select_having | 23 | 19 (+3) | 82.61 | 30.01.2024 | YQL-17736 || || 36 | subselect | 234 | 5 (+3) | 2.14 | 19.01.2024 | YQL-17589 || || 37 | union | 186 | 0 | 0.0 | 25.05.2023 | YQL-17590 || -|| 38 | case | 63 | 29 | 46.03 | 12.12.2023 | implicit casts, create function volatile || -|| 39 | join | 591 | 106 | 17.94 | 12.12.2023 | || -|| 40 | aggregates | 416 | 66 (+15) | 15.87 | 23.01.2024 | YQL-17627 || -|| 41 | arrays | 410 | 119 | 29.02 | 12.12.2023 | || -|| 42 | update | 288 | 22 | 7.64 | 12.12.2023 | :-переменные || +|| 38 | case | 63 | 35 (+5) | 55.56 | 18.02.2024 | YQL-17732 || +|| 39 | join | 591 | 134 (+20) | 22.67 | 18.02.2024 | YQL-17687 || +|| 40 | aggregates | 416 | 84 (+17) | 20.19 | 18.02.2024 | YQL-17627 || +|| 41 | arrays | 410 | 108 (+9) | 26.34 | 31.01.2024 | YQL-17707 || +|| 42 | update | 288 | 23 (+1) | 7.99 | 30.01.2024 | YQL-17685 || || 43 | delete | 10 | 5 (+5) | 50.0 | 27.01.2024 | YQL-17585 || -|| 44 | dbsize | 24 | 24 | 100.0 | 10.08.2023 | || +|| 44 | dbsize | 24 | 20 | 83.33 | 18.02.2024 | || || 45 | window | 298 | 5 | 1.68 | 12.12.2023 | YQL-17592 || || 46 | functional_deps | 40 | 7 (+1) | 17.5 | 19.01.2024 | || -|| 47 | json | 454 | 113 | 24.89 | 26.01.2024 | || -|| 48 | jsonb | 1017 | 380 | 37.36 | 26.01.2024 | || +|| 47 | json | 450 | 133 (+3) | 29.56 | 18.02.2024 | YQL-17734 || +|| 48 | jsonb | 1013 | 404 (+3) | 39.88 | 18.02.2024 | YQL-17735 || || 49 | json_encoding | 42 | 42 | 100.0 | 29.05.2023 | || || 50 | jsonpath | 169 | 152 | 89.94 | 29.05.2023 | числа с точкой без целой части (например .1), литерал '00' || || 51 | jsonpath_encoding | 31 | 31 | 100.0 | 29.05.2023 | || || 52 | jsonb_jsonpath | 427 | 88 | 20.61 | 12.12.2023 | || -|| 53 | limit | 84 | 5 | 5.95 | 10.08.2023 | || -|| 54 | truncate | 193 | 33 | 17.1 | 12.12.2023 | || -|| 55 | alter_table | 1679 | 11 | 0.66 | 12.12.2023 | COMMENT ON TABLE || -|| 56 | xml | 234 | 15 | 6.41 | 12.12.2023 | \set VERBOSITY || +|| 53 | limit | 84 | 5 | 5.95 | 10.08.2023 | YQL-17783 || +|| 54 | truncate | 193 | 41 (+5) | 21.24 | 18.02.2024 | YQL-17740 || +|| 55 | alter_table | 1679 | 233 (+222) | 13.88 | 18.02.2024 | YQL-17688 || +|| 56 | xml | 234 | 18 (+4) | 7.69 | 18.02.2024 | YQL-17681 || |# diff --git a/ydb/library/yql/tests/postgresql/status.old b/ydb/library/yql/tests/postgresql/status.old index 320d7411326..36a1b1a1c9a 100644 --- a/ydb/library/yql/tests/postgresql/status.old +++ b/ydb/library/yql/tests/postgresql/status.old @@ -8,54 +8,54 @@ || 4 | varchar | 24 | 15 (+13) | 62.5 | 19.01.2024 | YQL-17603 || || 5 | text | 76 | 16 (+1) | 21.05 | 22.01.2024 | YQL-17605 || || 6 | int2 | 49 | 47 | 95.92 | 29.09.2023 | YQL-17612 || -|| 7 | int4 | 70 | 70 | 100.0 | 29.09.2023 | || -|| 8 | int8 | 142 | 113 (+65) | 79.58 | 22.01.2024 | YQL-17614 || +|| 7 | int4 | 70 | 70 | 100.0 | 29.09.2023 | YQL-17663 || +|| 8 | int8 | 142 | 134 (+21) | 94.37 | 26.01.2024 | YQL-17614 || || 9 | oid | 27 | 27 (+6) | 100.0 | 22.01.2024 | YQL-17623 || || 10 | float4 | 96 | 82 (+2) | 85.42 | 26.01.2024 | YQL-17586 || || 11 | float8 | 168 | 140 (+8) | 83.33 | 26.01.2024 | YQL-17628 || -|| 12 | bit | 115 | 84 | 73.04 | 12.12.2023 | YQL-17634 || -|| 13 | numeric | 915 | 721 (+6) | 78.8 | 23.01.2024 | YQL-17629 || +|| 12 | bit | 115 | 92 (+8) | 80.0 | 30.01.2024 | YQL-17634 || +|| 13 | numeric | 915 | 470 | 51.37 | 30.01.2024 | YQL-17629 || || 14 | uuid | 36 | 0 | 0.0 | 02.05.2023 | YQL-17636 || -|| 15 | strings | 390 | 86 (+5) | 22.05 | 26.01.2024 | YQL-17587 || +|| 15 | strings | 390 | 103 (+17) | 26.41 | 26.01.2024 | YQL-17587 || || 16 | numerology | 24 | 8 | 33.33 | 26.07.2023 | || -|| 17 | date | 264 | 200 | 75.76 | 12.12.2023 | || -|| 18 | time | 39 | 33 | 84.62 | 12.12.2023 | || -|| 19 | timetz | 45 | 29 | 64.44 | 12.12.2023 | || -|| 20 | timestamp | 145 | 98 | 67.59 | 12.12.2023 | || -|| 21 | timestamptz | 315 | 108 | 34.29 | 12.12.2023 | || -|| 22 | interval | 168 | 115 | 68.45 | 25.10.2023 | || +|| 17 | date | 264 | 203 (+3) | 76.89 | 30.01.2024 | YQL-17733 || +|| 18 | time | 39 | 29 | 74.36 | 30.01.2024 | YQL-17738 || +|| 19 | timetz | 45 | 19 | 42.22 | 30.01.2024 | YQL-17739 || +|| 20 | timestamp | 145 | 87 | 60.0 | 30.01.2024 | YQL-17692 || +|| 21 | timestamptz | 315 | 97 | 30.79 | 30.01.2024 | YQL-17693 || +|| 22 | interval | 168 | 115 | 68.45 | 25.10.2023 | YQL-17786 || || 23 | horology | 306 | 79 | 25.82 | 10.08.2023 | SET, DateStyle, TimeZone, автоматически назначаемые имена колонкам-выражениям, SET TIME ZOME, RESET TIME ZONE, интервальный тип ПГ, || || 24 | comments | 7 | 7 | 100.0 | 25.05.2023 | || -|| 25 | expressions | 63 | 14 | 22.22 | 25.10.2023 | || +|| 25 | expressions | 63 | 14 | 22.22 | 25.10.2023 | YQL-17784 || || 26 | unicode | 13 | 4 | 30.77 | 10.08.2023 | || -|| 27 | create_table | 368 | 43 | 11.68 | 12.12.2023 | CREATE UNLOGGED TABLE, REINDEX, PREPARE ... SELECT, DEALLOCATE, \gexec, pg_class, pg_attribute, CREATE TABLE PARTITION OF || -|| 28 | insert | 357 | 15 | 4.2 | 12.12.2023 | CREATE TEMP TABLE, ALTER TABLE, DROP TABLE, CREATE TYPE, CREATE RULE, \d+, DROP TYPE, create table...partition by range, create table ... partition of ..., tableoid::regclass, create or replace function, create operator, || +|| 27 | create_table | 368 | 43 | 11.68 | 12.12.2023 | YQL-17664 || +|| 28 | insert | 357 | 15 | 4.2 | 12.12.2023 | YQL-17785 || || 29 | create_misc | 76 | 3 | 3.95 | 29.09.2023 | || || 30 | select | 88 | 9 | 10.23 | 12.12.2023 | порядок сортировки в виде ORDER BY поле using > или <, а также NULLS FIRST/LAST; ANALYZE, переменные enable_seqscan, enable_bitmapscan, enable_sort, whole-row Var referencing a subquery, подзапросы внутри values, INSERT INTO ... DEFAULT VALUES, Range sub select unsupported lateral, CREATE INDEX, DROP INDEX, explain (опции costs, analyze, timing, summary), SELECT 1 AS x ORDER BY x; CREATE FUNCTION, DROP FUNCTION, table inheritance, PARTITION BY || -|| 31 | select_into | 67 | 3 | 4.48 | 27.07.2023 | || +|| 31 | select_into | 67 | 3 | 4.48 | 27.07.2023 | YQL-17787 || || 32 | select_distinct | 46 | 1 | 2.17 | 27.07.2023 | || || 33 | select_distinct_on | 4 | 0 | 0.0 | 25.05.2023 | || -|| 34 | select_implicit | 44 | 13 | 29.55 | 12.12.2023 | || -|| 35 | select_having | 23 | 16 | 69.57 | 12.12.2023 | || +|| 34 | select_implicit | 44 | 28 (+15) | 63.64 | 30.01.2024 | YQL-17737 || +|| 35 | select_having | 23 | 19 (+3) | 82.61 | 30.01.2024 | YQL-17736 || || 36 | subselect | 234 | 5 (+3) | 2.14 | 19.01.2024 | YQL-17589 || || 37 | union | 186 | 0 | 0.0 | 25.05.2023 | YQL-17590 || -|| 38 | case | 63 | 29 | 46.03 | 12.12.2023 | implicit casts, create function volatile || -|| 39 | join | 591 | 106 | 17.94 | 12.12.2023 | || -|| 40 | aggregates | 416 | 66 (+15) | 15.87 | 23.01.2024 | YQL-17627 || -|| 41 | arrays | 410 | 119 | 29.02 | 12.12.2023 | || -|| 42 | update | 288 | 22 | 7.64 | 12.12.2023 | :-переменные || -|| 43 | delete | 10 | 0 | 0.0 | 25.05.2023 | YQL-17585 || +|| 38 | case | 63 | 30 (+1) | 47.62 | 30.01.2024 | YQL-17732 || +|| 39 | join | 591 | 114 (+8) | 19.29 | 30.01.2024 | YQL-17687 || +|| 40 | aggregates | 416 | 67 (+1) | 16.11 | 30.01.2024 | YQL-17627 || +|| 41 | arrays | 410 | 108 (+9) | 26.34 | 31.01.2024 | YQL-17707 || +|| 42 | update | 288 | 23 (+1) | 7.99 | 30.01.2024 | YQL-17685 || +|| 43 | delete | 10 | 5 (+5) | 50.0 | 27.01.2024 | YQL-17585 || || 44 | dbsize | 24 | 24 | 100.0 | 10.08.2023 | || || 45 | window | 298 | 5 | 1.68 | 12.12.2023 | YQL-17592 || || 46 | functional_deps | 40 | 7 (+1) | 17.5 | 19.01.2024 | || -|| 47 | json | 454 | 114 | 25.11 | 19.01.2024 | || -|| 48 | jsonb | 1017 | 381 | 37.46 | 19.01.2024 | || +|| 47 | json | 454 | 130 (+17) | 28.63 | 30.01.2024 | YQL-17734 || +|| 48 | jsonb | 1017 | 401 (+21) | 39.43 | 30.01.2024 | YQL-17735 || || 49 | json_encoding | 42 | 42 | 100.0 | 29.05.2023 | || || 50 | jsonpath | 169 | 152 | 89.94 | 29.05.2023 | числа с точкой без целой части (например .1), литерал '00' || || 51 | jsonpath_encoding | 31 | 31 | 100.0 | 29.05.2023 | || || 52 | jsonb_jsonpath | 427 | 88 | 20.61 | 12.12.2023 | || -|| 53 | limit | 84 | 5 | 5.95 | 10.08.2023 | || -|| 54 | truncate | 193 | 33 | 17.1 | 12.12.2023 | || -|| 55 | alter_table | 1679 | 11 | 0.66 | 12.12.2023 | COMMENT ON TABLE || -|| 56 | xml | 234 | 15 | 6.41 | 12.12.2023 | \set VERBOSITY || +|| 53 | limit | 84 | 5 | 5.95 | 10.08.2023 | YQL-17783 || +|| 54 | truncate | 193 | 36 (+3) | 18.65 | 30.01.2024 | YQL-17740 || +|| 55 | alter_table | 1679 | 11 | 0.66 | 12.12.2023 | YQL-17688 || +|| 56 | xml | 234 | 14 | 5.98 | 30.01.2024 | YQL-17681 || |# diff --git a/ydb/library/yql/tools/pg-make-test/__main__.py b/ydb/library/yql/tools/pg-make-test/__main__.py index 63303bb0996..bff3b908beb 100644 --- a/ydb/library/yql/tools/pg-make-test/__main__.py +++ b/ydb/library/yql/tools/pg-make-test/__main__.py @@ -11,6 +11,7 @@ import re import csv import click import patch +from collections import Counter from library.python.svn_version import svn_version from ydb.library.yql.tests.postgresql.common import get_out_files, Differ @@ -106,11 +107,17 @@ class TestCaseBuilder: with open(outfile, 'rb') as fout: outdata = fout.readlines() + only_out_stmts = Counter() + only_pgrun_stmts = Counter() + statements = list(self.split_out_file(splitted_stmts, outdata, logger)) + logger.debug("Matching sql statements to .out file lines") for (s_sql, s_out) in statements: + stmt = '\n'.join(str(sql_line) for sql_line in s_sql) + only_out_stmts[stmt] += 1 logger.debug( "<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n%s\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n%s\n============================", - '\n'.join(str(sql_line) for sql_line in s_sql), + stmt, '\n'.join(str(out_line) for out_line in s_out), ) @@ -130,15 +137,31 @@ class TestCaseBuilder: logger.debug("Run result:\n%s", str(b'\n'.join(out))) real_statements = list(self.split_out_file(splitted_stmts, out, logger)) + logger.debug("Matching sql statements to pgrun's output") for (s_sql, s_out) in real_statements: + stmt = '\n'.join(str(sql_line) for sql_line in s_sql) logger.debug( "<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n%s\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n%s\n============================", - '\n'.join(str(sql_line) for sql_line in s_sql), + stmt, '\n'.join(str(out_line) for out_line in s_out), ) + + if 0 < only_out_stmts[stmt]: + only_out_stmts[stmt] -= 1 + if 0 == only_out_stmts[stmt]: + del only_out_stmts[stmt] + else: + only_pgrun_stmts[stmt] += 1 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) + if only_pgrun_stmts: + logger.info("Statements in pgrun output, but not in out file:\n%s", + "\n--------------------------------\n".join(stmt for stmt in only_pgrun_stmts)) + if only_out_stmts: + logger.info("Statements in out file, but not in pgrun output:\n%s", + "\n--------------------------------\n".join(stmt for stmt in only_out_stmts)) + stmts_run = 0 stmts = [] outs = [] @@ -342,7 +365,7 @@ def patch_cases(cases, patches, patchdir): continue cases[i] = patched_sql_full_name - LOGGER.info("Patched", sql_full_name, "->", cases[i]) + LOGGER.info("Patched %s -> %s", sql_full_name, cases[i]) @click.command() @@ -437,7 +460,7 @@ def cli(cases, srcdir, dstdir, patchdir, skip, runner, splitter, report, paralle with open(config.report_path, "w", newline='') as f: writer = csv.writer(f, dialect="excel") writer.writerow(["testcase", "statements", "successful", "ratio"]) - writer.writerows(results) + writer.writerows(sorted(results)) if __name__ == "__main__": diff --git a/ydb/library/yql/tools/pgrun/pgrun.cpp b/ydb/library/yql/tools/pgrun/pgrun.cpp index 29dfd266f1e..6d48e47c051 100644 --- a/ydb/library/yql/tools/pgrun/pgrun.cpp +++ b/ydb/library/yql/tools/pgrun/pgrun.cpp @@ -8,13 +8,16 @@ #include <ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.h> #include <ydb/library/yql/providers/common/provider/yql_provider_names.h> #include <ydb/library/yql/providers/common/proto/gateways_config.pb.h> +#include "ydb/library/yql/providers/yt/common/yql_names.h" #include <ydb/library/yql/providers/yt/provider/yql_yt_provider.h> #include <ydb/library/yql/providers/pg/provider/yql_pg_provider.h> #include <ydb/library/yql/public/issue/yql_issue.h> #include <ydb/library/yql/parser/pg_wrapper/interface/utils.h> +#include <ydb/library/yql/providers/yt/lib/schema/schema.h> #include <library/cpp/getopt/last_getopt.h> #include <library/cpp/yson/public.h> +#include "library/cpp/yson/node/node_io.h" #include <library/cpp/yt/yson_string/string.h> #include <fmt/format.h> @@ -35,6 +38,8 @@ using namespace NYql; using namespace NKikimr::NMiniKQL; +using namespace NNodes; +using NUdf::EDataSlot; namespace NMiniKQL = NKikimr::NMiniKQL; @@ -939,34 +944,48 @@ std::pair<TString, TString> GetYtTableDataPaths(const TFsPath& dataDir, const TS return {dataFileName, attrFileName}; } -void CreateYtFileTable(const TFsPath& dataDir, const TString tableName, const TExprNode::TPtr columnsNode, THashMap<TString, TString>& tablesMapping) { +void CreateYtFileTable(const TFsPath& dataDir, const TString tableName, const TExprNode::TPtr columnsNode, + THashMap<TString, TString>& tablesMapping, TExprContext& ctx, const TPosition& pos) { const auto [dataFilePath, attrFilePath] = GetYtTableDataPaths(dataDir, tableName); - TFile dataFile{dataFilePath, CreateNew}; - TFile attrFile{attrFilePath, CreateNew}; + TFile dataFile{dataFilePath, CreateNew}; + TFile attrFile{attrFilePath, CreateNew}; - THolder<TFixedBufferFileOutput> fo; - fo.Reset(new TFixedBufferFileOutput{attrFile.GetName()}); - IOutputStream *attrS{fo.Get()}; + auto rowSpec = MakeIntrusive<TYqlRowSpecInfo>(); - *attrS << R"__({ - "_yql_row_spec"={ - "Type"=["StructType";[ -)__"; + TColumnOrder columnOrder; + columnOrder.reserve(columnsNode->ChildrenSize()); - for (const auto &columnNode : columnsNode->Children()) { - const auto &colName = columnNode->Child(0)->Content(); - const auto &colTypeNode = columnNode->Child(1); + TStringBuilder ysonType; + ysonType << "[\"StructType\";["; - *attrS << fmt::format(R"__( ["{0}";["{1}";"{2}";];]; -)__", + for (const auto &columnNode : columnsNode->Children()) { + const auto &colName = columnNode->Child(0)->Content(); + const auto &colTypeNode = columnNode->Child(1); + + columnOrder.emplace_back(colName); + + ysonType << fmt::format("[\"{0}\";[\"{1}\";\"{2}\";];];", colName, colTypeNode->Content(), colTypeNode->Child(0)->Content()); } - *attrS << R"__( ];]; - }; -})__"; + ysonType << "];]"; + const auto *typeNode = NCommon::ParseTypeFromYson(TStringBuf(ysonType), ctx, pos); + + rowSpec->SetType(typeNode->Cast<TStructExprType>()); + rowSpec->SetColumnOrder(std::move(columnOrder)); + + NYT::TNode attrs = NYT::TNode::CreateMap(); + rowSpec->FillAttrNode(attrs[YqlRowSpecAttribute], 0, false); + + NYT::TNode spec; + rowSpec->FillCodecNode(spec[YqlRowSpecAttribute]); + + attrs["schema"] = RowSpecToYTSchema(spec[YqlRowSpecAttribute], 0).ToNode(); + + TOFStream of(attrFile.GetName()); + of.Write(NYT::NodeToYsonString(attrs, NYson::EYsonFormat::Pretty)); tablesMapping[TString("yt.plato.") + tableName] = dataFile.GetName(); } @@ -1010,7 +1029,8 @@ int SplitStatements(int argc, char* argv[]) { void WriteToYtTableScheme( const NYql::TExprNode& writeNode, const TTempDir& tempDir, - const TIntrusivePtr<class NYql::NFile::TYtFileServices> yqlNativeServices) { + const TIntrusivePtr<class NYql::NFile::TYtFileServices> yqlNativeServices, + TExprContext& ctx) { const auto* keyNode = writeNode.Child(2); const auto* tableNameNode = keyNode->Child(0)->Child(1); @@ -1031,7 +1051,7 @@ void WriteToYtTableScheme( Y_ENSURE(columnsNode); CreateYtFileTable(tempDir.Path(), TString(tableName), columnsNode->ChildPtr(1), - yqlNativeServices->GetTablesMapping()); + yqlNativeServices->GetTablesMapping(), ctx, writeNode.Pos(ctx)); } else if (mode == "drop") { DeleteYtFileTable(tempDir.Path(), TString(tableName), yqlNativeServices->GetTablesMapping()); @@ -1061,6 +1081,11 @@ void ProcessMetaCmd(const TStringBuf& cmd) { Cerr << "Metacommand " << cmd << " is not supported\n"; } +void ShowFinalAst(TProgramPtr& program, IOutputStream& stream) { + Cerr << "Final AST:\n"; + PrintExprTo(program, stream); +} + int Main(int argc, char* argv[]) { using namespace NLastGetopt; @@ -1077,11 +1102,16 @@ int Main(int argc, char* argv[]) clusterMapping["information_schema"] = PgProviderName; opts.AddHelpOption(); + opts.AddLongOption("print-ast", "print initial & final ASTs to stderr").NoArgument(); + opts.AddLongOption("print-result", "print program execution result to stderr").NoArgument(); opts.AddLongOption("datadir", "directory for tables").StoreResult<TString>(&rawDataDir); opts.SetFreeArgsMax(0); TOptsParseResult res(&opts, argc, argv); + const auto needPrintAst = res.Has("print-ast"); + const auto needPrintResult = res.Has("print-result"); + const bool tempDirExists = !rawDataDir.empty() && NFs::Exists(rawDataDir); TTempDir tempDir{rawDataDir.empty() ? TTempDir{} : TTempDir{rawDataDir}}; if (tempDirExists) { @@ -1187,6 +1217,11 @@ int Main(int argc, char* argv[]) } #endif + if (needPrintAst) { + Cerr << "Initial AST:\n"; + PrintExprTo(program, Cerr); + } + static const THashSet<TString> ignoredNodes{"CommitAll!", "Commit!" }; const auto opNode = NYql::FindNode(program->ExprRoot(), [] (const TExprNode::TPtr& node) { return !ignoredNodes.contains(node->Content()); }); @@ -1198,7 +1233,22 @@ int Main(int argc, char* argv[]) keyNode->Child(0)->Child(0)->IsAtom("tablescheme"); if (isWriteToTableSchemeNode) { - WriteToYtTableScheme(*opNode, tempDir, yqlNativeServices); + try { + WriteToYtTableScheme(*opNode, tempDir, yqlNativeServices, program->ExprCtx()); + } catch (const yexception& e) { + program->Issues().AddIssue(e.what()); + + WriteErrorToStream(program); + + continue; + } + + if (needPrintAst) { + program->Optimize(username); + + ShowFinalAst(program, Cerr); + } + continue; } } @@ -1210,10 +1260,14 @@ int Main(int argc, char* argv[]) WriteErrorToStream(program); continue; } + if (needPrintAst) { + ShowFinalAst(program, Cerr); + } if (program->HasResults()) { - // PrintExprTo(program, Cout); - // Cout << program->ResultsAsString() << Endl; + if (needPrintResult) { + Cerr << program->ResultsAsString() << Endl; + } const auto root = ParseYson(program->ResultsAsString()); diff --git a/ydb/library/yql/tools/pgrun/ya.make b/ydb/library/yql/tools/pgrun/ya.make index afeb600112a..4232b8abbce 100644 --- a/ydb/library/yql/tools/pgrun/ya.make +++ b/ydb/library/yql/tools/pgrun/ya.make @@ -12,6 +12,7 @@ PEERDIR( library/cpp/string_utils/base64 contrib/libs/fmt library/cpp/yson + library/cpp/yson/node ydb/library/yql/sql/pg ydb/library/yql/core/facade ydb/library/yql/core/file_storage @@ -30,6 +31,8 @@ PEERDIR( ydb/library/yql/providers/common/provider ydb/library/yql/providers/common/udf_resolve ydb/library/yql/providers/dq/provider + ydb/library/yql/providers/yt/common + ydb/library/yql/providers/yt/lib/schema ydb/library/yql/providers/yt/gateway/file ydb/library/yql/providers/yt/comp_nodes/llvm14 ydb/library/yql/providers/yt/codec/codegen |