add alter

This commit is contained in:
XudongXie 2024-09-13 14:51:19 +08:00
parent 3254457fb0
commit d1a2e1647a
3 changed files with 72 additions and 10 deletions

View File

@ -6,6 +6,7 @@
<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/Parser/AST/AlterTable/AlterModifyColumnNode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/AlterTable/AlterModifyColumnNode.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" />
@ -104,13 +105,6 @@
<option name="presentableId" value="Default" />
<updated>1723106789329</updated>
</task>
<task id="LOCAL-00005" summary="add functions">
<created>1724145125754</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1724145125754</updated>
</task>
<task id="LOCAL-00006" summary="revise">
<created>1724164698153</created>
<option name="number" value="00006" />
@ -447,7 +441,14 @@
<option name="project" value="LOCAL" />
<updated>1726198053495</updated>
</task>
<option name="localTasksCounter" value="54" />
<task id="LOCAL-00054" summary="revise">
<created>1726209430618</created>
<option name="number" value="00054" />
<option name="presentableId" value="LOCAL-00054" />
<option name="project" value="LOCAL" />
<updated>1726209430619</updated>
</task>
<option name="localTasksCounter" value="55" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">

View File

@ -3,6 +3,7 @@ package Parser.AST.AlterTable;
import Lexer.Token;
import Parser.AST.ASTNode;
import java.util.ArrayList;
import java.util.List;
public class AlterModifyColumnNode extends ASTNode {
@ -44,4 +45,13 @@ public class AlterModifyColumnNode extends ASTNode {
child.visit(child, queryString);
}
}
public void ResetTokensbyNameTypeConstraint() {
List <Token> tokens = new ArrayList<>();
tokens.add(new Token(Token.TokenType.KEYWORD, "MODIFY"));
tokens.add(columnName);
tokens.add(columnType);
tokens.add(new Token(Token.TokenType.SYMBOL, ";"));
setTokens(tokens);
}
}

View File

@ -1116,19 +1116,70 @@ public class OracleParser {
else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("MODIFY")) {
tokens = new ArrayList<>();
tokens.add(parseTokens.get(i));
AlterModifyColumnNode childNode = new AlterModifyColumnNode();
for (int j = i + 1; j < parseTokens.size(); j++) {
if (j == i + 1) {
childNode.setColumnName(parseTokens.get(j));
}
if (j == i + 2) {
childNode.setColumnType(parseTokens.get(j));
}
if (j > i + 3) {
try {
throw new ParseFailedException("Parse failed:There exists syntex error in the input sql!");
}
catch (ParseFailedException e) {
e.printStackTrace();
}
break;
}
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);
childNode.setTokens(tokens);
currentNode.addChild(childNode);
currentNode = childNode;
}
else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("RENAME")) {
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 AlterRenameColumnNode(tokens);
currentNode.addChild(childNode);
currentNode = childNode;
}
else if (i + 1 < parseTokens.size() && parseTokens.get(i + 1).hasType(Token.TokenType.IDENTIFIER)) {
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 AlterRenameTableNode(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.SYMBOL) && parseTokens.get(i).getValue().equals(";")) {
tokens = new ArrayList<>();