@@ -966,6 +966,58 @@ void testInsertOverwrite() throws JSQLParserException {
966966 assertFalse (insert .isOverwrite ());
967967 }
968968
969+ @ Test
970+ // a dynamic partition column without a value must not inherit the value of a
971+ // preceding static partition column (#2500)
972+ void testInsertMixedStaticAndDynamicPartitions () throws JSQLParserException {
973+ String sqlStr =
974+ "INSERT OVERWRITE TABLE t PARTITION (dtime = '2024-04-03', region) SELECT * FROM a" ;
975+ Insert insert = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr );
976+ assertEquals (2 , insert .getPartitions ().size ());
977+ assertEquals ("dtime" , insert .getPartitions ().get (0 ).getColumn ().getColumnName ());
978+ assertEquals ("'2024-04-03'" , insert .getPartitions ().get (0 ).getValue ().toString ());
979+ assertEquals ("region" , insert .getPartitions ().get (1 ).getColumn ().getColumnName ());
980+ assertNull (insert .getPartitions ().get (1 ).getValue ());
981+
982+ sqlStr =
983+ "INSERT OVERWRITE TABLE t PARTITION (region, dtime = '2024-04-03') SELECT * FROM a" ;
984+ insert = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr );
985+ assertEquals (2 , insert .getPartitions ().size ());
986+ assertEquals ("region" , insert .getPartitions ().get (0 ).getColumn ().getColumnName ());
987+ assertNull (insert .getPartitions ().get (0 ).getValue ());
988+ assertEquals ("dtime" , insert .getPartitions ().get (1 ).getColumn ().getColumnName ());
989+ assertEquals ("'2024-04-03'" , insert .getPartitions ().get (1 ).getValue ().toString ());
990+
991+ sqlStr = "INSERT OVERWRITE TABLE t PARTITION"
992+ + " (dtime = '2024-04-03', region, dept) SELECT * FROM a" ;
993+ insert = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr );
994+ assertEquals (3 , insert .getPartitions ().size ());
995+ assertEquals ("dtime" , insert .getPartitions ().get (0 ).getColumn ().getColumnName ());
996+ assertEquals ("'2024-04-03'" , insert .getPartitions ().get (0 ).getValue ().toString ());
997+ assertEquals ("region" , insert .getPartitions ().get (1 ).getColumn ().getColumnName ());
998+ assertNull (insert .getPartitions ().get (1 ).getValue ());
999+ assertEquals ("dept" , insert .getPartitions ().get (2 ).getColumn ().getColumnName ());
1000+ assertNull (insert .getPartitions ().get (2 ).getValue ());
1001+
1002+ sqlStr = "INSERT OVERWRITE TABLE t PARTITION (a, b = '1', c) SELECT * FROM a" ;
1003+ insert = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr );
1004+ assertEquals (3 , insert .getPartitions ().size ());
1005+ assertEquals ("a" , insert .getPartitions ().get (0 ).getColumn ().getColumnName ());
1006+ assertNull (insert .getPartitions ().get (0 ).getValue ());
1007+ assertEquals ("b" , insert .getPartitions ().get (1 ).getColumn ().getColumnName ());
1008+ assertEquals ("'1'" , insert .getPartitions ().get (1 ).getValue ().toString ());
1009+ assertEquals ("c" , insert .getPartitions ().get (2 ).getColumn ().getColumnName ());
1010+ assertNull (insert .getPartitions ().get (2 ).getValue ());
1011+
1012+ sqlStr = "INSERT INTO TABLE t PARTITION (dtime = 20240403, region) SELECT * FROM a" ;
1013+ insert = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr );
1014+ assertEquals (2 , insert .getPartitions ().size ());
1015+ assertEquals ("dtime" , insert .getPartitions ().get (0 ).getColumn ().getColumnName ());
1016+ assertEquals ("20240403" , insert .getPartitions ().get (0 ).getValue ().toString ());
1017+ assertNull (insert .getPartitions ().get (1 ).getValue ());
1018+ assertFalse (insert .isOverwrite ());
1019+ }
1020+
9691021 @ ParameterizedTest
9701022 @ ValueSource (strings = {
9711023 "INSERT INTO mytable (foo) OVERRIDING SYSTEM VALUE VALUES (1)" ,
0 commit comments