@@ -85,15 +85,15 @@ fn parse_insert_values() {
8585 Statement :: Insert {
8686 table_name,
8787 columns,
88- source,
88+ source : Some ( source ) ,
8989 ..
9090 } => {
9191 assert_eq ! ( table_name. to_string( ) , expected_table_name) ;
9292 assert_eq ! ( columns. len( ) , expected_columns. len( ) ) ;
9393 for ( index, column) in columns. iter ( ) . enumerate ( ) {
9494 assert_eq ! ( column, & Ident :: new( expected_columns[ index] . clone( ) ) ) ;
9595 }
96- match & * source. body {
96+ match * source. body {
9797 SetExpr :: Values ( Values { rows, .. } ) => {
9898 assert_eq ! ( rows. as_slice( ) , expected_rows)
9999 }
@@ -107,6 +107,111 @@ fn parse_insert_values() {
107107 verified_stmt ( "INSERT INTO customer WITH foo AS (SELECT 1) SELECT * FROM foo UNION VALUES (1)" ) ;
108108}
109109
110+ #[ test]
111+ fn parse_insert_default_values ( ) {
112+ let insert_with_default_values = verified_stmt ( "INSERT INTO test_table DEFAULT VALUES" ) ;
113+
114+ match insert_with_default_values {
115+ Statement :: Insert {
116+ after_columns,
117+ columns,
118+ on,
119+ partitioned,
120+ returning,
121+ source,
122+ table_name,
123+ ..
124+ } => {
125+ assert_eq ! ( columns, vec![ ] ) ;
126+ assert_eq ! ( after_columns, vec![ ] ) ;
127+ assert_eq ! ( on, None ) ;
128+ assert_eq ! ( partitioned, None ) ;
129+ assert_eq ! ( returning, None ) ;
130+ assert_eq ! ( source, None ) ;
131+ assert_eq ! ( table_name, ObjectName ( vec![ "test_table" . into( ) ] ) ) ;
132+ }
133+ _ => unreachable ! ( ) ,
134+ }
135+
136+ let insert_with_default_values_and_returning =
137+ verified_stmt ( "INSERT INTO test_table DEFAULT VALUES RETURNING test_column" ) ;
138+
139+ match insert_with_default_values_and_returning {
140+ Statement :: Insert {
141+ after_columns,
142+ columns,
143+ on,
144+ partitioned,
145+ returning,
146+ source,
147+ table_name,
148+ ..
149+ } => {
150+ assert_eq ! ( after_columns, vec![ ] ) ;
151+ assert_eq ! ( columns, vec![ ] ) ;
152+ assert_eq ! ( on, None ) ;
153+ assert_eq ! ( partitioned, None ) ;
154+ assert ! ( returning. is_some( ) ) ;
155+ assert_eq ! ( source, None ) ;
156+ assert_eq ! ( table_name, ObjectName ( vec![ "test_table" . into( ) ] ) ) ;
157+ }
158+ _ => unreachable ! ( ) ,
159+ }
160+
161+ let insert_with_default_values_and_on_conflict =
162+ verified_stmt ( "INSERT INTO test_table DEFAULT VALUES ON CONFLICT DO NOTHING" ) ;
163+
164+ match insert_with_default_values_and_on_conflict {
165+ Statement :: Insert {
166+ after_columns,
167+ columns,
168+ on,
169+ partitioned,
170+ returning,
171+ source,
172+ table_name,
173+ ..
174+ } => {
175+ assert_eq ! ( after_columns, vec![ ] ) ;
176+ assert_eq ! ( columns, vec![ ] ) ;
177+ assert ! ( on. is_some( ) ) ;
178+ assert_eq ! ( partitioned, None ) ;
179+ assert_eq ! ( returning, None ) ;
180+ assert_eq ! ( source, None ) ;
181+ assert_eq ! ( table_name, ObjectName ( vec![ "test_table" . into( ) ] ) ) ;
182+ }
183+ _ => unreachable ! ( ) ,
184+ }
185+
186+ let insert_with_columns_and_default_values = "INSERT INTO test_table (test_col) DEFAULT VALUES" ;
187+ assert_eq ! (
188+ ParserError :: ParserError (
189+ "Expected SELECT, VALUES, or a subquery in the query body, found: DEFAULT" . to_string( )
190+ ) ,
191+ parse_sql_statements( insert_with_columns_and_default_values) . unwrap_err( )
192+ ) ;
193+
194+ let insert_with_default_values_and_hive_after_columns =
195+ "INSERT INTO test_table DEFAULT VALUES (some_column)" ;
196+ assert_eq ! (
197+ ParserError :: ParserError ( "Expected end of statement, found: (" . to_string( ) ) ,
198+ parse_sql_statements( insert_with_default_values_and_hive_after_columns) . unwrap_err( )
199+ ) ;
200+
201+ let insert_with_default_values_and_hive_partition =
202+ "INSERT INTO test_table DEFAULT VALUES PARTITION (some_column)" ;
203+ assert_eq ! (
204+ ParserError :: ParserError ( "Expected end of statement, found: PARTITION" . to_string( ) ) ,
205+ parse_sql_statements( insert_with_default_values_and_hive_partition) . unwrap_err( )
206+ ) ;
207+
208+ let insert_with_default_values_and_values_list = "INSERT INTO test_table DEFAULT VALUES (1)" ;
209+ assert_eq ! (
210+ ParserError :: ParserError ( "Expected end of statement, found: (" . to_string( ) ) ,
211+ parse_sql_statements( insert_with_default_values_and_values_list) . unwrap_err( )
212+ ) ;
213+ }
214+
110215#[ test]
111216fn parse_insert_sqlite ( ) {
112217 let dialect = SQLiteDialect { } ;
0 commit comments