@@ -22,8 +22,8 @@ use pretty_assertions::assert_eq;
2222
2323use sqlparser:: {
2424 ast:: {
25- BinaryOperator , Expr , Ident , Insert , TableAliasWithoutColumns , ObjectName , QuoteDelimitedString ,
26- Statement , TableObject , Value , ValueWithSpan ,
25+ BinaryOperator , Expr , Ident , Insert , ObjectName , Query , QuoteDelimitedString , SetExpr ,
26+ Statement , TableAliasWithoutColumns , TableObject , Value , ValueWithSpan ,
2727 } ,
2828 dialect:: OracleDialect ,
2929 parser:: ParserError ,
@@ -476,3 +476,55 @@ fn test_insert_with_table_alias() {
476476 ) ;
477477 verify_table_name_with_alias ( & stmt, "foo_t" , "t" ) ;
478478}
479+
480+ #[ test]
481+ fn test_insert_without_alias ( ) {
482+ let oracle_dialect = oracle ( ) ;
483+
484+ // check DEFAULT
485+ let sql = "INSERT INTO t default SELECT 'a' FROM dual" ;
486+ assert_eq ! (
487+ oracle_dialect. parse_sql_statements( sql) ,
488+ Err ( ParserError :: ParserError (
489+ "Expected: SELECT, VALUES, or a subquery in the query body, found: default" . into( )
490+ ) )
491+ ) ;
492+
493+ // check SELECT
494+ let sql = "INSERT INTO t SELECT 'a' FROM dual" ;
495+ let stmt = oracle_dialect. verified_stmt ( sql) ;
496+ assert ! ( matches!(
497+ & stmt,
498+ Statement :: Insert ( Insert {
499+ table_alias: None ,
500+ source: Some ( source) ,
501+ ..
502+ } )
503+ if matches!( & * * source, Query { body, .. } if matches!( & * * body, SetExpr :: Select ( _) ) ) ) ) ;
504+
505+ // check WITH
506+ let sql = "INSERT INTO dual WITH w AS (SELECT 1 AS y FROM dual) SELECT y FROM w" ;
507+ let stmt = oracle_dialect. verified_stmt ( sql) ;
508+ assert ! ( matches!(
509+ & stmt,
510+ Statement :: Insert ( Insert {
511+ table_alias: None ,
512+ source: Some ( source) ,
513+ ..
514+ } )
515+ if matches!( & * * source, Query { body, .. } if matches!( & * * body, SetExpr :: Select ( _) ) ) ) ) ;
516+
517+ // check VALUES
518+ let sql = "INSERT INTO t VALUES (1)" ;
519+ let stmt = oracle_dialect. verified_stmt ( sql) ;
520+ dbg ! ( & stmt) ;
521+ assert ! ( matches!(
522+ stmt,
523+ Statement :: Insert ( Insert {
524+ table_alias: None ,
525+ source: Some ( source) ,
526+ ..
527+ } )
528+ if matches!( & * source, Query { body, .. } if matches!( & * * body, SetExpr :: Values ( _) ) )
529+ ) ) ;
530+ }
0 commit comments