mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-04 14:28:22 +00:00
json_object('k' VALUE 'v')
in postgres (#1547)
Co-authored-by: Ifeanyi Ubah <ify1992@yahoo.com>
This commit is contained in:
parent
b0007389dc
commit
96f7c0277a
3 changed files with 19 additions and 0 deletions
|
@ -5528,6 +5528,8 @@ pub enum FunctionArgOperator {
|
||||||
Assignment,
|
Assignment,
|
||||||
/// function(arg1 : value1)
|
/// function(arg1 : value1)
|
||||||
Colon,
|
Colon,
|
||||||
|
/// function(arg1 VALUE value1)
|
||||||
|
Value,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for FunctionArgOperator {
|
impl fmt::Display for FunctionArgOperator {
|
||||||
|
@ -5537,6 +5539,7 @@ impl fmt::Display for FunctionArgOperator {
|
||||||
FunctionArgOperator::RightArrow => f.write_str("=>"),
|
FunctionArgOperator::RightArrow => f.write_str("=>"),
|
||||||
FunctionArgOperator::Assignment => f.write_str(":="),
|
FunctionArgOperator::Assignment => f.write_str(":="),
|
||||||
FunctionArgOperator::Colon => f.write_str(":"),
|
FunctionArgOperator::Colon => f.write_str(":"),
|
||||||
|
FunctionArgOperator::Value => f.write_str("VALUE"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11482,6 +11482,9 @@ impl<'a> Parser<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_function_named_arg_operator(&mut self) -> Result<FunctionArgOperator, ParserError> {
|
fn parse_function_named_arg_operator(&mut self) -> Result<FunctionArgOperator, ParserError> {
|
||||||
|
if self.parse_keyword(Keyword::VALUE) {
|
||||||
|
return Ok(FunctionArgOperator::Value);
|
||||||
|
}
|
||||||
let tok = self.next_token();
|
let tok = self.next_token();
|
||||||
match tok.token {
|
match tok.token {
|
||||||
Token::RArrow if self.dialect.supports_named_fn_args_with_rarrow_operator() => {
|
Token::RArrow if self.dialect.supports_named_fn_args_with_rarrow_operator() => {
|
||||||
|
|
|
@ -2824,6 +2824,19 @@ fn test_json() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_fn_arg_with_value_operator() {
|
||||||
|
match pg().verified_expr("JSON_OBJECT('name' VALUE 'value')") {
|
||||||
|
Expr::Function(Function { args: FunctionArguments::List(FunctionArgumentList { args, .. }), .. }) => {
|
||||||
|
assert!(matches!(
|
||||||
|
&args[..],
|
||||||
|
&[FunctionArg::ExprNamed { operator: FunctionArgOperator::Value, .. }]
|
||||||
|
), "Invalid function argument: {:?}", args);
|
||||||
|
}
|
||||||
|
other => panic!("Expected: JSON_OBJECT('name' VALUE 'value') to be parsed as a function, but got {other:?}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_json_table_is_not_reserved() {
|
fn parse_json_table_is_not_reserved() {
|
||||||
// JSON_TABLE is not a reserved keyword in PostgreSQL, even though it is in SQL:2023
|
// JSON_TABLE is not a reserved keyword in PostgreSQL, even though it is in SQL:2023
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue