Skip to content

Commit 7bc6ddb

Browse files
MartinSahlenMartin Abelson SahlenMartin Abelson Sahlen
authored
Add support for BigQuery ANY TYPE data type (#1602)
Co-authored-by: Martin Abelson Sahlen <[email protected]> Co-authored-by: Martin Abelson Sahlen <[email protected]>
1 parent 885aa93 commit 7bc6ddb

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

src/ast/data_type.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,10 @@ pub enum DataType {
373373
///
374374
/// [postgresql]: https://www.postgresql.org/docs/current/plpgsql-trigger.html
375375
Trigger,
376+
/// Any data type, used in BigQuery UDF definitions for templated parameters
377+
///
378+
/// [bigquery]: https://cloud.google.com/bigquery/docs/user-defined-functions#templated-sql-udf-parameters
379+
AnyType,
376380
}
377381

378382
impl fmt::Display for DataType {
@@ -383,7 +387,6 @@ impl fmt::Display for DataType {
383387
DataType::CharacterVarying(size) => {
384388
format_character_string_type(f, "CHARACTER VARYING", size)
385389
}
386-
387390
DataType::CharVarying(size) => format_character_string_type(f, "CHAR VARYING", size),
388391
DataType::Varchar(size) => format_character_string_type(f, "VARCHAR", size),
389392
DataType::Nvarchar(size) => format_character_string_type(f, "NVARCHAR", size),
@@ -626,6 +629,7 @@ impl fmt::Display for DataType {
626629
}
627630
DataType::Unspecified => Ok(()),
628631
DataType::Trigger => write!(f, "TRIGGER"),
632+
DataType::AnyType => write!(f, "ANY TYPE"),
629633
}
630634
}
631635
}

src/parser/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -8382,6 +8382,10 @@ impl<'a> Parser<'a> {
83828382
Ok(DataType::Tuple(field_defs))
83838383
}
83848384
Keyword::TRIGGER => Ok(DataType::Trigger),
8385+
Keyword::ANY if self.peek_keyword(Keyword::TYPE) => {
8386+
let _ = self.parse_keyword(Keyword::TYPE);
8387+
Ok(DataType::AnyType)
8388+
}
83858389
_ => {
83868390
self.prev_token();
83878391
let type_name = self.parse_object_name(false)?;

tests/sqlparser_bigquery.rs

+16
Original file line numberDiff line numberDiff line change
@@ -2212,3 +2212,19 @@ fn test_any_value() {
22122212
bigquery_and_generic().verified_expr("ANY_VALUE(fruit HAVING MAX sold)");
22132213
bigquery_and_generic().verified_expr("ANY_VALUE(fruit HAVING MIN sold)");
22142214
}
2215+
2216+
#[test]
2217+
fn test_any_type() {
2218+
bigquery().verified_stmt(concat!(
2219+
"CREATE OR REPLACE TEMPORARY FUNCTION ",
2220+
"my_function(param1 ANY TYPE) ",
2221+
"AS (",
2222+
"(SELECT 1)",
2223+
")",
2224+
));
2225+
}
2226+
2227+
#[test]
2228+
fn test_any_type_dont_break_custom_type() {
2229+
bigquery_and_generic().verified_stmt("CREATE TABLE foo (x ANY)");
2230+
}

0 commit comments

Comments
 (0)