@NotThreadSafe public class MySqlSchema extends RelationalDatabaseSchema
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.
| Modifier and Type | Field and Description |
|---|---|
private DatabaseHistory |
dbHistory |
private DdlChanges |
ddlChanges |
private DdlParser |
ddlParser |
private Filters |
filters |
private HistoryRecordComparator |
historyComparator |
private Set<String> |
ignoredQueryStatements |
private static org.slf4j.Logger |
logger |
private boolean |
recoveredTables |
private boolean |
skipUnparseableDDL |
private boolean |
storeOnlyMonitoredTablesDdl |
NO_CAPTURED_DATA_COLLECTIONS_WARNING| Constructor and Description |
|---|
MySqlSchema(MySqlConnectorConfig configuration,
Predicate<String> gtidFilter,
boolean tableIdCaseInsensitive,
TopicSelector<TableId> topicSelector,
Filters tableFilters)
Create a schema component given the supplied
MySQL connector configuration. |
| Modifier and Type | Method and Description |
|---|---|
protected void |
appendCreateTableStatement(StringBuilder sb,
Table table) |
protected void |
appendDropTableStatement(StringBuilder sb,
TableId tableId) |
boolean |
applyDdl(SourceInfo source,
String databaseName,
String ddlStatements,
DdlChanges.DatabaseStatementStringConsumer statementConsumer)
Apply the supplied DDL statements to this database schema and record the history.
|
Filters |
filters()
Get the
database and table filters defined by the configuration. |
private static MySqlValueConverters |
getValueConverters(MySqlConnectorConfig configuration) |
HistoryRecordComparator |
historyComparator() |
boolean |
historyExists()
Return true if the database history entity exists
|
String |
historyLocation()
Get the information about where the DDL statement history is recorded.
|
void |
intializeHistoryStorage()
Initialize permanent storage for database history
|
boolean |
isGlobalSetVariableStatement(String ddl,
String databaseName) |
boolean |
isStoreOnlyMonitoredTablesDdl() |
boolean |
isTableMonitored(TableId id)
Decide whether events should be captured for a given table
|
void |
loadHistory(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.
|
String[] |
monitoredTablesAsStringArray()
Get all table names for all databases that are monitored whose events are captured by Debezium
|
void |
refreshSchemas()
Discard any currently-cached schemas and rebuild them using the filters.
|
void |
setSystemVariables(Map<String,String> variables)
Set the system variables on the DDL parser.
|
void |
shutdown()
Stop recording history and release any resources acquired since
start(). |
void |
start()
Start by acquiring resources needed to persist the database history
|
SystemVariables |
systemVariables()
Get the system variables as known by the DDL parser.
|
boolean |
tableInformationComplete() |
assureNonEmptySchema, buildAndRegisterSchema, clearSchemas, close, getTableFilter, refresh, refreshSchema, removeSchema, schemaFor, tableFor, tableIds, tablesprivate static final org.slf4j.Logger logger
private final DdlParser ddlParser
private final Filters filters
private final DatabaseHistory dbHistory
private final DdlChanges ddlChanges
private final HistoryRecordComparator historyComparator
private final boolean skipUnparseableDDL
private final boolean storeOnlyMonitoredTablesDdl
private boolean recoveredTables
public MySqlSchema(MySqlConnectorConfig configuration, Predicate<String> gtidFilter, boolean tableIdCaseInsensitive, TopicSelector<TableId> topicSelector, Filters tableFilters)
MySQL connector configuration.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
returns true if a GTID source is to be included, or false if a GTID source is to be excluded;
may be null if not neededtableIdCaseInsensitive - true if table lookup ignores letter caseprivate static MySqlValueConverters getValueConverters(MySqlConnectorConfig configuration)
public HistoryRecordComparator historyComparator()
public void start()
public void shutdown()
start().public Filters filters()
database and table filters defined by the configuration.public String[] monitoredTablesAsStringArray()
public boolean isTableMonitored(TableId id)
id - the fully-qualified table identifier; may be nullpublic String historyLocation()
public void setSystemVariables(Map<String,String> variables)
variables - the system variables; may not be null but may be emptypublic SystemVariables systemVariables()
protected void appendDropTableStatement(StringBuilder sb, TableId tableId)
protected void appendCreateTableStatement(StringBuilder sb, Table table)
public void loadHistory(SourceInfo startingPoint)
startingPoint - the source information with the current SourceInfo.partition() and offset at which the database schemas are to reflect; may not be nullpublic boolean historyExists()
public void intializeHistoryStorage()
public void refreshSchemas()
public boolean applyDdl(SourceInfo source, String databaseName, String ddlStatements, DdlChanges.DatabaseStatementStringConsumer statementConsumer)
statementConsumer is
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.
source - the current SourceInfo.partition() and offset at 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 changestrue if changes were made to the database schema, or false if the DDL statements had no
effect on the database schemapublic boolean isGlobalSetVariableStatement(String ddl, String databaseName)
public boolean isStoreOnlyMonitoredTablesDdl()
public boolean tableInformationComplete()
tableInformationComplete in interface DatabaseSchema<TableId>tableInformationComplete in class RelationalDatabaseSchemaCopyright © 2021 JBoss by Red Hat. All rights reserved.