diff --git a/sqlTranslate/.idea/uiDesigner.xml b/sqlTranslate/.idea/uiDesigner.xml
new file mode 100644
index 000000000..2b63946d5
--- /dev/null
+++ b/sqlTranslate/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml
index 00b09c293..88b31e623 100644
--- a/sqlTranslate/.idea/workspace.xml
+++ b/sqlTranslate/.idea/workspace.xml
@@ -4,12 +4,16 @@
-
-
+
+
+
+
+
+
+
-
-
+
@@ -41,13 +45,14 @@
- {
- "keyToString": {
- "RunOnceActivity.OpenProjectViewOnStart": "true",
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "SHARE_PROJECT_CONFIGURATION_FILES": "true"
+
+}]]>
@@ -116,7 +121,14 @@
1723818930161
-
+
+ 1723871742424
+
+
+
+ 1723871742424
+
+
@@ -133,6 +145,7 @@
-
+
+
\ No newline at end of file
diff --git a/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java b/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java
new file mode 100644
index 000000000..6e4a894fc
--- /dev/null
+++ b/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java
@@ -0,0 +1,4 @@
+package Generator;
+
+public class OpenGaussGenerator {
+}
diff --git a/sqlTranslate/src/main/java/Lexer/OracleLexer.java b/sqlTranslate/src/main/java/Lexer/OracleLexer.java
index 2f4416003..affc0b649 100644
--- a/sqlTranslate/src/main/java/Lexer/OracleLexer.java
+++ b/sqlTranslate/src/main/java/Lexer/OracleLexer.java
@@ -9,6 +9,9 @@ import java.util.regex.Pattern;
public class OracleLexer {
public static final String[] keywords = {"SELECT", "FROM", "WHERE", "AND", "OR", "INSERT", "UPDATE", "DELETE",
+ // keywords of creating table
+ "CREATE", "TABLE", "TEMPORARY", "",
+
"now()"};
private static final Pattern TOKEN_PATTERN = Pattern.compile(
"(now\\(\\))|" + // now() function
diff --git a/sqlTranslate/src/main/java/Parser/ASTNode.java b/sqlTranslate/src/main/java/Parser/AST/ASTNode.java
similarity index 61%
rename from sqlTranslate/src/main/java/Parser/ASTNode.java
rename to sqlTranslate/src/main/java/Parser/AST/ASTNode.java
index 3df845394..de0926146 100644
--- a/sqlTranslate/src/main/java/Parser/ASTNode.java
+++ b/sqlTranslate/src/main/java/Parser/AST/ASTNode.java
@@ -1,12 +1,11 @@
-package Parser;
+package Parser.AST;
import Lexer.Token;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
-public class ASTNode {
+public abstract class ASTNode {
private Token token;
private ASTNode parent;
private List children = new ArrayList<>();
@@ -96,50 +95,14 @@ public class ASTNode {
public String toQueryString() {
StringBuilder queryString = new StringBuilder();
- visit(this, queryString, false);
+ visit(this, queryString);
return queryString.toString();
}
- private void visit(ASTNode node, StringBuilder queryString, boolean hasPrespace) {
- if (node == null) {
- return;
- }
- if (node.getToken().hasType(Token.TokenType.KEYWORD)) {
- String value = node.getToken().getValue();
- if (value == null || value.trim().isEmpty()) {
- return;
- }
- boolean preSpace = true;
- if (queryString.length() == 0) {
- preSpace = false;
- } else if (queryString.charAt(queryString.length() - 1) == '(') {
- preSpace = false;
- } else if (Arrays.asList(",", ";", ")").contains(value)) {
- preSpace = false;
- } else if (!hasPrespace) {
- // If the token does not have pre space, we should not add, either.
- preSpace = false;
- }
- if (preSpace) {
- queryString.append(" ");
- }
- queryString.append(value);
- } else {
- for (int i = 0; i < node.getChildren().size(); i++) {
- ASTNode childNode = node.getChildren().get(i);
- if (i == 0) {
- visit(childNode, queryString, hasPrespace || childNode.getToken().hasPreSpace());
- } else {
- visit(childNode, queryString, childNode.getToken().hasPreSpace());
- }
- }
- }
- }
+ public abstract void visit(ASTNode node, StringBuilder queryString);
@Override
public String toString() {
return token.getValue();
}
-
-
}
diff --git a/sqlTranslate/src/main/java/Parser/AST/CreateTabNode.java b/sqlTranslate/src/main/java/Parser/AST/CreateTabNode.java
new file mode 100644
index 000000000..9a63d5bc1
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/CreateTabNode.java
@@ -0,0 +1,28 @@
+package Parser.AST;
+
+import Lexer.Token;
+
+public class CreateTabNode extends ASTNode{
+ public CreateTabNode(ASTNode node) {
+ super(node);
+ }
+
+ public CreateTabNode(Token token) {
+ super(token);
+ }
+
+ @Override
+ public void visit(ASTNode node, StringBuilder queryString) {
+ // judge the type of the table
+ if (getChildren().get(0) instanceof TableTypeNode) {
+ queryString.append("CREATE ");
+ }
+ else {
+ queryString.append("CREATE TABLE ");
+ }
+ for (ASTNode child : getChildren())
+ {
+ child.visit(child, queryString);
+ }
+ }
+}
diff --git a/sqlTranslate/src/main/java/Parser/AST/SelectStatementNode.java b/sqlTranslate/src/main/java/Parser/AST/SelectStatementNode.java
new file mode 100644
index 000000000..d7ac736b5
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/SelectStatementNode.java
@@ -0,0 +1,25 @@
+package Parser.AST;
+
+import Lexer.Token;
+
+public class SelectStatementNode extends ASTNode{
+ public SelectStatementNode(ASTNode node)
+ {
+ super(node);
+ }
+
+ public SelectStatementNode(Token token)
+ {
+ super(token);
+ }
+
+ @Override
+ public void visit(ASTNode node, StringBuilder queryString)
+ {
+ queryString.append("SELECT ");
+ for (ASTNode child : getChildren())
+ {
+ child.visit(child, queryString);
+ }
+ }
+}
diff --git a/sqlTranslate/src/main/java/Parser/AST/TableTypeNode.java b/sqlTranslate/src/main/java/Parser/AST/TableTypeNode.java
new file mode 100644
index 000000000..7bac10284
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/AST/TableTypeNode.java
@@ -0,0 +1,24 @@
+package Parser.AST;
+
+import Lexer.Token;
+
+public class TableTypeNode extends ASTNode{
+ public TableTypeNode(ASTNode node)
+ {
+ super(node);
+ }
+ public TableTypeNode(Token token)
+ {
+ super(token);
+ }
+
+ public void visit(ASTNode node, StringBuilder queryString)
+ {
+ queryString.append(getToken() + " ");
+ for (ASTNode child : getChildren())
+ {
+ child.visit(child, queryString);
+ }
+ }
+
+}
diff --git a/sqlTranslate/src/main/java/Parser/OracleParser.java b/sqlTranslate/src/main/java/Parser/OracleParser.java
new file mode 100644
index 000000000..6d0133399
--- /dev/null
+++ b/sqlTranslate/src/main/java/Parser/OracleParser.java
@@ -0,0 +1,4 @@
+package Parser;
+
+public class OracleParser {
+}