Class MySqlSchema
- All Implemented Interfaces:
DatabaseSchema<TableId>,AutoCloseable
table definitions and the Kafka Connect Schemas for each table, where the
Schema excludes any columns that have been specified in the
configuration.
The history is changed by applying DDL
statements, and every change is persisted as defined in the supplied MySQL
connector configuration. This component can be reconstructed (e.g., on connector restart) and the history
loaded from persisted storage.
Note that when applying DDL statements, the
caller is able to supply a consumer function that will be called with the DDL
statements and the database to which they apply, grouped by database names. However, these will only be called based when the
databases are included by the database filters defined in the MySQL connector configuration.
- Author:
- Randall Hauch
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final DatabaseHistoryprivate final DdlChangesprivate final DdlParserprivate final Filtersprivate final HistoryRecordComparatorprivate static final org.slf4j.Loggerprivate booleanprivate final booleanprivate final booleanFields inherited from interface io.debezium.schema.DatabaseSchema
NO_CAPTURED_DATA_COLLECTIONS_WARNING -
Constructor Summary
ConstructorsConstructorDescriptionMySqlSchema(MySqlConnectorConfig configuration, Predicate<String> gtidFilter, boolean tableIdCaseInsensitive, TopicSelector<TableId> topicSelector, Filters tableFilters) Create a schema component given the suppliedMySQL connector configuration. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidappendCreateTableStatement(StringBuilder sb, Table table) protected voidappendDropTableStatement(StringBuilder sb, TableId tableId) booleanapplyDdl(SourceInfo source, String databaseName, String ddlStatements, DdlChanges.DatabaseStatementStringConsumer statementConsumer) Apply the supplied DDL statements to this database schema and record the history.String[]Get all table names for all databases that are monitored whose events are captured by Debeziumfilters()Get thedatabase and table filtersdefined by the configuration.private static MySqlValueConvertersgetValueConverters(MySqlConnectorConfig configuration) booleanReturn true if the database history entity existsGet the information about where the DDL statement history is recorded.voidInitialize permanent storage for database historybooleanisGlobalSetVariableStatement(String ddl, String databaseName) booleanbooleanDecide whether events should be captured for a given tablevoidloadHistory(SourceInfo startingPoint) Load the database schema information using the previously-recorded history, and stop reading the history when the the history reaches the supplied starting point.voidDiscard any currently-cached schemas and rebuild them using the filters.voidsetSystemVariables(Map<String, String> variables) Set the system variables on the DDL parser.voidshutdown()Stop recording history and release any resources acquired sincestart().voidstart()Start by acquiring resources needed to persist the database historyGet the system variables as known by the DDL parser.booleanMethods inherited from class io.debezium.relational.RelationalDatabaseSchema
assureNonEmptySchema, buildAndRegisterSchema, clearSchemas, close, getTableFilter, isHistorized, refresh, refreshSchema, removeSchema, schemaFor, tableFor, tableIds, tables
-
Field Details
-
logger
private static final org.slf4j.Logger logger -
ignoredQueryStatements
-
ddlParser
-
filters
-
dbHistory
-
ddlChanges
-
historyComparator
-
skipUnparseableDDL
private final boolean skipUnparseableDDL -
storeOnlyCapturedTablesDdl
private final boolean storeOnlyCapturedTablesDdl -
recoveredTables
private boolean recoveredTables
-
-
Constructor Details
-
MySqlSchema
public MySqlSchema(MySqlConnectorConfig configuration, Predicate<String> gtidFilter, boolean tableIdCaseInsensitive, TopicSelector<TableId> topicSelector, Filters tableFilters) Create a schema component given the suppliedMySQL connector configuration.- Parameters:
configuration- the connector configuration, which is presumed to be validgtidFilter- the predicate function that should be applied to GTID sets in database history, and which returnstrueif a GTID source is to be included, orfalseif a GTID source is to be excluded; may be null if not neededtableIdCaseInsensitive- true if table lookup ignores letter case
-
-
Method Details
-
getValueConverters
-
historyComparator
-
start
public void start()Start by acquiring resources needed to persist the database history -
shutdown
public void shutdown()Stop recording history and release any resources acquired sincestart(). -
filters
Get thedatabase and table filtersdefined by the configuration.- Returns:
- the filters; never null
-
capturedTablesAsStringArray
Get all table names for all databases that are monitored whose events are captured by Debezium- Returns:
- the array with the table names
-
isTableCaptured
Decide whether events should be captured for a given table- Parameters:
id- the fully-qualified table identifier; may be null- Returns:
- true if events from the table are captured
-
historyLocation
Get the information about where the DDL statement history is recorded.- Returns:
- the history description; never null
-
setSystemVariables
Set the system variables on the DDL parser.- Parameters:
variables- the system variables; may not be null but may be empty
-
systemVariables
Get the system variables as known by the DDL parser.- Returns:
- the system variables; never null
-
appendDropTableStatement
-
appendCreateTableStatement
-
loadHistory
Load the database schema information using the previously-recorded history, and stop reading the history when the the history reaches the supplied starting point.- Parameters:
startingPoint- the source information with the currentSourceInfo.partition()andoffsetat which the database schemas are to reflect; may not be null
-
historyExists
public boolean historyExists()Return true if the database history entity exists -
intializeHistoryStorage
public void intializeHistoryStorage()Initialize permanent storage for database history -
refreshSchemas
public void refreshSchemas()Discard any currently-cached schemas and rebuild them using the filters. -
applyDdl
public boolean applyDdl(SourceInfo source, String databaseName, String ddlStatements, DdlChanges.DatabaseStatementStringConsumer statementConsumer) Apply the supplied DDL statements to this database schema and record the history. If astatementConsumeris supplied, then call it for each sub-sequence of the DDL statements that all apply to the same database.Typically DDL statements are applied using a connection to a single database, and unless the statements use fully-qualified names, the DDL statements apply to this database.
- Parameters:
source- the currentSourceInfo.partition()andoffsetat which these changes are found; may not be nulldatabaseName- the name of the default database under which these statements are applied; may not be nullddlStatements- the;-separated DDL statements; may be null or emptystatementConsumer- the consumer that should be called with each sub-sequence of DDL statements that apply to a single database; may be null if no action is to be performed with the changes- Returns:
trueif changes were made to the database schema, orfalseif the DDL statements had no effect on the database schema
-
isGlobalSetVariableStatement
-
isStoreOnlyCapturedTablesDdl
public boolean isStoreOnlyCapturedTablesDdl()- Returns:
- true if only captured tables should be stored in database history, false if all tables should be stored
-
tableInformationComplete
public boolean tableInformationComplete()- Specified by:
tableInformationCompletein interfaceDatabaseSchema<TableId>- Overrides:
tableInformationCompletein classRelationalDatabaseSchema
-