|
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 |
| -import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed; |
34 | 37 | import static org.junit.jupiter.api.Assertions.*;
|
35 | 38 |
|
36 | 39 | public class AlterTest {
|
@@ -1093,41 +1096,54 @@ public void testIssue2090LockExclusive() throws JSQLParserException {
|
1093 | 1096 | assertEquals("EXCLUSIVE", lockExp.getLockOption());
|
1094 | 1097 | }
|
1095 | 1098 |
|
1096 |
| - @Test |
1097 |
| - public void testIssue2089() throws JSQLParserException { |
1098 |
| - 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 { |
1099 | 1103 | Statement stmt = CCJSqlParserUtil.parse(sql);
|
1100 |
| - assertTrue(stmt instanceof Alter); |
| 1104 | + assertTrue(stmt instanceof Alter, |
| 1105 | + "Expected instance of Alter but got: " + stmt.getClass().getSimpleName()); |
| 1106 | + |
1101 | 1107 | Alter alter = (Alter) stmt;
|
1102 | 1108 | assertEquals("test_table", alter.getTable().getFullyQualifiedName());
|
1103 | 1109 |
|
1104 | 1110 | List<AlterExpression> alterExpressions = alter.getAlterExpressions();
|
1105 |
| - assertNotNull(alterExpressions); |
1106 |
| - 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); |
1107 | 1113 |
|
1108 | 1114 | AlterExpression convertExp = alterExpressions.get(0);
|
1109 | 1115 | assertEquals(AlterOperation.CONVERT, convertExp.getOperation());
|
1110 |
| - assertEquals("utf8mb4", convertExp.getCharacterSet()); |
1111 |
| - assertNull(convertExp.getCollation()); |
1112 |
| - } |
1113 |
| - |
1114 |
| - @Test |
1115 |
| - public void testIssue2089WithCollation() throws JSQLParserException { |
1116 |
| - String sql = |
1117 |
| - "ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"; |
1118 |
| - Statement stmt = CCJSqlParserUtil.parse(sql); |
1119 |
| - assertTrue(stmt instanceof Alter); |
1120 |
| - Alter alter = (Alter) stmt; |
1121 |
| - assertEquals("test_table", alter.getTable().getFullyQualifiedName()); |
1122 | 1116 |
|
1123 |
| - List<AlterExpression> alterExpressions = alter.getAlterExpressions(); |
1124 |
| - assertNotNull(alterExpressions); |
1125 |
| - assertEquals(1, alterExpressions.size()); |
| 1117 | + assertEquals(expectedCharacterSet, convertExp.getCharacterSet(), |
| 1118 | + "CHARACTER SET mismatch for SQL: " + sql); |
| 1119 | + assertEquals(expectedCollation, convertExp.getCollation(), |
| 1120 | + "COLLATE mismatch for SQL: " + sql); |
| 1121 | + assertSqlCanBeParsedAndDeparsed(sql); |
| 1122 | + } |
1126 | 1123 |
|
1127 |
| - AlterExpression convertExp = alterExpressions.get(0); |
1128 |
| - assertEquals(AlterOperation.CONVERT, convertExp.getOperation()); |
1129 |
| - assertEquals("utf8mb4", convertExp.getCharacterSet()); |
1130 |
| - assertEquals("utf8mb4_general_ci", convertExp.getCollation()); |
| 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)); |
1131 | 1147 | }
|
1132 | 1148 |
|
1133 | 1149 | @Test
|
|
0 commit comments