File tree 3 files changed +52
-1
lines changed
3 files changed +52
-1
lines changed Original file line number Diff line number Diff line change @@ -8793,7 +8793,7 @@ impl<'a> Parser<'a> {
8793
8793
None
8794
8794
} ;
8795
8795
8796
- let opt_replace = if dialect_of ! ( self is GenericDialect | BigQueryDialect | ClickHouseDialect )
8796
+ let opt_replace = if dialect_of ! ( self is GenericDialect | BigQueryDialect | ClickHouseDialect | SnowflakeDialect | DuckDbDialect )
8797
8797
{
8798
8798
self . parse_optional_select_item_replace ( ) ?
8799
8799
} else {
Original file line number Diff line number Diff line change @@ -246,3 +246,32 @@ fn test_duckdb_load_extension() {
246
246
stmt
247
247
) ;
248
248
}
249
+
250
+ #[ test]
251
+ fn test_select_wildcard_with_replace ( ) {
252
+ let select = duckdb_and_generic ( )
253
+ . verified_only_select ( r#"SELECT * REPLACE (lower(city) AS city) FROM addresses"# ) ;
254
+ let expected = SelectItem :: Wildcard ( WildcardAdditionalOptions {
255
+ opt_replace : Some ( ReplaceSelectItem {
256
+ items : vec ! [ Box :: new( ReplaceSelectElement {
257
+ expr: Expr :: Function ( Function {
258
+ name: ObjectName ( vec![ Ident :: new( "lower" ) ] ) ,
259
+ args: vec![ FunctionArg :: Unnamed ( FunctionArgExpr :: Expr (
260
+ Expr :: Identifier ( Ident :: new( "city" ) ) ,
261
+ ) ) ] ,
262
+ filter: None ,
263
+ null_treatment: None ,
264
+ within_group: None ,
265
+ over: None ,
266
+ distinct: false ,
267
+ special: false ,
268
+ order_by: vec![ ] ,
269
+ } ) ,
270
+ column_name: Ident :: new( "city" ) ,
271
+ as_keyword: true ,
272
+ } ) ] ,
273
+ } ) ,
274
+ ..Default :: default ( )
275
+ } ) ;
276
+ assert_eq ! ( expected, select. projection[ 0 ] ) ;
277
+ }
Original file line number Diff line number Diff line change @@ -1593,3 +1593,25 @@ fn parse_connect_by() {
1593
1593
) ) ) ]
1594
1594
) ;
1595
1595
}
1596
+
1597
+ #[ test]
1598
+ fn test_select_wildcard_with_replace ( ) {
1599
+ let select = snowflake_and_generic ( ) . verified_only_select (
1600
+ r#"SELECT * REPLACE ('DEPT-' || department_id AS department_id) FROM tbl"# ,
1601
+ ) ;
1602
+ let expected = SelectItem :: Wildcard ( WildcardAdditionalOptions {
1603
+ opt_replace : Some ( ReplaceSelectItem {
1604
+ items : vec ! [ Box :: new( ReplaceSelectElement {
1605
+ expr: Expr :: BinaryOp {
1606
+ left: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "DEPT-" . to_owned( ) ) ) ) ,
1607
+ op: BinaryOperator :: StringConcat ,
1608
+ right: Box :: new( Expr :: Identifier ( Ident :: new( "department_id" ) ) ) ,
1609
+ } ,
1610
+ column_name: Ident :: new( "department_id" ) ,
1611
+ as_keyword: true ,
1612
+ } ) ] ,
1613
+ } ) ,
1614
+ ..Default :: default ( )
1615
+ } ) ;
1616
+ assert_eq ! ( expected, select. projection[ 0 ] ) ;
1617
+ }
You can’t perform that action at this time.
0 commit comments