@@ -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 ,
@@ -469,3 +469,55 @@ fn test_insert_with_table_alias() {
469469 ) ;
470470 verify_table_name_with_alias ( & stmt, "foo_t" , "t" ) ;
471471}
472+
473+ #[ test]
474+ fn test_insert_without_alias ( ) {
475+ let oracle_dialect = oracle ( ) ;
476+
477+ // check DEFAULT
478+ let sql = "INSERT INTO t default SELECT 'a' FROM dual" ;
479+ assert_eq ! (
480+ oracle_dialect. parse_sql_statements( sql) ,
481+ Err ( ParserError :: ParserError (
482+ "Expected: SELECT, VALUES, or a subquery in the query body, found: default" . into( )
483+ ) )
484+ ) ;
485+
486+ // check SELECT
487+ let sql = "INSERT INTO t SELECT 'a' FROM dual" ;
488+ let stmt = oracle_dialect. verified_stmt ( sql) ;
489+ assert ! ( matches!(
490+ & stmt,
491+ Statement :: Insert ( Insert {
492+ table_alias: None ,
493+ source: Some ( source) ,
494+ ..
495+ } )
496+ if matches!( & * * source, Query { body, .. } if matches!( & * * body, SetExpr :: Select ( _) ) ) ) ) ;
497+
498+ // check WITH
499+ let sql = "INSERT INTO dual WITH w AS (SELECT 1 AS y FROM dual) SELECT y FROM w" ;
500+ let stmt = oracle_dialect. verified_stmt ( sql) ;
501+ assert ! ( matches!(
502+ & stmt,
503+ Statement :: Insert ( Insert {
504+ table_alias: None ,
505+ source: Some ( source) ,
506+ ..
507+ } )
508+ if matches!( & * * source, Query { body, .. } if matches!( & * * body, SetExpr :: Select ( _) ) ) ) ) ;
509+
510+ // check VALUES
511+ let sql = "INSERT INTO t VALUES (1)" ;
512+ let stmt = oracle_dialect. verified_stmt ( sql) ;
513+ dbg ! ( & stmt) ;
514+ assert ! ( matches!(
515+ stmt,
516+ Statement :: Insert ( Insert {
517+ table_alias: None ,
518+ source: Some ( source) ,
519+ ..
520+ } )
521+ if matches!( & * source, Query { body, .. } if matches!( & * * body, SetExpr :: Values ( _) ) )
522+ ) ) ;
523+ }
0 commit comments