diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml
index 43b9a0ac..c3343419 100644
--- a/sqlTranslate/.idea/workspace.xml
+++ b/sqlTranslate/.idea/workspace.xml
@@ -7,8 +7,6 @@
-
-
@@ -232,7 +230,14 @@
1724507228242
-
+
+ 1724510094392
+
+
+
+ 1724510094392
+
+
diff --git a/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java b/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java
index ff0aa05c..d9eac9a3 100644
--- a/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java
+++ b/sqlTranslate/src/main/java/Generator/OpenGaussGenerator.java
@@ -36,9 +36,81 @@ public class OpenGaussGenerator {
}
private void ColumnTypeConvert(ColumnNode node) {
+ // type convert
if (node.getType().getValue().equalsIgnoreCase("NUMBER")) {
node.setType(new Token(Token.TokenType.KEYWORD, "NUMERIC"));
node.ResetTokensbyNameTypeConstraint();
}
+ if (node.getType().getValue().matches("(?i)NUMBER\\(.*?\\)")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, node.getType().getValue().replace("NUMBER", "DECIMAL")));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+
+ if (node.getType().getValue().equalsIgnoreCase("VARCHAR2")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, "VARCHAR"));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+ if (node.getType().getValue().matches("(?i)VARCHAR2\\(.*?\\)")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, node.getType().getValue().replace("VARCHAR2", "VARCHAR")));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+
+ if (node.getType().getValue().equalsIgnoreCase("RAW")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, "BYTEA"));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+ if (node.getType().getValue().matches("(?i)RAW\\(.*?\\)")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, node.getType().getValue().replace("RAW", "BYTEA")));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+
+ if (node.getType().getValue().equalsIgnoreCase("BINARY_INTEGER")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, "INTEGER"));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+
+ if (node.getType().getValue().equalsIgnoreCase("NCHAR")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, "VARCHAR"));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+ if (node.getType().getValue().matches("(?i)NCHAR\\(.*?\\)")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, node.getType().getValue().replace("NCHAR", "VARCHAR")));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+
+ if (node.getType().getValue().equalsIgnoreCase("NVARCHAR2")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, "VARCHAR"));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+ if (node.getType().getValue().matches("(?i)NVARCHAR2\\(.*?\\)")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, node.getType().getValue().replace("NVARCHAR2", "VARCHAR")));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+
+ if (node.getType().getValue().equalsIgnoreCase("NCLOB")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, "TEXT"));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+
+ if (node.getType().getValue().equalsIgnoreCase("INTERVAL YEAR TO MONTH")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, "INTERVAL"));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+
+ if (node.getType().getValue().equalsIgnoreCase("INTERVAL DAY TO SECOND")) {
+ node.setType(new Token(Token.TokenType.KEYWORD, "INTERVAL"));
+ node.ResetTokensbyNameTypeConstraint();
+ }
+
+ // Impossible to convert
+ if (
+ node.getType().getValue().equalsIgnoreCase("TIMESTAMP WITH LOCAL TIME ZONE") ||
+ node.getType().getValue().equalsIgnoreCase("LONG RAW") ||
+ node.getType().getValue().equalsIgnoreCase("ROWID") ||
+ node.getType().getValue().equalsIgnoreCase("UROWID") ||
+ node.getType().getValue().equalsIgnoreCase("REF CURSOR")
+ ) {
+ throw new GenerateFailedException("Unsupported type:" + node.getType().getValue() + "(OpenGauss doesn't support the keyword -- " + node.getType().getValue() + " or have any expression that keeps the same semantic!)");
+ }
}
}