File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -8793,7 +8793,7 @@ impl<'a> Parser<'a> {
87938793 None
87948794 } ;
87958795
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 )
87978797 {
87988798 self . parse_optional_select_item_replace ( ) ?
87998799 } else {
Original file line number Diff line number Diff line change @@ -246,3 +246,32 @@ fn test_duckdb_load_extension() {
246246 stmt
247247 ) ;
248248}
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() {
15931593 ) ) ) ]
15941594 ) ;
15951595}
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