@@ -209,6 +209,14 @@ trait GeneratedColumnSuiteBase extends GeneratedColumnTest {
209209 assert(errMsg.contains(str))
210210 }
211211
212+ protected def testTableUpdateDPO (
213+ testName : String )(updateFunc : (String , String ) => Seq [Row ]): Unit = {
214+ withSQLConf(SQLConf .PARTITION_OVERWRITE_MODE .key ->
215+ SQLConf .PartitionOverwriteMode .DYNAMIC .toString) {
216+ testTableUpdate(" dpo_" + testName)(updateFunc)
217+ }
218+ }
219+
212220 testTableUpdate(" append_data" ) { (table, path) =>
213221 Seq (
214222 Tuple5 (1L , " foo" , " 2020-10-11 12:30:30" , 100 , " 2020-11-12" )
@@ -269,6 +277,26 @@ trait GeneratedColumnSuiteBase extends GeneratedColumnTest {
269277 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
270278 }
271279
280+ testTableUpdate(" insert_into_by_name_provide_all_columns" ) { (table, _) =>
281+ sql(s " INSERT INTO $table (c5, c6, c7_g_p, c8, c1, c2_g, c3_p, c4_g_p) VALUES " +
282+ s " ('2020-10-11 12:30:30', 100, 1000, '2020-11-12', 1, 11, 'foo', '2020-10-11') " )
283+ Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
284+ 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
285+ }
286+
287+ testTableUpdate(" insert_into_by_name_not_provide_generated_columns" ) { (table, _) =>
288+ sql(s " INSERT INTO $table (c6, c8, c1, c3_p, c5) VALUES " +
289+ s " (100, '2020-11-12', 1L, 'foo', '2020-10-11 12:30:30') " )
290+ Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
291+ 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
292+ }
293+
294+ testTableUpdate(" insert_into_by_name_with_some_generated_columns" ) { (table, _) =>
295+ sql(s " INSERT INTO $table (c5, c6, c8, c1, c3_p, c4_g_p) VALUES " +
296+ s " ('2020-10-11 12:30:30', 100, '2020-11-12', 1L, 'foo', '2020-10-11') " )
297+ Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
298+ 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
299+ }
272300
273301 testTableUpdate(" insert_into_select_provide_all_columns" ) { (table, path) =>
274302 sql(s " INSERT INTO $table SELECT " +
@@ -277,6 +305,17 @@ trait GeneratedColumnSuiteBase extends GeneratedColumnTest {
277305 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
278306 }
279307
308+ testTableUpdate(" insert_into_by_name_not_provide_normal_columns" ) { (table, _) =>
309+ val e = intercept[AnalysisException ] {
310+ withSQLConf(SQLConf .USE_NULLS_FOR_MISSING_DEFAULT_COLUMN_VALUES .key -> " false" ) {
311+ sql(s " INSERT INTO $table (c6, c8, c1, c3_p) VALUES " +
312+ s " (100, '2020-11-12', 1L, 'foo') " )
313+ }
314+ }
315+ errorContains(e.getMessage, " Column c5 is not specified in INSERT" )
316+ Nil
317+ }
318+
280319 testTableUpdate(" insert_overwrite_values_provide_all_columns" ) { (table, path) =>
281320 sql(s " INSERT OVERWRITE TABLE $table VALUES " +
282321 s " (1, 11, 'foo', '2020-10-11', '2020-10-11 12:30:30', 100, 1000, '2020-11-12') " )
@@ -291,27 +330,84 @@ trait GeneratedColumnSuiteBase extends GeneratedColumnTest {
291330 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
292331 }
293332
333+ testTableUpdate(" insert_overwrite_by_name_provide_all_columns" ) { (table, _) =>
334+ sql(s " INSERT OVERWRITE $table (c5, c6, c7_g_p, c8, c1, c2_g, c3_p, c4_g_p) VALUES " +
335+ s " ('2020-10-11 12:30:30', 100, 1000, '2020-11-12', 1, 11, 'foo', '2020-10-11') " )
336+ Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
337+ 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
338+ }
294339
295- testTableUpdate(" dpo_insert_overwrite_values_provide_all_columns" ) { (table, path) =>
296- withSQLConf(SQLConf .PARTITION_OVERWRITE_MODE .key ->
297- SQLConf .PartitionOverwriteMode .DYNAMIC .toString) {
298- sql(s " INSERT OVERWRITE TABLE $table VALUES " +
299- s " (1, 11, 'foo', '2020-10-11', '2020-10-11 12:30:30', 100, 1000, '2020-11-12') " )
300- }
340+ testTableUpdate(" insert_overwrite_by_name_not_provide_generated_columns" ) { (table, _) =>
341+ sql(s " INSERT OVERWRITE $table (c6, c8, c1, c3_p, c5) VALUES " +
342+ s " (100, '2020-11-12', 1L, 'foo', '2020-10-11 12:30:30') " )
301343 Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
302344 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
303345 }
304346
305- testTableUpdate(" dpo_insert_overwrite_select_provide_all_columns" ) { (table, path) =>
306- withSQLConf(SQLConf .PARTITION_OVERWRITE_MODE .key ->
307- SQLConf .PartitionOverwriteMode .DYNAMIC .toString) {
308- sql(s " INSERT OVERWRITE TABLE $table SELECT " +
309- s " 1, 11, 'foo', '2020-10-11', '2020-10-11 12:30:30', 100, 1000, '2020-11-12' " )
347+ testTableUpdate(" insert_overwrite_by_name_with_some_generated_columns" ) { (table, _) =>
348+ sql(s " INSERT OVERWRITE $table (c5, c6, c8, c1, c3_p, c4_g_p) VALUES " +
349+ s " ('2020-10-11 12:30:30', 100, '2020-11-12', 1L, 'foo', '2020-10-11') " )
350+ Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
351+ 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
352+ }
353+
354+ testTableUpdate(" insert_overwrite_by_name_not_provide_normal_columns" ) { (table, _) =>
355+ val e = intercept[AnalysisException ] {
356+ withSQLConf(SQLConf .USE_NULLS_FOR_MISSING_DEFAULT_COLUMN_VALUES .key -> " false" ) {
357+ sql(s " INSERT OVERWRITE $table (c6, c8, c1, c3_p) VALUES " +
358+ s " (100, '2020-11-12', 1L, 'foo') " )
359+ }
310360 }
361+ errorContains(e.getMessage, " Column c5 is not specified in INSERT" )
362+ Nil
363+ }
364+
365+ testTableUpdateDPO(" insert_overwrite_values_provide_all_columns" ) { (table, path) =>
366+ sql(s " INSERT OVERWRITE TABLE $table VALUES " +
367+ s " (1, 11, 'foo', '2020-10-11', '2020-10-11 12:30:30', 100, 1000, '2020-11-12') " )
368+ Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
369+ 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
370+ }
371+
372+ testTableUpdateDPO(" insert_overwrite_select_provide_all_columns" ) { (table, path) =>
373+ sql(s " INSERT OVERWRITE TABLE $table SELECT " +
374+ s " 1, 11, 'foo', '2020-10-11', '2020-10-11 12:30:30', 100, 1000, '2020-11-12' " )
311375 Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
312376 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
313377 }
314378
379+ testTableUpdateDPO(" insert_overwrite_by_name_values_provide_all_columns" ) { (table, _) =>
380+ sql(s " INSERT OVERWRITE $table (c5, c6, c7_g_p, c8, c1, c2_g, c3_p, c4_g_p) VALUES " +
381+ s " (CAST('2020-10-11 12:30:30' AS TIMESTAMP), 100, 1000, CAST('2020-11-12' AS DATE), " +
382+ s " 1L, 11L, 'foo', CAST('2020-10-11' AS DATE)) " )
383+ Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
384+ 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
385+ }
386+
387+ testTableUpdateDPO(
388+ " insert_overwrite_by_name_not_provide_generated_columns" ) { (table, _) =>
389+ sql(s " INSERT OVERWRITE $table (c6, c8, c1, c3_p, c5) VALUES " +
390+ s " (100, CAST('2020-11-12' AS DATE), 1L, 'foo', CAST('2020-10-11 12:30:30' AS TIMESTAMP)) " )
391+ Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
392+ 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
393+ }
394+
395+ testTableUpdateDPO(" insert_overwrite_by_name_with_some_generated_columns" ) { (table, _) =>
396+ sql(s " INSERT OVERWRITE $table (c5, c6, c8, c1, c3_p, c4_g_p) VALUES " +
397+ s " (CAST('2020-10-11 12:30:30' AS TIMESTAMP), 100, CAST('2020-11-12' AS DATE), 1L, " +
398+ s " 'foo', CAST('2020-10-11' AS DATE)) " )
399+ Row (1L , 11L , " foo" , sqlDate(" 2020-10-11" ), sqlTimestamp(" 2020-10-11 12:30:30" ),
400+ 100 , 1000 , sqlDate(" 2020-11-12" )) :: Nil
401+ }
402+
403+ testTableUpdateDPO(" insert_overwrite_by_name_not_provide_normal_columns" ) { (table, _) =>
404+ val e = intercept[AnalysisException ] {
405+ sql(s " INSERT OVERWRITE $table (c6, c8, c1, c3_p) VALUES " +
406+ s " (100, '2020-11-12', 1L, 'foo') " )
407+ }
408+ assert(e.getMessage.contains(" Column c5 is not specified in INSERT" ))
409+ Nil
410+ }
315411
316412 testTableUpdate(" delete" ) { (table, path) =>
317413 Seq (
0 commit comments