This commit is contained in:
XudongXie 2024-08-24 21:38:20 +08:00
parent 0245c1d0ed
commit c704d436aa
6 changed files with 169 additions and 3 deletions

View File

@ -5,9 +5,12 @@
</component>
<component name="ChangeListManager">
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="add function">
<change afterPath="$PROJECT_DIR$/src/main/java/Document/DataType in Oracle" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/Exception/GenerateFailedException.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/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/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/CreateTable/ColumnNode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/CreateTable/ColumnNode.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -17,8 +20,8 @@
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
<option value="Interface" />
<option value="Class" />
</list>
</option>
</component>
@ -210,7 +213,14 @@
<option name="project" value="LOCAL" />
<updated>1724472081080</updated>
</task>
<option name="localTasksCounter" value="16" />
<task id="LOCAL-00016" summary="add function">
<created>1724487486717</created>
<option name="number" value="00016" />
<option name="presentableId" value="LOCAL-00016" />
<option name="project" value="LOCAL" />
<updated>1724487486717</updated>
</task>
<option name="localTasksCounter" value="17" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">

View File

@ -0,0 +1,105 @@
数值类型
NUMBER
用于存储整数或浮点数。
可以指定精度(总位数)和小数位数。
示例NUMBER(10, 2) 表示一个最多有 10 位数字的数,其中 2 位是小数位。
INTEGER
用于存储整数。
等价于 NUMBER 但默认没有精度限制。
示例INTEGER
SMALLINT
用于存储较小的整数。
等价于 INTEGER 但默认范围更小。
示例SMALLINT
BINARY_INTEGER
用于存储整数。
通常用于内部使用,而不是直接在表定义中使用。
示例BINARY_INTEGER
DECIMAL
等价于 NUMBER。
示例DECIMAL(10, 2)
REAL
用于存储单精度浮点数。
示例REAL
FLOAT
用于存储双精度浮点数。
可以指定精度。
示例FLOAT(128)
DOUBLE PRECISION
用于存储双精度浮点数。
示例DOUBLE PRECISION
字符串类型
CHAR
用于存储固定长度的字符串。
示例CHAR(20)
VARCHAR2
用于存储可变长度的字符串。
最大长度为 4000 字节(在早期版本中)或 32767 字节(从 Oracle 12c 开始)。
示例VARCHAR2(255)
NCHAR
用于存储固定长度的 Unicode 字符串。
示例NCHAR(20)
NVARCHAR2
用于存储可变长度的 Unicode 字符串。
示例NVARCHAR2(255)
CLOB
用于存储大文本块。
示例CLOB
NCLOB
用于存储大 Unicode 文本块。
示例NCLOB
日期/时间类型
DATE
用于存储日期和时间信息。
包括年、月、日、小时、分钟和秒。
示例DATE
TIMESTAMP
用于存储日期和时间信息。
可以包含毫秒。
示例TIMESTAMP
TIMESTAMP WITH TIME ZONE
用于存储日期和时间信息,包括时区。
示例TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
用于存储日期和时间信息,按照本地时区显示。
示例TIMESTAMP WITH LOCAL TIME ZONE
二进制类型
BLOB
用于存储大二进制对象,如图像或文件。
示例BLOB
RAW
用于存储固定长度的二进制数据。
示例RAW(2000)
LONG RAW
用于存储长二进制数据。
最大长度为 2GB。
示例LONG RAW
特殊类型
BOOLEAN
用于存储布尔值 TRUE, FALSE 或 NULL。
从 Oracle 12c 开始支持。
INTERVAL YEAR TO MONTH
用于存储年份到月份的时间间隔。
示例INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
用于存储天到秒的时间间隔。
示例INTERVAL DAY TO SECOND
ROWID
用于存储行标识符。
示例ROWID
UROWID
用于存储统一行标识符。
示例UROWID
REF
用于存储对另一个表的引用。
示例REF <typename>
OBJECT
用于存储用户定义的对象类型。
示例OBJECT (attr1 NUMBER, attr2 VARCHAR2(50))
REF CURSOR
用于存储游标引用。
示例REF CURSOR

View File

@ -0,0 +1,8 @@
package Exception;
public class GenerateFailedException extends RuntimeException{
public GenerateFailedException(String message)
{
super(message);
}
}

View File

@ -1,6 +1,9 @@
package Generator;
import Parser.AST.ASTNode;
import Parser.AST.CreateTable.ColumnNode;
import Parser.AST.CreateTable.CreateTabNode;
import Exception.GenerateFailedException;
public class OpenGaussGenerator {
private ASTNode node;
@ -8,6 +11,32 @@ public class OpenGaussGenerator {
this.node = node;
}
public String generate() {
if (node instanceof CreateTabNode) {
return GenCreatTableSQL(node);
}
else {
throw new GenerateFailedException("Root node:" + node.getClass() + "(Unsupported node type!)");
}
}
private String GenCreatTableSQL(ASTNode node) {
// type convert
visit(node);
return node.toQueryString();
}
private void visit(ASTNode node) {
if (node instanceof ColumnNode) {
ColumnTypeConvert((ColumnNode) node);
}
for (ASTNode child : node.getChildren()) {
visit(child);
}
}
private void ColumnTypeConvert(ColumnNode node) {
if (node.getType().getValue().equalsIgnoreCase("")) {
}
}
}

View File

@ -1,4 +1,5 @@
import Generator.OpenGaussGenerator;
import Lexer.OracleLexer;
import Parser.AST.ASTNode;
import Parser.OracleParser;
@ -19,5 +20,7 @@ public class Main {
ASTNode root = parser.parse();
System.out.println(root.toQueryString());
System.out.println(root.getASTString());
OpenGaussGenerator generator = new OpenGaussGenerator(root);
System.out.println(generator.generate());
}
}

View File

@ -3,6 +3,7 @@ package Parser.AST.CreateTable;
import Lexer.Token;
import Parser.AST.ASTNode;
import java.util.ArrayList;
import java.util.List;
public class ColumnNode extends ASTNode {
@ -57,4 +58,14 @@ public class ColumnNode extends ASTNode {
this.constraint = constraint;
}
public void ResetTokensbyNameTypeConstraint() {
List <Token> tokens = new ArrayList<>();
tokens.add(name);
tokens.add(type);
for (Token token : constraint) {
tokens.add(token);
}
setTokens(tokens);
}
}