aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <vvvv@yandex-team.ru>2022-03-02 19:40:13 +0300
committervvvv <vvvv@yandex-team.ru>2022-03-02 19:40:13 +0300
commit695bb9b5127fd3cbfd9abe2aa1b67d8458799c82 (patch)
tree334be2aa21914956f594915c9018602baa711d33
parent74f1b5005ac3d5dc599b3c5d6f644764018fe90c (diff)
downloadydb-695bb9b5127fd3cbfd9abe2aa1b67d8458799c82.tar.gz
YQL-13710 allow array bounds in cast
ref:b9ccd8afc078b6889760b44f90639ff49e6b689a
-rw-r--r--ydb/library/yql/sql/pg/pg_sql.cpp11
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");