This commit is contained in:
XudongXie 2024-09-13 14:37:09 +08:00
parent aa5c0f2343
commit 3254457fb0
11 changed files with 97 additions and 29 deletions

View File

@ -6,7 +6,6 @@
<component name="ChangeListManager">
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="revise">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" 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" />
@ -105,13 +104,6 @@
<option name="presentableId" value="Default" />
<updated>1723106789329</updated>
</task>
<task id="LOCAL-00004" summary="add AST node">
<created>1723992163694</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1723992163694</updated>
</task>
<task id="LOCAL-00005" summary="add functions">
<created>1724145125754</created>
<option name="number" value="00005" />
@ -448,7 +440,14 @@
<option name="project" value="LOCAL" />
<updated>1726197698087</updated>
</task>
<option name="localTasksCounter" value="53" />
<task id="LOCAL-00053" summary="revise">
<created>1726198053495</created>
<option name="number" value="00053" />
<option name="presentableId" value="LOCAL-00053" />
<option name="project" value="LOCAL" />
<updated>1726198053495</updated>
</task>
<option name="localTasksCounter" value="54" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">

View File

@ -28,9 +28,9 @@ public class AlterAddColumnNode extends ASTNode {
@Override
public void visit(ASTNode node, StringBuilder queryString) {
queryString.append(toString() + " ");
for (ASTNode child : getChildren())
for (ASTNode child : getChildren()) {
child.visit(child, queryString);
}
}
public Token getName() {

View File

@ -17,8 +17,8 @@ public class AlterAddConstraintNode extends ASTNode {
@Override
public void visit(ASTNode node, StringBuilder queryString) {
queryString.append(toString() + " ");
for (ASTNode child : getChildren())
for (ASTNode child : getChildren()) {
child.visit(child, queryString);
}
}
}

View File

@ -18,8 +18,8 @@ public class AlterDropColumnNode extends ASTNode {
@Override
public void visit(ASTNode node, StringBuilder queryString) {
queryString.append(toString() + " ");
for (ASTNode child : getChildren())
for (ASTNode child : getChildren()) {
child.visit(child, queryString);
}
}
}

View File

@ -17,8 +17,8 @@ public class AlterDropConstraintNode extends ASTNode {
@Override
public void visit(ASTNode node, StringBuilder queryString) {
queryString.append(toString() + " ");
for (ASTNode child : getChildren())
for (ASTNode child : getChildren()) {
child.visit(child, queryString);
}
}
}

View File

@ -6,6 +6,13 @@ import Parser.AST.ASTNode;
import java.util.List;
public class AlterModifyColumnNode extends ASTNode {
private Token columnName;
private Token columnType;
public AlterModifyColumnNode() {
super();
}
public AlterModifyColumnNode(ASTNode node) {
super(node);
}
@ -14,11 +21,27 @@ public class AlterModifyColumnNode extends ASTNode {
super(tokens);
}
public void setColumnType(Token columnType) {
this.columnType = columnType;
}
public Token getColumnType() {
return columnType;
}
public void setColumnName(Token columnName) {
this.columnName = columnName;
}
public Token getColumnName() {
return columnName;
}
@Override
public void visit(ASTNode node, StringBuilder queryString) {
queryString.append(toString() + " ");
for (ASTNode child : getChildren())
for (ASTNode child : getChildren()) {
child.visit(child, queryString);
}
}
}

View File

@ -17,8 +17,8 @@ public class AlterNode extends ASTNode {
@Override
public void visit(ASTNode node, StringBuilder queryString) {
queryString.append(toString() + " ");
for (ASTNode child : getChildren())
for (ASTNode child : getChildren()) {
child.visit(child, queryString);
}
}
}

View File

@ -17,8 +17,8 @@ public class AlterObjNode extends ASTNode {
@Override
public void visit(ASTNode node, StringBuilder queryString) {
queryString.append(toString() + " ");
for (ASTNode child : getChildren())
for (ASTNode child : getChildren()) {
child.visit(child, queryString);
}
}
}

View File

@ -17,8 +17,8 @@ public class AlterRenameColumnNode extends ASTNode {
@Override
public void visit(ASTNode node, StringBuilder queryString) {
queryString.append(toString() + " ");
for (ASTNode child : getChildren())
for (ASTNode child : getChildren()) {
child.visit(child, queryString);
}
}
}

View File

@ -17,8 +17,8 @@ public class AlterRenameTableNode extends ASTNode {
@Override
public void visit(ASTNode node, StringBuilder queryString) {
queryString.append(toString() + " ");
for (ASTNode child : getChildren())
for (ASTNode child : getChildren()) {
child.visit(child, queryString);
}
}
}

View File

@ -1076,10 +1076,56 @@ public class OracleParser {
}
else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("DROP")) {
if (i + 1 < parseTokens.size() && parseTokens.get(i + 1).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i + 1).getValue().equalsIgnoreCase("COLUMN")) {
tokens = new ArrayList<>();
tokens.add(parseTokens.get(i));
for (int j = i + 1; j < parseTokens.size(); j++) {
if (parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equalsIgnoreCase(";")) {
i = j - 1;
break;
}
tokens.add(parseTokens.get(j));
}
ASTNode childNode = new AlterDropColumnNode(tokens);
currentNode.addChild(childNode);
currentNode = childNode;
}
else if (i + 1 < parseTokens.size() && parseTokens.get(i + 1).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i + 1).getValue().equalsIgnoreCase("CONSTRAINT")) {
tokens = new ArrayList<>();
tokens.add(parseTokens.get(i));
for (int j = i + 1; j < parseTokens.size(); j++) {
if (parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equalsIgnoreCase(";")) {
i = j - 1;
break;
}
tokens.add(parseTokens.get(j));
}
ASTNode childNode = new AlterDropConstraintNode(tokens);
currentNode.addChild(childNode);
currentNode = childNode;
}
else {
try {
throw new ParseFailedException("Parse failed:There exists syntex error in the input sql!");
}
catch (ParseFailedException e) {
e.printStackTrace();
}
}
}
else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("MODIFY")) {
tokens = new ArrayList<>();
tokens.add(parseTokens.get(i));
for (int j = i + 1; j < parseTokens.size(); j++) {
if (parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equalsIgnoreCase(";")) {
i = j - 1;
break;
}
tokens.add(parseTokens.get(j));
}
ASTNode childNode = new AlterModifyColumnNode(tokens);
currentNode.addChild(childNode);
currentNode = childNode;
}
else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("RENAME")) {