aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <vvvv@yandex-team.ru>2022-04-06 18:02:08 +0300
committervvvv <vvvv@yandex-team.ru>2022-04-06 18:02:08 +0300
commit48fb997d7f820a474b9094a72d9798a95ec612b7 (patch)
treefcfc009a4590ef14e33b4d462fe654aaf47ae640
parent7505ed806e658318620c0545894f2db550f5edf4 (diff)
downloadydb-48fb997d7f820a474b9094a72d9798a95ec612b7.tar.gz
YQL-13710 pgtypes in offset/limit
ref:479b591b8aafe54aa4e187cd8f7ebde9d3127d8a
-rw-r--r--ydb/library/yql/core/common_opt/yql_co_simple1.cpp8
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_core.cpp32
2 files changed, 28 insertions, 12 deletions
diff --git a/ydb/library/yql/core/common_opt/yql_co_simple1.cpp b/ydb/library/yql/core/common_opt/yql_co_simple1.cpp
index 9330a6447d5..7408d750ce4 100644
--- a/ydb/library/yql/core/common_opt/yql_co_simple1.cpp
+++ b/ydb/library/yql/core/common_opt/yql_co_simple1.cpp
@@ -7190,7 +7190,9 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) {
.Callable(1, "Unwrap")
.Callable(0, "SafeCast")
.Callable(0, "Coalesce")
- .Add(0, offset->ChildPtr(1))
+ .Callable(0,"FromPg")
+ .Add(0, offset->ChildPtr(1))
+ .Seal()
.Callable(1, "Int64")
.Atom(0, "0")
.Seal()
@@ -7212,7 +7214,9 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) {
.Callable(1, "Unwrap")
.Callable(0, "SafeCast")
.Callable(0, "Coalesce")
- .Add(0, limit->ChildPtr(1))
+ .Callable(0,"FromPg")
+ .Add(0, limit->ChildPtr(1))
+ .Seal()
.Callable(1, "Int64")
.Atom(0, "9223372036854775807") // 2**63-1
.Seal()
diff --git a/ydb/library/yql/core/type_ann/type_ann_core.cpp b/ydb/library/yql/core/type_ann/type_ann_core.cpp
index dda74daf311..7c6473734be 100644
--- a/ydb/library/yql/core/type_ann/type_ann_core.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_core.cpp
@@ -11214,18 +11214,30 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
return IGraphTransformer::TStatus::Error;
}
- const TTypeAnnotationNode* expectedType = ctx.Expr.MakeType<TOptionalExprType>(
+ auto& data = option->ChildRef(1);
+ if (data->GetTypeAnn() && data->GetTypeAnn()->GetKind() == ETypeAnnotationKind::Null) {
+ // nothing to do
+ } else if (data->GetTypeAnn() && data->GetTypeAnn()->GetKind() == ETypeAnnotationKind::Pg) {
+ auto name = data->GetTypeAnn()->Cast<TPgExprType>()->GetName();
+ if (name != "int4" && name != "int8") {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(data->Pos()), TStringBuilder() <<
+ "Expected int4/int8 type, but got: " << name));
+ return IGraphTransformer::TStatus::Error;
+ }
+ } else {
+ const TTypeAnnotationNode* expectedType = ctx.Expr.MakeType<TOptionalExprType>(
ctx.Expr.MakeType<TDataExprType>(EDataSlot::Int64));
- auto convertStatus = TryConvertTo(option->ChildRef(1), *expectedType, ctx.Expr);
- if (convertStatus.Level == IGraphTransformer::TStatus::Error) {
- ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(option->Child(1)->Pos()), "Mismatch argument types"));
- return IGraphTransformer::TStatus::Error;
- }
+ auto convertStatus = TryConvertTo(data, *expectedType, ctx.Expr);
+ if (convertStatus.Level == IGraphTransformer::TStatus::Error) {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(data->Pos()), "Mismatch argument types"));
+ return IGraphTransformer::TStatus::Error;
+ }
- if (convertStatus.Level != IGraphTransformer::TStatus::Ok) {
- auto newSettings = ReplaceSetting(options, {}, TString(optionName), option->ChildPtr(1), ctx.Expr);
- output = ctx.Expr.ChangeChild(*input, 0, std::move(newSettings));
- return IGraphTransformer::TStatus::Repeat;
+ if (convertStatus.Level != IGraphTransformer::TStatus::Ok) {
+ auto newSettings = ReplaceSetting(options, {}, TString(optionName), option->ChildPtr(1), ctx.Expr);
+ output = ctx.Expr.ChangeChild(*input, 0, std::move(newSettings));
+ return IGraphTransformer::TStatus::Repeat;
+ }
}
} else if (optionName == "sort") {
if (pass != 1) {