forked from opengaussexamples/examples
add function
This commit is contained in:
parent
fe03e497a9
commit
1d40557152
|
|
@ -6,6 +6,8 @@
|
|||
<component name="ChangeListManager">
|
||||
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="add function">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" 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" />
|
||||
<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" />
|
||||
|
|
@ -43,7 +45,6 @@
|
|||
"keyToString": {
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
||||
"last_opened_file_path": "F:/oracle2opengauss/examples/sqlTranslate",
|
||||
"project.structure.last.edited": "模块",
|
||||
"project.structure.proportion": "0.0",
|
||||
|
|
@ -196,7 +197,14 @@
|
|||
<option name="project" value="LOCAL" />
|
||||
<updated>1724423798948</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="14" />
|
||||
<task id="LOCAL-00014" summary="add function">
|
||||
<created>1724425628008</created>
|
||||
<option name="number" value="00014" />
|
||||
<option name="presentableId" value="LOCAL-00014" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1724425628008</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="15" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
|
|
|
|||
|
|
@ -43,6 +43,10 @@ public abstract class ASTNode {
|
|||
return children;
|
||||
}
|
||||
|
||||
public boolean hasChild() {
|
||||
return !children.isEmpty();
|
||||
}
|
||||
|
||||
public ASTNode getChildByName(String childName) {
|
||||
for (ASTNode child : children) {
|
||||
if (child.toString().equals(childName)) {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,10 @@ public class ColumnNode extends ASTNode {
|
|||
|
||||
public void visit(ASTNode node, StringBuilder queryString)
|
||||
{
|
||||
queryString.append(toString() + " ");
|
||||
if (node.hasChild() && !(node.getChildren().get(0) instanceof CRTEndNode) )
|
||||
queryString.append(toString() + ", ");
|
||||
else if (node.hasChild() && (node.getChildren().get(0) instanceof CRTEndNode))
|
||||
queryString.append(toString() + " ");
|
||||
for (ASTNode child : getChildren())
|
||||
{
|
||||
child.visit(child, queryString);
|
||||
|
|
|
|||
|
|
@ -17,7 +17,10 @@ public class TableConstraintNode extends ASTNode{
|
|||
|
||||
public void visit(ASTNode node, StringBuilder queryString)
|
||||
{
|
||||
queryString.append(toString() + " ");
|
||||
if (node.hasChild() && !(node.getChildren().get(0) instanceof CRTEndNode) )
|
||||
queryString.append(toString() + ", ");
|
||||
else if (node.hasChild() && (node.getChildren().get(0) instanceof CRTEndNode))
|
||||
queryString.append(toString() + " ");
|
||||
for (ASTNode child : getChildren())
|
||||
{
|
||||
child.visit(child, queryString);
|
||||
|
|
|
|||
|
|
@ -4,10 +4,8 @@ import Lexer.OracleLexer;
|
|||
import Lexer.Token;
|
||||
import Parser.AST.ASTNode;
|
||||
import Exception.ParseFailedException;
|
||||
import Parser.AST.CreateTable.ColumnNode;
|
||||
import Parser.AST.CreateTable.CreateTabNode;
|
||||
import Parser.AST.CreateTable.TableNode;
|
||||
import Parser.AST.CreateTable.TableTypeNode;
|
||||
import Parser.AST.CreateTable.*;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -50,6 +48,7 @@ public class OracleParser {
|
|||
throw new ParseFailedException("Parse failed!");
|
||||
}
|
||||
i++;
|
||||
i++; // pass the "("
|
||||
ASTNode child = new TableNode(tokens);
|
||||
root.addChild(child);
|
||||
currentNode = child;
|
||||
|
|
@ -70,7 +69,7 @@ public class OracleParser {
|
|||
catch (ParseFailedException e) {
|
||||
throw new ParseFailedException("Parse failed!");
|
||||
}
|
||||
i = j + 1;
|
||||
i = j + 2; // pass the "("
|
||||
break;
|
||||
}
|
||||
tokens.add(lexer.getTokens().get(j));
|
||||
|
|
@ -94,11 +93,11 @@ public class OracleParser {
|
|||
else {
|
||||
constraint.add(lexer.getTokens().get(j));
|
||||
}
|
||||
tokens.add(lexer.getTokens().get(j));
|
||||
// Check () or REFERENCES other_table(other_column)
|
||||
if (lexer.getTokens().get(j).hasType(Token.TokenType.KEYWORD) &&
|
||||
(lexer.getTokens().get(j).getValue().equalsIgnoreCase("REFERENCES")
|
||||
|| lexer.getTokens().get(j).getValue().equalsIgnoreCase("CHECK"))) {
|
||||
tokens.add(lexer.getTokens().get(j));
|
||||
Stack<String> stack = new Stack<>();
|
||||
for (int k = j + 1; k < lexer.getTokens().size(); k++) {
|
||||
tokens.add(lexer.getTokens().get(k));
|
||||
|
|
@ -129,6 +128,7 @@ public class OracleParser {
|
|||
i = j;
|
||||
break;
|
||||
}
|
||||
tokens.add(lexer.getTokens().get(j));
|
||||
}
|
||||
child.setTokens(tokens);
|
||||
child.setConstraint(constraint);
|
||||
|
|
@ -141,7 +141,6 @@ public class OracleParser {
|
|||
tokens = new ArrayList<>();
|
||||
tokens.add(lexer.getTokens().get(i));
|
||||
for (int j = i + 1; j < lexer.getTokens().size(); j++) {
|
||||
tokens.add(lexer.getTokens().get(j));
|
||||
/**
|
||||
* CONSTRAINT pk_example PRIMARY KEY (column1, column2)
|
||||
* CONSTRAINT uk_example UNIQUE (column1)
|
||||
|
|
@ -154,6 +153,7 @@ public class OracleParser {
|
|||
|| lexer.getTokens().get(j).getValue().equalsIgnoreCase("PRIMARY KEY")
|
||||
|| lexer.getTokens().get(j).getValue().equalsIgnoreCase("FOREIGN KEY")
|
||||
|| lexer.getTokens().get(j).getValue().equalsIgnoreCase("REFERENCES"))) {
|
||||
tokens.add(lexer.getTokens().get(j));
|
||||
Stack<String> stack = new Stack<>();
|
||||
for (int k = j + 1; k < lexer.getTokens().size(); k++) {
|
||||
tokens.add(lexer.getTokens().get(k));
|
||||
|
|
@ -183,11 +183,23 @@ public class OracleParser {
|
|||
i = j;
|
||||
break;
|
||||
}
|
||||
tokens.add(lexer.getTokens().get(j));
|
||||
}
|
||||
|
||||
}
|
||||
else if (lexer.getTokens().get(i).hasType(Token.TokenType.SYMBOL) && lexer.getTokens().get(i).getValue().equals(";")) {
|
||||
tokens = new ArrayList<>();
|
||||
tokens.add(lexer.getTokens().get(i));
|
||||
ASTNode EndNode = new CRTEndNode(tokens);
|
||||
currentNode.addChild(EndNode);
|
||||
currentNode = EndNode;
|
||||
}
|
||||
else if (lexer.getTokens().get(i).hasType(Token.TokenType.EOF)) {
|
||||
break;
|
||||
}
|
||||
else {
|
||||
// throw new ParseFailedException("Parse failed!");
|
||||
// System.out.println("Fail to parse:" + lexer.getTokens().get(i).getValue());
|
||||
throw new ParseFailedException("Parse failed!");
|
||||
}
|
||||
}
|
||||
return root;
|
||||
|
|
|
|||
Loading…
Reference in New Issue