private static String columnId(TableId tableId, String columnName) { return tableId.toString() + "." + columnName; } }
@Override public void rowsScanned(TableId tableId, long numRows) { rowsScanned.put(tableId.toString(), numRows); }
/** * Get all table names for all databases that are monitored whose events are captured by Debezium * * @return the array with the table names */ public String[] monitoredTablesAsStringArray() { final Collection<TableId> tables = tableIds(); String[] ret = new String[tables.size()]; int i = 0; for (TableId table: tables) { ret[i++] = table.toString(); } return ret; }
protected static String topicNameFromInsertStmt(String statement) { String qualifiedTableNameName = tableIdFromInsertStmt(statement).toString(); return qualifiedTableNameName.replaceAll("[ \"]", "_"); }
public Document toDocument() { Document document = Document.create(); document.setString("type", type.name()); document.setString("id", id.toString()); document.setDocument("table", toDocument(table)); return document; }
@Override public void enterAlterView(MySqlParser.AlterViewContext ctx) { if (!parser.skipViews()) { TableId tableId = parser.parseQualifiedTableId(ctx.fullId()); tableEditor = parser.databaseTables().editTable(tableId); if (tableEditor == null) { throw new ParsingException(null, "Trying to alter view " + tableId.toString() + ", which does not exist. Query:" + AntlrDdlParser.getText(ctx)); } // alter view will override existing columns for a new one tableEditor.columnNames().forEach(tableEditor::removeColumn); // create new columns just with specified name for now if (ctx.uidList() != null) { ctx.uidList().uid().stream().map(parser::parseName).forEach(columnName -> { tableEditor.addColumn(Column.editor().name(columnName).create()); }); } selectColumnsListener = new ViewSelectedColumnsParserListener(tableEditor, parser); listeners.add(selectColumnsListener); } super.enterAlterView(ctx); }
@Override public void enterAlterTable(MySqlParser.AlterTableContext ctx) { final TableId tableId = parser.parseQualifiedTableId(ctx.tableName().fullId()); if (!parser.getTableFilter().isIncluded(tableId)) { LOG.debug("Ignoring ALTER TABLE statement for non-whitelisted table {}", tableId); return; } tableEditor = parser.databaseTables().editTable(tableId); if (tableEditor == null) { throw new ParsingException(null, "Trying to alter table " + tableId.toString() + ", which does not exist. Query: " + getText(ctx)); } super.enterAlterTable(ctx); }
@Override public void enterAlterByModifyColumn(MySqlParser.AlterByModifyColumnContext ctx) { parser.runIfNotNull(() -> { String columnName = parser.parseName(ctx.uid(0)); Column column = tableEditor.columnWithName(columnName); if (column != null) { columnDefinitionListener = new ColumnDefinitionParserListener(tableEditor, column.edit(), parser.dataTypeResolver(), parser.getConverters()); listeners.add(columnDefinitionListener); } else { throw new ParsingException(null, "Trying to change column " + columnName + " in " + tableEditor.tableId().toString() + " table, which does not exist. Query: " + getText(ctx)); } }, tableEditor); super.enterAlterByModifyColumn(ctx); }
@Override public void enterAlterByRenameColumn(MySqlParser.AlterByRenameColumnContext ctx) { parser.runIfNotNull(() -> { String oldColumnName = parser.parseName(ctx.oldColumn); Column existingColumn = tableEditor.columnWithName(oldColumnName); if (existingColumn != null) { // DBZ-771 unset previously set default value, as it's not kept by MySQL; for any column modifications a new // default value (which could be the same) has to be provided by the column_definition which we'll parse later // on; only in 8.0 (not yet supported by this parser) columns can be renamed without repeating the full column // definition; so in fact it's arguably not correct to use edit() on the existing column to begin with, but // I'm going to leave this as is for now, to be prepared for the ability of updating column definitions in 8.0 ColumnEditor columnEditor = existingColumn.edit(); // columnEditor.unsetDefaultValue(); columnDefinitionListener = new ColumnDefinitionParserListener(tableEditor, columnEditor, parser.dataTypeResolver(), parser.getConverters()); listeners.add(columnDefinitionListener); } else { throw new ParsingException(null, "Trying to change column " + oldColumnName + " in " + tableEditor.tableId().toString() + " table, which does not exist. Query: " + getText(ctx)); } }, tableEditor); super.enterAlterByRenameColumn(ctx); }
@Override public void enterAlterByChangeColumn(MySqlParser.AlterByChangeColumnContext ctx) { parser.runIfNotNull(() -> { String oldColumnName = parser.parseName(ctx.oldColumn); Column existingColumn = tableEditor.columnWithName(oldColumnName); if (existingColumn != null) { // DBZ-771 unset previously set default value, as it's not kept by MySQL; for any column modifications a new // default value (which could be the same) has to be provided by the column_definition which we'll parse later // on; only in 8.0 (not yet supported by this parser) columns can be renamed without repeating the full column // definition; so in fact it's arguably not correct to use edit() on the existing column to begin with, but // I'm going to leave this as is for now, to be prepared for the ability of updating column definitions in 8.0 ColumnEditor columnEditor = existingColumn.edit(); columnEditor.unsetDefaultValue(); columnDefinitionListener = new ColumnDefinitionParserListener(tableEditor, columnEditor, parser.dataTypeResolver(), parser.getConverters()); listeners.add(columnDefinitionListener); } else { throw new ParsingException(null, "Trying to change column " + oldColumnName + " in " + tableEditor.tableId().toString() + " table, which does not exist. Query: " + getText(ctx)); } }, tableEditor); super.enterAlterByChangeColumn(ctx); }
@Override public void enterCreateIndex(MySqlParser.CreateIndexContext ctx) { if (ctx.UNIQUE() != null) { TableId tableId = parser.parseQualifiedTableId(ctx.tableName().fullId()); TableEditor tableEditor = parser.databaseTables().editTable(tableId); if (tableEditor != null) { if (!tableEditor.hasPrimaryKey()) { parser.parsePrimaryIndexColumnNames(ctx.indexColumnNames(), tableEditor); parser.signalCreateIndex(parser.parseName(ctx.uid()), null, ctx); } } else { throw new ParsingException(null, "Trying to create index on non existing table " + tableId.toString() + "." + "Query: " + getText(ctx)); } } super.enterCreateIndex(ctx); } }
private static String columnId(TableId tableId, String columnName) { return tableId.toString() + "." + columnName; } }
@Override public void rowsScanned(TableId tableId, long numRows) { rowsScanned.put(tableId.toString(), numRows); }
protected static String topicNameFromInsertStmt(String statement) { String qualifiedTableNameName = tableIdFromInsertStmt(statement).toString(); return qualifiedTableNameName.replaceAll("[ \"]", "_"); }
public Document toDocument() { Document document = Document.create(); document.setString("type", type.name()); document.setString("id", id.toString()); document.setDocument("table", toDocument(table)); return document; }