Skip to content

Commit 7030574

Browse files
committed
fix: cast type with alias in all db
1 parent a6aa69b commit 7030574

4 files changed

Lines changed: 15 additions & 11 deletions

File tree

pegjs/postgresql.pegjs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5365,15 +5365,13 @@ cast_data_type
53655365
}
53665366

53675367
cast_double_colon
5368-
= s:(KW_DOUBLE_COLON __ cast_data_type)+ __ alias:alias_clause? {
5368+
= s:(KW_DOUBLE_COLON __ cast_data_type)+ {
53695369
/* => {
5370-
as?: alias_clause,
53715370
symbol: '::' | 'as',
53725371
target: cast_data_type[];
53735372
}
53745373
*/
53755374
return {
5376-
as: alias,
53775375
symbol: '::',
53785376
target: s.map(v => v[2]),
53795377
}

pegjs/snowflake.pegjs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4065,9 +4065,8 @@ cast_data_type
40654065
}
40664066

40674067
cast_double_colon
4068-
= s:(KW_DOUBLE_COLON __ cast_data_type)+ __ alias:alias_clause? {
4068+
= s:(KW_DOUBLE_COLON __ cast_data_type)+ {
40694069
return {
4070-
as: alias,
40714070
symbol: '::',
40724071
target: s.map(v => v[2]),
40734072
}
@@ -4476,6 +4475,7 @@ KW_FLOAT = "FLOAT"i !ident_start { return 'FLOAT'; }
44764475
KW_FLOAT4 = "FLOAT4"i !ident_start { return 'FLOAT4'; }
44774476
KW_FLOAT8 = "FLOAT8"i !ident_start { return 'FLOAT8'; }
44784477
KW_DOUBLE = "DOUBLE"i !ident_start { return 'DOUBLE'; }
4478+
KW_PRECISION = "PRECISION"i !ident_start { return 'PRECISION'; }
44794479
KW_BIGSERIAL = "BIGSERIAL"i !ident_start { return 'BIGSERIAL'; }
44804480
KW_REAL = "REAL"i !ident_start { return 'REAL'; }
44814481
KW_DATE = "DATE"i !ident_start { return 'DATE'; }
@@ -4883,10 +4883,17 @@ numeric_type_suffix
48834883
if (ze) result.push(ze)
48844884
return result
48854885
}
4886+
double_percision_type
4887+
= KW_DOUBLE p:(__ KW_PRECISION)? {
4888+
if (p) {
4889+
return 'DOUBLE PRECISION'
4890+
}
4891+
return 'DOUBLE'
4892+
}
48864893
numeric_type
4887-
= t:(KW_NUMBER / KW_DECIMAL / KW_INT / KW_BYTEINT / KW_INTEGER / KW_NUMERIC / KW_SMALLINT / KW_TINYINT / KW_BIGINT / KW_FLOAT / KW_FLOAT4 / KW_FLOAT8 / KW_DOUBLE / KW_SERIAL / KW_BIGSERIAL / KW_REAL) __ LPAREN __ l:[0-9]+ __ r:(COMMA __ [0-9]+)? __ RPAREN __ s:numeric_type_suffix? { /* => data_type */ return { dataType: t, length: parseInt(l.join(''), 10), scale: r && parseInt(r[2].join(''), 10), parentheses: true, suffix: s }; }
4888-
/ t:(KW_NUMBER / KW_DECIMAL / KW_INT / KW_BYTEINT / KW_INTEGER / KW_NUMERIC / KW_SMALLINT / KW_TINYINT / KW_BIGINT / KW_FLOAT / KW_FLOAT4 / KW_FLOAT8 / KW_DOUBLE / KW_SERIAL / KW_BIGSERIAL / KW_REAL)l:[0-9]+ __ s:numeric_type_suffix? { /* => data_type */ return { dataType: t, length: parseInt(l.join(''), 10), suffix: s }; }
4889-
/ t:(KW_NUMBER / KW_DECIMAL / KW_INT / KW_BYTEINT / KW_INTEGER / KW_NUMERIC / KW_SMALLINT / KW_TINYINT / KW_BIGINT / KW_FLOAT / KW_FLOAT4 / KW_FLOAT8 / KW_DOUBLE / KW_SERIAL / KW_BIGSERIAL / KW_REAL) __ s:numeric_type_suffix? __{ /* => data_type */ return { dataType: t, suffix: s }; }
4894+
= t:(KW_NUMBER / KW_DECIMAL / KW_INT / KW_BYTEINT / KW_INTEGER / KW_NUMERIC / KW_SMALLINT / KW_TINYINT / KW_BIGINT / KW_FLOAT / KW_FLOAT4 / KW_FLOAT8 / double_percision_type / KW_SERIAL / KW_BIGSERIAL / KW_REAL) __ LPAREN __ l:[0-9]+ __ r:(COMMA __ [0-9]+)? __ RPAREN __ s:numeric_type_suffix? { /* => data_type */ return { dataType: t, length: parseInt(l.join(''), 10), scale: r && parseInt(r[2].join(''), 10), parentheses: true, suffix: s }; }
4895+
/ t:(KW_NUMBER / KW_DECIMAL / KW_INT / KW_BYTEINT / KW_INTEGER / KW_NUMERIC / KW_SMALLINT / KW_TINYINT / KW_BIGINT / KW_FLOAT / KW_FLOAT4 / KW_FLOAT8 / double_percision_type / KW_SERIAL / KW_BIGSERIAL / KW_REAL)l:[0-9]+ __ s:numeric_type_suffix? { /* => data_type */ return { dataType: t, length: parseInt(l.join(''), 10), suffix: s }; }
4896+
/ t:(KW_NUMBER / KW_DECIMAL / KW_INT / KW_BYTEINT / KW_INTEGER / KW_NUMERIC / KW_SMALLINT / KW_TINYINT / KW_BIGINT / KW_FLOAT / KW_FLOAT4 / KW_FLOAT8 / double_percision_type / KW_SERIAL / KW_BIGSERIAL / KW_REAL) __ s:numeric_type_suffix? __{ /* => data_type */ return { dataType: t, suffix: s }; }
48904897

48914898
oid_type
48924899
= t:(KW_OID / KW_REGCLASS / KW_REGCOLLATION / KW_REGCONFIG / KW_REGDICTIONARY / KW_REGNAMESPACE / KW_REGOPER / KW_REGOPERATOR / KW_REGPROC / KW_REGPROCEDURE / KW_REGROLE / KW_REGTYPE) { /* => data_type */ return { dataType: t }}

pegjs/trino.pegjs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4019,9 +4019,8 @@ cast_data_type
40194019
}
40204020

40214021
cast_double_colon
4022-
= s:(KW_DOUBLE_COLON __ cast_data_type)+ __ alias:alias_clause? {
4022+
= s:(KW_DOUBLE_COLON __ cast_data_type)+ {
40234023
return {
4024-
as: alias,
40254024
symbol: '::',
40264025
target: s.map(v => v[2]),
40274026
}

test/snowflake.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ describe('snowflake', () => {
8080
)
8181
SELECT *
8282
FROM renamed`,
83-
`WITH "source" AS (SELECT * FROM foo ORDER BY "uploaded_at" DESC LIMIT 1), "flattened" AS (SELECT "d"."value" AS "data_by_row" FROM source, LATERAL FLATTEN(INPUT => PARSE_JSON("jsontext"), OUTER => TRUE) AS "d"), "renamed" AS (SELECT "data_by_row"['country']::VARCHAR AS "country", "data_by_row"['gitlab']::VARCHAR AS "gitlab_handle", "data_by_row"['gitlabId']::VARCHAR AS "gitlab_id", "data_by_row"['isBackendMaintainer']::BOOLEAN AS "is_backend_maintainer", "data_by_row"['isBackendTraineeMaintainer']::BOOLEAN AS "is_backend_trainee_maintainer", "data_by_row"['isDatabaseMaintainer']::BOOLEAN AS "is_database_maintainer", "data_by_row"['isDatabaseTraineeMaintainer']::BOOLEAN AS "is_database_trainee_maintainer", "data_by_row"['isFrontendMaintainer']::BOOLEAN AS "is_frontend_maintainer", "data_by_row"['isFrontendTraineeMaintainer']::BOOLEAN AS "is_frontend_trainee_maintainer", "data_by_row"['isManager']::BOOLEAN AS "is_manager", "data_by_row"['level']::VARCHAR AS "team_member_level", "data_by_row"['locality']::VARCHAR AS "locality", "data_by_row"['location_factor']::DOUBLE AS "PRECISION" AS "location_factor", "data_by_row"['matchName']::VARCHAR AS "match_name", "data_by_row"['name']::VARCHAR AS "name", "data_by_row"['section']::VARCHAR AS "development_section", "data_by_row"['start_date']::DATE AS "start_date", "data_by_row"['team']::VARCHAR AS "team", "data_by_row"['technology']::VARCHAR AS "technology_group" FROM flattened) SELECT * FROM renamed`
83+
`WITH "source" AS (SELECT * FROM foo ORDER BY "uploaded_at" DESC LIMIT 1), "flattened" AS (SELECT "d"."value" AS "data_by_row" FROM source, LATERAL FLATTEN(INPUT => PARSE_JSON("jsontext"), OUTER => TRUE) AS "d"), "renamed" AS (SELECT "data_by_row"['country']::VARCHAR AS "country", "data_by_row"['gitlab']::VARCHAR AS "gitlab_handle", "data_by_row"['gitlabId']::VARCHAR AS "gitlab_id", "data_by_row"['isBackendMaintainer']::BOOLEAN AS "is_backend_maintainer", "data_by_row"['isBackendTraineeMaintainer']::BOOLEAN AS "is_backend_trainee_maintainer", "data_by_row"['isDatabaseMaintainer']::BOOLEAN AS "is_database_maintainer", "data_by_row"['isDatabaseTraineeMaintainer']::BOOLEAN AS "is_database_trainee_maintainer", "data_by_row"['isFrontendMaintainer']::BOOLEAN AS "is_frontend_maintainer", "data_by_row"['isFrontendTraineeMaintainer']::BOOLEAN AS "is_frontend_trainee_maintainer", "data_by_row"['isManager']::BOOLEAN AS "is_manager", "data_by_row"['level']::VARCHAR AS "team_member_level", "data_by_row"['locality']::VARCHAR AS "locality", "data_by_row"['location_factor']::DOUBLE PRECISION AS "location_factor", "data_by_row"['matchName']::VARCHAR AS "match_name", "data_by_row"['name']::VARCHAR AS "name", "data_by_row"['section']::VARCHAR AS "development_section", "data_by_row"['start_date']::DATE AS "start_date", "data_by_row"['team']::VARCHAR AS "team", "data_by_row"['technology']::VARCHAR AS "technology_group" FROM flattened) SELECT * FROM renamed`
8484
]
8585
},
8686
{

0 commit comments

Comments
 (0)