forked from opengaussexamples/examples
coding
This commit is contained in:
parent
0245c1d0ed
commit
c704d436aa
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package Exception;
|
||||
|
||||
public class GenerateFailedException extends RuntimeException{
|
||||
public GenerateFailedException(String message)
|
||||
{
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
|
|
@ -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("")) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue