add pattern of functions in select

This commit is contained in:
XudongXie 2024-09-10 23:11:01 +08:00
parent b4c48ae085
commit 1155fd3b42
2 changed files with 49 additions and 7 deletions

View File

@ -4,10 +4,9 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="add case when">
<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" />
<change beforePath="$PROJECT_DIR$/src/main/java/Lexer/OracleLexer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Lexer/OracleLexer.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -294,7 +293,21 @@
<option name="project" value="LOCAL" />
<updated>1725956415475</updated>
</task>
<option name="localTasksCounter" value="28" />
<task id="LOCAL-00028" summary="revise">
<created>1725958136981</created>
<option name="number" value="00028" />
<option name="presentableId" value="LOCAL-00028" />
<option name="project" value="LOCAL" />
<updated>1725958136981</updated>
</task>
<task id="LOCAL-00029" summary="revise">
<created>1725978582486</created>
<option name="number" value="00029" />
<option name="presentableId" value="LOCAL-00029" />
<option name="project" value="LOCAL" />
<updated>1725978582486</updated>
</task>
<option name="localTasksCounter" value="30" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -314,7 +327,6 @@
<MESSAGE value="AST node" />
<MESSAGE value="add AST node" />
<MESSAGE value="add functions" />
<MESSAGE value="revise" />
<MESSAGE value="add parser function" />
<MESSAGE value="add function" />
<MESSAGE value="coding" />
@ -323,7 +335,8 @@
<MESSAGE value="add todolist" />
<MESSAGE value="add select" />
<MESSAGE value="add case when" />
<option name="LAST_COMMIT_MESSAGE" value="add case when" />
<MESSAGE value="revise" />
<option name="LAST_COMMIT_MESSAGE" value="revise" />
</component>
<component name="XDebuggerManager">
<watches-manager>

View File

@ -29,9 +29,24 @@ public class OracleLexer {
"(NCHAR\\(.*?\\))|" + // NCHAR() function
"(NVARCHAR2\\(.*?\\))|" + // NVARCHAR2() function
"(RAW\\(.*?\\))|" + // RAW() function
"(COUNT\\(.*?\\))|" + // COUNT() function
"(SUM\\(.*?\\))|" + // SUM() function
"(AVG\\(.*?\\))|" + // AVG() function
"(MAX\\(.*?\\))|" + // MAX() function
"(MIN\\(.*?\\))|" + // MIN() function
"(NOT NULL)|" +
"(PRIMARY KEY)|" +
"(FOREIGN KEY)|" +
"(DOUBLE PRECISION)|" +
"(TIMESTAMP WITH TIME ZONE)|" +
"(TIMESTAMP WITH LOCAL TIME ZONE)|" +
"(LONG RAW)|" +
"(INTERVAL YEAR TO MONTH)|" +
"(INTERVAL DAY TO SECOND)|" +
"(REF CURSOR)|" +
"(\\b[A-Za-z_][A-Za-z0-9_]*\\b)|" + // Keywords and identifiers
"(\\d+\\.?\\d*)|" + // Numbers (integer or decimal)
@ -107,9 +122,23 @@ public class OracleLexer {
}else if (tokenValue.matches("(?i)RAW\\(.*?\\)")) {
// RAW() function, CASE_INSENSITIVE
return new Token(Token.TokenType.KEYWORD, tokenValue);
}else if (tokenValue.matches("(?i)COUNT\\(.*?\\)")) {
// RAW() function, CASE_INSENSITIVE
return new Token(Token.TokenType.KEYWORD, tokenValue);
}else if (tokenValue.matches("(?i)SUM\\(.*?\\)")) {
// RAW() function, CASE_INSENSITIVE
return new Token(Token.TokenType.KEYWORD, tokenValue);
}else if (tokenValue.matches("(?i)AVG\\(.*?\\)")) {
// RAW() function, CASE_INSENSITIVE
return new Token(Token.TokenType.KEYWORD, tokenValue);
}else if (tokenValue.matches("(?i)MAX\\(.*?\\)")) {
// RAW() function, CASE_INSENSITIVE
return new Token(Token.TokenType.KEYWORD, tokenValue);
}else if (tokenValue.matches("(?i)MIN\\(.*?\\)")) {
// RAW() function, CASE_INSENSITIVE
return new Token(Token.TokenType.KEYWORD, tokenValue);
}
else if (isKeyword(tokenValue)) {
return new Token(Token.TokenType.KEYWORD, tokenValue);
} else if (tokenValue.matches("[a-zA-Z_][a-zA-Z0-9_]*")) {