提交 5eb345db 编写于 作者: C codefairy08

Update TreeUtils paramter type and return type

上级 0fee3e3e
......@@ -37,23 +37,23 @@ public class AddColumnVisitor extends ColumnDefinitionVisitor {
@Override
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
List<ParseTree> addColumnCtxs = TreeUtils.getAllDescendantByRuleName(ancestorNode, "addColumn");
List<ParserRuleContext> addColumnCtxs = TreeUtils.getAllDescendantByRuleName(ancestorNode, "addColumn");
if (null == addColumnCtxs) {
return;
}
for (ParseTree each : addColumnCtxs) {
for (ParserRuleContext each : addColumnCtxs) {
visitAddColumn(each, alterStatement);
}
}
public void visitAddColumn(final ParseTree addColumnCtx, final AlterTableStatement alterStatement) {
List<ParseTree> columnDefinitionCtxs = TreeUtils.getAllDescendantByRuleName(addColumnCtx, "columnDefinition");
public void visitAddColumn(final ParserRuleContext addColumnCtx, final AlterTableStatement alterStatement) {
List<ParserRuleContext> columnDefinitionCtxs = TreeUtils.getAllDescendantByRuleName(addColumnCtx, "columnDefinition");
if (null == columnDefinitionCtxs) {
return;
}
for (ParseTree columnDefinitionCtx : columnDefinitionCtxs) {
for (ParserRuleContext columnDefinitionCtx : columnDefinitionCtxs) {
ColumnDefinition column = VisitorUtils.visitColumnDefinition(columnDefinitionCtx);
if (null != column) {
alterStatement.getAddColumns().add(column);
......
......@@ -40,7 +40,7 @@ public class AddPrimaryKeyVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
ParserRuleContext modifyColumnCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode, ruleName);
ParserRuleContext modifyColumnCtx = TreeUtils.getFirstChildByRuleName(ancestorNode, ruleName);
if (null == modifyColumnCtx) {
return;
}
......@@ -50,11 +50,11 @@ public class AddPrimaryKeyVisitor implements PhraseVisitor {
return;
}
List<ParseTree> columnNodes = TreeUtils.getAllDescendantByRuleName(modifyColumnCtx, "columnName");
List<ParserRuleContext> columnNodes = TreeUtils.getAllDescendantByRuleName(modifyColumnCtx, "columnName");
if (null == columnNodes) {
return;
}
for (final ParseTree each : columnNodes) {
for (final ParserRuleContext each : columnNodes) {
String columnName = each.getText();
ColumnDefinition updateColumn = alterStatement.getUpdateColumns().get(columnName);
if (null == updateColumn) {
......
......@@ -20,7 +20,6 @@ package io.shardingsphere.core.parsing.antler.phrase.visitor;
import java.util.List;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
import io.shardingsphere.core.parsing.antler.sql.ddl.ColumnDefinition;
import io.shardingsphere.core.parsing.antler.utils.TreeUtils;
......@@ -38,12 +37,12 @@ public class ColumnDefinitionVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
CreateTableStatement createStatement = (CreateTableStatement) statement;
List<ParseTree> columnDefinitions = TreeUtils.getAllDescendantByRuleName(ancestorNode, "ColumnDefinition");
List<ParserRuleContext> columnDefinitions = TreeUtils.getAllDescendantByRuleName(ancestorNode, "ColumnDefinition");
if (null == columnDefinitions) {
return;
}
for (final ParseTree each : columnDefinitions) {
for (final ParserRuleContext each : columnDefinitions) {
ColumnDefinition column = VisitorUtils.visitColumnDefinition(each);
if (null == column) {
continue;
......
......@@ -36,13 +36,13 @@ public class DropColumnVisitor implements PhraseVisitor {
@Override
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
List<ParseTree> dropColumnCtxs = TreeUtils.getAllDescendantByRuleName(ancestorNode, "dropColumn");
List<ParserRuleContext> dropColumnCtxs = TreeUtils.getAllDescendantByRuleName(ancestorNode, "dropColumn");
if (null == dropColumnCtxs) {
return;
}
for (ParseTree each : dropColumnCtxs) {
List<ParseTree> columnNodes = TreeUtils.getAllDescendantByRuleName(each, "columnName");
for (ParserRuleContext each : dropColumnCtxs) {
List<ParserRuleContext> columnNodes = TreeUtils.getAllDescendantByRuleName(each, "columnName");
if (null == columnNodes) {
continue;
}
......
......@@ -33,7 +33,7 @@ public class DropPrimaryKeyVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
ParserRuleContext dropPrimaryKeyNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext dropPrimaryKeyNode = TreeUtils.getFirstChildByRuleName(ancestorNode,
"dropPrimaryKey");
if (null != dropPrimaryKeyNode) {
alterStatement.setDropPrimaryKey(true);
......
......@@ -38,12 +38,12 @@ public class ModifyColumnVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
List<ParseTree> modifyColumnCtxs = TreeUtils.getAllDescendantByRuleName(ancestorNode, "modifyColumn");
List<ParserRuleContext> modifyColumnCtxs = TreeUtils.getAllDescendantByRuleName(ancestorNode, "modifyColumn");
if (null == modifyColumnCtxs) {
return;
}
for (ParseTree each : modifyColumnCtxs) {
for (ParserRuleContext each : modifyColumnCtxs) {
// it`s not columndefinition, but can call this method
ColumnDefinition column = VisitorUtils.visitColumnDefinition(each);
if (null != column) {
......
......@@ -20,7 +20,6 @@ package io.shardingsphere.core.parsing.antler.phrase.visitor;
import java.util.List;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
import io.shardingsphere.core.parsing.antler.sql.ddl.AlterTableStatement;
import io.shardingsphere.core.parsing.antler.sql.ddl.ColumnDefinition;
......@@ -37,13 +36,13 @@ public class RenameColumnVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
ParserRuleContext modifyColumnCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext modifyColumnCtx = TreeUtils.getFirstChildByRuleName(ancestorNode,
"renameColumn");
if (null == modifyColumnCtx) {
return;
}
List<ParseTree> columnNodes = TreeUtils.getAllDescendantByRuleName(modifyColumnCtx, "columnName");
List<ParserRuleContext> columnNodes = TreeUtils.getAllDescendantByRuleName(modifyColumnCtx, "columnName");
if (null == columnNodes || columnNodes.size() != 2) {
return;
}
......
......@@ -18,10 +18,11 @@
package io.shardingsphere.core.parsing.antler.phrase.visitor;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
import io.shardingsphere.core.parsing.antler.utils.TreeUtils;
import io.shardingsphere.core.parsing.antler.utils.VisitorUtils;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.parsing.parser.token.IndexToken;
public class RenameIndexVisitor implements PhraseVisitor {
......@@ -33,14 +34,28 @@ public class RenameIndexVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
ParserRuleContext renameIndexNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
"renameIndex");
if (null != renameIndexNode) {
ParserRuleContext oldIndexNode = (ParserRuleContext) renameIndexNode.getChild(2);
ParserRuleContext newIndexNode = (ParserRuleContext) renameIndexNode
.getChild(renameIndexNode.getChildCount() - 1);
statement.getSqlTokens().add(new IndexToken(oldIndexNode.getStart().getStartIndex(), oldIndexNode.getText(),
statement.getTables().getSingleTableName()));
statement.getSqlTokens().add(new IndexToken(newIndexNode.getStart().getStartIndex(), newIndexNode.getText(),
statement.getTables().getSingleTableName()));
if (null == renameIndexNode || 4 > renameIndexNode.getChildCount()) {
return;
}
ParseTree oldIndexNode = renameIndexNode.getChild(2);
if (!(oldIndexNode instanceof ParserRuleContext)) {
return;
}
ParseTree newIndexNode = renameIndexNode.getChild(4);
if (!(newIndexNode instanceof ParserRuleContext)) {
return;
}
ParserRuleContext oldIndexCtx = (ParserRuleContext) oldIndexNode;
ParserRuleContext newIndexCtx = (ParserRuleContext) newIndexNode;
statement.getSqlTokens()
.add(VisitorUtils.visitIndex(oldIndexCtx, statement.getTables().getSingleTableName()));
statement.getSqlTokens()
.add(VisitorUtils.visitIndex(newIndexCtx, statement.getTables().getSingleTableName()));
}
}
......@@ -33,9 +33,9 @@ public class RenameTableVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
ParserRuleContext renameTableNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext renameTableNode = TreeUtils.getFirstChildByRuleName(ancestorNode,
"renameTable");
if (null != renameTableNode) {
if (null != renameTableNode && 0 < renameTableNode.getChildCount()) {
alterStatement.setNewTableName(renameTableNode.getChild(renameTableNode.getChildCount() - 1).getText());
}
}
......
......@@ -30,16 +30,16 @@ import io.shardingsphere.core.util.SQLUtil;
public class TableNameVisitor implements PhraseVisitor {
/** Visit table naem node.
/** Visit table name node.
* @param ancestorNode ancestor node of ast
* @param statement sql statement
*/
@Override
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
ParserRuleContext tableNameNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext tableNameCtx = TreeUtils.getFirstChildByRuleName(ancestorNode,
"tableName");
if (null != tableNameNode) {
String name = tableNameNode.getText();
if (null != tableNameCtx) {
String name = tableNameCtx.getText();
if (null == name) {
return;
}
......@@ -54,7 +54,7 @@ public class TableNameVisitor implements PhraseVisitor {
literals = name;
}
statement.getSqlTokens().add(new TableToken(tableNameNode.getStart().getStartIndex(), pos, name));
statement.getSqlTokens().add(new TableToken(tableNameCtx.getStart().getStartIndex(), pos, name));
statement.getTables().add(new Table(SQLUtil.getExactlyValue(literals), Optional.<String>absent()));
}
}
......
......@@ -33,7 +33,7 @@ public class TableNamesVisitor extends TableNameVisitor {
*/
@Override
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
List<ParseTree> tableNameCtxs = TreeUtils.getAllDescendantByRuleName(ancestorNode, "tableName");
List<ParserRuleContext> tableNameCtxs = TreeUtils.getAllDescendantByRuleName(ancestorNode, "tableName");
if (null == tableNameCtxs) {
return;
......
......@@ -21,8 +21,8 @@ import org.antlr.v4.runtime.ParserRuleContext;
import io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor;
import io.shardingsphere.core.parsing.antler.utils.TreeUtils;
import io.shardingsphere.core.parsing.antler.utils.VisitorUtils;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.parsing.parser.token.IndexToken;
public class MySQLAddIndexVisitor implements PhraseVisitor {
......@@ -32,14 +32,14 @@ public class MySQLAddIndexVisitor implements PhraseVisitor {
*/
@Override
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
ParserRuleContext indexDefOptionNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext indexDefOptionNode = TreeUtils.getFirstChildByRuleName(ancestorNode,
"indexDefOption");
if (null != indexDefOptionNode) {
ParserRuleContext indexNameNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(indexDefOptionNode,
ParserRuleContext indexNameNode = TreeUtils.getFirstChildByRuleName(indexDefOptionNode,
"indexName");
if (null != indexNameNode) {
statement.getSqlTokens().add(new IndexToken(indexNameNode.getStart().getStartIndex(),
indexNameNode.getText(), statement.getTables().getSingleTableName()));
statement.getSqlTokens()
.add(VisitorUtils.visitIndex(indexNameNode, statement.getTables().getSingleTableName()));
}
}
}
......
......@@ -38,19 +38,19 @@ public class MySQLAddPrimaryKeyVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
ParserRuleContext constraintDefinitionNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext constraintDefinitionNode = TreeUtils.getFirstChildByRuleName(ancestorNode,
"addConstraint");
if (null == constraintDefinitionNode) {
return;
}
ParserRuleContext primaryKeyOptionNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext primaryKeyOptionNode = TreeUtils.getFirstChildByRuleName(ancestorNode,
"primaryKeyOption");
if (null == primaryKeyOptionNode) {
return;
}
List<ParseTree> keyPartNodes = TreeUtils.getAllDescendantByRuleName(ancestorNode, "keyPart");
List<ParserRuleContext> keyPartNodes = TreeUtils.getAllDescendantByRuleName(ancestorNode, "keyPart");
if (null == keyPartNodes) {
return;
}
......
......@@ -33,20 +33,20 @@ public class MySQLChangeColumnVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
MySQLAlterTableStatement alterStatement = (MySQLAlterTableStatement) statement;
ParserRuleContext changeColumnCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext changeColumnCtx = TreeUtils.getFirstChildByRuleName(ancestorNode,
"changeColumn");
if (null == changeColumnCtx) {
return;
}
ParserRuleContext oldColumnCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(changeColumnCtx,
ParserRuleContext oldColumnCtx = TreeUtils.getFirstChildByRuleName(changeColumnCtx,
"columnName");
if (null == oldColumnCtx) {
return;
}
ParserRuleContext columnDefinitionCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(changeColumnCtx,
ParserRuleContext columnDefinitionCtx = TreeUtils.getFirstChildByRuleName(changeColumnCtx,
"columnDefinition");
if (null == columnDefinitionCtx) {
......
......@@ -18,11 +18,12 @@
package io.shardingsphere.core.parsing.antler.phrase.visitor.mysql;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
import io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor;
import io.shardingsphere.core.parsing.antler.utils.TreeUtils;
import io.shardingsphere.core.parsing.antler.utils.VisitorUtils;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.parsing.parser.token.IndexToken;
public class MySQLDropIndexVisitor implements PhraseVisitor {
......@@ -32,17 +33,28 @@ public class MySQLDropIndexVisitor implements PhraseVisitor {
*/
@Override
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
ParserRuleContext dropIndexDefNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext dropIndexDefNode = TreeUtils.getFirstChildByRuleName(ancestorNode,
"dropIndexDef");
if (null == dropIndexDefNode) {
return;
}
int childCnt = dropIndexDefNode.getChildCount();
if (0 == childCnt) {
return;
}
ParseTree lastChild = dropIndexDefNode.getChild(childCnt - 1);
if(!(lastChild instanceof ParserRuleContext)) {
return;
}
ParserRuleContext indexNameNode = (ParserRuleContext) dropIndexDefNode
.getChild(dropIndexDefNode.getChildCount() - 1);
ParserRuleContext indexNameNode = (ParserRuleContext) lastChild;
if (null != indexNameNode) {
statement.getSqlTokens().add(new IndexToken(indexNameNode.getStart().getStartIndex(),
indexNameNode.getText(), statement.getTables().getSingleTableName()));
statement.getSqlTokens()
.add(VisitorUtils.visitIndex(indexNameNode, statement.getTables().getSingleTableName()));
}
}
......
......@@ -16,24 +16,8 @@
*/
package io.shardingsphere.core.parsing.antler.phrase.visitor.oracle;
/*
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
import io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor;
import io.shardingsphere.core.parsing.antler.sql.ddl.AlterTableStatement;
......@@ -50,9 +34,9 @@ public class OracleDropPrimaryKeyVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext rootNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
ParseTree dropConstraintCtx = TreeUtils.getFirstChildByRuleName(rootNode, "dropConstraintClause");
ParserRuleContext dropConstraintCtx = TreeUtils.getFirstChildByRuleName(rootNode, "dropConstraintClause");
if (null != dropConstraintCtx) {
ParseTree primaryKeyCtx = TreeUtils.getFirstChildByRuleName(dropConstraintCtx, "primaryKey");
ParserRuleContext primaryKeyCtx = TreeUtils.getFirstChildByRuleName(dropConstraintCtx, "primaryKey");
if (null != primaryKeyCtx) {
alterStatement.setDropPrimaryKey(true);
}
......
......@@ -20,7 +20,6 @@ package io.shardingsphere.core.parsing.antler.phrase.visitor.oracle;
import java.util.List;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
import io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor;
import io.shardingsphere.core.parsing.antler.sql.ddl.AlterTableStatement;
......@@ -35,18 +34,18 @@ public class OracleModifyColumnVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
ParserRuleContext modifyColumnCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext modifyColumnCtx = TreeUtils.getFirstChildByRuleName(ancestorNode,
"modifyColumn");
if (null == modifyColumnCtx) {
return;
}
List<ParseTree> columnNodes = TreeUtils.getAllDescendantByRuleName(modifyColumnCtx, "modifyColProperties");
List<ParserRuleContext> columnNodes = TreeUtils.getAllDescendantByRuleName(modifyColumnCtx, "modifyColProperties");
if (null == columnNodes) {
return;
}
for (final ParseTree each : columnNodes) {
for (final ParserRuleContext each : columnNodes) {
// it`s not columndefinition, but can call this method
ColumnDefinition column = VisitorUtils.visitColumnDefinition(each);
if (null != column) {
......
......@@ -21,8 +21,8 @@ import org.antlr.v4.runtime.ParserRuleContext;
import io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor;
import io.shardingsphere.core.parsing.antler.utils.TreeUtils;
import io.shardingsphere.core.parsing.antler.utils.VisitorUtils;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.parsing.parser.token.IndexToken;
public class SQLServerAddIndexVisitor implements PhraseVisitor {
......@@ -32,17 +32,17 @@ public class SQLServerAddIndexVisitor implements PhraseVisitor {
*/
@Override
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
ParserRuleContext indexDefOptionNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext indexDefOptionNode = TreeUtils.getFirstChildByRuleName(ancestorNode,
"addColumn");
if (null == indexDefOptionNode) {
return;
}
ParserRuleContext indexNameNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(indexDefOptionNode,
ParserRuleContext indexNameNode = TreeUtils.getFirstChildByRuleName(indexDefOptionNode,
"indexName");
if (null != indexNameNode) {
statement.getSqlTokens().add(new IndexToken(indexNameNode.getStart().getStartIndex(),
indexNameNode.getText(), statement.getTables().getSingleTableName()));
statement.getSqlTokens()
.add(VisitorUtils.visitIndex(indexNameNode, statement.getTables().getSingleTableName()));
}
}
......
......@@ -38,25 +38,25 @@ public class SQLServerAddPrimaryKeyVisitor implements PhraseVisitor {
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
AlterTableStatement alterStatement = (AlterTableStatement) statement;
ParserRuleContext addColumnCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode, "addColumn");
ParserRuleContext addColumnCtx = TreeUtils.getFirstChildByRuleName(ancestorNode, "addColumn");
if (null == addColumnCtx) {
return;
}
ParseTree tableConstraintCtx = TreeUtils.getFirstChildByRuleName(addColumnCtx, "tableConstraint");
ParserRuleContext tableConstraintCtx = TreeUtils.getFirstChildByRuleName(addColumnCtx, "tableConstraint");
if (null == tableConstraintCtx) {
return;
}
ParserRuleContext primaryKeyCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(tableConstraintCtx,
ParserRuleContext primaryKeyCtx = TreeUtils.getFirstChildByRuleName(tableConstraintCtx,
"primaryKey");
if (null == primaryKeyCtx) {
return;
}
List<ParseTree> columnNameCtxs = TreeUtils.getAllDescendantByRuleName(tableConstraintCtx, "columnName");
List<ParserRuleContext> columnNameCtxs = TreeUtils.getAllDescendantByRuleName(tableConstraintCtx, "columnName");
for (ParseTree columnNameCtx : columnNameCtxs) {
alterStatement.getUpdateColumns().put(columnNameCtx.getText(),
new ColumnDefinition(columnNameCtx.getText(), null, null, true));
......
......@@ -21,8 +21,8 @@ import org.antlr.v4.runtime.ParserRuleContext;
import io.shardingsphere.core.parsing.antler.phrase.visitor.PhraseVisitor;
import io.shardingsphere.core.parsing.antler.utils.TreeUtils;
import io.shardingsphere.core.parsing.antler.utils.VisitorUtils;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.parsing.parser.token.IndexToken;
public class SQLServerDropIndexVisitor implements PhraseVisitor {
......@@ -32,14 +32,14 @@ public class SQLServerDropIndexVisitor implements PhraseVisitor {
*/
@Override
public void visit(final ParserRuleContext ancestorNode, final SQLStatement statement) {
ParserRuleContext indexDefOptionNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext indexDefOptionNode = TreeUtils.getFirstChildByRuleName(ancestorNode,
"alterDropIndex");
if (null != indexDefOptionNode) {
ParserRuleContext indexNameNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(indexDefOptionNode,
ParserRuleContext indexNameNode = TreeUtils.getFirstChildByRuleName(indexDefOptionNode,
"indexName");
if (null != indexNameNode) {
statement.getSqlTokens().add(new IndexToken(indexNameNode.getStart().getStartIndex(),
indexNameNode.getText(), statement.getTables().getSingleTableName()));
statement.getSqlTokens()
.add(VisitorUtils.visitIndex(indexNameNode, statement.getTables().getSingleTableName()));
}
}
}
......
......@@ -20,6 +20,7 @@ package io.shardingsphere.core.parsing.antler.utils;
import java.util.ArrayList;
import java.util.List;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
public class TreeUtils {
......@@ -33,7 +34,7 @@ public class TreeUtils {
* @param name rule name
* @return match node
*/
public static ParseTree getFirstChildByRuleName(final ParseTree node, final String name) {
public static ParserRuleContext getFirstChildByRuleName(final ParserRuleContext node, final String name) {
if (null == node) {
return null;
}
......@@ -49,7 +50,11 @@ public class TreeUtils {
for (int i = 0; i < node.getChildCount(); i++) {
ParseTree child = node.getChild(i);
ParseTree retNode = getFirstChildByRuleName(child, name);
if(!(child instanceof ParserRuleContext)) {
continue;
}
ParserRuleContext retNode = getFirstChildByRuleName((ParserRuleContext)child, name);
if (null != retNode) {
return retNode;
}
......@@ -64,7 +69,7 @@ public class TreeUtils {
* @param name rule name
* @return match nodes
*/
public static List<ParseTree> getAllDescendantByRuleName(final ParseTree node, final String name) {
public static List<ParserRuleContext> getAllDescendantByRuleName(final ParserRuleContext node, final String name) {
if (null == node) {
return null;
}
......@@ -74,7 +79,7 @@ public class TreeUtils {
ruleName = Character.toUpperCase(name.charAt(0)) + name.substring(1) + RULE_SUFFIX;
}
List<ParseTree> childs = new ArrayList<>();
List<ParserRuleContext> childs = new ArrayList<>();
if (ruleName.equals(node.getClass().getSimpleName())) {
childs.add(node);
}
......@@ -84,14 +89,16 @@ public class TreeUtils {
return childs;
}
List<ParseTree> childNodes = new ArrayList<>();
List<ParserRuleContext> childNodes = new ArrayList<>();
for (int i = 0; i < count; i++) {
ParseTree child = node.getChild(i);
childNodes.add(child);
if(child instanceof ParserRuleContext) {
childNodes.add((ParserRuleContext)child);
}
}
for (final ParseTree child : childNodes) {
List<ParseTree> retChilds = getAllDescendantByRuleName(child, name);
for (final ParserRuleContext child : childNodes) {
List<ParserRuleContext> retChilds = getAllDescendantByRuleName(child, name);
if (retChilds != null) {
childs.addAll(retChilds);
}
......
......@@ -17,33 +17,36 @@
package io.shardingsphere.core.parsing.antler.utils;
import java.util.ArrayList;
import java.util.List;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
import io.shardingsphere.core.parsing.antler.sql.ddl.ColumnDefinition;
import io.shardingsphere.core.parsing.antler.sql.ddl.ColumnPosition;
import io.shardingsphere.core.parsing.lexer.token.Symbol;
import io.shardingsphere.core.parsing.parser.token.IndexToken;
public class VisitorUtils {
/**
* Parse column definition.
*
* @param columnDefinitionNode
* column definition rule
* @param columnDefinitionNode column definition rule
* @return column defition
*/
public static ColumnDefinition visitColumnDefinition(final ParseTree columnDefinitionNode) {
public static ColumnDefinition visitColumnDefinition(final ParserRuleContext columnDefinitionNode) {
if (null == columnDefinitionNode) {
return null;
}
ParserRuleContext columnNameNode = (ParserRuleContext) (ParserRuleContext) TreeUtils
ParserRuleContext columnNameNode = TreeUtils
.getFirstChildByRuleName(columnDefinitionNode, "columnName");
if (null == columnNameNode) {
return null;
}
ParserRuleContext dataTypeCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(columnDefinitionNode,
ParserRuleContext dataTypeCtx = TreeUtils.getFirstChildByRuleName(columnDefinitionNode,
"dataType");
String typeName = null;
......@@ -53,7 +56,7 @@ public class VisitorUtils {
Integer length = null;
ParserRuleContext dataTypeLengthCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(dataTypeCtx,
ParserRuleContext dataTypeLengthCtx = TreeUtils.getFirstChildByRuleName(dataTypeCtx,
"dataTypeLength");
if (null != dataTypeLengthCtx) {
......@@ -67,7 +70,7 @@ public class VisitorUtils {
}
}
ParserRuleContext primaryKeyNode = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(columnDefinitionNode,
ParserRuleContext primaryKeyNode = TreeUtils.getFirstChildByRuleName(columnDefinitionNode,
"primaryKey");
boolean primaryKey = false;
if (null != primaryKeyNode) {
......@@ -77,14 +80,19 @@ public class VisitorUtils {
return new ColumnDefinition(columnNameNode.getText(), typeName, length, primaryKey);
}
/** Visit column position.
* @param ancestorNode ancestor node of ast
* @param columnName column name
* @return
*/
public static ColumnPosition visitFirstOrAfter(ParserRuleContext ancestorNode, String columnName) {
ParserRuleContext firstOrAfterColumnCtx = (ParserRuleContext) TreeUtils.getFirstChildByRuleName(ancestorNode,
ParserRuleContext firstOrAfterColumnCtx = TreeUtils.getFirstChildByRuleName(ancestorNode,
"firstOrAfterColumn");
if (null == firstOrAfterColumnCtx) {
return null;
}
ParseTree columnNameCtx = TreeUtils.getFirstChildByRuleName(firstOrAfterColumnCtx, "columnName");
ParserRuleContext columnNameCtx = TreeUtils.getFirstChildByRuleName(firstOrAfterColumnCtx, "columnName");
ColumnPosition columnPosition = new ColumnPosition();
columnPosition.setStartIndex(firstOrAfterColumnCtx.getStart().getStartIndex());
......@@ -97,4 +105,49 @@ public class VisitorUtils {
return columnPosition;
}
/** Visit indices node
* @param ancestorNode ancestor node of ast
* @param tableName table name
* @return
*/
public static List<IndexToken> visitIndices(ParserRuleContext ancestorNode, String tableName) {
List<ParserRuleContext> indexNameCtxs = TreeUtils.getAllDescendantByRuleName(ancestorNode,
"indexName");
if (null == indexNameCtxs) {
return null;
}
List<IndexToken> indicesToken = new ArrayList<>();
for(ParserRuleContext each : indexNameCtxs) {
indicesToken.add(visitIndex(each, tableName));
}
return indicesToken;
}
/** Visit index node.
* @param indexNameCtx index name context
* @param tableName table name
* @return
*/
public static IndexToken visitIndex(ParserRuleContext indexNameCtx, String tableName) {
String name = getName(indexNameCtx.getText());
int startPos = indexNameCtx.getStop().getStopIndex() - name.length();
return new IndexToken(startPos, name, tableName);
}
public static String getName(String text) {
String dotString = Symbol.DOT.getLiterals();
int pos = text.lastIndexOf(dotString);
if (pos > 0) {
return text.substring(pos + dotString.length());
} else {
return text;
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册