Search in sources :

Example 16 with TableId

use of io.debezium.relational.TableId in project debezium by debezium.

the class MySqlDdlParserTest method shouldParseCreateTableStatementWithMultipleColumnsForPrimaryKey.

@Test
public void shouldParseCreateTableStatementWithMultipleColumnsForPrimaryKey() {
    String ddl = "CREATE TABLE shop (" + " id BIGINT(20) NOT NULL AUTO_INCREMENT," + " version BIGINT(20) NOT NULL," + " name VARCHAR(255) NOT NULL," + " owner VARCHAR(255) NOT NULL," + " phone_number VARCHAR(255) NOT NULL," + " primary key (id, name)" + " );";
    parser.parse(ddl, tables);
    assertThat(tables.size()).isEqualTo(1);
    Table foo = tables.forTable(new TableId(null, null, "shop"));
    assertThat(foo).isNotNull();
    assertThat(foo.columnNames()).containsExactly("id", "version", "name", "owner", "phone_number");
    assertThat(foo.primaryKeyColumnNames()).containsExactly("id", "name");
    assertColumn(foo, "id", "BIGINT", Types.BIGINT, 20, -1, false, true, true);
    assertColumn(foo, "version", "BIGINT", Types.BIGINT, 20, -1, false, false, false);
    assertColumn(foo, "name", "VARCHAR", Types.VARCHAR, 255, -1, false, false, false);
    assertColumn(foo, "owner", "VARCHAR", Types.VARCHAR, 255, -1, false, false, false);
    assertColumn(foo, "phone_number", "VARCHAR", Types.VARCHAR, 255, -1, false, false, false);
    parser.parse("DROP TABLE shop", tables);
    assertThat(tables.size()).isEqualTo(0);
}
Also used : TableId(io.debezium.relational.TableId) Table(io.debezium.relational.Table) Test(org.junit.Test)

Example 17 with TableId

use of io.debezium.relational.TableId in project debezium by debezium.

the class MySqlDdlParserTest method shouldParseCreateTableWithEnumAndSetColumns.

@Test
public void shouldParseCreateTableWithEnumAndSetColumns() {
    String ddl = "CREATE TABLE t ( c1 ENUM('a','b','c') NOT NULL, c2 SET('a','b','c') NULL);";
    parser.parse(ddl, tables);
    assertThat(tables.size()).isEqualTo(1);
    Table t = tables.forTable(new TableId(null, null, "t"));
    assertThat(t).isNotNull();
    assertThat(t.columnNames()).containsExactly("c1", "c2");
    assertThat(t.primaryKeyColumnNames()).isEmpty();
    assertColumn(t, "c1", "ENUM", Types.CHAR, 1, -1, false, false, false);
    assertColumn(t, "c2", "SET", Types.CHAR, 5, -1, true, false, false);
    assertThat(t.columnWithName("c1").position()).isEqualTo(1);
    assertThat(t.columnWithName("c2").position()).isEqualTo(2);
}
Also used : TableId(io.debezium.relational.TableId) Table(io.debezium.relational.Table) Test(org.junit.Test)

Example 18 with TableId

use of io.debezium.relational.TableId in project debezium by debezium.

the class MySqlDdlParserTest method shouldParseStatementForDbz142.

@Test
public void shouldParseStatementForDbz142() {
    parser.parse(readFile("ddl/mysql-dbz-142.ddl"), tables);
    Testing.print(tables);
    assertThat(tables.size()).isEqualTo(2);
    assertThat(listener.total()).isEqualTo(2);
    Table t = tables.forTable(new TableId(null, null, "nvarchars"));
    assertColumn(t, "c1", "NVARCHAR", Types.NVARCHAR, 255, "utf8", true);
    assertColumn(t, "c2", "NATIONAL VARCHAR", Types.NVARCHAR, 255, "utf8", true);
    assertColumn(t, "c3", "NCHAR VARCHAR", Types.NVARCHAR, 255, "utf8", true);
    assertColumn(t, "c4", "NATIONAL CHARACTER VARYING", Types.NVARCHAR, 255, "utf8", true);
    assertColumn(t, "c5", "NATIONAL CHAR VARYING", Types.NVARCHAR, 255, "utf8", true);
    Table t2 = tables.forTable(new TableId(null, null, "nchars"));
    assertColumn(t2, "c1", "NATIONAL CHARACTER", Types.NCHAR, 10, "utf8", true);
    assertColumn(t2, "c2", "NCHAR", Types.NCHAR, 10, "utf8", true);
}
Also used : TableId(io.debezium.relational.TableId) Table(io.debezium.relational.Table) Test(org.junit.Test)

Example 19 with TableId

use of io.debezium.relational.TableId in project debezium by debezium.

the class MySqlDdlParserTest method shouldParseAlterTableStatementAddColumns.

@Test
public void shouldParseAlterTableStatementAddColumns() {
    String ddl = "CREATE TABLE t ( col1 VARCHAR(25) ); ";
    parser.parse(ddl, tables);
    assertThat(tables.size()).isEqualTo(1);
    Table t = tables.forTable(new TableId(null, null, "t"));
    assertThat(t).isNotNull();
    assertThat(t.columnNames()).containsExactly("col1");
    assertThat(t.primaryKeyColumnNames()).isEmpty();
    assertColumn(t, "col1", "VARCHAR", Types.VARCHAR, 25, -1, true, false, false);
    assertThat(t.columnWithName("col1").position()).isEqualTo(1);
    ddl = "ALTER TABLE t ADD col2 VARCHAR(50) NOT NULL;";
    parser.parse(ddl, tables);
    Table t2 = tables.forTable(new TableId(null, null, "t"));
    assertThat(t2).isNotNull();
    assertThat(t2.columnNames()).containsExactly("col1", "col2");
    assertThat(t2.primaryKeyColumnNames()).isEmpty();
    assertColumn(t2, "col1", "VARCHAR", Types.VARCHAR, 25, -1, true, false, false);
    assertColumn(t2, "col2", "VARCHAR", Types.VARCHAR, 50, -1, false, false, false);
    assertThat(t2.columnWithName("col1").position()).isEqualTo(1);
    assertThat(t2.columnWithName("col2").position()).isEqualTo(2);
    ddl = "ALTER TABLE t ADD col3 FLOAT NOT NULL AFTER col1;";
    parser.parse(ddl, tables);
    Table t3 = tables.forTable(new TableId(null, null, "t"));
    assertThat(t3).isNotNull();
    assertThat(t3.columnNames()).containsExactly("col1", "col3", "col2");
    assertThat(t3.primaryKeyColumnNames()).isEmpty();
    assertColumn(t3, "col1", "VARCHAR", Types.VARCHAR, 25, -1, true, false, false);
    assertColumn(t3, "col3", "FLOAT", Types.FLOAT, -1, -1, false, false, false);
    assertColumn(t3, "col2", "VARCHAR", Types.VARCHAR, 50, -1, false, false, false);
    assertThat(t3.columnWithName("col1").position()).isEqualTo(1);
    assertThat(t3.columnWithName("col3").position()).isEqualTo(2);
    assertThat(t3.columnWithName("col2").position()).isEqualTo(3);
}
Also used : TableId(io.debezium.relational.TableId) Table(io.debezium.relational.Table) Test(org.junit.Test)

Example 20 with TableId

use of io.debezium.relational.TableId in project debezium by debezium.

the class MySqlDdlParserTest method shouldParseAlterTableStatementWithColumnNamedColumnWithColumnWord.

@Test
@FixFor({ "DBZ-408", "DBZ-412", "DBZ-524" })
public void shouldParseAlterTableStatementWithColumnNamedColumnWithColumnWord() {
    String ddl = "CREATE TABLE `mytable` ( " + System.lineSeparator() + " `def` int(11) unsigned NOT NULL AUTO_INCREMENT, " + System.lineSeparator() + " PRIMARY KEY (`def`) " + System.lineSeparator() + " ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
    parser.parse(ddl, tables);
    ddl = "ALTER TABLE `mytable` " + "ADD COLUMN `column` varchar(255) NOT NULL DEFAULT '', " + "ADD COLUMN `ghi` varchar(255) NOT NULL DEFAULT '', " + "ADD COLUMN jkl varchar(255) NOT NULL DEFAULT '' ;";
    parser.parse(ddl, tables);
    assertThat(tables.size()).isEqualTo(1);
    Table mytable = tables.forTable(new TableId(null, null, "mytable"));
    assertThat(mytable).isNotNull();
    assertColumn(mytable, "column", "VARCHAR", Types.VARCHAR, 255, -1, false, false, false);
    assertColumn(mytable, "ghi", "VARCHAR", Types.VARCHAR, 255, -1, false, false, false);
    assertColumn(mytable, "jkl", "VARCHAR", Types.VARCHAR, 255, -1, false, false, false);
    ddl = "ALTER TABLE `mytable` " + "MODIFY COLUMN `column` varchar(1023) NOT NULL DEFAULT '';";
    parser.parse(ddl, tables);
    ddl = "ALTER TABLE `mytable` " + "ALTER COLUMN `column` DROP DEFAULT;";
    parser.parse(ddl, tables);
    ddl = "ALTER TABLE `mytable` " + "CHANGE COLUMN `column` newcol varchar(1023) NOT NULL DEFAULT '';";
    parser.parse(ddl, tables);
    ddl = "ALTER TABLE `mytable` " + "CHANGE COLUMN newcol `column` varchar(255) NOT NULL DEFAULT '';";
    parser.parse(ddl, tables);
    assertThat(tables.size()).isEqualTo(1);
    mytable = tables.forTable(new TableId(null, null, "mytable"));
    assertThat(mytable).isNotNull();
    assertColumn(mytable, "column", "VARCHAR", Types.VARCHAR, 255, -1, false, false, false);
    assertColumn(mytable, "ghi", "VARCHAR", Types.VARCHAR, 255, -1, false, false, false);
    assertColumn(mytable, "jkl", "VARCHAR", Types.VARCHAR, 255, -1, false, false, false);
    ddl = "ALTER TABLE `mytable` " + "DROP COLUMN `column`, " + "DROP COLUMN `ghi`, " + "DROP COLUMN jkl RESTRICT";
    parser.parse(ddl, tables);
    mytable = tables.forTable(new TableId(null, null, "mytable"));
    List<String> mytableColumnNames = mytable.columns().stream().map(Column::name).collect(Collectors.toList());
    assertThat(mytableColumnNames).containsOnly("def");
}
Also used : TableId(io.debezium.relational.TableId) Table(io.debezium.relational.Table) Test(org.junit.Test) FixFor(io.debezium.doc.FixFor)

Aggregations

TableId (io.debezium.relational.TableId)63 Table (io.debezium.relational.Table)39 Test (org.junit.Test)34 FixFor (io.debezium.doc.FixFor)18 Column (io.debezium.relational.Column)7 TableEditor (io.debezium.relational.TableEditor)7 ArrayList (java.util.ArrayList)4 ConnectException (org.apache.kafka.connect.errors.ConnectException)4 TableSchema (io.debezium.relational.TableSchema)3 ParsingException (io.debezium.text.ParsingException)3 ResultSet (java.sql.ResultSet)3 SQLException (java.sql.SQLException)3 HashSet (java.util.HashSet)3 List (java.util.List)3 SourceRecord (org.apache.kafka.connect.source.SourceRecord)3 Predicates (io.debezium.function.Predicates)2 ColumnEditor (io.debezium.relational.ColumnEditor)2 Marker (io.debezium.text.TokenStream.Marker)2 Strings (io.debezium.util.Strings)2 Connection (java.sql.Connection)2