mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-07 17:04:59 +00:00
create module for ansi tokenizer/parser
This commit is contained in:
parent
0339558d4e
commit
eed0261297
6 changed files with 35 additions and 8 deletions
|
@ -3,8 +3,8 @@ use std::iter::Peekable;
|
|||
|
||||
extern crate datafusion_sql;
|
||||
|
||||
use datafusion_sql::ansi::tokenizer::ANSISQLTokenizer;
|
||||
use datafusion_sql::tokenizer::*;
|
||||
use datafusion_sql::generic_tokenizer::*;
|
||||
use datafusion_sql::parser::*;
|
||||
|
||||
///
|
||||
|
@ -28,7 +28,7 @@ enum AcmeTokenizerError {
|
|||
}
|
||||
|
||||
struct AcmeTokenizer {
|
||||
generic: GenericTokenizer
|
||||
generic: ANSISQLTokenizer
|
||||
}
|
||||
|
||||
/// The ACME tokenizer looks for the factorial operator `!!` but delegates everything else
|
||||
|
@ -64,7 +64,7 @@ fn main() {
|
|||
let sql = "1 + !! 5 * 2";
|
||||
|
||||
let mut acme_tokenizer = AcmeTokenizer {
|
||||
generic: GenericTokenizer { }
|
||||
generic: ANSISQLTokenizer { }
|
||||
};
|
||||
|
||||
let tokens = tokenize(&sql, &mut acme_tokenizer).unwrap();
|
||||
|
|
3
src/ansi/mod.rs
Normal file
3
src/ansi/mod.rs
Normal file
|
@ -0,0 +1,3 @@
|
|||
|
||||
pub mod tokenizer;
|
||||
pub mod parser;
|
24
src/ansi/parser.rs
Normal file
24
src/ansi/parser.rs
Normal file
|
@ -0,0 +1,24 @@
|
|||
use std::cmp::PartialEq;
|
||||
use std::fmt::Debug;
|
||||
use std::iter::Peekable;
|
||||
use std::str::Chars;
|
||||
|
||||
use super::super::tokenizer::*;
|
||||
use super::super::parser::*;
|
||||
|
||||
pub struct ANSISQLParser {
|
||||
|
||||
}
|
||||
|
||||
impl<S,TE> SQLParser<S,TE> for ANSISQLParser
|
||||
where S: Debug + PartialEq {
|
||||
|
||||
fn parse_prefix(&mut self) -> Result<Box<SQLExpr<S>>, ParserError<S, TE>> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn parse_infix(&mut self, left: SQLExpr<S>) -> Result<Option<Box<SQLExpr<S>>>, ParserError<S, TE>> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
|
@ -3,11 +3,11 @@ use std::fmt::Debug;
|
|||
use std::iter::Peekable;
|
||||
use std::str::Chars;
|
||||
|
||||
use super::tokenizer::*;
|
||||
use super::super::tokenizer::*;
|
||||
|
||||
pub struct GenericTokenizer {}
|
||||
pub struct ANSISQLTokenizer {}
|
||||
|
||||
impl<S,TE> SQLTokenizer<S,TE> for GenericTokenizer
|
||||
impl<S,TE> SQLTokenizer<S,TE> for ANSISQLTokenizer
|
||||
where S: Debug + PartialEq {
|
||||
|
||||
fn next_token(&self, chars: &mut Peekable<Chars>) -> Result<Option<SQLToken<S>>, TokenizerError<TE>> {
|
|
@ -1,3 +1,3 @@
|
|||
pub mod ansi;
|
||||
pub mod tokenizer;
|
||||
pub mod generic_tokenizer;
|
||||
pub mod parser;
|
||||
|
|
|
@ -105,7 +105,7 @@ impl<S, TE> From<TokenizerError<TE>> for ParserError<S, TE>
|
|||
}
|
||||
|
||||
|
||||
trait Parser<S, PE>
|
||||
pub trait SQLParser<S, PE>
|
||||
where S: Debug + PartialEq {
|
||||
|
||||
/// parse the prefix and stop once an infix operator is reached
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue