diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml index cee46f3eb..8304d3f7a 100644 --- a/sqlTranslate/.idea/workspace.xml +++ b/sqlTranslate/.idea/workspace.xml @@ -5,9 +5,10 @@ - + - + + - - - + - - - - - - - + + + + + + - - + + + + - - @@ -482,7 +475,7 @@ diff --git a/sqlTranslate/src/main/java/parser/OracleParser.java b/sqlTranslate/src/main/java/parser/OracleParser.java index 9c6bf93b1..fb2c1d4ad 100644 --- a/sqlTranslate/src/main/java/parser/OracleParser.java +++ b/sqlTranslate/src/main/java/parser/OracleParser.java @@ -2362,7 +2362,7 @@ public class OracleParser { ASTNode currentNode = root; for (int i = 1; i < parseTokens.size(); i++) { // match declare - if (currentNode == root) { + if (currentNode == root && !(parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("BEGIN"))) { for (int j = i; j < parseTokens.size(); j++) { if (parseTokens.get(j).hasType(Token.TokenType.KEYWORD) && parseTokens.get(j).getValue().equalsIgnoreCase("BEGIN")) { i = j - 1; diff --git a/sqlTranslate/src/test/java/testCommitRollbackExec.java b/sqlTranslate/src/test/java/testCommitRollbackExec.java index f5014755f..c825ef5eb 100644 --- a/sqlTranslate/src/test/java/testCommitRollbackExec.java +++ b/sqlTranslate/src/test/java/testCommitRollbackExec.java @@ -14,11 +14,13 @@ public class testCommitRollbackExec { @BeforeEach public void loadData() { - testSQL.add("BEGIN\n" + + testSQL.add("DECLARE\n" + + "BEGIN\n" + " INSERT INTO my_table (id, value) VALUES (1, 'test');\n" + " ROLLBACK;\n" + "END;"); - testSQL.add("BEGIN\n" + + testSQL.add("DECLARE\n" + + "BEGIN\n" + " INSERT INTO my_table (id, value) VALUES (1, 'test');\n" + " COMMIT;\n" + "END;"); diff --git a/sqlTranslate/src/test/java/testCreateTable.java b/sqlTranslate/src/test/java/testCreateTable.java new file mode 100644 index 000000000..91d6c1397 --- /dev/null +++ b/sqlTranslate/src/test/java/testCreateTable.java @@ -0,0 +1,53 @@ +import config.CommonConfig; +import generator.OpenGaussGenerator; +import lexer.OracleLexer; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import parser.OracleParser; +import parser.ast.ASTNode; + +import java.util.ArrayList; +import java.util.List; + +public class testCreateTable { + List testSQL = new ArrayList<>(); + @BeforeEach + public void loadData() + { + testSQL.add("CREATE TABLE employees (\n" + + " employee_id NUMBER PRIMARY KEY,\n" + + " first_name VARCHAR2(20) Check(first_name > '221'),\n" + + " last_name VARCHAR2(25) Check (last_name != '12813@163.com'),\n" + + " email VARCHAR2(25),\n" + + " hire_date DATE,\n" + + " CONSTRAINT chk_example CHECK (employee_id > 0)" + + ");"); + System.out.println("===== test of the alter table ====="); + System.out.println("The source DBMS is: " + CommonConfig.getSourceDB()); + System.out.println("The target DBMS is: " + CommonConfig.getTargetDB()); + System.out.println(); + } + + @Test + public void test() + { + int num = 1; + for (String sql : testSQL) { + System.out.println("===== test of the SQL" + num++ + " ====="); + System.out.println("Input SQL: " + sql); + OracleLexer lexer = new OracleLexer(sql); + lexer.printTokens(); + OracleParser parser = new OracleParser(lexer); + ASTNode root = parser.parse(); + System.out.println("The AST of the input SQL: "); + System.out.println(root.getASTString()); + System.out.println("The query String of the AST parsed from the input SQL: "); + System.out.println(root.toQueryString()); + OpenGaussGenerator generator = new OpenGaussGenerator(root); + System.out.println("The converted query String: "); + System.out.println(generator.generate()); + + System.out.println(); + } + } +}