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
FieldsModifier and TypeFieldDescriptionprivate final ConcurrentHashMap<String,String> private final MariaDbValueConvertersprivate final io.debezium.relational.Tables.TableFilterFields inherited from class io.debezium.antlr.AntlrDdlParser
databaseTables, dataTypeResolverFields inherited from class io.debezium.relational.ddl.AbstractDdlParser
ddlChanges, logger, skipComments, skipViews, systemVariables -
Constructor Summary
ConstructorsConstructorDescriptionMariaDbAntlrDdlParser(boolean throwWerrorsFromTreeWalk, boolean includeViews, boolean includeComments, MariaDbValueConverters valueConverters, io.debezium.relational.Tables.TableFilter tableFilter) MariaDbAntlrDdlParser(MariaDbValueConverters valueConverters) MariaDbAntlrDdlParser(MariaDbValueConverters valueConverters, io.debezium.relational.Tables.TableFilter tableFilter) -
Method Summary
Modifier and TypeMethodDescriptioncharsetForTable(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.MariaDBLexercreateNewLexerInstance(org.antlr.v4.runtime.CharStream charStreams) protected io.debezium.ddl.parser.mariadb.generated.MariaDBParsercreateNewParserInstance(org.antlr.v4.runtime.CommonTokenStream commonTokenStream) protected io.debezium.relational.SystemVariablesprotected io.debezium.antlr.AntlrDdlParserListenerGet the name of the character set for the current database, via the "character_set_database" system property.static StringescapeOption(String option) 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.extractEnumAndSetOptions(List<String> enumValues) 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.TableFilterprotected io.debezium.antlr.DataTypeResolverprotected booleanbooleanisTableUniqueIndexIncluded(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 fromMariaDBParser.UidContext.voidparsePrimaryIndexColumnNames(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor) Parse column names for primary index fromMariaDBParser.IndexColumnNamesContext.io.debezium.relational.TableIdparseQualifiedTableId(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.FullIdContext fullIdContext) Parse qualified table identification fromMariaDBParser.FullIdContext.protected org.antlr.v4.runtime.tree.ParseTreeparseTree(io.debezium.ddl.parser.mariadb.generated.MariaDBParser parser) voidparseUniqueIndexColumnNames(io.debezium.ddl.parser.mariadb.generated.MariaDBParser.IndexColumnNamesContext indexColumnNamesContext, io.debezium.relational.TableEditor tableEditor) Parse column names for unique index fromMariaDBParser.IndexColumnNamesContext.voidrunIfNotNull(Runnable function, Object... nullableObjects) Runs a function if all given object are not null.voidsignalAlterTable(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, withoutQuotesMethods 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
-
Field Details
-
charsetNameForDatabase
-
converters
-
tableFilter
private final io.debezium.relational.Tables.TableFilter tableFilter
-
-
Constructor Details
-
MariaDbAntlrDdlParser
public MariaDbAntlrDdlParser() -
MariaDbAntlrDdlParser
-
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:
parseTreein classio.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:
createParseTreeWalkerListenerin classio.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:
createNewLexerInstancein classio.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:
createNewParserInstancein classio.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:
createNewSystemVariablesInstancein classio.debezium.relational.ddl.AbstractDdlParser
-
isGrammarInUpperCase
protected boolean isGrammarInUpperCase()- Specified by:
isGrammarInUpperCasein classio.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:
initializeDataTypeResolverin classio.debezium.antlr.AntlrDdlParser<io.debezium.ddl.parser.mariadb.generated.MariaDBLexer,io.debezium.ddl.parser.mariadb.generated.MariaDBParser>
-
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 fromMariaDBParser.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 fromMariaDBParser.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 fromMariaDBParser.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 fromMariaDBParser.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
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
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
Runs a function if all given object are not null.- Parameters:
function- function to run; may not be nullnullableObjects- object to be tested, if they are null.
-
extractEnumAndSetOptions
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
ENUMorSET; never null.
-
escapeOption
-
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 nullpreviousId- the previous name of the view if it was renamed, or null if it was not renamedctx- the start of the statement; may not be null
-