DBZ-252 resolve todos

This commit is contained in:
rkuchar 2018-05-02 15:05:17 +02:00 committed by Gunnar Morling
parent c3b65ac2c3
commit b8191963f7
4 changed files with 14 additions and 27 deletions

View File

@ -964,12 +964,11 @@ public static DdlParsingMode parse(String value, String defaultValue) {
.withEnum(DdlParsingMode.class, DdlParsingMode.LEGACY)
.withWidth(Width.SHORT)
.withImportance(Importance.MEDIUM)
// TODO rkuchar: change description
.withDescription("Time, date, and timestamps can be represented with different kinds of precisions, including:"
+ "'adaptive_time_microseconds' (the default) like 'adaptive' mode, but TIME fields always use microseconds precision;"
+ "'adaptive' (deprecated) bases the precision of time, date, and timestamp values on the database column's precision; "
+ "'connect' always represents time, date, and timestamp values using Kafka Connect's built-in representations for Time, Date, and Timestamp, "
+ "which uses millisecond precision regardless of the database columns' precision.");
.withDescription("MySQL ddl statements can be parsed in different ways:" +
"'legacy' (the default) parsing is creating a TokenStream and comparing token by token with an expected values." +
"The decisions are made by matched token values." +
"'antlr' uses generated parser from MySQL grammar using ANTLR v4 tool which use ALL(*) algorithm for parsing." +
"This parser creates a parsing tree for DDL statement, then walks trough it and apply changes by node types in parsed tree.");
/**
* Method that generates a Field for specifying that string columns whose names match a set of regular expressions should

View File

@ -35,6 +35,7 @@ public void enterCreateIndex(MySqlParser.CreateIndexContext ctx) {
if (tableEditor != null) {
if (!tableEditor.hasPrimaryKey()) {
parserCtx.parsePrimaryIndexColumnNames(ctx.indexColumnNames(), tableEditor);
parserCtx.signalCreateIndex(parserCtx.parseName(ctx.uid()), null, ctx);
}
}
else {
@ -42,8 +43,6 @@ public void enterCreateIndex(MySqlParser.CreateIndexContext ctx) {
+ "Query: " + getText(ctx));
}
}
// TODO rkuchar fixed together with MySql legacy parser bug.
parserCtx.signalAlterTable(null, null, ctx);
super.enterCreateIndex(ctx);
}
}

View File

@ -32,15 +32,12 @@
public class MySqlAntlrDdlParserListener extends MySqlParserBaseListener implements AntlrDdlParserListener {
private List<ParseTreeListener> listeners = new CopyOnWriteArrayList<>();
private final MySqlAntlrDdlParser parserCtx;
private boolean skipNodes;
private int skippedNodesCount = 0;
private Collection<ParsingException> errors = new ArrayList<>();
public MySqlAntlrDdlParserListener(MySqlAntlrDdlParser parserCtx) {
this.parserCtx = parserCtx;
listeners.add(new DatabaseOptionsParserListener(parserCtx));
listeners.add(new DropDatabaseParserListener(parserCtx));
listeners.add(new CreateTableParserListener(parserCtx, listeners));
@ -107,16 +104,4 @@ public void enterRoutineBody(MySqlParser.RoutineBodyContext ctx) {
skipNodes = true;
}
@Override
public void exitSqlStatement(MySqlParser.SqlStatementContext ctx) {
// TODO rkuchar figure out how to log the easiest way
// if (!skippedQuery) {
// parserCtx.debugParsed(ctx);
// }
// else {
// parserCtx.debugSkipped(ctx);
// }
super.exitSqlStatement(ctx);
}
}

View File

@ -822,8 +822,9 @@ public void shouldParseIntegrationTestSchema() {
public void shouldParseCreateStatements() {
parser.parse(readFile("ddl/mysql-test-create.ddl"), tables);
Testing.print(tables);
int numberOfCreatedIndexesWhichNotMakeChangeOnTablesModel = 49;
assertThat(tables.size()).isEqualTo(57);
assertThat(listener.total()).isEqualTo(144);
assertThat(listener.total()).isEqualTo(144 - numberOfCreatedIndexesWhichNotMakeChangeOnTablesModel);
}
@Test
@ -850,10 +851,11 @@ public void shouldParseTestStatements() {
int numberOfAlteredTablesWhichDoesNotExists = parser.getParsingExceptionsFromWalker().size();
// legacy parser was signaling all created index
// antlr is parsing only those, which will make any model changes
int numberOfNonUniqueIndexesCreated = 2;
int numberOfCreatedIndexesWhichNotMakeChangeOnTablesModel = 5;
int numberOfAlterViewStatements = 6;
int numberOfDroppedViews = 7;
assertThat(listener.total()).isEqualTo(58 - numberOfAlteredTablesWhichDoesNotExists
- numberOfNonUniqueIndexesCreated + numberOfAlterViewStatements);
- numberOfCreatedIndexesWhichNotMakeChangeOnTablesModel + numberOfAlterViewStatements + numberOfDroppedViews);
listener.forEach(this::printEvent);
}
@ -862,7 +864,9 @@ public void shouldParseSomeLinesFromCreateStatements() {
parser.parse(readLines(189, "ddl/mysql-test-create.ddl"), tables);
assertThat(tables.size()).isEqualTo(39);
int numberOfAlteredTablesWhichDoesNotExists = parser.getParsingExceptionsFromWalker().size();
assertThat(listener.total()).isEqualTo(120 - numberOfAlteredTablesWhichDoesNotExists);
int numberOfCreatedIndexesWhichNotMakeChangeOnTablesModel = 42;
assertThat(listener.total()).isEqualTo(120 - numberOfAlteredTablesWhichDoesNotExists
- numberOfCreatedIndexesWhichNotMakeChangeOnTablesModel);
}
@Test