From 3254457fb00e4b7b78e3a33601784542499ffdf2 Mon Sep 17 00:00:00 2001 From: XudongXie Date: Fri, 13 Sep 2024 14:37:09 +0800 Subject: [PATCH] revise --- sqlTranslate/.idea/workspace.xml | 17 +++---- .../AST/AlterTable/AlterAddColumnNode.java | 4 +- .../AlterTable/AlterAddConstraintNode.java | 4 +- .../AST/AlterTable/AlterDropColumnNode.java | 4 +- .../AlterTable/AlterDropConstraintNode.java | 4 +- .../AST/AlterTable/AlterModifyColumnNode.java | 27 +++++++++- .../java/Parser/AST/AlterTable/AlterNode.java | 4 +- .../Parser/AST/AlterTable/AlterObjNode.java | 4 +- .../AST/AlterTable/AlterRenameColumnNode.java | 4 +- .../AST/AlterTable/AlterRenameTableNode.java | 4 +- .../src/main/java/Parser/OracleParser.java | 50 ++++++++++++++++++- 11 files changed, 97 insertions(+), 29 deletions(-) diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml index ce358510a..1e1f96cea 100644 --- a/sqlTranslate/.idea/workspace.xml +++ b/sqlTranslate/.idea/workspace.xml @@ -6,7 +6,6 @@ - diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterAddColumnNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterAddColumnNode.java index cf2c2e69d..0451f2586 100644 --- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterAddColumnNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterAddColumnNode.java @@ -28,9 +28,9 @@ public class AlterAddColumnNode extends ASTNode { @Override public void visit(ASTNode node, StringBuilder queryString) { queryString.append(toString() + " "); - for (ASTNode child : getChildren()) - + for (ASTNode child : getChildren()) { child.visit(child, queryString); + } } public Token getName() { diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterAddConstraintNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterAddConstraintNode.java index e070e5703..bb4adf9d8 100644 --- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterAddConstraintNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterAddConstraintNode.java @@ -17,8 +17,8 @@ public class AlterAddConstraintNode extends ASTNode { @Override public void visit(ASTNode node, StringBuilder queryString) { queryString.append(toString() + " "); - for (ASTNode child : getChildren()) - + for (ASTNode child : getChildren()) { child.visit(child, queryString); + } } } diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterDropColumnNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterDropColumnNode.java index 120116cfb..712ebcc18 100644 --- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterDropColumnNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterDropColumnNode.java @@ -18,8 +18,8 @@ public class AlterDropColumnNode extends ASTNode { @Override public void visit(ASTNode node, StringBuilder queryString) { queryString.append(toString() + " "); - for (ASTNode child : getChildren()) - + for (ASTNode child : getChildren()) { child.visit(child, queryString); + } } } diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterDropConstraintNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterDropConstraintNode.java index b32ad2a67..88cdffce7 100644 --- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterDropConstraintNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterDropConstraintNode.java @@ -17,8 +17,8 @@ public class AlterDropConstraintNode extends ASTNode { @Override public void visit(ASTNode node, StringBuilder queryString) { queryString.append(toString() + " "); - for (ASTNode child : getChildren()) - + for (ASTNode child : getChildren()) { child.visit(child, queryString); + } } } diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterModifyColumnNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterModifyColumnNode.java index 49a7d0f4e..62ff0fba8 100644 --- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterModifyColumnNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterModifyColumnNode.java @@ -6,6 +6,13 @@ import Parser.AST.ASTNode; import java.util.List; public class AlterModifyColumnNode extends ASTNode { + private Token columnName; + private Token columnType; + + public AlterModifyColumnNode() { + super(); + } + public AlterModifyColumnNode(ASTNode node) { super(node); } @@ -14,11 +21,27 @@ public class AlterModifyColumnNode extends ASTNode { super(tokens); } + public void setColumnType(Token columnType) { + this.columnType = columnType; + } + + public Token getColumnType() { + return columnType; + } + + public void setColumnName(Token columnName) { + this.columnName = columnName; + } + + public Token getColumnName() { + return columnName; + } + @Override public void visit(ASTNode node, StringBuilder queryString) { queryString.append(toString() + " "); - for (ASTNode child : getChildren()) - + for (ASTNode child : getChildren()) { child.visit(child, queryString); + } } } diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterNode.java index 23c795a90..1a7704078 100644 --- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterNode.java @@ -17,8 +17,8 @@ public class AlterNode extends ASTNode { @Override public void visit(ASTNode node, StringBuilder queryString) { queryString.append(toString() + " "); - for (ASTNode child : getChildren()) - + for (ASTNode child : getChildren()) { child.visit(child, queryString); + } } } diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterObjNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterObjNode.java index c1a06a720..5149a0b09 100644 --- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterObjNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterObjNode.java @@ -17,8 +17,8 @@ public class AlterObjNode extends ASTNode { @Override public void visit(ASTNode node, StringBuilder queryString) { queryString.append(toString() + " "); - for (ASTNode child : getChildren()) - + for (ASTNode child : getChildren()) { child.visit(child, queryString); + } } } diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterRenameColumnNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterRenameColumnNode.java index 8295026a7..32a11f4c1 100644 --- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterRenameColumnNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterRenameColumnNode.java @@ -17,8 +17,8 @@ public class AlterRenameColumnNode extends ASTNode { @Override public void visit(ASTNode node, StringBuilder queryString) { queryString.append(toString() + " "); - for (ASTNode child : getChildren()) - + for (ASTNode child : getChildren()) { child.visit(child, queryString); + } } } diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterRenameTableNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterRenameTableNode.java index 049fed275..85a5c6528 100644 --- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterRenameTableNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterRenameTableNode.java @@ -17,8 +17,8 @@ public class AlterRenameTableNode extends ASTNode { @Override public void visit(ASTNode node, StringBuilder queryString) { queryString.append(toString() + " "); - for (ASTNode child : getChildren()) - + for (ASTNode child : getChildren()) { child.visit(child, queryString); + } } } diff --git a/sqlTranslate/src/main/java/Parser/OracleParser.java b/sqlTranslate/src/main/java/Parser/OracleParser.java index a63b2ec8c..411743f10 100644 --- a/sqlTranslate/src/main/java/Parser/OracleParser.java +++ b/sqlTranslate/src/main/java/Parser/OracleParser.java @@ -1076,10 +1076,56 @@ public class OracleParser { } else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("DROP")) { - + if (i + 1 < parseTokens.size() && parseTokens.get(i + 1).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i + 1).getValue().equalsIgnoreCase("COLUMN")) { + tokens = new ArrayList<>(); + tokens.add(parseTokens.get(i)); + for (int j = i + 1; j < parseTokens.size(); j++) { + if (parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equalsIgnoreCase(";")) { + i = j - 1; + break; + } + tokens.add(parseTokens.get(j)); + } + ASTNode childNode = new AlterDropColumnNode(tokens); + currentNode.addChild(childNode); + currentNode = childNode; + } + else if (i + 1 < parseTokens.size() && parseTokens.get(i + 1).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i + 1).getValue().equalsIgnoreCase("CONSTRAINT")) { + tokens = new ArrayList<>(); + tokens.add(parseTokens.get(i)); + for (int j = i + 1; j < parseTokens.size(); j++) { + if (parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equalsIgnoreCase(";")) { + i = j - 1; + break; + } + tokens.add(parseTokens.get(j)); + } + ASTNode childNode = new AlterDropConstraintNode(tokens); + currentNode.addChild(childNode); + currentNode = childNode; + } + else { + try { + throw new ParseFailedException("Parse failed:There exists syntex error in the input sql!"); + } + catch (ParseFailedException e) { + e.printStackTrace(); + } + } } else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("MODIFY")) { - + tokens = new ArrayList<>(); + tokens.add(parseTokens.get(i)); + for (int j = i + 1; j < parseTokens.size(); j++) { + if (parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equalsIgnoreCase(";")) { + i = j - 1; + break; + } + tokens.add(parseTokens.get(j)); + } + ASTNode childNode = new AlterModifyColumnNode(tokens); + currentNode.addChild(childNode); + currentNode = childNode; } else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("RENAME")) {