@@ -28,7 +28,7 @@ use test_utils::*;
28
28
use sqlparser:: ast:: Expr :: { BinaryOp , Identifier } ;
29
29
use sqlparser:: ast:: SelectItem :: UnnamedExpr ;
30
30
use sqlparser:: ast:: TableFactor :: Table ;
31
- use sqlparser:: ast:: Value :: Number ;
31
+ use sqlparser:: ast:: Value :: Boolean ;
32
32
use sqlparser:: ast:: * ;
33
33
use sqlparser:: dialect:: ClickHouseDialect ;
34
34
use sqlparser:: dialect:: GenericDialect ;
@@ -965,38 +965,103 @@ fn parse_limit_by() {
965
965
966
966
#[ test]
967
967
fn parse_settings_in_query ( ) {
968
- match clickhouse_and_generic ( )
969
- . verified_stmt ( r#"SELECT * FROM t SETTINGS max_threads = 1, max_block_size = 10000"# )
970
- {
971
- Statement :: Query ( query) => {
972
- assert_eq ! (
973
- query. settings,
974
- Some ( vec![
975
- Setting {
976
- key: Ident :: new( "max_threads" ) ,
977
- value: Number ( "1" . parse( ) . unwrap( ) , false )
978
- } ,
979
- Setting {
980
- key: Ident :: new( "max_block_size" ) ,
981
- value: Number ( "10000" . parse( ) . unwrap( ) , false )
982
- } ,
983
- ] )
984
- ) ;
968
+ fn check_settings ( sql : & str , expected : Vec < Setting > ) {
969
+ match clickhouse_and_generic ( ) . verified_stmt ( sql) {
970
+ Statement :: Query ( q) => {
971
+ assert_eq ! ( q. settings, Some ( expected) ) ;
972
+ }
973
+ _ => unreachable ! ( ) ,
985
974
}
986
- _ => unreachable ! ( ) ,
975
+ }
976
+
977
+ for ( sql, expected_settings) in [
978
+ (
979
+ r#"SELECT * FROM t SETTINGS max_threads = 1, max_block_size = 10000"# ,
980
+ vec ! [
981
+ Setting {
982
+ key: Ident :: new( "max_threads" ) ,
983
+ value: Expr :: value( number( "1" ) ) ,
984
+ } ,
985
+ Setting {
986
+ key: Ident :: new( "max_block_size" ) ,
987
+ value: Expr :: value( number( "10000" ) ) ,
988
+ } ,
989
+ ] ,
990
+ ) ,
991
+ (
992
+ r#"SELECT * FROM t SETTINGS additional_table_filters = {'table_1': 'x != 2'}"# ,
993
+ vec ! [ Setting {
994
+ key: Ident :: new( "additional_table_filters" ) ,
995
+ value: Expr :: Dictionary ( vec![ DictionaryField {
996
+ key: Ident :: with_quote( '\'' , "table_1" ) ,
997
+ value: Expr :: value( single_quoted_string( "x != 2" ) ) . into( ) ,
998
+ } ] ) ,
999
+ } ] ,
1000
+ ) ,
1001
+ (
1002
+ r#"SELECT * FROM t SETTINGS additional_result_filter = 'x != 2', query_plan_optimize_lazy_materialization = false"# ,
1003
+ vec ! [
1004
+ Setting {
1005
+ key: Ident :: new( "additional_result_filter" ) ,
1006
+ value: Expr :: value( single_quoted_string( "x != 2" ) ) ,
1007
+ } ,
1008
+ Setting {
1009
+ key: Ident :: new( "query_plan_optimize_lazy_materialization" ) ,
1010
+ value: Expr :: value( Boolean ( false ) ) ,
1011
+ } ,
1012
+ ] ,
1013
+ ) ,
1014
+ ] {
1015
+ check_settings ( sql, expected_settings) ;
987
1016
}
988
1017
989
1018
let invalid_cases = vec ! [
990
- "SELECT * FROM t SETTINGS a" ,
991
- "SELECT * FROM t SETTINGS a=" ,
992
- "SELECT * FROM t SETTINGS a=1, b" ,
993
- "SELECT * FROM t SETTINGS a=1, b=" ,
994
- "SELECT * FROM t SETTINGS a=1, b=c" ,
1019
+ ( "SELECT * FROM t SETTINGS a" , "Expected: =, found: EOF" ) ,
1020
+ (
1021
+ "SELECT * FROM t SETTINGS a=" ,
1022
+ "Expected: an expression, found: EOF" ,
1023
+ ) ,
1024
+ ( "SELECT * FROM t SETTINGS a=1, b" , "Expected: =, found: EOF" ) ,
1025
+ (
1026
+ "SELECT * FROM t SETTINGS a=1, b=" ,
1027
+ "Expected: an expression, found: EOF" ,
1028
+ ) ,
1029
+ (
1030
+ "SELECT * FROM t SETTINGS a = {" ,
1031
+ "Expected: identifier, found: EOF" ,
1032
+ ) ,
1033
+ (
1034
+ "SELECT * FROM t SETTINGS a = {'b'" ,
1035
+ "Expected: :, found: EOF" ,
1036
+ ) ,
1037
+ (
1038
+ "SELECT * FROM t SETTINGS a = {'b': " ,
1039
+ "Expected: an expression, found: EOF" ,
1040
+ ) ,
1041
+ (
1042
+ "SELECT * FROM t SETTINGS a = {'b': 'c',}" ,
1043
+ "Expected: identifier, found: }" ,
1044
+ ) ,
1045
+ (
1046
+ "SELECT * FROM t SETTINGS a = {'b': 'c', 'd'}" ,
1047
+ "Expected: :, found: }" ,
1048
+ ) ,
1049
+ (
1050
+ "SELECT * FROM t SETTINGS a = {'b': 'c', 'd': }" ,
1051
+ "Expected: an expression, found: }" ,
1052
+ ) ,
1053
+ (
1054
+ "SELECT * FROM t SETTINGS a = {ANY(b)}" ,
1055
+ "Expected: :, found: (" ,
1056
+ ) ,
995
1057
] ;
996
- for sql in invalid_cases {
997
- clickhouse_and_generic ( )
998
- . parse_sql_statements ( sql)
999
- . expect_err ( "Expected: SETTINGS key = value, found: " ) ;
1058
+ for ( sql, error_msg) in invalid_cases {
1059
+ assert_eq ! (
1060
+ clickhouse_and_generic( )
1061
+ . parse_sql_statements( sql)
1062
+ . unwrap_err( ) ,
1063
+ ParserError ( error_msg. to_string( ) )
1064
+ ) ;
1000
1065
}
1001
1066
}
1002
1067
#[ test]
@@ -1550,11 +1615,11 @@ fn parse_select_table_function_settings() {
1550
1615
settings : Some ( vec ! [
1551
1616
Setting {
1552
1617
key: "s0" . into( ) ,
1553
- value: Value :: Number ( "3" . parse ( ) . unwrap ( ) , false ) ,
1618
+ value: Expr :: value ( number ( "3" ) ) ,
1554
1619
} ,
1555
1620
Setting {
1556
1621
key: "s1" . into( ) ,
1557
- value: Value :: SingleQuotedString ( "s" . into ( ) ) ,
1622
+ value: Expr :: value ( single_quoted_string ( "s" ) ) ,
1558
1623
} ,
1559
1624
] ) ,
1560
1625
} ,
@@ -1575,11 +1640,11 @@ fn parse_select_table_function_settings() {
1575
1640
settings : Some ( vec ! [
1576
1641
Setting {
1577
1642
key: "s0" . into( ) ,
1578
- value: Value :: Number ( "3" . parse ( ) . unwrap ( ) , false ) ,
1643
+ value: Expr :: value ( number ( "3" ) ) ,
1579
1644
} ,
1580
1645
Setting {
1581
1646
key: "s1" . into( ) ,
1582
- value: Value :: SingleQuotedString ( "s" . into ( ) ) ,
1647
+ value: Expr :: value ( single_quoted_string ( "s" ) ) ,
1583
1648
} ,
1584
1649
] ) ,
1585
1650
} ,
@@ -1589,7 +1654,6 @@ fn parse_select_table_function_settings() {
1589
1654
"SELECT * FROM t(SETTINGS a=)" ,
1590
1655
"SELECT * FROM t(SETTINGS a=1, b)" ,
1591
1656
"SELECT * FROM t(SETTINGS a=1, b=)" ,
1592
- "SELECT * FROM t(SETTINGS a=1, b=c)" ,
1593
1657
] ;
1594
1658
for sql in invalid_cases {
1595
1659
clickhouse_and_generic ( )
0 commit comments