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 7fc37a76 Parse casting to array using double colon operator in 
Redshift (#1737)
7fc37a76 is described below

commit 7fc37a76e57aa677d8c3958ddda32e9d65a8bb74
Author: Yoav Cohen <59807311+yoavcl...@users.noreply.github.com>
AuthorDate: Sat Feb 22 07:21:45 2025 +0100

    Parse casting to array using double colon operator in Redshift (#1737)
---
 src/dialect/duckdb.rs     | 2 +-
 src/dialect/generic.rs    | 2 +-
 src/dialect/mod.rs        | 8 +++++---
 src/dialect/postgresql.rs | 2 +-
 src/dialect/redshift.rs   | 4 ++++
 src/parser/mod.rs         | 4 ++--
 tests/sqlparser_common.rs | 7 +++++++
 7 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/src/dialect/duckdb.rs b/src/dialect/duckdb.rs
index 3595aa71..3366c670 100644
--- a/src/dialect/duckdb.rs
+++ b/src/dialect/duckdb.rs
@@ -82,7 +82,7 @@ impl Dialect for DuckDbDialect {
     }
 
     // See DuckDB 
<https://duckdb.org/docs/sql/data_types/array.html#defining-an-array-field>
-    fn supports_array_typedef_size(&self) -> bool {
+    fn supports_array_typedef_with_brackets(&self) -> bool {
         true
     }
 
diff --git a/src/dialect/generic.rs b/src/dialect/generic.rs
index e04a288d..041d44bb 100644
--- a/src/dialect/generic.rs
+++ b/src/dialect/generic.rs
@@ -148,7 +148,7 @@ impl Dialect for GenericDialect {
         true
     }
 
-    fn supports_array_typedef_size(&self) -> bool {
+    fn supports_array_typedef_with_brackets(&self) -> bool {
         true
     }
 
diff --git a/src/dialect/mod.rs b/src/dialect/mod.rs
index b68adc17..1c32bc51 100644
--- a/src/dialect/mod.rs
+++ b/src/dialect/mod.rs
@@ -931,9 +931,11 @@ pub trait Dialect: Debug + Any {
         false
     }
 
-    /// Returns true if the dialect supports size definition for array types.
-    /// For example: ```CREATE TABLE my_table (my_array INT[3])```.
-    fn supports_array_typedef_size(&self) -> bool {
+    /// Returns true if the dialect supports array type definition with 
brackets with
+    /// an optional size. For example:
+    /// ```CREATE TABLE my_table (arr1 INT[], arr2 INT[3])```
+    /// ```SELECT x::INT[]```
+    fn supports_array_typedef_with_brackets(&self) -> bool {
         false
     }
     /// Returns true if the dialect supports geometric types.
diff --git a/src/dialect/postgresql.rs b/src/dialect/postgresql.rs
index a20cfac4..57ed0b68 100644
--- a/src/dialect/postgresql.rs
+++ b/src/dialect/postgresql.rs
@@ -247,7 +247,7 @@ impl Dialect for PostgreSqlDialect {
     }
 
     /// See: 
<https://www.postgresql.org/docs/current/arrays.html#ARRAYS-DECLARATION>
-    fn supports_array_typedef_size(&self) -> bool {
+    fn supports_array_typedef_with_brackets(&self) -> bool {
         true
     }
 
diff --git a/src/dialect/redshift.rs b/src/dialect/redshift.rs
index 3dda762c..25b8f164 100644
--- a/src/dialect/redshift.rs
+++ b/src/dialect/redshift.rs
@@ -117,4 +117,8 @@ impl Dialect for RedshiftSqlDialect {
     fn supports_geometric_types(&self) -> bool {
         true
     }
+
+    fn supports_array_typedef_with_brackets(&self) -> bool {
+        true
+    }
 }
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index f80754a3..176a7ca1 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -9123,9 +9123,9 @@ impl<'a> Parser<'a> {
             _ => self.expected_at("a data type name", next_token_index),
         }?;
 
-        if self.dialect.supports_array_typedef_size() {
-            // Parse array data type size
+        if self.dialect.supports_array_typedef_with_brackets() {
             while self.consume_token(&Token::LBracket) {
+                // Parse optional array data type size
                 let size = self.maybe_parse(|p| p.parse_literal_uint())?;
                 self.expect_token(&Token::RBracket)?;
                 data = 
DataType::Array(ArrayElemTypeDef::SquareBracket(Box::new(data), size))
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index c46072d0..d6b8824b 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -14386,3 +14386,10 @@ fn test_geometric_binary_operators() {
         }
     ));
 }
+
+#[test]
+fn parse_array_type_def_with_brackets() {
+    let dialects = all_dialects_where(|d| 
d.supports_array_typedef_with_brackets());
+    dialects.verified_stmt("SELECT x::INT[]");
+    dialects.verified_stmt("SELECT STRING_TO_ARRAY('1,2,3', ',')::INT[3]");
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@datafusion.apache.org
For additional commands, e-mail: commits-h...@datafusion.apache.org

Reply via email to