mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-09 08:48:02 +00:00
unify parsing of sql_values
This commit is contained in:
parent
6aca4de658
commit
8dbb62cddd
1 changed files with 25 additions and 13 deletions
|
@ -103,9 +103,18 @@ impl Parser {
|
||||||
"DELETE" => Ok(self.parse_delete()?),
|
"DELETE" => Ok(self.parse_delete()?),
|
||||||
"INSERT" => Ok(self.parse_insert()?),
|
"INSERT" => Ok(self.parse_insert()?),
|
||||||
"COPY" => Ok(self.parse_copy()?),
|
"COPY" => Ok(self.parse_copy()?),
|
||||||
"TRUE" => Ok(ASTNode::SQLValue(Value::Boolean(true))),
|
"TRUE" => {
|
||||||
"FALSE" => Ok(ASTNode::SQLValue(Value::Boolean(false))),
|
self.prev_token();
|
||||||
"NULL" => Ok(ASTNode::SQLValue(Value::Null)),
|
self.parse_sql_value()
|
||||||
|
}
|
||||||
|
"FALSE" => {
|
||||||
|
self.prev_token();
|
||||||
|
self.parse_sql_value()
|
||||||
|
}
|
||||||
|
"NULL" => {
|
||||||
|
self.prev_token();
|
||||||
|
self.parse_sql_value()
|
||||||
|
}
|
||||||
_ => return parser_err!(format!("No prefix parser for keyword {}", k)),
|
_ => return parser_err!(format!("No prefix parser for keyword {}", k)),
|
||||||
},
|
},
|
||||||
Token::Mult => Ok(ASTNode::SQLWildcard),
|
Token::Mult => Ok(ASTNode::SQLWildcard),
|
||||||
|
@ -136,15 +145,14 @@ impl Parser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Token::Number(ref n) if n.contains(".") => match n.parse::<f64>() {
|
Token::Number(ref n) => {
|
||||||
Ok(n) => Ok(ASTNode::SQLValue(Value::Double(n))),
|
self.prev_token();
|
||||||
Err(e) => parser_err!(format!("Could not parse '{}' as i64: {}", n, e)),
|
self.parse_sql_value()
|
||||||
},
|
},
|
||||||
Token::Number(ref n) => match n.parse::<i64>() {
|
Token::String(ref s) => {
|
||||||
Ok(n) => Ok(ASTNode::SQLValue(Value::Long(n))),
|
self.prev_token();
|
||||||
Err(e) => parser_err!(format!("Could not parse '{}' as i64: {}", n, e)),
|
self.parse_sql_value()
|
||||||
},
|
}
|
||||||
Token::String(ref s) => Ok(ASTNode::SQLValue(Value::String(s.to_string()))),
|
|
||||||
_ => parser_err!(format!(
|
_ => parser_err!(format!(
|
||||||
"Prefix parser expected a keyword but found {:?}",
|
"Prefix parser expected a keyword but found {:?}",
|
||||||
t
|
t
|
||||||
|
@ -489,14 +497,18 @@ impl Parser {
|
||||||
//TODO: handle escape of values in characters
|
//TODO: handle escape of values in characters
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
values.push(self.parse_sql_value()?);
|
values.push(self.parse_value()?);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(values)
|
Ok(values)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_sql_value(&mut self) -> Result<Value, ParserError> {
|
fn parse_sql_value(&mut self) -> Result<ASTNode, ParserError> {
|
||||||
|
Ok(ASTNode::SQLValue(self.parse_value()?))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_value(&mut self) -> Result<Value, ParserError> {
|
||||||
match self.next_token() {
|
match self.next_token() {
|
||||||
Some(t) => {
|
Some(t) => {
|
||||||
match t {
|
match t {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue