finish the framework of sqltranslate (createTab sql is now being supported!)

This commit is contained in:
XudongXie 2024-08-24 23:00:19 +08:00
parent d3779f8b3c
commit 62dfa6da61
2 changed files with 80 additions and 3 deletions

View File

@ -7,8 +7,6 @@
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="coding">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" 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/Main.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Main.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/Parser/OracleParser.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Parser/OracleParser.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -232,7 +230,14 @@
<option name="project" value="LOCAL" />
<updated>1724507228242</updated>
</task>
<option name="localTasksCounter" value="19" />
<task id="LOCAL-00019" summary="coding">
<created>1724510094392</created>
<option name="number" value="00019" />
<option name="presentableId" value="LOCAL-00019" />
<option name="project" value="LOCAL" />
<updated>1724510094392</updated>
</task>
<option name="localTasksCounter" value="20" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">

View File

@ -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!)");
}
}
}