Skip to content

quick fix for column name of select version() #1801

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Feb 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 38 additions & 22 deletions ydb/library/yql/sql/pg/pg_sql.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1308,6 +1308,14 @@ class TConverter : public IPGParseEvents {
if (NodeTag(field) == T_String) {
name = StrVal(field);
}
} else if (NodeTag(r->val) == T_FuncCall) {
auto func = CAST_NODE(FuncCall, r->val);
TVector<TString> names;
if (!ExtractFuncName(func, names)) {
return nullptr;
}

name = names.back();
}
}

Expand Down Expand Up @@ -3377,28 +3385,7 @@ class TConverter : public IPGParseEvents {
}

TVector<TString> names;
for (int i = 0; i < ListLength(value->funcname); ++i) {
auto x = ListNodeNth(value->funcname, i);
if (NodeTag(x) != T_String) {
NodeNotImplemented(value, x);
return nullptr;
}

names.push_back(to_lower(TString(StrVal(x))));
}

if (names.empty()) {
AddError("FuncCall: missing function name");
return nullptr;
}

if (names.size() > 2) {
AddError(TStringBuilder() << "FuncCall: too many name components:: " << names.size());
return nullptr;
}

if (names.size() == 2 && names[0] != "pg_catalog") {
AddError(TStringBuilder() << "FuncCall: expected pg_catalog, but got: " << names[0]);
if (!ExtractFuncName(value, names)) {
return nullptr;
}

Expand Down Expand Up @@ -3485,6 +3472,35 @@ class TConverter : public IPGParseEvents {
return VL(args.data(), args.size());
}

bool ExtractFuncName(const FuncCall* value, TVector<TString>& names) {
for (int i = 0; i < ListLength(value->funcname); ++i) {
auto x = ListNodeNth(value->funcname, i);
if (NodeTag(x) != T_String) {
NodeNotImplemented(value, x);
return false;
}

names.push_back(to_lower(TString(StrVal(x))));
}

if (names.empty()) {
AddError("FuncCall: missing function name");
return false;
}

if (names.size() > 2) {
AddError(TStringBuilder() << "FuncCall: too many name components:: " << names.size());
return false;
}

if (names.size() == 2 && names[0] != "pg_catalog") {
AddError(TStringBuilder() << "FuncCall: expected pg_catalog, but got: " << names[0]);
return false;
}

return true;
}

TAstNode* ParseTypeCast(const TypeCast* value, const TExprSettings& settings) {
AT_LOCATION(value);
if (!value->arg) {
Expand Down
10 changes: 9 additions & 1 deletion ydb/library/yql/tests/postgresql/cases/aggregates.err
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,14 @@ FROM regr_test WHERE x IN (10,20,30,80);
SELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)
FROM regr_test;
</sql-statement>
-stdin-:<main>: Error: Type annotation

-stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
SELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)
^
-stdin-:<main>:1:1: Error: Duplicated member: sum
SELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)
^
<sql-statement>
SELECT float8_accum('{4,140,2900}'::float8[], 100);
</sql-statement>
Expand Down Expand Up @@ -1344,4 +1352,4 @@ drop table p_t1;
--
create temp table t1(f1 int, f2 bigint);
</sql-statement>
(TFileError) (File exists) util/system/file.cpp:918: can't open "/tmp/tmpjl487dvf/t1" with mode CreateNew (0x00000003)
(TFileError) (Error 17: File exists) util/system/file.cpp:918: can't open "/var/tmp/tmpdyumpf7m/t1" with mode CreateNew (0x00000003)
2 changes: 1 addition & 1 deletion ydb/library/yql/tests/postgresql/cases/alter_table.err
Original file line number Diff line number Diff line change
Expand Up @@ -549,4 +549,4 @@ CREATE TABLE attmp (regtable int);
<sql-statement>
CREATE TEMP TABLE attmp (attmptable int);
</sql-statement>
(TFileError) (File exists) util/system/file.cpp:857: can't open "/tmp/tmpuixf4gua/attmp" with mode CreateNew (0x00000003)
(TFileError) (Error 17: File exists) util/system/file.cpp:918: can't open "/var/tmp/tmpasfe8kov/attmp" with mode CreateNew (0x00000003)
108 changes: 74 additions & 34 deletions ydb/library/yql/tests/postgresql/cases/arrays.err

Large diffs are not rendered by default.

18 changes: 17 additions & 1 deletion ydb/library/yql/tests/postgresql/cases/bit.err
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,14 @@ SELECT POSITION(B'1101' IN b),
b
FROM BIT_SHIFT_TABLE ;
</sql-statement>
-stdin-:<main>: Error: Type annotation

-stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
SELECT POSITION(B'1101' IN b),
^
-stdin-:<main>:1:1: Error: Duplicated member: position
SELECT POSITION(B'1101' IN b),
^
<sql-statement>
SELECT b, b >> 1 AS bsr, b << 1 AS bsl
FROM BIT_SHIFT_TABLE ;
Expand Down Expand Up @@ -406,6 +414,14 @@ SELECT POSITION(B'1101' IN v),
v
FROM VARBIT_SHIFT_TABLE ;
</sql-statement>
-stdin-:<main>: Error: Type annotation

-stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
SELECT POSITION(B'1101' IN v),
^
-stdin-:<main>:1:1: Error: Duplicated member: position
SELECT POSITION(B'1101' IN v),
^
<sql-statement>
SELECT v, v >> 1 AS vsr, v << 1 AS vsl
FROM VARBIT_SHIFT_TABLE ;
Expand Down Expand Up @@ -475,7 +491,7 @@ Metacommand \d bit_defaults is not supported
<sql-statement>
INSERT INTO bit_defaults DEFAULT VALUES;
</sql-statement>
-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'default_values' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'default_values' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys', 'mutationid'.

<sql-statement>
TABLE bit_defaults;
Expand Down
6 changes: 3 additions & 3 deletions ydb/library/yql/tests/postgresql/cases/case.err
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ UPDATE CASE_TBL
</sql-statement>
-stdin-:<main>: Fatal: Pre type annotation

-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys', 'mutationid'.

<sql-statement>
SELECT * FROM CASE_TBL;
Expand All @@ -252,7 +252,7 @@ UPDATE CASE_TBL
</sql-statement>
-stdin-:<main>: Fatal: Pre type annotation

-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys', 'mutationid'.

<sql-statement>
SELECT * FROM CASE_TBL;
Expand All @@ -266,7 +266,7 @@ UPDATE CASE_TBL
</sql-statement>
-stdin-:<main>: Fatal: Pre type annotation

-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys', 'mutationid'.

<sql-statement>
SELECT * FROM CASE_TBL;
Expand Down
2 changes: 1 addition & 1 deletion ydb/library/yql/tests/postgresql/cases/create_misc.err
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ UPDATE shighway
</sql-statement>
-stdin-:<main>: Fatal: Pre type annotation

-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys'.
-stdin-:<main>: Fatal: tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp:70: Key 'pg_update' not found in enum NYql::EYtSettingType. Valid options are: 'initial', 'infer_scheme', 'force_infer_schema', 'do_not_fail_on_invalid_schema', 'direct_read', 'view', 'mode', 'scheme', 'weak_concat', 'anonymous', 'with_qb', 'inline', 'sample', 'joinLabel', 'ignore_non_existing', 'warn_non_existing', 'xlock', 'unordered', 'nonUnique', 'userschema', 'usercolumns', 'statcolumns', 'syscolumns', 'ignoretypev3', 'memUsage', 'itemsCount', 'rowFactor', 'ordered', 'keyFilter', 'keyFilter2', 'take', 'skip', 'limit', 'sortLimitBy', 'sortBy', 'reduceBy', 'reduceFilterBy', 'forceTransform', 'weakFields', 'sharded', 'combineChunks', 'jobCount', 'joinReduce', 'firstAsPrimary', 'flow', 'keepSorted', 'keySwitch', 'uniqueBy', 'opHash', 'mapOutputType', 'reduceInputType', 'noDq', 'split', 'compression_codec', 'erasure_codec', 'expiration', 'replication_factor', 'user_attrs', 'media', 'primary_medium', 'keep_meta', 'monotonic_keys', 'mutationid'.

<sql-statement>
INSERT INTO a_star (class, a) VALUES ('a', 1);
Expand Down
8 changes: 8 additions & 0 deletions ydb/library/yql/tests/postgresql/cases/date.err
Original file line number Diff line number Diff line change
Expand Up @@ -1165,6 +1165,14 @@ select '-infinity'::date < 'today'::date as t;
<sql-statement>
select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date);
</sql-statement>
-stdin-:<main>: Error: Type annotation

-stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date);
^
-stdin-:<main>:1:1: Error: Duplicated member: isfinite
select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date);
^
<sql-statement>
--
-- oscillating fields from non-finite date:
Expand Down
6 changes: 0 additions & 6 deletions ydb/library/yql/tests/postgresql/cases/date.out
Original file line number Diff line number Diff line change
Expand Up @@ -905,12 +905,6 @@ select '-infinity'::date < 'today'::date as t;
t
(1 row)

select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date);
isfinite | isfinite | isfinite
----------+----------+----------
f | f | t
(1 row)

--
-- oscillating fields from non-finite date:
--
Expand Down
1 change: 0 additions & 1 deletion ydb/library/yql/tests/postgresql/cases/date.sql
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,6 @@ SELECT EXTRACT(JULIAN FROM DATE '2020-08-11');
select 'infinity'::date, '-infinity'::date;
select 'infinity'::date > 'today'::date as t;
select '-infinity'::date < 'today'::date as t;
select isfinite('infinity'::date), isfinite('-infinity'::date), isfinite('today'::date);
--
-- oscillating fields from non-finite date:
--
Expand Down
Loading