forked from opengaussexamples/examples
add unit test
This commit is contained in:
parent
acaf7f1214
commit
e2ba57e485
|
|
@ -5,10 +5,22 @@
|
|||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="add unit test">
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testDelete.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testDropTable.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testException.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testFunction.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testIfElse.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testInsert.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testLoop.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testPL.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testProcedure.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testSelect.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testTrigger.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testUpdate.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/test/java/testView.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/Main.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Main.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/generator/OpenGaussGenerator.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/generator/OpenGaussGenerator.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/parser/ast/ASTNode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/parser/ast/ASTNode.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/parser/ast/function/FunctionRetDefNode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/parser/ast/function/FunctionRetDefNode.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/parser/ast/procedure/ProcedureRetDefNode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/parser/ast/procedure/ProcedureRetDefNode.java" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
|
@ -50,7 +62,17 @@
|
|||
"JUnit.testCreateTable.test.executor": "Run",
|
||||
"JUnit.testDelete.test.executor": "Run",
|
||||
"JUnit.testDropTable.test.executor": "Run",
|
||||
"JUnit.testException.executor": "Debug",
|
||||
"JUnit.testException.executor": "Run",
|
||||
"JUnit.testException.test.executor": "Run",
|
||||
"JUnit.testIfElse.test.executor": "Run",
|
||||
"JUnit.testInsert.test.executor": "Run",
|
||||
"JUnit.testLoop.test.executor": "Run",
|
||||
"JUnit.testPL.executor": "Run",
|
||||
"JUnit.testProcedure.test.executor": "Run",
|
||||
"JUnit.testSelect.test.executor": "Run",
|
||||
"JUnit.testTrigger.executor": "Run",
|
||||
"JUnit.testUpdate.executor": "Run",
|
||||
"JUnit.testView.executor": "Run",
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"git-widget-placeholder": "master",
|
||||
|
|
@ -62,69 +84,68 @@
|
|||
"settings.editor.selected.configurable": "preferences.pluginManager"
|
||||
}
|
||||
}]]></component>
|
||||
<component name="RunManager" selected="JUnit.testException.test">
|
||||
<configuration name="testCreateTable" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<component name="RunManager" selected="JUnit.testView">
|
||||
<configuration name="testProcedure.test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="sqlTranslate" />
|
||||
<option name="PACKAGE_NAME" value="" />
|
||||
<option name="MAIN_CLASS_NAME" value="testCreateTable" />
|
||||
<option name="MAIN_CLASS_NAME" value="testProcedure" />
|
||||
<option name="METHOD_NAME" value="test" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="testSelect.test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="sqlTranslate" />
|
||||
<option name="PACKAGE_NAME" value="" />
|
||||
<option name="MAIN_CLASS_NAME" value="testSelect" />
|
||||
<option name="METHOD_NAME" value="test" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="testTrigger" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="sqlTranslate" />
|
||||
<option name="PACKAGE_NAME" value="" />
|
||||
<option name="MAIN_CLASS_NAME" value="testTrigger" />
|
||||
<option name="TEST_OBJECT" value="class" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="testDelete.test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<configuration name="testUpdate" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="sqlTranslate" />
|
||||
<option name="PACKAGE_NAME" value="" />
|
||||
<option name="MAIN_CLASS_NAME" value="testDelete" />
|
||||
<option name="METHOD_NAME" value="test" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="testDropTable.test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="sqlTranslate" />
|
||||
<option name="PACKAGE_NAME" value="" />
|
||||
<option name="MAIN_CLASS_NAME" value="testDropTable" />
|
||||
<option name="METHOD_NAME" value="test" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="testException" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="sqlTranslate" />
|
||||
<option name="PACKAGE_NAME" value="" />
|
||||
<option name="MAIN_CLASS_NAME" value="testException" />
|
||||
<option name="MAIN_CLASS_NAME" value="testUpdate" />
|
||||
<option name="TEST_OBJECT" value="class" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="testException.test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<configuration name="testView" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="sqlTranslate" />
|
||||
<option name="PACKAGE_NAME" value="" />
|
||||
<option name="MAIN_CLASS_NAME" value="testException" />
|
||||
<option name="METHOD_NAME" value="test" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<option name="MAIN_CLASS_NAME" value="testView" />
|
||||
<option name="TEST_OBJECT" value="class" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<list>
|
||||
<item itemvalue="JUnit.testCreateTable" />
|
||||
<item itemvalue="JUnit.testDelete.test" />
|
||||
<item itemvalue="JUnit.testDropTable.test" />
|
||||
<item itemvalue="JUnit.testException" />
|
||||
<item itemvalue="JUnit.testException.test" />
|
||||
<item itemvalue="JUnit.testProcedure.test" />
|
||||
<item itemvalue="JUnit.testSelect.test" />
|
||||
<item itemvalue="JUnit.testTrigger" />
|
||||
<item itemvalue="JUnit.testUpdate" />
|
||||
<item itemvalue="JUnit.testView" />
|
||||
</list>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue="JUnit.testException.test" />
|
||||
<item itemvalue="JUnit.testException" />
|
||||
<item itemvalue="JUnit.testDropTable.test" />
|
||||
<item itemvalue="JUnit.testDelete.test" />
|
||||
<item itemvalue="JUnit.testCreateTable" />
|
||||
<item itemvalue="JUnit.testView" />
|
||||
<item itemvalue="JUnit.testUpdate" />
|
||||
<item itemvalue="JUnit.testTrigger" />
|
||||
<item itemvalue="JUnit.testSelect.test" />
|
||||
<item itemvalue="JUnit.testProcedure.test" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
|
|
@ -480,7 +501,7 @@
|
|||
<option name="project" value="LOCAL" />
|
||||
<updated>1726633703475</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="99" />
|
||||
<option name="localTasksCounter" value="100" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
|
|
|
|||
|
|
@ -57,32 +57,32 @@ public class Main {
|
|||
// " DBMS_OUTPUT.PUT_LINE('Caught an exception: Invalid number');\n" +
|
||||
// " WHEN OTHERS THEN\n" +
|
||||
// " DBMS_OUTPUT.PUT_LINE('Caught an exception: ' || SQLERRM);";
|
||||
// String sql = "CREATE OR REPLACE PROCEDURE update_salary (\n" +
|
||||
// " employee_id IN NUMBER,\n" +
|
||||
// " new_salary IN OUT NUMBER\n" +
|
||||
// " ) IS\n" +
|
||||
// " v_employee NUMBER;\n" +
|
||||
// " BEGIN\n" +
|
||||
// " SELECT * INTO v_employee FROM employees WHERE employee_id = employee_id;\n" +
|
||||
// "\n" +
|
||||
// " IF new_salary < 3000 THEN\n" +
|
||||
// " new_salary := new_salary * 1.1;\n" +
|
||||
// " ELSE\n" +
|
||||
// " new_salary := new_salary * 1.05;\n" +
|
||||
// " END IF;\n" +
|
||||
// "\n" +
|
||||
// " UPDATE employees SET salary = new_salary WHERE employee_id = employee_id;\n" +
|
||||
// " COMMIT;\n" +
|
||||
// "\n" +
|
||||
// " DBMS_OUTPUT.PUT_LINE('Updated Salary: ' || new_salary);\n" +
|
||||
// " EXCEPTION\n" +
|
||||
// " WHEN NO_DATA_FOUND THEN\n" +
|
||||
// " DBMS_OUTPUT.PUT_LINE('Employee not found.');\n" +
|
||||
// " WHEN TOO_MANY_ROWS THEN\n" +
|
||||
// " DBMS_OUTPUT.PUT_LINE('Multiple employees found.');\n" +
|
||||
// " WHEN OTHERS THEN\n" +
|
||||
// " DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);\n" +
|
||||
// " END update_salary;\n";
|
||||
String sql = "CREATE OR REPLACE PROCEDURE update_salary (\n" +
|
||||
" employee_id IN NUMBER,\n" +
|
||||
" new_salary IN OUT NUMBER\n" +
|
||||
" ) IS\n" +
|
||||
" v_employee NUMBER;\n" +
|
||||
" BEGIN\n" +
|
||||
" SELECT * INTO v_employee FROM employees WHERE employee_id = employee_id;\n" +
|
||||
"\n" +
|
||||
" IF new_salary < 3000 THEN\n" +
|
||||
" new_salary := new_salary * 1.1;\n" +
|
||||
" ELSE\n" +
|
||||
" new_salary := new_salary * 1.05;\n" +
|
||||
" END IF;\n" +
|
||||
"\n" +
|
||||
" UPDATE employees SET salary = new_salary WHERE employee_id = employee_id;\n" +
|
||||
" COMMIT;\n" +
|
||||
"\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('Updated Salary: ' || new_salary);\n" +
|
||||
" EXCEPTION\n" +
|
||||
" WHEN NO_DATA_FOUND THEN\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('Employee not found.');\n" +
|
||||
" WHEN TOO_MANY_ROWS THEN\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('Multiple employees found.');\n" +
|
||||
" WHEN OTHERS THEN\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);\n" +
|
||||
" END update_salary;\n";
|
||||
// String sql = "CREATE OR REPLACE FUNCTION string_length (\n" +
|
||||
// " input_string VARCHAR2\n" +
|
||||
// ") RETURN NUMBER IS\n" +
|
||||
|
|
@ -95,13 +95,13 @@ public class Main {
|
|||
// " BEGIN\n" +
|
||||
// " INSERT INTO audit_log (action, employee_id) VALUES ('INSERT', :NEW.id);\n" +
|
||||
// " END;";
|
||||
String sql = "DECLARE\n" +
|
||||
" v_name Varchar2(20);\n" +
|
||||
" v_salary employees.salary%TYPE;\n" +
|
||||
" BEGIN\n" +
|
||||
" SELECT name, salary INTO v_name, v_salary FROM employees WHERE employee_id = 100;\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('Name: ' || v_name || ', Salary: ' || v_salary);\n" +
|
||||
" END;";
|
||||
// String sql = "DECLARE\n" +
|
||||
// " v_name Varchar2(20);\n" +
|
||||
// " v_salary employees.salary%TYPE;\n" +
|
||||
// " BEGIN\n" +
|
||||
// " SELECT name, salary INTO v_name, v_salary FROM employees WHERE employee_id = 100;\n" +
|
||||
// " DBMS_OUTPUT.PUT_LINE('Name: ' || v_name || ', Salary: ' || v_salary);\n" +
|
||||
// " END;";
|
||||
OracleLexer lexer = new OracleLexer(sql);
|
||||
lexer.printTokens();
|
||||
OracleParser parser = new OracleParser(lexer);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import parser.ast.function.FunctionColumnNode;
|
|||
import parser.ast.function.FunctionEndNode;
|
||||
import parser.ast.function.FunctionNode;
|
||||
import parser.ast.function.FunctionRetDefNode;
|
||||
import parser.ast.iFELSIF.IFConditionNode;
|
||||
import parser.ast.insert.InsertNode;
|
||||
import parser.ast.join.JoinConditionNode;
|
||||
import parser.ast.join.JoinSourceTabNode;
|
||||
|
|
@ -31,10 +32,7 @@ import parser.ast.pl.PLBodyNode;
|
|||
import parser.ast.pl.PLDeclareNode;
|
||||
import parser.ast.pl.PLEndNode;
|
||||
import parser.ast.pl.PLNode;
|
||||
import parser.ast.procedure.ProcedureColumnNode;
|
||||
import parser.ast.procedure.ProcedureEndNode;
|
||||
import parser.ast.procedure.ProcedureNode;
|
||||
import parser.ast.procedure.ProcedureRetDefNode;
|
||||
import parser.ast.procedure.*;
|
||||
import parser.ast.select.SelectNode;
|
||||
import parser.ast.trigger.*;
|
||||
import parser.ast.update.UpdateNode;
|
||||
|
|
@ -101,6 +99,9 @@ public class OpenGaussGenerator {
|
|||
else if (node instanceof PLNode) {
|
||||
return GenPLSQL(node);
|
||||
}
|
||||
else if (node instanceof IFConditionNode) {
|
||||
return GenIfElseSQL(node);
|
||||
}
|
||||
else {
|
||||
try {
|
||||
throw new GenerateFailedException("Root node:" + node.getClass() + "(Unsupported node type!)");
|
||||
|
|
@ -189,6 +190,12 @@ public class OpenGaussGenerator {
|
|||
|
||||
private String GenPLSQL(ASTNode node) {
|
||||
visitPLSQL(node);
|
||||
// System.out.println(node.getASTString());
|
||||
return node.toQueryString();
|
||||
}
|
||||
|
||||
private String GenIfElseSQL(ASTNode node) {
|
||||
visitIfElse(node);
|
||||
return node.toQueryString();
|
||||
}
|
||||
|
||||
|
|
@ -240,6 +247,13 @@ public class OpenGaussGenerator {
|
|||
}
|
||||
}
|
||||
|
||||
private void visitIfElse(ASTNode node) {
|
||||
|
||||
for (ASTNode child : node.getChildren()) {
|
||||
visitIfElse(child);
|
||||
}
|
||||
}
|
||||
|
||||
private void visitException(ASTNode node) {
|
||||
if (CommonConfig.getSourceDB().equalsIgnoreCase("ORACLE-19C")
|
||||
&& CommonConfig.getTargetDB().equalsIgnoreCase("OPENGAUSS-3.0.0")) {
|
||||
|
|
@ -319,6 +333,9 @@ public class OpenGaussGenerator {
|
|||
else if (node instanceof ExceptionNode) {
|
||||
visitException(node);
|
||||
}
|
||||
else if (node instanceof ProcedurePLStatementNode) {
|
||||
CommonConvert(node);
|
||||
}
|
||||
}
|
||||
for (ASTNode child : node.getChildren()) {
|
||||
visitPL(child);
|
||||
|
|
@ -388,8 +405,10 @@ public class OpenGaussGenerator {
|
|||
private void CommonConvert(ASTNode node) {
|
||||
if (node.checkExistsByRegex("(?i)DBMS_OUTPUT.PUT_LINE\\(.*?\\)")) {
|
||||
String printObj = "";
|
||||
int index = -1;
|
||||
for (Token token: node.getTokens()) {
|
||||
if (token.getValue().matches("(?i)DBMS_OUTPUT.PUT_LINE\\(.*?\\)")) {
|
||||
index = node.getTokenIndexByRegex("(?i)DBMS_OUTPUT.PUT_LINE\\(.*?\\)");
|
||||
Pattern pattern = Pattern.compile("\\(([^()]*)\\)");
|
||||
Matcher matcher = pattern.matcher(token.getValue());
|
||||
while (matcher.find()) {
|
||||
|
|
@ -405,8 +424,8 @@ public class OpenGaussGenerator {
|
|||
tokens.add(new Token(Token.TokenType.STRING, "'%'"));
|
||||
tokens.add(new Token(Token.TokenType.SYMBOL, ","));
|
||||
tokens.add(new Token(Token.TokenType.IDENTIFIER, printObj));
|
||||
tokens.add(new Token(Token.TokenType.SYMBOL, ";"));
|
||||
node.setTokens(tokens);
|
||||
node.moveTokenByIndex(index);
|
||||
node.addTokensByIndex(index, tokens);
|
||||
}
|
||||
else {
|
||||
OracleLexer lexer = new OracleLexer(printObj.replace("||", " "));
|
||||
|
|
@ -433,8 +452,8 @@ public class OpenGaussGenerator {
|
|||
tokens.add(new Token(Token.TokenType.SYMBOL, ","));
|
||||
tokens.add(token);
|
||||
}
|
||||
tokens.add(new Token(Token.TokenType.SYMBOL, ";"));
|
||||
node.setTokens(tokens);
|
||||
node.moveTokenByIndex(index);
|
||||
node.addTokensByIndex(index, tokens);
|
||||
}
|
||||
else {
|
||||
List<Token> tokens = new ArrayList<>();
|
||||
|
|
@ -443,8 +462,8 @@ public class OpenGaussGenerator {
|
|||
tokens.add(new Token(Token.TokenType.STRING, "'%'"));
|
||||
tokens.add(new Token(Token.TokenType.SYMBOL, ","));
|
||||
tokens.add(new Token(Token.TokenType.STRING, "'" + output + "'"));
|
||||
tokens.add(new Token(Token.TokenType.SYMBOL, ";"));
|
||||
node.setTokens(tokens);
|
||||
node.moveTokenByIndex(index);
|
||||
node.addTokensByIndex(index, tokens);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ import lexer.Token;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public abstract class ASTNode {
|
||||
private List<Token> tokens;
|
||||
|
|
@ -31,6 +33,37 @@ public abstract class ASTNode {
|
|||
this.tokens = tokens;
|
||||
}
|
||||
|
||||
public void modifyTokens(int index, Token token) {
|
||||
tokens.set(index, token);
|
||||
}
|
||||
|
||||
public void moveTokenByIndex(int index) {
|
||||
tokens.remove(index);
|
||||
}
|
||||
|
||||
public void addTokenByIndex(int index, Token token) {
|
||||
tokens.add(index, token);
|
||||
}
|
||||
|
||||
public void addTokensByIndex(int index, List<Token> tokens) {
|
||||
this.tokens.addAll(index, tokens);
|
||||
}
|
||||
|
||||
public int getTokenIndexByRegex(String regex) {
|
||||
Pattern pattern = Pattern.compile(regex);
|
||||
Optional<Integer> indexOpt = tokens.stream()
|
||||
.filter(token -> pattern.matcher(token.getValue()).matches())
|
||||
.map(token -> tokens.indexOf(token))
|
||||
.findFirst();
|
||||
if (indexOpt.isPresent()) {
|
||||
int index = indexOpt.get();
|
||||
return index;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean checkExistsByRegex (String regex) {
|
||||
return tokens.stream().anyMatch(token -> token.getValue().matches(regex));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ public class FunctionRetDefNode extends ASTNode implements DataType {
|
|||
public FunctionRetDefNode() {
|
||||
super();
|
||||
setTokens(new ArrayList<>());
|
||||
setType(new Token(Token.TokenType.NULL, ""));
|
||||
}
|
||||
|
||||
public FunctionRetDefNode(ASTNode node) {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ public class ProcedureRetDefNode extends ASTNode implements DataType {
|
|||
public ProcedureRetDefNode() {
|
||||
super();
|
||||
setTokens(new ArrayList<>());
|
||||
setType(new Token(Token.TokenType.NULL, ""));
|
||||
}
|
||||
|
||||
public ProcedureRetDefNode(ASTNode node) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
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 testFunction {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("CREATE OR REPLACE FUNCTION string_length (\n" +
|
||||
" input_string VARCHAR2\n" +
|
||||
" ) RETURN NUMBER IS\n" +
|
||||
" BEGIN\n" +
|
||||
" RETURN LENGTH(input_string);\n" +
|
||||
" END;");
|
||||
System.out.println("===== test of Function =====");
|
||||
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 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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 testIfElse {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("IF v_salary >= 100000 THEN\n" +
|
||||
" v_bonus := v_salary * 0.1;\n" +
|
||||
" ELSIF v_salary >= 50000 THEN\n" +
|
||||
" v_bonus := v_salary * 0.08;\n" +
|
||||
" ELSIF v_salary >= 30000 THEN\n" +
|
||||
" v_bonus := v_salary * 0.05;\n" +
|
||||
" ELSE\n" +
|
||||
" v_bonus := v_salary * 0.03;\n" +
|
||||
" END IF;");
|
||||
System.out.println("===== test of IfElse =====");
|
||||
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 the SQL" + num++ + " =====");
|
||||
System.out.println("Input SQL: " + sql);
|
||||
OracleLexer lexer = new OracleLexer(sql);
|
||||
lexer.printTokens();
|
||||
ASTNode root = OracleParser.parseIFELSE(lexer.getTokens());
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
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 testInsert {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("INSERT INTO employees (first_name, last_name, email) VALUES ('Jane', 'Smith', 'janesm@example.com');");
|
||||
testSQL.add("INSERT INTO employees VALUES ('Jane', 'Smith', 'janesm@example.com');");
|
||||
System.out.println("===== test of Insert =====");
|
||||
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 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
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 testLoop {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("LOOP\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE(v_counter);\n" +
|
||||
" v_counter := v_counter + 1;\n" +
|
||||
" EXIT WHEN v_counter > 10;\n" +
|
||||
" END LOOP;");
|
||||
testSQL.add("WHILE v_counter <= 10 LOOP\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE(v_counter);\n" +
|
||||
" v_counter := v_counter + 1;\n" +
|
||||
" END LOOP;");
|
||||
testSQL.add("FOR i IN 1..10 LOOP\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE(i);\n" +
|
||||
" END LOOP;");
|
||||
System.out.println("===== test of Loop =====");
|
||||
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 the SQL" + num++ + " =====");
|
||||
System.out.println("Input SQL: " + sql);
|
||||
OracleLexer lexer = new OracleLexer(sql);
|
||||
lexer.printTokens();
|
||||
ASTNode root = OracleParser.parseLoop(lexer.getTokens());
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
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 testPL {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("DECLARE\n" +
|
||||
" v_name Varchar2(20);\n" +
|
||||
" v_salary employees.salary%TYPE;\n" +
|
||||
" BEGIN\n" +
|
||||
" SELECT name, salary INTO v_name, v_salary FROM employees WHERE employee_id = 100;\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('Name: ' || v_name || ', Salary: ' || v_salary);\n" +
|
||||
" EXCEPTION\n" +
|
||||
" WHEN NO_DATA_FOUND THEN\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('No data found.');\n" +
|
||||
" END;");
|
||||
System.out.println("===== test of PL =====");
|
||||
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 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
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 testProcedure {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("CREATE OR REPLACE PROCEDURE update_salary (\n" +
|
||||
" employee_id IN NUMBER,\n" +
|
||||
" new_salary IN OUT NUMBER\n" +
|
||||
" ) IS\n" +
|
||||
" v_employee employees%ROWTYPE;\n" +
|
||||
" BEGIN\n" +
|
||||
" SELECT * INTO v_employee FROM employees WHERE employee_id = employee_id;\n" +
|
||||
" IF new_salary < 3000 THEN\n" +
|
||||
" new_salary := new_salary * 1.1;\n" +
|
||||
" ELSE\n" +
|
||||
" new_salary := new_salary * 1.05;\n" +
|
||||
" END IF;\n" +
|
||||
" UPDATE employees SET salary = new_salary WHERE employee_id = employee_id;\n" +
|
||||
" COMMIT;\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('Updated Salary: ' || new_salary);\n" +
|
||||
" EXCEPTION\n" +
|
||||
" WHEN NO_DATA_FOUND THEN\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('Employee not found.');\n" +
|
||||
" WHEN TOO_MANY_ROWS THEN\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('Multiple employees found.');\n" +
|
||||
" WHEN OTHERS THEN\n" +
|
||||
" DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);\n" +
|
||||
" END update_salary;");
|
||||
System.out.println("===== test of Procedure =====");
|
||||
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 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
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 testSelect {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("SELECT * FROM employees;");
|
||||
testSQL.add("SELECT employee_id, first_name, last_name FROM employees;");
|
||||
testSQL.add("SELECT * FROM employees WHERE department_id = 10;");
|
||||
testSQL.add("SELECT * FROM employees ORDER BY hire_date DESC;");
|
||||
testSQL.add("SELECT COUNT(*), AVG(salary) FROM employees;");
|
||||
testSQL.add("SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;");
|
||||
testSQL.add("SELECT e.first_name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id;");
|
||||
testSQL.add("SELECT\n" +
|
||||
" column1,\n" +
|
||||
" CASE WHEN column2 > 0 THEN 'Positive' ELSE 'Non-positive' END as status,\n" +
|
||||
" SUBSTR(column3, 1, 5) as substring_column3\n" +
|
||||
" FROM table_name;");
|
||||
testSQL.add("SELECT column1, COUNT(column2) FROM table_name GROUP BY column1 HAVING COUNT(column2) > 10;");
|
||||
System.out.println("===== test of Select =====");
|
||||
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 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
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 testTrigger {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("CREATE OR REPLACE TRIGGER log_insert\n" +
|
||||
" BEFORE INSERT ON employees\n" +
|
||||
" FOR EACH ROW\n" +
|
||||
" BEGIN\n" +
|
||||
" INSERT INTO audit_log (action, employee_id) VALUES ('INSERT', :NEW.id);\n" +
|
||||
" END;");
|
||||
System.out.println("===== test of Trigger =====");
|
||||
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 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
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 testUpdate {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("UPDATE employees e JOIN departments d using e.department_id = d.department_id\n" +
|
||||
" SET e.salary = e.salary * 1.10, d.budget = d.budget * 1.10 WHERE d.department_name = 'Sales';");
|
||||
System.out.println("===== test of Update =====");
|
||||
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 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
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 testView {
|
||||
List<String> testSQL = new ArrayList<>();
|
||||
@BeforeEach
|
||||
public void loadData()
|
||||
{
|
||||
testSQL.add("CREATE OR REPLACE VIEW employee_details AS SELECT first_name, last_name, salary FROM employees;");
|
||||
testSQL.add("CREATE OR REPLACE VIEW emp_info (full_name, pay) AS SELECT first_name || ' ' || last_name AS full_name, salary AS pay FROM employees;");
|
||||
testSQL.add("CREATE OR REPLACE VIEW emp_dept_info AS SELECT e.first_name, e.last_name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id;");
|
||||
testSQL.add("CREATE OR REPLACE VIEW high_salary_employees AS SELECT first_name, last_name, salary FROM employees WHERE salary > 50000;");
|
||||
System.out.println("===== test of View =====");
|
||||
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 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue