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

github-bot 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 6691f31b Fix credentials parsing for redshift (#2262)
6691f31b is described below

commit 6691f31b753708bd5952cc453b65440d7177a9bb
Author: Andriy Romanov <[email protected]>
AuthorDate: Wed Mar 4 05:48:33 2026 -0800

    Fix credentials parsing for redshift (#2262)
---
 src/ast/mod.rs              | 4 ++++
 src/parser/mod.rs           | 4 ++++
 tests/sqlparser_redshift.rs | 7 +++++++
 3 files changed, 15 insertions(+)

diff --git a/src/ast/mod.rs b/src/ast/mod.rs
index 6a2f9bd9..e201f784 100644
--- a/src/ast/mod.rs
+++ b/src/ast/mod.rs
@@ -9217,6 +9217,9 @@ pub enum CopyLegacyOption {
     TruncateColumns,
     /// ZSTD
     Zstd,
+    /// Redshift `CREDENTIALS 'auth-args'`
+    /// 
<https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html>
+    Credentials(String),
 }
 
 impl fmt::Display for CopyLegacyOption {
@@ -9327,6 +9330,7 @@ impl fmt::Display for CopyLegacyOption {
             }
             TruncateColumns => write!(f, "TRUNCATECOLUMNS"),
             Zstd => write!(f, "ZSTD"),
+            Credentials(s) => write!(f, "CREDENTIALS '{}'", 
value::escape_single_quote_string(s)),
         }
     }
 }
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 688d1d02..75b5bfa7 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -11177,6 +11177,7 @@ impl<'a> Parser<'a> {
             Keyword::BZIP2,
             Keyword::CLEANPATH,
             Keyword::COMPUPDATE,
+            Keyword::CREDENTIALS,
             Keyword::CSV,
             Keyword::DATEFORMAT,
             Keyword::DELIMITER,
@@ -11234,6 +11235,9 @@ impl<'a> Parser<'a> {
                 };
                 CopyLegacyOption::CompUpdate { preset, enabled }
             }
+            Some(Keyword::CREDENTIALS) => {
+                CopyLegacyOption::Credentials(self.parse_literal_string()?)
+            }
             Some(Keyword::CSV) => CopyLegacyOption::Csv({
                 let mut opts = vec![];
                 while let Some(opt) =
diff --git a/tests/sqlparser_redshift.rs b/tests/sqlparser_redshift.rs
index 03dfda2c..243b0646 100644
--- a/tests/sqlparser_redshift.rs
+++ b/tests/sqlparser_redshift.rs
@@ -467,3 +467,10 @@ fn test_create_table_diststyle() {
     redshift().verified_stmt("CREATE TABLE t1 (c1 INT) DISTSTYLE KEY 
DISTKEY(c1)");
     redshift().verified_stmt("CREATE TABLE t1 (c1 INT) DISTSTYLE ALL");
 }
+
+#[test]
+fn test_copy_credentials() {
+    redshift().verified_stmt(
+        "COPY t1 FROM 's3://bucket/file.csv' CREDENTIALS 
'aws_access_key_id=AK;aws_secret_access_key=SK' CSV",
+    );
+}


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

Reply via email to