diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml
index 4d84cba69..13d21d8f4 100644
--- a/sqlTranslate/.idea/workspace.xml
+++ b/sqlTranslate/.idea/workspace.xml
@@ -4,13 +4,11 @@
-
-
+
-
+
-
-
+
@@ -374,7 +372,14 @@
1726112198384
-
+
+ 1726127728384
+
+
+
+ 1726127728384
+
+
@@ -408,7 +413,8 @@
-
+
+
diff --git a/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java b/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java
index 868b92b98..03ce3eed3 100644
--- a/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java
+++ b/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java
@@ -8,6 +8,9 @@ import Exception.GenerateFailedException;
import Parser.AST.DropTable.DropTableNode;
import Parser.AST.DropTable.DropTableOptionNode;
import Parser.AST.Insert.InsertNode;
+import Parser.AST.Join.JoinConditionNode;
+import Parser.AST.Join.JoinSourceTabNode;
+import Parser.AST.Join.JoinTypeNode;
import Parser.AST.Select.SelectNode;
import java.util.ArrayList;
@@ -18,6 +21,11 @@ public class OpenGaussGenerator {
public OpenGaussGenerator(ASTNode node) {
this.node = node;
}
+
+ public void setNode(ASTNode node) {
+ this.node = node;
+ }
+
public String generate() {
if (node instanceof CreateTabNode) {
return GenCreatTableSQL(node);
@@ -31,6 +39,9 @@ public class OpenGaussGenerator {
else if (node instanceof SelectNode) {
return GenSelectSQL(node);
}
+ else if (node instanceof JoinSourceTabNode) {
+ return GenJoinSQL(node);
+ }
else {
try {
throw new GenerateFailedException("Root node:" + node.getClass() + "(Unsupported node type!)");
@@ -63,6 +74,11 @@ public class OpenGaussGenerator {
return node.toQueryString();
}
+ private String GenJoinSQL(ASTNode node) {
+ visitJoin(node);
+ return node.toQueryString();
+ }
+
private void visitCrt(ASTNode node) {
if (node instanceof ColumnNode) {
ColumnTypeConvert((ColumnNode) node);
@@ -91,6 +107,17 @@ public class OpenGaussGenerator {
}
}
+ private void visitJoin(ASTNode node) {
+ if (node instanceof JoinConditionNode) {
+ if (((JoinConditionNode) node).getKeyword().equalsIgnoreCase("USING")) {
+ ((JoinConditionNode) node).setKeyword("ON");
+ }
+ }
+ for (ASTNode child : node.getChildren()) {
+ visitJoin(child);
+ }
+ }
+
private void ColumnTypeConvert(ColumnNode node) {
// type convert
if (node.getType().getValue().equalsIgnoreCase("NUMBER")) {
diff --git a/sqlTranslate/src/main/java/Main.java b/sqlTranslate/src/main/java/Main.java
index 86a947bf6..875f3ac78 100644
--- a/sqlTranslate/src/main/java/Main.java
+++ b/sqlTranslate/src/main/java/Main.java
@@ -16,14 +16,14 @@ public class Main {
// ");";
// String sql = "INSERT INTO employees (first_name, last_name, email) VALUES ('Jane', 'Smith', 'janesm@example.com');";
// String sql = "DROP TABLE employees CASCADE CONSTRAINTS;";
- String sql = "SELECT e.first_name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id;";
-// String sql = "Customers\n" +
-// "LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID where";
+// String sql = "SELECT e.first_name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id;";
+ String sql = "Customers\n" +
+ "LEFT JOIN Orders USING Customers.CustomerID = Orders.CustomerID where";
OracleLexer lexer = new OracleLexer(sql);
lexer.printTokens();
OracleParser parser = new OracleParser(lexer);
- ASTNode root = parser.parse();
-// ASTNode root = OracleParser.parseJoin(lexer.getTokens());
+// ASTNode root = parser.parse();
+ ASTNode root = OracleParser.parseJoin(lexer.getTokens());
System.out.println(root.toQueryString());
System.out.println(root.getASTString());
OpenGaussGenerator generator = new OpenGaussGenerator(root);
diff --git a/sqlTranslate/src/main/java/Parser/AST/Join/JoinConditionNode.java b/sqlTranslate/src/main/java/Parser/AST/Join/JoinConditionNode.java
index b2bfea11e..413dff0ed 100644
--- a/sqlTranslate/src/main/java/Parser/AST/Join/JoinConditionNode.java
+++ b/sqlTranslate/src/main/java/Parser/AST/Join/JoinConditionNode.java
@@ -22,6 +22,10 @@ public class JoinConditionNode extends ASTNode {
super();
}
+ public String getKeyword() {
+ return keyword.replace(" ", "");
+ }
+
public void setKeyword(String keyword) {
this.keyword = keyword + " ";
}