Skip to content

Commit ac394b1

Browse files
Merge pull request #2242 from taozhi8833998/feat-float-num-type-snowflake
feat: support float4 and float8 in snowflake
2 parents f09376b + 69bbc58 commit ac394b1

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

pegjs/snowflake.pegjs

+5-3
Original file line numberDiff line numberDiff line change
@@ -4438,6 +4438,8 @@ KW_LONGTEXT = "LONGTEXT"i !ident_start { return 'LONGTEXT'; }
44384438
KW_BIGINT = "BIGINT"i !ident_start { return 'BIGINT'; }
44394439
KW_ENUM = "ENUM"i !ident_start { return 'ENUM'; }
44404440
KW_FLOAT = "FLOAT"i !ident_start { return 'FLOAT'; }
4441+
KW_FLOAT4 = "FLOAT4"i !ident_start { return 'FLOAT4'; }
4442+
KW_FLOAT8 = "FLOAT8"i !ident_start { return 'FLOAT8'; }
44414443
KW_DOUBLE = "DOUBLE"i !ident_start { return 'DOUBLE'; }
44424444
KW_BIGSERIAL = "BIGSERIAL"i !ident_start { return 'BIGSERIAL'; }
44434445
KW_REAL = "REAL"i !ident_start { return 'REAL'; }
@@ -4847,9 +4849,9 @@ numeric_type_suffix
48474849
return result
48484850
}
48494851
numeric_type
4850-
= t:(KW_NUMBER / KW_DECIMAL / KW_INT / KW_BYTEINT / KW_INTEGER / KW_NUMERIC / KW_SMALLINT / KW_TINYINT / KW_BIGINT / KW_FLOAT / 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 }; }
4851-
/ t:(KW_NUMBER / KW_DECIMAL / KW_INT / KW_BYTEINT / KW_INTEGER / KW_NUMERIC / KW_SMALLINT / KW_TINYINT / KW_BIGINT / KW_FLOAT / 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 }; }
4852-
/ t:(KW_NUMBER / KW_DECIMAL / KW_INT / KW_BYTEINT / KW_INTEGER / KW_NUMERIC / KW_SMALLINT / KW_TINYINT / KW_BIGINT / KW_FLOAT / KW_DOUBLE / KW_SERIAL / KW_BIGSERIAL / KW_REAL) __ s:numeric_type_suffix? __{ /* => data_type */ return { dataType: t, suffix: s }; }
4852+
= 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 }; }
4853+
/ 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 }; }
4854+
/ 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 }; }
48534855

48544856
oid_type
48554857
= 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 }}

test/snowflake.spec.js

+12
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,18 @@ describe('snowflake', () => {
455455
'SELECT listagg(DISTINCT "id", ", ") AS "ids" FROM "foo"'
456456
]
457457
},
458+
{
459+
title: 'float4 and float8 data type',
460+
sql: [
461+
`SELECT
462+
my_column::float AS "my_number",
463+
my_column::float4 AS "my_number2",
464+
my_column::float8 AS "my_number3"
465+
FROM
466+
"my_table"`,
467+
'SELECT "my_column"::FLOAT AS "my_number", "my_column"::FLOAT4 AS "my_number2", "my_column"::FLOAT8 AS "my_number3" FROM "my_table"'
468+
]
469+
},
458470
]
459471
SQL_LIST.forEach(sqlInfo => {
460472
const { title, sql } = sqlInfo

0 commit comments

Comments
 (0)