From f0a909f288ef1b32358243a9a8282de5b5e22bec Mon Sep 17 00:00:00 2001 From: XudongXie Date: Mon, 16 Sep 2024 22:23:59 +0800 Subject: [PATCH] add ast classes of procedure --- sqlTranslate/.idea/workspace.xml | 33 ++++--- .../main/java/Document/Procedure in Oracle | 2 +- .../Parser/AST/CreateTable/ColumnNode.java | 1 + .../AST/Procedure/ProcedureBeginNode.java | 31 ++++++ .../AST/Procedure/ProcedureColumnNode.java | 95 +++++++++++++++++++ .../AST/Procedure/ProcedureEndNode.java | 31 ++++++ .../Parser/AST/Procedure/ProcedureNode.java | 31 ++++++ .../AST/Procedure/ProcedureObjNode.java | 32 +++++++ .../Procedure/ProcedurePLStatementNode.java | 27 ++++++ .../AST/Procedure/ProcedureRetDefNode.java | 30 ++++++ 10 files changed, 299 insertions(+), 14 deletions(-) create mode 100644 sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureBeginNode.java create mode 100644 sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureColumnNode.java create mode 100644 sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureEndNode.java create mode 100644 sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureNode.java create mode 100644 sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureObjNode.java create mode 100644 sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedurePLStatementNode.java create mode 100644 sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureRetDefNode.java diff --git a/sqlTranslate/.idea/workspace.xml b/sqlTranslate/.idea/workspace.xml index 1cc00376c..d2dacd75d 100644 --- a/sqlTranslate/.idea/workspace.xml +++ b/sqlTranslate/.idea/workspace.xml @@ -4,10 +4,17 @@ - @@ -488,7 +494,8 @@ - diff --git a/sqlTranslate/src/main/java/Document/Procedure in Oracle b/sqlTranslate/src/main/java/Document/Procedure in Oracle index 8f6f1919e..4495b34c1 100644 --- a/sqlTranslate/src/main/java/Document/Procedure in Oracle +++ b/sqlTranslate/src/main/java/Document/Procedure in Oracle @@ -4,7 +4,7 @@ BEGIN -- PL/SQL statements [EXCEPTION] -- Exception handling -END [procedure_name]; +END [procedure_name]; -- [procedure_name] should be removed in OpenGauss Example: CREATE OR REPLACE PROCEDURE update_salary( employee_id IN NUMBER, diff --git a/sqlTranslate/src/main/java/Parser/AST/CreateTable/ColumnNode.java b/sqlTranslate/src/main/java/Parser/AST/CreateTable/ColumnNode.java index c470ffff3..bd6a1e346 100644 --- a/sqlTranslate/src/main/java/Parser/AST/CreateTable/ColumnNode.java +++ b/sqlTranslate/src/main/java/Parser/AST/CreateTable/ColumnNode.java @@ -23,6 +23,7 @@ public class ColumnNode extends ASTNode implements ColumnType { super(tokens); } + @Override public void visit(ASTNode node, StringBuilder queryString) { if (node.hasChild() && !(node.getChildren().get(0) instanceof CRTEndNode) ) diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureBeginNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureBeginNode.java new file mode 100644 index 000000000..481e97122 --- /dev/null +++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureBeginNode.java @@ -0,0 +1,31 @@ +package Parser.AST.Procedure; + +import Lexer.Token; +import Parser.AST.ASTNode; + +import java.util.ArrayList; +import java.util.List; + +public class ProcedureBeginNode extends ASTNode { + public ProcedureBeginNode() { + super(); + setTokens(new ArrayList<>()); + } + + public ProcedureBeginNode(ASTNode node) { + super(node); + } + + public ProcedureBeginNode(List tokens) { + super(tokens); + } + + @Override + public void visit(ASTNode node, StringBuilder queryString) { + queryString.append(toString() + " "); + for (ASTNode child : getChildren()) + { + child.visit(child, queryString); + } + } +} diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureColumnNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureColumnNode.java new file mode 100644 index 000000000..f495fbff9 --- /dev/null +++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureColumnNode.java @@ -0,0 +1,95 @@ +package Parser.AST.Procedure; + +import Interface.ColumnType; +import Lexer.Token; +import Parser.AST.ASTNode; +import Parser.AST.CreateTable.CRTEndNode; + +import java.util.ArrayList; +import java.util.List; + +public class ProcedureColumnNode extends ASTNode implements ColumnType { + private Token name; + private Token type; + private List constraint; + private List InOut; + public ProcedureColumnNode() { + super(); + setTokens(new ArrayList<>()); + } + + public ProcedureColumnNode(ASTNode node) + { + super(node); + } + + public ProcedureColumnNode(List tokens) + { + super(tokens); + } + + @Override + public void visit(ASTNode node, StringBuilder queryString) + { + if (node.hasChild() && !(node.getChildren().get(0) instanceof ProcedureColumnNode) ) + queryString.append(toString() + ", "); + else if (node.hasChild() && (node.getChildren().get(0) instanceof ProcedureColumnNode)) + queryString.append(toString() + " "); + for (ASTNode child : getChildren()) + { + child.visit(child, queryString); + } + } + + public Token getName() { + return name; + } + + public void setName(Token name) { + this.name = name; + } + + @Override + public Token getType() { + return type; + } + + @Override + public void setType(Token type) { + this.type = type; + } + + public List getConstraint() { + return constraint; + } + + public void setConstraint(List constraint) { + this.constraint = constraint; + } + + public List getInOut() { + return InOut; + } + + public void setInOut(List InOut) { + this.InOut = InOut; + } + + public void addInOut(Token InOut) { + this.InOut.add(InOut); + } + + @Override + public void ResetTokensbyNameTypeConstraint() { + List tokens = new ArrayList<>(); + tokens.add(name); + for (Token token : InOut) { + tokens.add(token); + } + tokens.add(type); + for (Token token : constraint) { + tokens.add(token); + } + setTokens(tokens); + } +} diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureEndNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureEndNode.java new file mode 100644 index 000000000..7ebd9d934 --- /dev/null +++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureEndNode.java @@ -0,0 +1,31 @@ +package Parser.AST.Procedure; + +import Lexer.Token; +import Parser.AST.ASTNode; + +import java.util.ArrayList; +import java.util.List; + +public class ProcedureEndNode extends ASTNode { + public ProcedureEndNode() { + super(); + setTokens(new ArrayList<>()); + } + + public ProcedureEndNode(ASTNode node) { + super(node); + } + + public ProcedureEndNode(List tokens) { + super(tokens); + } + + @Override + public void visit(ASTNode node, StringBuilder queryString) { + queryString.append(toString()); + for (ASTNode child : getChildren()) + { + child.visit(child, queryString); + } + } +} diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureNode.java new file mode 100644 index 000000000..9fc3afe08 --- /dev/null +++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureNode.java @@ -0,0 +1,31 @@ +package Parser.AST.Procedure; + +import Lexer.Token; +import Parser.AST.ASTNode; + +import java.util.ArrayList; +import java.util.List; + +public class ProcedureNode extends ASTNode { + public ProcedureNode() { + super(); + setTokens(new ArrayList<>()); + } + + public ProcedureNode(ASTNode node) { + super(node); + } + + public ProcedureNode(List tokens) { + super(tokens); + } + + @Override + public void visit(ASTNode node, StringBuilder queryString) { + queryString.append(toString() + " "); + for (ASTNode child : getChildren()) + { + child.visit(child, queryString); + } + } +} diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureObjNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureObjNode.java new file mode 100644 index 000000000..eca2e3f48 --- /dev/null +++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureObjNode.java @@ -0,0 +1,32 @@ +package Parser.AST.Procedure; + +import Lexer.Token; +import Parser.AST.ASTNode; + +import java.util.ArrayList; +import java.util.List; + +public class ProcedureObjNode extends ASTNode { + public ProcedureObjNode() { + super(); + setTokens(new ArrayList<>()); + } + + public ProcedureObjNode(ASTNode node) { + super(node); + } + + public ProcedureObjNode(List tokens) { + super(tokens); + } + + @Override + public void visit(ASTNode node, StringBuilder queryString) { + queryString.append(toString() + " ("); + for (ASTNode child : getChildren()) + { + child.visit(child, queryString); + } + } + +} diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedurePLStatementNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedurePLStatementNode.java new file mode 100644 index 000000000..bee1052fb --- /dev/null +++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedurePLStatementNode.java @@ -0,0 +1,27 @@ +package Parser.AST.Procedure; + +import Lexer.Token; +import Parser.AST.ASTNode; + +import java.util.ArrayList; +import java.util.List; + +public class ProcedurePLStatementNode extends ASTNode { + public ProcedurePLStatementNode() { + super(); + } + public ProcedurePLStatementNode(ASTNode node) { + super(node); + } + public ProcedurePLStatementNode(List tokens) { + super(tokens); + } + + @Override + public void visit(ASTNode node, StringBuilder queryString) { + queryString.append(toString() + " "); + for (ASTNode child : node.getChildren()) { + child.visit(child, queryString); + } + } +} diff --git a/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureRetDefNode.java b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureRetDefNode.java new file mode 100644 index 000000000..402468059 --- /dev/null +++ b/sqlTranslate/src/main/java/Parser/AST/Procedure/ProcedureRetDefNode.java @@ -0,0 +1,30 @@ +package Parser.AST.Procedure; + +import Lexer.Token; +import Parser.AST.ASTNode; + +import java.util.ArrayList; +import java.util.List; + +public class ProcedureRetDefNode extends ASTNode { + public ProcedureRetDefNode() { + super(); + } + + public ProcedureRetDefNode(ASTNode node) { + super(node); + } + + public ProcedureRetDefNode(List tokens) { + super(tokens); + } + + @Override + public void visit(ASTNode node, StringBuilder queryString) { + queryString.append(") " + toString() + " "); + for (ASTNode child : getChildren()) + { + child.visit(child, queryString); + } + } +}