This is an automated email from the ASF dual-hosted git repository.

iffyio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git


The following commit(s) were added to refs/heads/main by this push:
     new 7bc6ddb8 Add support for BigQuery `ANY TYPE` data type (#1602)
7bc6ddb8 is described below

commit 7bc6ddb8fb0800111179a111fa281672285ce34f
Author: Martin Abelson Sahlen <[email protected]>
AuthorDate: Sun Dec 15 11:39:42 2024 +0200

    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]>
---
 src/ast/data_type.rs        |  6 +++++-
 src/parser/mod.rs           |  4 ++++
 tests/sqlparser_bigquery.rs | 16 ++++++++++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/ast/data_type.rs b/src/ast/data_type.rs
index 5b0239e1..b53b8f0d 100644
--- a/src/ast/data_type.rs
+++ b/src/ast/data_type.rs
@@ -373,6 +373,10 @@ pub enum DataType {
     ///
     /// [postgresql]: 
https://www.postgresql.org/docs/current/plpgsql-trigger.html
     Trigger,
+    /// Any data type, used in BigQuery UDF definitions for templated 
parameters
+    ///
+    /// [bigquery]: 
https://cloud.google.com/bigquery/docs/user-defined-functions#templated-sql-udf-parameters
+    AnyType,
 }
 
 impl fmt::Display for DataType {
@@ -383,7 +387,6 @@ impl fmt::Display for DataType {
             DataType::CharacterVarying(size) => {
                 format_character_string_type(f, "CHARACTER VARYING", size)
             }
-
             DataType::CharVarying(size) => format_character_string_type(f, 
"CHAR VARYING", size),
             DataType::Varchar(size) => format_character_string_type(f, 
"VARCHAR", size),
             DataType::Nvarchar(size) => format_character_string_type(f, 
"NVARCHAR", size),
@@ -626,6 +629,7 @@ impl fmt::Display for DataType {
             }
             DataType::Unspecified => Ok(()),
             DataType::Trigger => write!(f, "TRIGGER"),
+            DataType::AnyType => write!(f, "ANY TYPE"),
         }
     }
 }
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 39ab2db2..37323084 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -8382,6 +8382,10 @@ impl<'a> Parser<'a> {
                     Ok(DataType::Tuple(field_defs))
                 }
                 Keyword::TRIGGER => Ok(DataType::Trigger),
+                Keyword::ANY if self.peek_keyword(Keyword::TYPE) => {
+                    let _ = self.parse_keyword(Keyword::TYPE);
+                    Ok(DataType::AnyType)
+                }
                 _ => {
                     self.prev_token();
                     let type_name = self.parse_object_name(false)?;
diff --git a/tests/sqlparser_bigquery.rs b/tests/sqlparser_bigquery.rs
index 2be128a8..34c14cc5 100644
--- a/tests/sqlparser_bigquery.rs
+++ b/tests/sqlparser_bigquery.rs
@@ -2212,3 +2212,19 @@ fn test_any_value() {
     bigquery_and_generic().verified_expr("ANY_VALUE(fruit HAVING MAX sold)");
     bigquery_and_generic().verified_expr("ANY_VALUE(fruit HAVING MIN sold)");
 }
+
+#[test]
+fn test_any_type() {
+    bigquery().verified_stmt(concat!(
+        "CREATE OR REPLACE TEMPORARY FUNCTION ",
+        "my_function(param1 ANY TYPE) ",
+        "AS (",
+        "(SELECT 1)",
+        ")",
+    ));
+}
+
+#[test]
+fn test_any_type_dont_break_custom_type() {
+    bigquery_and_generic().verified_stmt("CREATE TABLE foo (x ANY)");
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to