aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <Anton.Romanov@ydb.tech>2022-09-30 14:08:30 +0300
committera-romanov <Anton.Romanov@ydb.tech>2022-09-30 14:08:30 +0300
commit4357e0a46b8634256f4df757ba44ad2a9a220825 (patch)
tree75364f6e0cfb15abe6796554847dbda99d99e51d
parent023556a55d19c731976a6fa77349c847ad5abc09 (diff)
downloadydb-4357e0a46b8634256f4df757ba44ad2a9a220825.tar.gz
StablePickle if presort is not supported.
-rw-r--r--ydb/library/yql/ast/yql_expr.cpp17
-rw-r--r--ydb/library/yql/ast/yql_expr.h7
2 files changed, 23 insertions, 1 deletions
diff --git a/ydb/library/yql/ast/yql_expr.cpp b/ydb/library/yql/ast/yql_expr.cpp
index 2f6b8e1b5d6..d3c077308f5 100644
--- a/ydb/library/yql/ast/yql_expr.cpp
+++ b/ydb/library/yql/ast/yql_expr.cpp
@@ -2996,6 +2996,23 @@ ui32 TPgExprType::GetFlags(ui32 typeId) {
ret |= TypeNonHashable;
}
+ static const std::unordered_set<std::string_view> PgSupportedPresort = {
+ "bool"sv,
+ "int2"sv,
+ "int4"sv,
+ "int8"sv,
+ "float4"sv,
+ "float8"sv,
+ "bytea"sv,
+ "varchar"sv,
+ "text"sv,
+ "cstring"sv
+ };
+
+ if (!PgSupportedPresort.contains(descPtr->Name)) {
+ ret |= TypeNonPresortable;
+ }
+
return ret;
}
diff --git a/ydb/library/yql/ast/yql_expr.h b/ydb/library/yql/ast/yql_expr.h
index 73888cab265..3f7e00a7065 100644
--- a/ydb/library/yql/ast/yql_expr.h
+++ b/ydb/library/yql/ast/yql_expr.h
@@ -117,7 +117,7 @@ struct TTypeAnnotationVisitor {
virtual void Visit(const TScalarExprType& type) = 0;
};
-enum ETypeAnnotationFlags {
+enum ETypeAnnotationFlags : ui32 {
TypeNonComposable = 0x01,
TypeNonPersistable = 0x02,
TypeNonComputable = 0x04,
@@ -130,6 +130,7 @@ enum ETypeAnnotationFlags {
TypeHasManyValues = 0x200,
TypeHasBareYson = 0x400,
TypeHasNestedOptional = 0x800,
+ TypeNonPresortable = 0x1000
};
const ui64 TypeHashMagic = 0x10000;
@@ -240,6 +241,10 @@ public:
return (GetFlags() & TypeHasBareYson) != 0;
}
+ bool IsPresortSupported() const {
+ return (GetFlags() & TypeNonPresortable) == 0;
+ }
+
ui32 GetFlags() const {
return Flags;
}