Class MariaDbAntlrDdlParser

java.lang.Object
io.debezium.relational.ddl.AbstractDdlParser
io.debezium.antlr.AntlrDdlParser<io.debezium.ddl.parser.mariadb.generated.MariaDBLexer,io.debezium.ddl.parser.mariadb.generated.MariaDBParser>
io.debezium.connector.mariadb.antlr.MariaDbAntlrDdlParser
All Implemented Interfaces:
io.debezium.relational.ddl.DdlParser

public class MariaDbAntlrDdlParser extends io.debezium.antlr.AntlrDdlParser<io.debezium.ddl.parser.mariadb.generated.MariaDBLexer,io.debezium.ddl.parser.mariadb.generated.MariaDBParser>
An ANTLR based parser for MariaDB DDL statements.
Author:
Chris Cranford
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
     
     
    private final io.debezium.relational.Tables.TableFilter
     

    Fields inherited from class io.debezium.antlr.AntlrDdlParser

    databaseTables, dataTypeResolver

    Fields inherited from class io.debezium.relational.ddl.AbstractDdlParser

    ddlChanges, logger, skipComments, skipViews, systemVariables
  • Constructor Summary

    Constructors
    Constructor
    Description
     
    MariaDbAntlrDdlParser(boolean throwWerrorsFromTreeWalk, boolean includeViews, boolean includeComments, MariaDbValueConverters valueConverters, io.debezium.relational.Tables.TableFilter tableFilter)
     
     
    MariaDbAntlrDdlParser(MariaDbValueConverters valueConverters, io.debezium.relational.Tables.TableFilter tableFilter)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    charsetForTable(io.debezium.relational.TableId tableId)
    Get the name of the character set for the give table name.
    Provides a map of default character sets by database/schema name.
    protected io.debezium.ddl.parser.mariadb.generated.MariaDBLexer
    createNewLexerInstance(org.antlr.v4.runtime.CharStream charStreams)
     
    protected io.debezium.ddl.parser.mariadb.generated.MariaDBParser
    createNewParserInstance(org.antlr.v4.runtime.CommonTokenStream commonTokenStream)
     
    protected io.debezium.relational.SystemVariables
     
    protected io.debezium.antlr.AntlrDdlParserListener
     
    Get the name of the character set for the current database, via the "character_set_database" system property.
    static String
     
    extractCharset(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.CharsetNameContext charsetNode, io.debezium.ddl.parser.mariadb.generated.MariaDBParser.CollationNameContext collationNode)
    Obtains the charset name either form charset if present or from collation.
    static List<String>
    Extracts the enumeration values properly parsed and escaped.
     
    private List<io.debezium.relational.Column>
    getIndexColumns(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor)
     
    io.debezium.relational.Tables.TableFilter
     
    protected io.debezium.antlr.DataTypeResolver
     
    protected boolean
     
    boolean
    isTableUniqueIndexIncluded(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor)
    Determine if a table's unique index should be included when parsing relative unique index statement.
    parseName(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.UidContext uidContext)
    Parse a name from MariaDBParser.UidContext.
    void
    parsePrimaryIndexColumnNames(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor)
    Parse column names for primary index from MariaDBParser.IndexColumnNamesContext.
    io.debezium.relational.TableId
    parseQualifiedTableId(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.FullIdContext fullIdContext)
    Parse qualified table identification from MariaDBParser.FullIdContext.
    protected org.antlr.v4.runtime.tree.ParseTree
    parseTree(io.debezium.ddl.parser.mariadb.generated.MariaDBParser parser)
     
    void
    parseUniqueIndexColumnNames(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor)
    Parse column names for unique index from MariaDBParser.IndexColumnNamesContext.
    void
    runIfNotNull(Runnable function, Object... nullableObjects)
    Runs a function if all given object are not null.
    void
    signalAlterTable(io.debezium.relational.TableId id, io.debezium.relational.TableId previousId, io.debezium.ddl.parser.mariadb.generated.MariaDBParser.RenameTableClauseContext ctx)
    Signal an alter table event to ddl changes listener.

    Methods inherited from class io.debezium.antlr.AntlrDdlParser

    databaseTables, dataTypeResolver, debugParsed, debugSkipped, getParsingExceptionsFromWalker, getText, getText, parse, signalAlterDatabase, signalAlterTable, signalAlterView, signalCreateDatabase, signalCreateIndex, signalCreateTable, signalCreateView, signalDropDatabase, signalDropIndex, signalDropTable, signalDropTable, signalDropView, signalSetVariable, signalTruncateTable, signalUseDatabase, skipComments, skipViews, withoutQuotes

    Methods inherited from class io.debezium.relational.ddl.AbstractDdlParser

    accumulateParsingFailure, accumulateParsingFailure, commentParsed, createColumnFromConstant, currentSchema, debugParsed, debugSkipped, getDdlChanges, isQuote, isQuoted, removeLineFeeds, resolveTableId, setCurrentDatabase, setCurrentSchema, setTypeInfoForConstant, signalAlterDatabase, signalAlterTable, signalAlterView, signalChangeEvent, signalCreateDatabase, signalCreateIndex, signalCreateTable, signalCreateView, signalDropDatabase, signalDropIndex, signalDropView, signalSetVariable, signalTruncateTable, signalUseDatabase, systemVariables, withoutQuotes

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • MariaDbAntlrDdlParser

      public MariaDbAntlrDdlParser()
    • MariaDbAntlrDdlParser

      public MariaDbAntlrDdlParser(MariaDbValueConverters valueConverters)
    • MariaDbAntlrDdlParser

      public MariaDbAntlrDdlParser(MariaDbValueConverters valueConverters, io.debezium.relational.Tables.TableFilter tableFilter)
    • MariaDbAntlrDdlParser

      public MariaDbAntlrDdlParser(boolean throwWerrorsFromTreeWalk, boolean includeViews, boolean includeComments, MariaDbValueConverters valueConverters, io.debezium.relational.Tables.TableFilter tableFilter)
  • Method Details

    • parseTree

      protected org.antlr.v4.runtime.tree.ParseTree parseTree(io.debezium.ddl.parser.mariadb.generated.MariaDBParser parser)
      Specified by:
      parseTree in class io.debezium.antlr.AntlrDdlParser<io.debezium.ddl.parser.mariadb.generated.MariaDBLexer,io.debezium.ddl.parser.mariadb.generated.MariaDBParser>
    • createParseTreeWalkerListener

      protected io.debezium.antlr.AntlrDdlParserListener createParseTreeWalkerListener()
      Specified by:
      createParseTreeWalkerListener in class io.debezium.antlr.AntlrDdlParser<io.debezium.ddl.parser.mariadb.generated.MariaDBLexer,io.debezium.ddl.parser.mariadb.generated.MariaDBParser>
    • createNewLexerInstance

      protected io.debezium.ddl.parser.mariadb.generated.MariaDBLexer createNewLexerInstance(org.antlr.v4.runtime.CharStream charStreams)
      Specified by:
      createNewLexerInstance in class io.debezium.antlr.AntlrDdlParser<io.debezium.ddl.parser.mariadb.generated.MariaDBLexer,io.debezium.ddl.parser.mariadb.generated.MariaDBParser>
    • createNewParserInstance

      protected io.debezium.ddl.parser.mariadb.generated.MariaDBParser createNewParserInstance(org.antlr.v4.runtime.CommonTokenStream commonTokenStream)
      Specified by:
      createNewParserInstance in class io.debezium.antlr.AntlrDdlParser<io.debezium.ddl.parser.mariadb.generated.MariaDBLexer,io.debezium.ddl.parser.mariadb.generated.MariaDBParser>
    • createNewSystemVariablesInstance

      protected io.debezium.relational.SystemVariables createNewSystemVariablesInstance()
      Specified by:
      createNewSystemVariablesInstance in class io.debezium.relational.ddl.AbstractDdlParser
    • isGrammarInUpperCase

      protected boolean isGrammarInUpperCase()
      Specified by:
      isGrammarInUpperCase in class io.debezium.antlr.AntlrDdlParser<io.debezium.ddl.parser.mariadb.generated.MariaDBLexer,io.debezium.ddl.parser.mariadb.generated.MariaDBParser>
    • initializeDataTypeResolver

      protected io.debezium.antlr.DataTypeResolver initializeDataTypeResolver()
      Specified by:
      initializeDataTypeResolver in class io.debezium.antlr.AntlrDdlParser<io.debezium.ddl.parser.mariadb.generated.MariaDBLexer,io.debezium.ddl.parser.mariadb.generated.MariaDBParser>
    • charsetNameForDatabase

      public ConcurrentMap<String,String> charsetNameForDatabase()
      Provides a map of default character sets by database/schema name.
      Returns:
      map of default character sets.
    • parseName

      public String parseName(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.UidContext uidContext)
      Parse a name from MariaDBParser.UidContext.
      Parameters:
      uidContext - uid context
      Returns:
      name without quotes.
    • parseQualifiedTableId

      public io.debezium.relational.TableId parseQualifiedTableId(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.FullIdContext fullIdContext)
      Parse qualified table identification from MariaDBParser.FullIdContext. AbstractDdlParser.currentSchema() will be used if definition of schema name is not part of the context.
      Parameters:
      fullIdContext - full id context.
      Returns:
      qualified TableId.
    • parsePrimaryIndexColumnNames

      public void parsePrimaryIndexColumnNames(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor)
      Parse column names for primary index from MariaDBParser.IndexColumnNamesContext. This method will update column to be not optional and set primary key column names to table.
      Parameters:
      indexColumnNamesContext - primary key index column names context.
      tableEditor - editor for table where primary key index is parsed.
    • parseUniqueIndexColumnNames

      public void parseUniqueIndexColumnNames(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor)
      Parse column names for unique index from MariaDBParser.IndexColumnNamesContext. This method will set unique key column names to table if there are no optional.
      Parameters:
      indexColumnNamesContext - unique key index column names context.
      tableEditor - editor for table where primary key index is parsed.
    • isTableUniqueIndexIncluded

      public boolean isTableUniqueIndexIncluded(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor)
      Determine if a table's unique index should be included when parsing relative unique index statement.
      Parameters:
      indexColumnNamesContext - unique index column names context.
      tableEditor - editor for table where unique index is parsed.
      Returns:
      true if the index is to be included; false otherwise.
    • getIndexColumns

      private List<io.debezium.relational.Column> getIndexColumns(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor)
    • currentDatabaseCharset

      public String currentDatabaseCharset()
      Get the name of the character set for the current database, via the "character_set_database" system property.
      Returns:
      the name of the character set for the current database, or null if not known ...
    • charsetForTable

      public String charsetForTable(io.debezium.relational.TableId tableId)
      Get the name of the character set for the give table name.
      Returns:
      the name of the character set for the given table, or null if not known ...
    • runIfNotNull

      public void runIfNotNull(Runnable function, Object... nullableObjects)
      Runs a function if all given object are not null.
      Parameters:
      function - function to run; may not be null
      nullableObjects - object to be tested, if they are null.
    • extractEnumAndSetOptions

      public static List<String> extractEnumAndSetOptions(List<String> enumValues)
      Extracts the enumeration values properly parsed and escaped.
      Parameters:
      enumValues - the raw enumeration values from the parsed column definition
      Returns:
      the list of options allowed for the ENUM or SET; never null.
    • escapeOption

      public static String escapeOption(String option)
    • getConverters

      public MariaDbValueConverters getConverters()
    • getTableFilter

      public io.debezium.relational.Tables.TableFilter getTableFilter()
    • extractCharset

      public String extractCharset(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.CharsetNameContext charsetNode, io.debezium.ddl.parser.mariadb.generated.MariaDBParser.CollationNameContext collationNode)
      Obtains the charset name either form charset if present or from collation.
      Parameters:
      charsetNode -
      collationNode -
      Returns:
      character set
    • signalAlterTable

      public void signalAlterTable(io.debezium.relational.TableId id, io.debezium.relational.TableId previousId, io.debezium.ddl.parser.mariadb.generated.MariaDBParser.RenameTableClauseContext ctx)
      Signal an alter table event to ddl changes listener.
      Parameters:
      id - the table identifier; may not be null
      previousId - the previous name of the view if it was renamed, or null if it was not renamed
      ctx - the start of the statement; may not be null