DBZ-2913 More various test fixes for MariaDB

This commit is contained in:
Chris Cranford 2023-10-17 21:57:40 -04:00 committed by Jiri Pechanec
parent 498409dcb6
commit f5313cd525
6 changed files with 32 additions and 14 deletions

View File

@ -176,17 +176,24 @@ protected void assertDdl(List<String> schemaChangesDdls) {
@NotNull
private static String getDdlString(MySqlDatabaseVersionResolver databaseVersionResolver) {
return databaseVersionResolver.getVersion().getMajor() < MYSQL8 ? "CREATE TABLE `b` (\n" +
" `pk` int(11) NOT NULL AUTO_INCREMENT,\n" +
" `aa` int(11) DEFAULT NULL,\n" +
" PRIMARY KEY (`pk`)\n" +
") ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=latin1"
: "CREATE TABLE `b` (\n" +
" `pk` int NOT NULL AUTO_INCREMENT,\n" +
" `aa` int DEFAULT NULL,\n" +
" PRIMARY KEY (`pk`)\n" +
") ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci";
boolean isMariaDB = databaseVersionResolver.isMariaDb();
if (isMariaDB || databaseVersionResolver.getVersion().getMajor() < MYSQL8) {
final StringBuilder sb = new StringBuilder("CREATE TABLE `b` (\n");
sb.append(" `pk` int(11) NOT NULL AUTO_INCREMENT,\n");
sb.append(" `aa` int(11) DEFAULT NULL,\n");
sb.append(" PRIMARY KEY (`pk`)\n");
sb.append(") ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=latin1");
if (isMariaDB) {
sb.append(" COLLATE=latin1_swedish_ci");
}
return sb.toString();
}
else {
return "CREATE TABLE `b` (\n" +
" `pk` int NOT NULL AUTO_INCREMENT,\n" +
" `aa` int DEFAULT NULL,\n" +
" PRIMARY KEY (`pk`)\n" +
") ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci";
}
}
}

View File

@ -253,6 +253,10 @@ public void updates() throws Exception {
if (snapshot.equals("false")) {
assertNotNull(query);
}
else if (MySqlTestConnection.isMariaDb()) {
assertNotNull(query);
assertEquals("incremental", snapshot);
}
else {
assertNull(query);
assertEquals("incremental", snapshot);

View File

@ -669,7 +669,7 @@ private void shouldConsumeAllEventsFromDatabaseUsingSnapshotByField(Field dbIncl
assertThat(persistedOffsetSource.binlogFilename()).isEqualTo(positionBeforeInserts.binlogFilename());
assertThat(persistedOffsetSource.binlogFilename()).isEqualTo(positionAfterInserts.binlogFilename());
final MySqlVersion mysqlVersion = MySqlTestConnection.forTestDatabase(DATABASE.getDatabaseName()).getMySqlVersion();
if (mysqlVersion == MySqlVersion.MYSQL_5_5 || mysqlVersion == MySqlVersion.MYSQL_5_6) {
if (mysqlVersion == MySqlVersion.MYSQL_5_5 || mysqlVersion == MySqlVersion.MYSQL_5_6 || mysqlVersion == MySqlVersion.MARIADB_11) {
// todo: for some reason on MySQL 5.6, the binlog position does not behave like it does on MySQL 5.7 - why?
assertThat(persistedOffsetSource.binlogPosition()).isGreaterThanOrEqualTo(positionBeforeInserts.binlogPosition());
}

View File

@ -46,7 +46,7 @@ public class MySqlGeometryIT extends AbstractConnectorTest {
@Before
public void beforeEach() {
stopConnector();
databaseDifferences = databaseGeoDifferences(MySqlTestConnection.isMySQL5());
databaseDifferences = databaseGeoDifferences(MySqlTestConnection.isMySQL5() || MySqlTestConnection.isMariaDb());
DATABASE = new UniqueDatabase("geometryit", databaseDifferences.geometryDatabaseName())
.withDbHistoryPath(SCHEMA_HISTORY_PATH);

View File

@ -5,6 +5,7 @@
*/
package io.debezium.connector.mysql;
import static io.debezium.junit.EqualityCheck.GREATER_THAN_OR_EQUAL;
import static io.debezium.junit.EqualityCheck.LESS_THAN;
import static org.assertj.core.api.Assertions.assertThat;
@ -27,6 +28,7 @@
* @author Chris Cranford
*/
@SkipWhenDatabaseVersion(check = LESS_THAN, major = 5, minor = 7, reason = "Generated values were not added until MySQL 5.7")
@SkipWhenDatabaseVersion(check = GREATER_THAN_OR_EQUAL, major = 11, reason = "MariaDB does not allow you to specify AS and NOT NULL")
public class MysqlDefaultGeneratedValueIT extends AbstractConnectorTest {
// 4 meta events (set character_set etc.) and then 15 tables with 3 events each (drop DDL, create DDL, insert)

View File

@ -15,6 +15,11 @@
*/
public class MySqlDatabaseVersionResolver implements DatabaseVersionResolver {
public boolean isMariaDb() {
return MySqlTestConnection.forTestDatabase("mysql")
.getMySqlVersion() == MySqlTestConnection.MySqlVersion.MARIADB_11;
}
public DatabaseVersion getVersion() {
final String versionString = MySqlTestConnection.forTestDatabase("mysql").getMySqlVersionString();