You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ag...@apache.org on 2020/08/16 19:03:29 UTC
[arrow] branch master updated: ARROW-9673: [Rust] [DataFusion] Add
a param "dialect" for DFParser::parse_sql
This is an automated email from the ASF dual-hosted git repository.
agrove pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new a94f2b3 ARROW-9673: [Rust] [DataFusion] Add a param "dialect" for DFParser::parse_sql
a94f2b3 is described below
commit a94f2b371bfb5d5cc2ae6799010670baf9fff6b3
Author: wqc200 <wq...@gmail.com>
AuthorDate: Sun Aug 16 13:02:53 2020 -0600
ARROW-9673: [Rust] [DataFusion] Add a param "dialect" for DFParser::parse_sql
i use func 'DFParser::parse_sql' in outsie app with mysql dialect, but parser_sql use generic dialect default, we need to add a parameter so that we can pass in the dialect.
thanks.
Closes #7916 from wqc200/master_sqlparser_dielect
Authored-by: wqc200 <wq...@gmail.com>
Signed-off-by: Andy Grove <an...@gmail.com>
---
rust/datafusion/src/sql/parser.rs | 29 ++++++++++++++++++++++-------
1 file changed, 22 insertions(+), 7 deletions(-)
diff --git a/rust/datafusion/src/sql/parser.rs b/rust/datafusion/src/sql/parser.rs
index c73ea81..08c7b8c 100644
--- a/rust/datafusion/src/sql/parser.rs
+++ b/rust/datafusion/src/sql/parser.rs
@@ -21,7 +21,7 @@
use sqlparser::{
ast::{ColumnDef, Statement as SQLStatement, TableConstraint},
- dialect::{keywords::Keyword, GenericDialect},
+ dialect::{keywords::Keyword, Dialect, GenericDialect},
parser::{Parser, ParserError},
tokenizer::{Token, Tokenizer},
};
@@ -89,19 +89,34 @@ pub struct DFParser {
impl DFParser {
/// Parse the specified tokens
pub fn new(sql: &str) -> Result<Self, ParserError> {
- let dialect = GenericDialect {};
- let mut tokenizer = Tokenizer::new(&dialect, sql);
+ let dialect = &GenericDialect {};
+ DFParser::new_with_dialect(sql, dialect)
+ }
+
+ /// Parse the specified tokens with dialect
+ pub fn new_with_dialect(
+ sql: &str,
+ dialect: &dyn Dialect,
+ ) -> Result<Self, ParserError> {
+ let mut tokenizer = Tokenizer::new(dialect, sql);
let tokens = tokenizer.tokenize()?;
Ok(DFParser {
parser: Parser::new(tokens),
})
}
- /// Parse a SQL statement and produce a set of statements
+ /// Parse a SQL statement and produce a set of statements with dialect
pub fn parse_sql(sql: &str) -> Result<Vec<Statement>, ParserError> {
- let mut tokenizer = Tokenizer::new(&GenericDialect {}, &sql);
- tokenizer.tokenize()?;
- let mut parser = DFParser::new(sql)?;
+ let dialect = &GenericDialect {};
+ DFParser::parse_sql_with_dialect(sql, dialect)
+ }
+
+ /// Parse a SQL statement and produce a set of statements
+ pub fn parse_sql_with_dialect(
+ sql: &str,
+ dialect: &dyn Dialect,
+ ) -> Result<Vec<Statement>, ParserError> {
+ let mut parser = DFParser::new_with_dialect(sql, dialect)?;
let mut stmts = Vec::new();
let mut expecting_statement_delimiter = false;
loop {