aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMars Agliullin <marsaly@ydb.tech>2024-02-19 14:58:47 +0300
committerGitHub <noreply@github.com>2024-02-19 14:58:47 +0300
commitb50baf6376efc34aa67b25e2259aa3dea37db288 (patch)
tree4abc1bdb8181a0127a9cd13bff108114abfb1eb5
parent011e15d6c5e75350988de328ce7ed6a6faa17fc1 (diff)
downloadydb-b50baf6376efc34aa67b25e2259aa3dea37db288.tar.gz
YQL-17567: Fix of INSERT with no columns specified (#1438)
Fixes #1834
-rw-r--r--ydb/library/yql/providers/common/provider/yql_provider.cpp4
-rw-r--r--ydb/library/yql/providers/common/provider/yql_provider.h2
-rw-r--r--ydb/library/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp7
-rw-r--r--ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp7
-rw-r--r--ydb/library/yql/tests/postgresql/cases/aggregates.err2201
-rw-r--r--ydb/library/yql/tests/postgresql/cases/aggregates.out85
-rw-r--r--ydb/library/yql/tests/postgresql/cases/aggregates.sql31
-rw-r--r--ydb/library/yql/tests/postgresql/cases/alter_table.err11137
-rw-r--r--ydb/library/yql/tests/postgresql/cases/alter_table.out352
-rw-r--r--ydb/library/yql/tests/postgresql/cases/alter_table.sql329
-rw-r--r--ydb/library/yql/tests/postgresql/cases/arrays.err157
-rw-r--r--ydb/library/yql/tests/postgresql/cases/arrays.out17
-rw-r--r--ydb/library/yql/tests/postgresql/cases/arrays.sql17
-rw-r--r--ydb/library/yql/tests/postgresql/cases/bit.out132
-rw-r--r--ydb/library/yql/tests/postgresql/cases/bit.sql12
-rw-r--r--ydb/library/yql/tests/postgresql/cases/boolean.err2
-rw-r--r--ydb/library/yql/tests/postgresql/cases/boolean.out2
-rw-r--r--ydb/library/yql/tests/postgresql/cases/boolean.sql2
-rw-r--r--ydb/library/yql/tests/postgresql/cases/case.out105
-rw-r--r--ydb/library/yql/tests/postgresql/cases/case.sql40
-rw-r--r--ydb/library/yql/tests/postgresql/cases/date.err9
-rw-r--r--ydb/library/yql/tests/postgresql/cases/date.out50
-rw-r--r--ydb/library/yql/tests/postgresql/cases/date.sql7
-rw-r--r--ydb/library/yql/tests/postgresql/cases/insert.err78
-rw-r--r--ydb/library/yql/tests/postgresql/cases/int8.err10
-rw-r--r--ydb/library/yql/tests/postgresql/cases/int8.out10
-rw-r--r--ydb/library/yql/tests/postgresql/cases/int8.sql10
-rw-r--r--ydb/library/yql/tests/postgresql/cases/join.err3350
-rw-r--r--ydb/library/yql/tests/postgresql/cases/join.out229
-rw-r--r--ydb/library/yql/tests/postgresql/cases/join.sql98
-rw-r--r--ydb/library/yql/tests/postgresql/cases/json.err53
-rw-r--r--ydb/library/yql/tests/postgresql/cases/json.out149
-rw-r--r--ydb/library/yql/tests/postgresql/cases/json.sql49
-rw-r--r--ydb/library/yql/tests/postgresql/cases/jsonb.err53
-rw-r--r--ydb/library/yql/tests/postgresql/cases/jsonb.out145
-rw-r--r--ydb/library/yql/tests/postgresql/cases/jsonb.sql25
-rw-r--r--ydb/library/yql/tests/postgresql/cases/numeric.out394
-rw-r--r--ydb/library/yql/tests/postgresql/cases/numeric.sql51
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_having.out42
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_having.sql12
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_implicit.err2
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_implicit.err.12
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_implicit.err.22
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_implicit.out217
-rw-r--r--ydb/library/yql/tests/postgresql/cases/select_implicit.sql54
-rw-r--r--ydb/library/yql/tests/postgresql/cases/strings.err117
-rw-r--r--ydb/library/yql/tests/postgresql/cases/subselect.err65
-rw-r--r--ydb/library/yql/tests/postgresql/cases/text.err4
-rw-r--r--ydb/library/yql/tests/postgresql/cases/text.out4
-rw-r--r--ydb/library/yql/tests/postgresql/cases/text.sql4
-rw-r--r--ydb/library/yql/tests/postgresql/cases/time.err45
-rw-r--r--ydb/library/yql/tests/postgresql/cases/time.out5
-rw-r--r--ydb/library/yql/tests/postgresql/cases/time.sql5
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timestamp.err197
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timestamp.out51
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timestamp.sql29
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timestamptz.err287
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timestamptz.out64
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timestamptz.sql37
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timetz.err135
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timetz.out22
-rw-r--r--ydb/library/yql/tests/postgresql/cases/timetz.sql16
-rw-r--r--ydb/library/yql/tests/postgresql/cases/truncate.err611
-rw-r--r--ydb/library/yql/tests/postgresql/cases/truncate.out32
-rw-r--r--ydb/library/yql/tests/postgresql/cases/truncate.sql11
-rw-r--r--ydb/library/yql/tests/postgresql/cases/union.err67
-rw-r--r--ydb/library/yql/tests/postgresql/cases/update.out7
-rw-r--r--ydb/library/yql/tests/postgresql/cases/update.sql1
-rw-r--r--ydb/library/yql/tests/postgresql/cases/window.err56
-rw-r--r--ydb/library/yql/tests/postgresql/cases/window.out28
-rw-r--r--ydb/library/yql/tests/postgresql/cases/window.sql14
-rw-r--r--ydb/library/yql/tests/postgresql/cases/xml.err24
-rw-r--r--ydb/library/yql/tests/postgresql/cases/xml.err.124
-rw-r--r--ydb/library/yql/tests/postgresql/cases/xml.err.224
-rw-r--r--ydb/library/yql/tests/postgresql/cases/xml.out7
-rw-r--r--ydb/library/yql/tests/postgresql/cases/xml.sql1
-rw-r--r--ydb/library/yql/tests/postgresql/patches/boolean.out.patch11
-rw-r--r--ydb/library/yql/tests/postgresql/patches/boolean.sql.patch11
-rw-r--r--ydb/library/yql/tests/postgresql/patches/int8.out.patch19
-rw-r--r--ydb/library/yql/tests/postgresql/patches/int8.sql.patch19
-rw-r--r--ydb/library/yql/tests/postgresql/patches/json.out.patch18
-rw-r--r--ydb/library/yql/tests/postgresql/patches/json.sql.patch15
-rw-r--r--ydb/library/yql/tests/postgresql/patches/jsonb.out.patch18
-rw-r--r--ydb/library/yql/tests/postgresql/patches/jsonb.sql.patch15
-rw-r--r--ydb/library/yql/tests/postgresql/patches/text.out.patch13
-rw-r--r--ydb/library/yql/tests/postgresql/patches/text.sql.patch13
-rw-r--r--ydb/library/yql/tests/postgresql/pg_tests.csv90
-rw-r--r--ydb/library/yql/tests/postgresql/status.md68
-rw-r--r--ydb/library/yql/tests/postgresql/status.old58
-rw-r--r--ydb/library/yql/tools/pg-make-test/__main__.py31
-rw-r--r--ydb/library/yql/tools/pgrun/pgrun.cpp100
-rw-r--r--ydb/library/yql/tools/pgrun/ya.make3
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