Class MySqlSchema

    • Field Detail

      • logger

        private static final org.slf4j.Logger logger
      • ignoredQueryStatements

        private final Set<String> ignoredQueryStatements
      • ddlParser

        private final DdlParser ddlParser
      • filters

        private final Filters filters
      • skipUnparseableDDL

        private final boolean skipUnparseableDDL
      • storeOnlyCapturedTablesDdl

        private final boolean storeOnlyCapturedTablesDdl
      • recoveredTables

        private boolean recoveredTables
    • Constructor Detail

      • MySqlSchema

        public MySqlSchema​(MySqlConnectorConfig configuration,
                           Predicate<String> gtidFilter,
                           boolean tableIdCaseInsensitive,
                           TopicSelector<TableId> topicSelector,
                           Filters tableFilters)
        Create a schema component given the supplied MySQL connector configuration.
        Parameters:
        configuration - the connector configuration, which is presumed to be valid
        gtidFilter - 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 needed
        tableIdCaseInsensitive - true if table lookup ignores letter case
    • Method Detail

      • 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 since start().
      • capturedTablesAsStringArray

        public String[] 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

        public boolean isTableCaptured​(TableId id)
        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

        public String historyLocation()
        Get the information about where the DDL statement history is recorded.
        Returns:
        the history description; never null
      • setSystemVariables

        public void setSystemVariables​(Map<String,​String> variables)
        Set the system variables on the DDL parser.
        Parameters:
        variables - the system variables; may not be null but may be empty
      • systemVariables

        public SystemVariables systemVariables()
        Get the system variables as known by the DDL parser.
        Returns:
        the system variables; never null
      • appendDropTableStatement

        protected void appendDropTableStatement​(StringBuilder sb,
                                                TableId tableId)
      • appendCreateTableStatement

        protected void appendCreateTableStatement​(StringBuilder sb,
                                                  Table table)
      • loadHistory

        public 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.
        Parameters:
        startingPoint - the source information with the current SourceInfo.partition() and offset at 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 a 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.

        Parameters:
        source - the current SourceInfo.partition() and offset at which these changes are found; may not be null
        databaseName - the name of the default database under which these statements are applied; may not be null
        ddlStatements - the ;-separated DDL statements; may be null or empty
        statementConsumer - 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:
        true if changes were made to the database schema, or false if the DDL statements had no effect on the database schema
      • isGlobalSetVariableStatement

        public boolean isGlobalSetVariableStatement​(String ddl,
                                                    String databaseName)
      • isStoreOnlyCapturedTablesDdl

        public boolean isStoreOnlyCapturedTablesDdl()
        Returns:
        true if only captured tables should be stored in database history, false if all tables should be stored