|
24 | 24 | import net.sf.jsqlparser.statement.create.table.*; |
25 | 25 | import net.sf.jsqlparser.statement.create.table.Index.ColumnParams; |
26 | 26 | import org.junit.jupiter.api.Test; |
| 27 | +import org.junit.jupiter.params.ParameterizedTest; |
| 28 | +import org.junit.jupiter.params.provider.Arguments; |
| 29 | +import org.junit.jupiter.params.provider.MethodSource; |
27 | 30 |
|
28 | 31 | import java.util.Arrays; |
29 | 32 | import java.util.Collections; |
30 | 33 | import java.util.List; |
| 34 | +import java.util.stream.Stream; |
31 | 35 |
|
32 | 36 | import static net.sf.jsqlparser.test.TestUtils.*; |
33 | 37 | import static org.junit.jupiter.api.Assertions.*; |
@@ -834,7 +838,7 @@ public void testAlterTableDefaultValueTrueIssue926() throws JSQLParserException |
834 | 838 | } |
835 | 839 |
|
836 | 840 | private void assertReferentialActionOnConstraint(Alter parsed, Action onUpdate, |
837 | | - Action onDelete) { |
| 841 | + Action onDelete) { |
838 | 842 | AlterExpression alterExpression = parsed.getAlterExpressions().get(0); |
839 | 843 | ForeignKeyIndex index = (ForeignKeyIndex) alterExpression.getIndex(); |
840 | 844 |
|
@@ -1092,45 +1096,56 @@ public void testIssue2090LockExclusive() throws JSQLParserException { |
1092 | 1096 | assertEquals("EXCLUSIVE", lockExp.getLockOption()); |
1093 | 1097 | } |
1094 | 1098 |
|
1095 | | - @Test |
1096 | | - public void testIssue2089() throws JSQLParserException { |
1097 | | - String sql = "ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4"; |
| 1099 | + @ParameterizedTest |
| 1100 | + @MethodSource("provideMySQLConvertTestCases") |
| 1101 | + public void testIssue2089(String sql, String expectedCharacterSet, String expectedCollation) |
| 1102 | + throws JSQLParserException { |
1098 | 1103 | Statement stmt = CCJSqlParserUtil.parse(sql); |
1099 | | - assertTrue(stmt instanceof Alter); |
1100 | | - Alter alter = (Alter) stmt; |
1101 | | - assertEquals("test_table", alter.getTable().getFullyQualifiedName()); |
1102 | | - |
1103 | | - List<AlterExpression> alterExpressions = alter.getAlterExpressions(); |
1104 | | - assertNotNull(alterExpressions); |
1105 | | - assertEquals(1, alterExpressions.size()); |
1106 | | - |
1107 | | - AlterExpression convertExp = alterExpressions.get(0); |
1108 | | - assertEquals(AlterOperation.CONVERT, convertExp.getOperation()); |
1109 | | - assertEquals("utf8mb4", convertExp.getCharacterSet()); |
1110 | | - assertNull(convertExp.getCollation()); |
1111 | | - } |
| 1104 | + assertTrue(stmt instanceof Alter, |
| 1105 | + "Expected instance of Alter but got: " + stmt.getClass().getSimpleName()); |
1112 | 1106 |
|
1113 | | - @Test |
1114 | | - public void testIssue2089ConvertWithCollation() throws JSQLParserException { |
1115 | | - String sql = |
1116 | | - "ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"; |
1117 | | - Statement stmt = CCJSqlParserUtil.parse(sql); |
1118 | | - assertTrue(stmt instanceof Alter); |
1119 | 1107 | Alter alter = (Alter) stmt; |
1120 | 1108 | assertEquals("test_table", alter.getTable().getFullyQualifiedName()); |
1121 | 1109 |
|
1122 | 1110 | List<AlterExpression> alterExpressions = alter.getAlterExpressions(); |
1123 | | - assertNotNull(alterExpressions); |
1124 | | - assertEquals(1, alterExpressions.size()); |
| 1111 | + assertNotNull(alterExpressions, "Alter expressions should not be null for SQL: " + sql); |
| 1112 | + assertEquals(1, alterExpressions.size(), "Expected 1 alter expression for SQL: " + sql); |
1125 | 1113 |
|
1126 | 1114 | AlterExpression convertExp = alterExpressions.get(0); |
1127 | 1115 | assertEquals(AlterOperation.CONVERT, convertExp.getOperation()); |
1128 | | - assertEquals("utf8mb4", convertExp.getCharacterSet()); |
1129 | | - assertEquals("utf8mb4_general_ci", convertExp.getCollation()); |
1130 | 1116 |
|
| 1117 | + assertEquals(expectedCharacterSet, convertExp.getCharacterSet(), |
| 1118 | + "CHARACTER SET mismatch for SQL: " + sql); |
| 1119 | + assertEquals(expectedCollation, convertExp.getCollation(), |
| 1120 | + "COLLATE mismatch for SQL: " + sql); |
1131 | 1121 | assertSqlCanBeParsedAndDeparsed(sql); |
1132 | 1122 | } |
1133 | 1123 |
|
| 1124 | + private static Stream<Arguments> provideMySQLConvertTestCases() { |
| 1125 | + return Stream.of( |
| 1126 | + Arguments.of("ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4", "utf8mb4", |
| 1127 | + null), |
| 1128 | + Arguments.of( |
| 1129 | + "ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", |
| 1130 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1131 | + Arguments.of( |
| 1132 | + "ALTER TABLE test_table DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", |
| 1133 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1134 | + Arguments.of( |
| 1135 | + "ALTER TABLE test_table DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci", |
| 1136 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1137 | + Arguments.of( |
| 1138 | + "ALTER TABLE test_table CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", |
| 1139 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1140 | + Arguments.of( |
| 1141 | + "ALTER TABLE test_table CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci", |
| 1142 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1143 | + Arguments.of("ALTER TABLE test_table DEFAULT CHARACTER SET utf8mb4", "utf8mb4", |
| 1144 | + null), |
| 1145 | + Arguments.of("ALTER TABLE test_table DEFAULT CHARACTER SET = utf8mb4", "utf8mb4", |
| 1146 | + null)); |
| 1147 | + } |
| 1148 | + |
1134 | 1149 | @Test |
1135 | 1150 | public void testIssue2106AlterTableAddPartition1() throws JSQLParserException { |
1136 | 1151 | String sql = "ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN (2002));"; |
|
0 commit comments