diff --git a/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/AbstractParseTreeBuilder.java b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/AbstractParseTreeBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..6bda99973c62f46497e9b84110a1dbf94a95a3e8 --- /dev/null +++ b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/AbstractParseTreeBuilder.java @@ -0,0 +1,28 @@ +package io.shardingsphere.core.parsing.antler.ast; + +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.TokenStream; + +public abstract class AbstractParseTreeBuilder implements ParseTreeBuilder { + + @Override + public ParserRuleContext parse(final String input) { + CharStream stream = CharStreams.fromString(input); + Lexer lexer = newLexer(stream); + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + Parser parser = newParser(tokenStream); + return getParserTree(parser); + } + + protected abstract Lexer newLexer(final CharStream stream); + + protected abstract Parser newParser(final TokenStream tokenStream); + + protected abstract ParserRuleContext getParserTree(final Parser parser); + +} diff --git a/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/ParseTreeBuilder.java b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/ParseTreeBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..a316ee4fd7675615bf44384bf1494ed352ca7621 --- /dev/null +++ b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/ParseTreeBuilder.java @@ -0,0 +1,7 @@ +package io.shardingsphere.core.parsing.antler.ast; + +import org.antlr.v4.runtime.ParserRuleContext; + +public interface ParseTreeBuilder { + ParserRuleContext parse(final String input); +} diff --git a/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLAlterTableParseTreeBuilder.java b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLAlterTableParseTreeBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..ba0fe5b89bc61c035854f2806e5d2b25a7c7ab32 --- /dev/null +++ b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLAlterTableParseTreeBuilder.java @@ -0,0 +1,33 @@ +package io.shardingsphere.core.parsing.antler.ast.mysql; + +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.TokenStream; + +import io.shardingsphere.core.parsing.antler.ast.AbstractParseTreeBuilder; +import io.shardingsphere.core.parsing.antler.parser.mysql.MySQLAdvancedAlterTableParser; +import io.shardingsphere.parser.antlr.mysql.MySQLAlterTableLexer; + +public class MySQLAlterTableParseTreeBuilder extends AbstractParseTreeBuilder { + + @Override + protected Lexer newLexer(final CharStream stream) { + return new MySQLAlterTableLexer(stream); + } + + @Override + protected Parser newParser(final TokenStream tokenStream) { + return new MySQLAdvancedAlterTableParser(tokenStream); + } + + @Override + protected ParserRuleContext getParserTree(final Parser parser) { + MySQLAdvancedAlterTableParser alterTableParser = (MySQLAdvancedAlterTableParser)parser; + return alterTableParser.alterTable(); + } + + + +} diff --git a/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLCreateTableParseTreeBuilder.java b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLCreateTableParseTreeBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..dd321614f393257cbdcaa8a37ce85ed6c706168e --- /dev/null +++ b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLCreateTableParseTreeBuilder.java @@ -0,0 +1,31 @@ +package io.shardingsphere.core.parsing.antler.ast.mysql; + +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.TokenStream; + +import io.shardingsphere.core.parsing.antler.ast.AbstractParseTreeBuilder; +import io.shardingsphere.core.parsing.antler.parser.mysql.MySQLAdvancedCreateTableParser; +import io.shardingsphere.parser.antlr.mysql.MySQLCreateTableLexer; + +public class MySQLCreateTableParseTreeBuilder extends AbstractParseTreeBuilder { + + @Override + protected Lexer newLexer(final CharStream stream) { + return new MySQLCreateTableLexer(stream); + } + + @Override + protected Parser newParser(final TokenStream tokenStream) { + return new MySQLAdvancedCreateTableParser(tokenStream); + } + + @Override + protected ParserRuleContext getParserTree(final Parser parser) { + MySQLAdvancedCreateTableParser createTableParser = (MySQLAdvancedCreateTableParser) parser; + return createTableParser.createTable(); + } + +} diff --git a/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLDropTableParseTreeBuilder.java b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLDropTableParseTreeBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..1a1c1083d81e6bd3caeac026abab109fac775cf2 --- /dev/null +++ b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLDropTableParseTreeBuilder.java @@ -0,0 +1,30 @@ +package io.shardingsphere.core.parsing.antler.ast.mysql; + +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.TokenStream; + +import io.shardingsphere.core.parsing.antler.ast.AbstractParseTreeBuilder; +import io.shardingsphere.core.parsing.antler.parser.mysql.MySQLAdvancedDropTableParser; +import io.shardingsphere.parser.antlr.mysql.MySQLDropTableLexer; + +public class MySQLDropTableParseTreeBuilder extends AbstractParseTreeBuilder { + + @Override + protected Lexer newLexer(final CharStream stream) { + return new MySQLDropTableLexer(stream); + } + + protected Parser newParser(final TokenStream tokenStream) { + return new MySQLAdvancedDropTableParser(tokenStream); + } + + @Override + protected ParserRuleContext getParserTree(final Parser parser) { + MySQLAdvancedDropTableParser dropTableParser = (MySQLAdvancedDropTableParser) parser; + return dropTableParser.dropTable(); + } + +} diff --git a/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLTruncateTableParseTreeBuilder.java b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLTruncateTableParseTreeBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..18c434453648087f62aad8c221375ab921f39e61 --- /dev/null +++ b/sharding-jdbc-ddl-parser/src/main/java/io/shardingsphere/core/parsing/antler/ast/mysql/MySQLTruncateTableParseTreeBuilder.java @@ -0,0 +1,31 @@ +package io.shardingsphere.core.parsing.antler.ast.mysql; + +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.TokenStream; + +import io.shardingsphere.core.parsing.antler.ast.AbstractParseTreeBuilder; +import io.shardingsphere.core.parsing.antler.parser.mysql.MySQLAdvancedTruncateTableParser; +import io.shardingsphere.parser.antlr.mysql.MySQLTruncateTableLexer; + +public class MySQLTruncateTableParseTreeBuilder extends AbstractParseTreeBuilder { + + @Override + protected Lexer newLexer(final CharStream stream) { + return new MySQLTruncateTableLexer(stream); + } + + @Override + protected Parser newParser(final TokenStream tokenStream) { + return new MySQLAdvancedTruncateTableParser(tokenStream); + } + + @Override + protected ParserRuleContext getParserTree(final Parser parser) { + MySQLAdvancedTruncateTableParser truncateTableParser = (MySQLAdvancedTruncateTableParser) parser; + return truncateTableParser.truncateTable(); + } + +}