You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datafusion.apache.org by al...@apache.org on 2025/02/04 20:43:55 UTC
(datafusion) branch main updated: DFParser should skip unsupported COPY INTO (#14382)
This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new 80cf58c52f DFParser should skip unsupported COPY INTO (#14382)
80cf58c52f is described below
commit 80cf58c52f985e072f3b70e6adcb2697d9470283
Author: Artem Osipov <59...@users.noreply.github.com>
AuthorDate: Tue Feb 4 23:43:51 2025 +0300
DFParser should skip unsupported COPY INTO (#14382)
* DFParser should skip unsupported COPY INTO
* Add tests
* Add tests
* Fix typo
* Fix cargo fmt
---
datafusion/sql/src/parser.rs | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/datafusion/sql/src/parser.rs b/datafusion/sql/src/parser.rs
index e836fa89bf..cc42ec1bf3 100644
--- a/datafusion/sql/src/parser.rs
+++ b/datafusion/sql/src/parser.rs
@@ -354,6 +354,14 @@ impl<'a> DFParser<'a> {
self.parse_create()
}
Keyword::COPY => {
+ if let Token::Word(w) = self.parser.peek_nth_token(1).token {
+ // use native parser for COPY INTO
+ if w.keyword == Keyword::INTO {
+ return Ok(Statement::Statement(Box::from(
+ self.parser.parse_statement()?,
+ )));
+ }
+ }
self.parser.next_token(); // COPY
self.parse_copy()
}
@@ -877,6 +885,7 @@ mod tests {
use super::*;
use sqlparser::ast::Expr::Identifier;
use sqlparser::ast::{BinaryOperator, DataType, Expr, Ident};
+ use sqlparser::dialect::SnowflakeDialect;
use sqlparser::tokenizer::Span;
fn expect_parse_ok(sql: &str, expected: Statement) -> Result<(), ParserError> {
@@ -1403,6 +1412,23 @@ mod tests {
Ok(())
}
+ #[test]
+ fn skip_copy_into_snowflake() -> Result<(), ParserError> {
+ let sql = "COPY INTO foo FROM @~/staged FILE_FORMAT = (FORMAT_NAME = 'mycsv');";
+ let dialect = Box::new(SnowflakeDialect);
+ let statements = DFParser::parse_sql_with_dialect(sql, dialect.as_ref())?;
+
+ assert_eq!(
+ statements.len(),
+ 1,
+ "Expected to parse exactly one statement"
+ );
+ if let Statement::CopyTo(_) = &statements[0] {
+ panic!("Expected non COPY TO statement, but was successful: {statements:?}");
+ }
+ Ok(())
+ }
+
#[test]
fn explain_copy_to_table_to_table() -> Result<(), ParserError> {
let cases = vec![
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datafusion.apache.org
For additional commands, e-mail: commits-help@datafusion.apache.org