diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml
index c4c5ab721..ce358510a 100644
--- a/sqlTranslate/.idea/workspace.xml
+++ b/sqlTranslate/.idea/workspace.xml
@@ -4,11 +4,9 @@
-
+
-
-
@@ -107,13 +105,6 @@
1723106789329
-
- 1723871742424
-
-
-
- 1723871742424
-
1723992163694
@@ -450,7 +441,14 @@
1726154479052
-
+
+ 1726197698087
+
+
+
+ 1726197698087
+
+
@@ -475,7 +473,6 @@
-
@@ -490,7 +487,8 @@
-
+
+
diff --git a/sqlTranslate/src/main/java/Main.java b/sqlTranslate/src/main/java/Main.java
index f47f4eb17..3c26a5029 100644
--- a/sqlTranslate/src/main/java/Main.java
+++ b/sqlTranslate/src/main/java/Main.java
@@ -31,6 +31,7 @@ public class Main {
// " WHERE d.department_name = 'Sales'\n" +
// ");";
String sql = "ALTER TABLE employees ADD email VARCHAR2(100) Check (email != '12813@163.com');";
+// String sql = "ALTER TABLE employees ADD CONSTRAINT emp_pk PRIMARY KEY (employee_id);";
OracleLexer lexer = new OracleLexer(sql);
lexer.printTokens();
OracleParser parser = new OracleParser(lexer);
diff --git a/sqlTranslate/src/main/java/Parser/OracleParser.java b/sqlTranslate/src/main/java/Parser/OracleParser.java
index 109cbb58b..a63b2ec8c 100644
--- a/sqlTranslate/src/main/java/Parser/OracleParser.java
+++ b/sqlTranslate/src/main/java/Parser/OracleParser.java
@@ -4,10 +4,7 @@ import Lexer.OracleLexer;
import Lexer.Token;
import Parser.AST.ASTNode;
import Exception.ParseFailedException;
-import Parser.AST.AlterTable.AlterAddColumnNode;
-import Parser.AST.AlterTable.AlterEndNode;
-import Parser.AST.AlterTable.AlterNode;
-import Parser.AST.AlterTable.AlterObjNode;
+import Parser.AST.AlterTable.*;
import Parser.AST.CaseWhen.CaseConditionNode;
import Parser.AST.CaseWhen.CaseElseNode;
import Parser.AST.CaseWhen.CaseEndNode;
@@ -955,8 +952,9 @@ public class OracleParser {
else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("ADD")) {
// add column
if (i + 1 < parseTokens.size() && parseTokens.get(i + 1).hasType(Token.TokenType.IDENTIFIER)) {
- i++;
tokens = new ArrayList<>();
+ tokens.add(parseTokens.get(i));
+ i++;
boolean state = false;
AlterAddColumnNode child = new AlterAddColumnNode();
child.setName(parseTokens.get(i));
@@ -1014,9 +1012,10 @@ public class OracleParser {
}
// add constraint
else if (i + 1 < parseTokens.size() && parseTokens.get(i + 1).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i + 1).getValue().equalsIgnoreCase("CONSTRAINT")) {
- i++;
tokens = new ArrayList<>();
tokens.add(parseTokens.get(i));
+ i++;
+ tokens.add(parseTokens.get(i));
for (int j = i + 1; j < parseTokens.size(); j++) {
/**
* CONSTRAINT pk_example PRIMARY KEY (column1, column2)
@@ -1055,13 +1054,15 @@ public class OracleParser {
}
continue;
}
- if ((parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equals(",")) ||
- (parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equals(")")) ) {
- i = j;
+ if ((parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equals(";"))) {
+ i = j - 1;
break;
}
tokens.add(parseTokens.get(j));
}
+ ASTNode childNode = new AlterAddConstraintNode(tokens);
+ currentNode.addChild(childNode);
+ currentNode = childNode;
}
// error sql
else {