Skip to content

Commit 37c4809

Browse files
authored
feat(bigquery): Support INT64(...) (#4391)
1 parent bb46ee3 commit 37c4809

File tree

4 files changed

+15
-0
lines changed

4 files changed

+15
-0
lines changed

sqlglot/dialects/bigquery.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,7 @@ class Generator(generator.Generator):
836836
exp.If: if_sql(false_value="NULL"),
837837
exp.ILike: no_ilike_sql,
838838
exp.IntDiv: rename_func("DIV"),
839+
exp.Int64: rename_func("INT64"),
839840
exp.JSONFormat: rename_func("TO_JSON_STRING"),
840841
exp.Levenshtein: _levenshtein_sql,
841842
exp.Max: max_or_greatest,

sqlglot/expressions.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5828,6 +5828,11 @@ class IsNan(Func):
58285828
_sql_names = ["IS_NAN", "ISNAN"]
58295829

58305830

5831+
# https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions#int64_for_json
5832+
class Int64(Func):
5833+
pass
5834+
5835+
58315836
class IsInf(Func):
58325837
_sql_names = ["IS_INF", "ISINF"]
58335838

sqlglot/generator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ class Generator(metaclass=_Generator):
148148
exp.InputModelProperty: lambda self, e: f"INPUT{self.sql(e, 'this')}",
149149
exp.Intersect: lambda self, e: self.set_operations(e),
150150
exp.IntervalSpan: lambda self, e: f"{self.sql(e, 'this')} TO {self.sql(e, 'expression')}",
151+
exp.Int64: lambda self, e: self.sql(exp.cast(e.this, exp.DataType.Type.BIGINT)),
151152
exp.LanguageProperty: lambda self, e: self.naked_property(e),
152153
exp.LocationProperty: lambda self, e: self.naked_property(e),
153154
exp.LogProperty: lambda _, e: f"{'NO ' if e.args.get('no') else ''}LOG",

tests/dialects/test_bigquery.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1606,6 +1606,14 @@ def test_bigquery(self):
16061606
"snowflake": "SELECT ts + INTERVAL '1 year, 2 month, 5 minute, 3 day'",
16071607
},
16081608
)
1609+
self.validate_all(
1610+
"""SELECT INT64(JSON_QUERY(JSON '{"key": 2000}', '$.key'))""",
1611+
write={
1612+
"bigquery": """SELECT INT64(JSON_QUERY(PARSE_JSON('{"key": 2000}'), '$.key'))""",
1613+
"duckdb": """SELECT CAST(JSON('{"key": 2000}') -> '$.key' AS BIGINT)""",
1614+
"snowflake": """SELECT CAST(GET_PATH(PARSE_JSON('{"key": 2000}'), 'key') AS BIGINT)""",
1615+
},
1616+
)
16091617

16101618
def test_errors(self):
16111619
with self.assertRaises(TokenError):

0 commit comments

Comments
 (0)