aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraneporada <aneporada@yandex-team.ru>2022-03-19 01:04:20 +0300
committeraneporada <aneporada@yandex-team.ru>2022-03-19 01:04:20 +0300
commitdc49aeeb5ef43e6b5044d4243666e18c319f89e2 (patch)
treec723c5c5f2529a89d1b6358657c6605e5af2fa1e
parent639b93b1e18f29d7aa4d0ad0bafc73e75632ae3a (diff)
downloadydb-dc49aeeb5ef43e6b5044d4243666e18c319f89e2.tar.gz
[YQL-14488] Fix numeric floating point pg literals
ref:bee10c76bcd390092b25ac6dfd1e7bbc05f7dd77
-rw-r--r--ydb/library/yql/sql/v1/SQLv1.g.in8
-rw-r--r--ydb/library/yql/sql/v1/sql.cpp4
2 files changed, 7 insertions, 5 deletions
diff --git a/ydb/library/yql/sql/v1/SQLv1.g.in b/ydb/library/yql/sql/v1/SQLv1.g.in
index bcf648137d..f1fced62e0 100644
--- a/ydb/library/yql/sql/v1/SQLv1.g.in
+++ b/ydb/library/yql/sql/v1/SQLv1.g.in
@@ -1361,9 +1361,11 @@ INTEGER_VALUE: DIGITS ((P | U)? (L | S | T | I | B | N)?);
fragment FLOAT_EXP : E (PLUS | MINUS)? DECDIGITS ;
REAL:
- DECDIGITS DOT DIGIT* FLOAT_EXP? (F | P F ('4'|'8'))?
- | DECDIGITS FLOAT_EXP F?
-// | DOT DECDIGITS FLOAT_EXP? // Conflicts with tuple element access through DOT
+ (
+ DECDIGITS DOT DIGIT* FLOAT_EXP?
+ | DECDIGITS FLOAT_EXP
+// | DOT DECDIGITS FLOAT_EXP? // Conflicts with tuple element access through DOT
+ ) (F | P F ('4'|'8') | P N)?
;
BLOB: X QUOTE_SINGLE HEXDIGIT+ QUOTE_SINGLE;
diff --git a/ydb/library/yql/sql/v1/sql.cpp b/ydb/library/yql/sql/v1/sql.cpp
index 1d1dc7a797..f3a46a34fc 100644
--- a/ydb/library/yql/sql/v1/sql.cpp
+++ b/ydb/library/yql/sql/v1/sql.cpp
@@ -3705,8 +3705,6 @@ TNodePtr LiteralNumber(TContext& ctx, const TRule_integer& node) {
return new TLiteralNumberNode<i32>(ctx.Pos(), "PgInt4", ToString(value));
} else if (suffix == "pb") {
return new TLiteralNumberNode<i64>(ctx.Pos(), "PgInt8", ToString(value));
- } else if (suffix == "pn") {
- return new TLiteralNode(ctx.Pos(), "PgNumeric", ToString(value));
} else {
ctx.Error(ctx.Pos()) << "Failed to parse number from string: " << intergerString << ", invalid suffix: " << suffix;
return {};
@@ -3723,6 +3721,8 @@ TNodePtr LiteralReal(TContext& ctx, const TRule_real& node) {
return new TLiteralNumberNode<float>(ctx.Pos(), "PgFloat4", value.substr(0, value.size()-3));
} else if (lower.EndsWith("pf8")) {
return new TLiteralNumberNode<float>(ctx.Pos(), "PgFloat8", value.substr(0, value.size()-3));
+ } else if (lower.EndsWith("pn")) {
+ return new TLiteralNode(ctx.Pos(), "PgNumeric", value.substr(0, value.size()-2));
} else {
return new TLiteralNumberNode<double>(ctx.Pos(), "Double", value);
}