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"> <component name="ChangeListManager">
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="revise"> <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$/.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" /> <change beforePath="$PROJECT_DIR$/src/main/java/Parser/OracleParser.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Parser/OracleParser.java" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
@ -104,13 +105,6 @@
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1723106789329</updated> <updated>1723106789329</updated>
</task> </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"> <task id="LOCAL-00006" summary="revise">
<created>1724164698153</created> <created>1724164698153</created>
<option name="number" value="00006" /> <option name="number" value="00006" />
@ -447,7 +441,14 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1726198053495</updated> <updated>1726198053495</updated>
</task> </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 /> <servers />
</component> </component>
<component name="Vcs.Log.Tabs.Properties"> <component name="Vcs.Log.Tabs.Properties">

View File

@ -3,6 +3,7 @@ package Parser.AST.AlterTable;
import Lexer.Token; import Lexer.Token;
import Parser.AST.ASTNode; import Parser.AST.ASTNode;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class AlterModifyColumnNode extends ASTNode { public class AlterModifyColumnNode extends ASTNode {
@ -44,4 +45,13 @@ public class AlterModifyColumnNode extends ASTNode {
child.visit(child, queryString); 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")) { else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("MODIFY")) {
tokens = new ArrayList<>(); tokens = new ArrayList<>();
tokens.add(parseTokens.get(i)); tokens.add(parseTokens.get(i));
AlterModifyColumnNode childNode = new AlterModifyColumnNode();
for (int j = i + 1; j < parseTokens.size(); j++) { 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(";")) { if (parseTokens.get(j).hasType(Token.TokenType.SYMBOL) && parseTokens.get(j).getValue().equalsIgnoreCase(";")) {
i = j - 1; i = j - 1;
break; break;
} }
tokens.add(parseTokens.get(j)); tokens.add(parseTokens.get(j));
} }
ASTNode childNode = new AlterModifyColumnNode(tokens); childNode.setTokens(tokens);
currentNode.addChild(childNode); currentNode.addChild(childNode);
currentNode = childNode; currentNode = childNode;
} }
else if (parseTokens.get(i).hasType(Token.TokenType.KEYWORD) && parseTokens.get(i).getValue().equalsIgnoreCase("RENAME")) { 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(";")) { else if (parseTokens.get(i).hasType(Token.TokenType.SYMBOL) && parseTokens.get(i).getValue().equals(";")) {
tokens = new ArrayList<>(); tokens = new ArrayList<>();