diff options
author | vvvv <vvvv@yandex-team.ru> | 2022-03-02 19:40:13 +0300 |
---|---|---|
committer | vvvv <vvvv@yandex-team.ru> | 2022-03-02 19:40:13 +0300 |
commit | 695bb9b5127fd3cbfd9abe2aa1b67d8458799c82 (patch) | |
tree | 334be2aa21914956f594915c9018602baa711d33 | |
parent | 74f1b5005ac3d5dc599b3c5d6f644764018fe90c (diff) | |
download | ydb-695bb9b5127fd3cbfd9abe2aa1b67d8458799c82.tar.gz |
YQL-13710 allow array bounds in cast
ref:b9ccd8afc078b6889760b44f90639ff49e6b689a
-rw-r--r-- | ydb/library/yql/sql/pg/pg_sql.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/ydb/library/yql/sql/pg/pg_sql.cpp b/ydb/library/yql/sql/pg/pg_sql.cpp index 5213712462..79970c940f 100644 --- a/ydb/library/yql/sql/pg/pg_sql.cpp +++ b/ydb/library/yql/sql/pg/pg_sql.cpp @@ -993,7 +993,6 @@ public: !typeName->setof && !typeName->pct_type && ListLength(typeName->typmods) == 0 && - ListLength(typeName->arrayBounds) == 0 && (ListLength(typeName->names) == 2 && NodeTag(ListNodeNth(typeName->names, 0)) == T_String && !StrCompare(StrVal(ListNodeNth(typeName->names, 0)), "pg_catalog") || ListLength(typeName->names) == 1) && @@ -1003,7 +1002,8 @@ public: if (NodeTag(arg) == T_A_Const && (NodeTag(CAST_NODE(A_Const, arg)->val) == T_String || NodeTag(CAST_NODE(A_Const, arg)->val) == T_Null) && - supportedTypeName) { + supportedTypeName && + ListLength(typeName->arrayBounds) == 0) { TStringBuf targetType = StrVal(ListNodeNth(typeName->names, ListLength(typeName->names) - 1)); if (NodeTag(CAST_NODE(A_Const, arg)->val) == T_String && targetType == "bool") { auto str = StrVal(CAST_NODE(A_Const, arg)->val); @@ -1046,7 +1046,12 @@ public: return nullptr; } - return L(A("PgCast"), QA(TString(targetType)), input); + auto finalType = TString(targetType); + if (ListLength(typeName->arrayBounds) && !finalType.StartsWith('_')) { + finalType = "_" + finalType; + } + + return L(A("PgCast"), QA(finalType), input); } AddError("Unsupported form of type cast"); |