diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml
index 1e1f96cea..76fb709cc 100644
--- a/sqlTranslate/.idea/workspace.xml
+++ b/sqlTranslate/.idea/workspace.xml
@@ -6,6 +6,7 @@
+
@@ -104,13 +105,6 @@
1723106789329
-
- 1724145125754
-
-
-
- 1724145125754
-
1724164698153
@@ -447,7 +441,14 @@
1726198053495
-
+
+ 1726209430618
+
+
+
+ 1726209430619
+
+
diff --git a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterModifyColumnNode.java b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterModifyColumnNode.java
index 62ff0fba8..14a70e03c 100644
--- a/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterModifyColumnNode.java
+++ b/sqlTranslate/src/main/java/Parser/AST/AlterTable/AlterModifyColumnNode.java
@@ -3,6 +3,7 @@ package Parser.AST.AlterTable;
import Lexer.Token;
import Parser.AST.ASTNode;
+import java.util.ArrayList;
import java.util.List;
public class AlterModifyColumnNode extends ASTNode {
@@ -44,4 +45,13 @@ public class AlterModifyColumnNode extends ASTNode {
child.visit(child, queryString);
}
}
+
+ public void ResetTokensbyNameTypeConstraint() {
+ List tokens = new ArrayList<>();
+ tokens.add(new Token(Token.TokenType.KEYWORD, "MODIFY"));
+ tokens.add(columnName);
+ tokens.add(columnType);
+ tokens.add(new Token(Token.TokenType.SYMBOL, ";"));
+ setTokens(tokens);
+ }
}
diff --git a/sqlTranslate/src/main/java/Parser/OracleParser.java b/sqlTranslate/src/main/java/Parser/OracleParser.java
index 411743f10..fd0e360bc 100644
--- a/sqlTranslate/src/main/java/Parser/OracleParser.java
+++ b/sqlTranslate/src/main/java/Parser/OracleParser.java
@@ -1116,19 +1116,70 @@ public class OracleParser {
else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("MODIFY")) {
tokens = new ArrayList<>();
tokens.add(parseTokens.get(i));
+ AlterModifyColumnNode childNode = new AlterModifyColumnNode();
for (int j = i + 1; j < parseTokens.size(); j++) {
+ if (j == i + 1) {
+ childNode.setColumnName(parseTokens.get(j));
+ }
+ if (j == i + 2) {
+ childNode.setColumnType(parseTokens.get(j));
+ }
+ if (j > i + 3) {
+ try {
+ throw new ParseFailedException("Parse failed:There exists syntex error in the input sql!");
+ }
+ catch (ParseFailedException e) {
+ e.printStackTrace();
+ }
+ break;
+ }
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);
+ childNode.setTokens(tokens);
currentNode.addChild(childNode);
currentNode = childNode;
}
else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("RENAME")) {
-
+ 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 AlterRenameColumnNode(tokens);
+ currentNode.addChild(childNode);
+ currentNode = childNode;
+ }
+ else if (i + 1 < parseTokens.size() && parseTokens.get(i + 1).hasType(Token.TokenType.IDENTIFIER)) {
+ 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 AlterRenameTableNode(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.SYMBOL) && parseTokens.get(i).getValue().equals(";")) {
tokens = new ArrayList<>();