/** * Refreshes the schema content with a table constructed externally * * @param table constructed externally - typically from decoder metadata */ protected void refresh(Table table) { // overwrite (add or update) or views of the tables tables().overwriteTable(table); // and refresh the schema refreshSchema(table.id()); }
Collections.sort(columns); tables.overwriteTable(tableEntry.getKey(), columns, pkColumnNames, defaultCharsetName);
@Override public void applySchemaChange(SchemaChangeEvent schemaChange) { LOGGER.debug("Applying schema change event {}", schemaChange); // just a single table per DDL event for SQL Server Table table = schemaChange.getTables().iterator().next(); buildAndRegisterSchema(table); tables().overwriteTable(table); TableChanges tableChanges = null; if (schemaChange.getType() == SchemaChangeEventType.CREATE) { tableChanges = new TableChanges(); tableChanges.create(table); } record(schemaChange, tableChanges); }
public Tables subset(TableFilter filter) { if (filter == null) return this; return lock.read(() -> { Tables result = new Tables(tableIdCaseInsensitive); tablesByTableId.forEach((tableId, table) -> { if (filter.isIncluded(tableId)) { result.overwriteTable(table); } }); return result; }); }
@Override public void exitAlterTable(MySqlParser.AlterTableContext ctx) { parser.runIfNotNull(() -> { listeners.remove(columnDefinitionListener); parser.databaseTables().overwriteTable(tableEditor.create()); parser.signalAlterTable(tableEditor.tableId(), null, ctx.getParent()); }, tableEditor); super.exitAlterTable(ctx); }
@Override public void exitColumnCreateTable(MySqlParser.ColumnCreateTableContext ctx) { parser.runIfNotNull(() -> { // Make sure that the table's character set has been set ... if (!tableEditor.hasDefaultCharsetName()) { tableEditor.setDefaultCharsetName(parser.currentDatabaseCharset()); } listeners.remove(columnDefinitionListener); columnDefinitionListener = null; // remove column definition parser listener parser.databaseTables().overwriteTable(tableEditor.create()); parser.signalCreateTable(tableEditor.tableId(), ctx); }, tableEditor); super.exitColumnCreateTable(ctx); }
/** * Refreshes this schema's content for a particular table * * @param connection a {@link JdbcConnection} instance, never {@code null} * @param tableId the table identifier; may not be null * @param refreshToastableColumns refreshes the cache of toastable columns for `tableId`, if {@code true} * @throws SQLException if there is a problem refreshing the schema from the database server */ protected void refresh(PostgresConnection connection, TableId tableId, boolean refreshToastableColumns) throws SQLException { Tables temp = new Tables(); connection.readSchema(temp, null, null, tableId::equals, null, true); // the table could be deleted before the event was processed if (temp.size() == 0) { LOGGER.warn("Refresh of {} was requested but the table no longer exists", tableId); return; } // overwrite (add or update) or views of the tables tables().overwriteTable(temp.forTable(tableId)); // refresh the schema refreshSchema(tableId); if (refreshToastableColumns) { // and refresh toastable columns info refreshToastableColumnsMap(connection, tableId); } }
for (TableChange entry : changes) { if (entry.getType() == TableChangeType.CREATE || entry.getType() == TableChangeType.ALTER) { schema.overwriteTable(entry.getTable());
@Override public void exitAlterView(MySqlParser.AlterViewContext ctx) { parser.runIfNotNull(() -> { tableEditor.addColumns(selectColumnsListener.getSelectedColumns()); // Make sure that the table's character set has been set ... if (!tableEditor.hasDefaultCharsetName()) { tableEditor.setDefaultCharsetName(parser.currentDatabaseCharset()); } parser.databaseTables().overwriteTable(tableEditor.create()); listeners.remove(selectColumnsListener); }, tableEditor); // signal view even if it was skipped parser.signalAlterView(parser.parseQualifiedTableId(ctx.fullId()), null, ctx); super.exitAlterView(ctx); } }
@Override public void exitCreateView(MySqlParser.CreateViewContext ctx) { parser.runIfNotNull(() -> { tableEditor.addColumns(selectColumnsListener.getSelectedColumns()); // Make sure that the table's character set has been set ... if (!tableEditor.hasDefaultCharsetName()) { tableEditor.setDefaultCharsetName(parser.currentDatabaseCharset()); } parser.databaseTables().overwriteTable(tableEditor.create()); listeners.remove(selectColumnsListener); }, tableEditor); // signal view even if it was skipped parser.signalCreateView(parser.parseQualifiedTableId(ctx.fullId()), ctx); super.exitCreateView(ctx); } }
databaseTables.overwriteTable(table.create());
protected void parseCreateIndex(Marker start) { boolean unique = tokens.canConsume("UNIQUE"); tokens.canConsumeAnyOf("FULLTEXT", "SPATIAL"); tokens.consume("INDEX"); String indexName = tokens.consume(); // index name if (tokens.matches("USING")) { parseIndexType(start); } TableId tableId = null; if (tokens.canConsume("ON")) { // Usually this is required, but in some cases ON is not required tableId = parseQualifiedTableName(start); } if (unique && tableId != null) { // This is a unique index, and we can mark the index's columns as the primary key iff there is not already // a primary key on the table. (Should a PK be created later via an alter, then it will overwrite this.) TableEditor table = databaseTables.editTable(tableId); if (table != null && !table.hasPrimaryKey()) { List<String> names = parseIndexColumnNames(start); if (table.columns().stream().allMatch(Column::isRequired)) { databaseTables.overwriteTable(table.setPrimaryKeyNames(names).create()); } } } // We don't care about any other statements or the rest of this statement ... consumeRemainingStatement(start); // TODO fix: signal should be send only when some changes on table are made signalCreateIndex(indexName, tableId, start); debugParsed(start); }
@Override public void exitCopyCreateTable(MySqlParser.CopyCreateTableContext ctx) { TableId tableId = parser.parseQualifiedTableId(ctx.tableName(0).fullId()); TableId originalTableId = parser.parseQualifiedTableId(ctx.tableName(1).fullId()); Table original = parser.databaseTables().forTable(originalTableId); if (original != null) { parser.databaseTables().overwriteTable(tableId, original.columns(), original.primaryKeyColumnNames(), original.defaultCharsetName()); parser.signalCreateTable(tableId, ctx); } super.exitCopyCreateTable(ctx); }
parsePartitionOptions(start, table); databaseTables.overwriteTable(table.create()); if (newTableName.get() != null) {
databaseTables.overwriteTable(table.create()); signalCreateView(tableId, start);
Table original = databaseTables.forTable(originalId); if (original != null) { databaseTables.overwriteTable(tableId, original.columns(), original.primaryKeyColumnNames(), original.defaultCharsetName()); databaseTables.overwriteTable(table.create()); signalCreateTable(tableId, start); debugParsed(start);
databaseTables.overwriteTable(table.create());
databaseTables.overwriteTable(table.create()); signalCreateTable(tableId, start);
/** * Refreshes the schema content with a table constructed externally * * @param table constructed externally - typically from decoder metadata */ protected void refresh(Table table) { // overwrite (add or update) or views of the tables tables().overwriteTable(table); // and refresh the schema refreshSchema(table.id()); }
public Tables subset(TableFilter filter) { if (filter == null) return this; return lock.read(() -> { Tables result = new Tables(tableIdCaseInsensitive); tablesByTableId.forEach((tableId, table) -> { if (filter.isIncluded(tableId)) { result.overwriteTable(table); } }); return result; }); }