mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-24 07:54:06 +00:00
Merge branch 'master' into join-support
This commit is contained in:
commit
ab423bc9dc
7 changed files with 34 additions and 10 deletions
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "sqlparser"
|
||||
description = "Extensible SQL Lexer and Parser with support for ANSI SQL:2011"
|
||||
version = "0.1.9-alpha.0"
|
||||
version = "0.1.10-alpha.0"
|
||||
authors = ["Andy Grove <andygrove73@gmail.com>"]
|
||||
homepage = "https://github.com/andygrove/sqlparser-rs"
|
||||
documentation = "https://docs.rs/sqlparser/"
|
||||
|
|
|
@ -13,6 +13,7 @@ impl Dialect for GenericSqlDialect {
|
|||
REAL, DOUBLE, PRECISION, INT, INTEGER, SMALLINT, BIGINT, NUMERIC, DECIMAL, DEC,
|
||||
BOOLEAN, DATE, TIME, TIMESTAMP, CASE, WHEN, THEN, ELSE, END, JOIN, LEFT, RIGHT, FULL,
|
||||
CROSS, OUTER, INNER, NATURAL, ON, USING,
|
||||
BOOLEAN, DATE, TIME, TIMESTAMP, CASE, WHEN, THEN, ELSE, END, LIKE,
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ mod generic_sql;
|
|||
pub mod keywords;
|
||||
mod postgresql;
|
||||
|
||||
|
||||
pub use self::ansi_sql::AnsiSqlDialect;
|
||||
pub use self::generic_sql::GenericSqlDialect;
|
||||
pub use self::postgresql::PostgreSqlDialect;
|
||||
|
|
|
@ -14,6 +14,7 @@ pub enum SQLOperator {
|
|||
NotEq,
|
||||
And,
|
||||
Or,
|
||||
Like,
|
||||
}
|
||||
|
||||
impl ToString for SQLOperator {
|
||||
|
@ -32,6 +33,7 @@ impl ToString for SQLOperator {
|
|||
SQLOperator::NotEq => "!=".to_string(),
|
||||
SQLOperator::And => "AND".to_string(),
|
||||
SQLOperator::Or => "OR".to_string(),
|
||||
SQLOperator::Like => "LIKE".to_string(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
use chrono::{
|
||||
offset::{FixedOffset},
|
||||
DateTime, NaiveDate, NaiveDateTime, NaiveTime,
|
||||
};
|
||||
use chrono::{offset::FixedOffset, DateTime, NaiveDate, NaiveDateTime, NaiveTime};
|
||||
|
||||
use uuid::Uuid;
|
||||
|
||||
|
|
|
@ -329,6 +329,7 @@ impl Parser {
|
|||
&Token::Mod => Ok(SQLOperator::Modulus),
|
||||
&Token::Keyword(ref k) if k == "AND" => Ok(SQLOperator::And),
|
||||
&Token::Keyword(ref k) if k == "OR" => Ok(SQLOperator::Or),
|
||||
&Token::Keyword(ref k) if k == "LIKE" => Ok(SQLOperator::Like),
|
||||
_ => parser_err!(format!("Unsupported SQL operator {:?}", tok)),
|
||||
}
|
||||
}
|
||||
|
@ -350,6 +351,7 @@ impl Parser {
|
|||
&Token::Keyword(ref k) if k == "OR" => Ok(5),
|
||||
&Token::Keyword(ref k) if k == "AND" => Ok(10),
|
||||
&Token::Keyword(ref k) if k == "IS" => Ok(15),
|
||||
&Token::Keyword(ref k) if k == "LIKE" => Ok(20),
|
||||
&Token::Eq | &Token::Lt | &Token::LtEq | &Token::Neq | &Token::Gt | &Token::GtEq => {
|
||||
Ok(20)
|
||||
}
|
||||
|
|
|
@ -632,17 +632,18 @@ PHP ₱ USD $
|
|||
//assert_eq!(sql, ast.to_string());
|
||||
}
|
||||
|
||||
#[ignore]
|
||||
#[test]
|
||||
fn parse_timestamps_example() {
|
||||
let sql = "2016-02-15 09:43:33";
|
||||
let ast = parse_sql(sql);
|
||||
assert_eq!(sql, ast.to_string());
|
||||
let _ = parse_sql(sql);
|
||||
//TODO add assertion
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_timestamps_with_millis_example() {
|
||||
let sql = "2017-11-02 19:15:42.308637";
|
||||
let _ = parse_sql(sql);
|
||||
//TODO add assertion
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -874,3 +875,25 @@ fn parser(sql: &str) -> Parser {
|
|||
debug!("tokens: {:#?}", tokens);
|
||||
Parser::new(tokens)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_like() {
|
||||
let sql = String::from("SELECT * FROM customers WHERE name LIKE '%a'");
|
||||
let ast = parse_sql(&sql);
|
||||
assert_eq!(sql, ast.to_string());
|
||||
match ast {
|
||||
ASTNode::SQLSelect { selection, .. } => {
|
||||
assert_eq!(
|
||||
ASTNode::SQLBinaryExpr {
|
||||
left: Box::new(ASTNode::SQLIdentifier("name".to_string())),
|
||||
op: SQLOperator::Like,
|
||||
right: Box::new(ASTNode::SQLValue(Value::SingleQuotedString(
|
||||
"%a".to_string()
|
||||
))),
|
||||
},
|
||||
*selection.unwrap()
|
||||
);
|
||||
}
|
||||
_ => assert!(false),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue