Search in sources :

Example 16 with Column

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

the class DdlParserSql2003 method parseAlterTable.

protected void parseAlterTable(Marker start) {
    tokens.canConsume("IGNORE");
    tokens.consume("TABLE");
    TableId tableId = parseQualifiedTableName(start);
    TableEditor table = databaseTables.editOrCreateTable(tableId);
    if (tokens.matches("ADD", "CONSTRAINT") || tokens.matches("ADD", "UNIQUE") || tokens.matches("ADD", "PRIMARY") || tokens.matches("ADD", "FOREIGN") || tokens.matches("ADD", "CHECK")) {
        tokens.consume("ADD");
        parseTableConstraintDefinition(start, table);
    } else if (tokens.canConsume("ADD", "COLUMN") || tokens.canConsume("ADD")) {
        // Adding a column ...
        String columnName = tokens.consume();
        ColumnEditor column = Column.editor().name(columnName);
        AtomicBoolean isPrimaryKey = new AtomicBoolean(false);
        parseColumnDefinition(start, columnName, tokens, table, column, isPrimaryKey);
        // Update the table ...
        Column newColumnDefn = column.create();
        table.addColumn(newColumnDefn);
        if (isPrimaryKey.get()) {
            table.setPrimaryKeyNames(newColumnDefn.name());
        }
    } else if (tokens.canConsume("ALTER", "COLUMN") || tokens.canConsume("ALTER")) {
        // Altering a column ...
        String columnName = tokens.consume();
        Column existingColumn = table.columnWithName(columnName);
        ColumnEditor column = existingColumn != null ? existingColumn.edit() : Column.editor().name(columnName);
        parseAlterColumn(start, column);
        // Update the table ...
        Column newColumnDefn = column.create();
        table.setColumns(newColumnDefn);
    } else if (tokens.matches("DROP", "CONSTRAINT")) {
        parseDropTableConstraint(start, table);
    } else if (tokens.canConsume("DROP", "COLUMN") || tokens.canConsume("DROP")) {
        parseDropColumn(start, table);
    }
    databaseTables.overwriteTable(table.create());
    // rename is not supported
    signalAlterTable(tableId, null, start);
}
Also used : TableId(io.debezium.relational.TableId) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Column(io.debezium.relational.Column) ColumnEditor(io.debezium.relational.ColumnEditor) TableEditor(io.debezium.relational.TableEditor)

Example 17 with Column

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

the class DdlParserSql2003 method parseTableElement.

protected void parseTableElement(Marker start, TableEditor table) {
    if (tokens.matchesAnyOf("CONSTRAINT", "UNIQUE", "PRIMARY", "FOREIGN", "CHECK")) {
        parseTableConstraintDefinition(start, table);
    } else if (tokens.matches("LIKE")) {
        parseTableLikeClause(start, table);
    } else if (tokens.matches("REF", "IS")) {
        parseSelfReferencingColumnSpec(start, table);
    } else {
        // Obtain the column editor ...
        String columnName = tokens.consume();
        Column existingColumn = table.columnWithName(columnName);
        ColumnEditor column = existingColumn != null ? existingColumn.edit() : Column.editor().name(columnName);
        AtomicBoolean isPrimaryKey = new AtomicBoolean(false);
        if (tokens.matches("WITH", "OPTIONS")) {
            parseColumnOptions(start, columnName, tokens, column);
        } else {
            parseColumnDefinition(start, columnName, tokens, table, column, isPrimaryKey);
        }
        // Update the table ...
        Column newColumnDefn = column.create();
        table.addColumns(newColumnDefn);
        if (isPrimaryKey.get()) {
            table.setPrimaryKeyNames(newColumnDefn.name());
        }
    }
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Column(io.debezium.relational.Column) ColumnEditor(io.debezium.relational.ColumnEditor)

Aggregations

Column (io.debezium.relational.Column)17 TableId (io.debezium.relational.TableId)7 Table (io.debezium.relational.Table)6 List (java.util.List)5 ColumnEditor (io.debezium.relational.ColumnEditor)4 ArrayList (java.util.ArrayList)4 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)4 TableEditor (io.debezium.relational.TableEditor)3 ValueConverter (io.debezium.relational.ValueConverter)3 Strings (io.debezium.util.Strings)3 SQLException (java.sql.SQLException)3 Immutable (io.debezium.annotation.Immutable)2 Json (io.debezium.data.Json)2 Predicates (io.debezium.function.Predicates)2 JdbcValueConverters (io.debezium.jdbc.JdbcValueConverters)2 TemporalPrecisionMode (io.debezium.jdbc.TemporalPrecisionMode)2 Marker (io.debezium.text.TokenStream.Marker)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)2 BigDecimal (java.math.BigDecimal)2 Collections (java.util.Collections)2