add select

This commit is contained in:
XudongXie 2024-09-10 16:09:24 +08:00
parent ddb4978a32
commit e9475c0507
7 changed files with 57 additions and 15 deletions

View File

@ -4,16 +4,13 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="add todolist">
<change afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/Select/SelectEndNode.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/Select/SelectNode.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/Select/SelectObjNode.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/Select/SelectOptionNode.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/Select/SelectTableNode.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/Select/SelectUnionNode.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/Select/SelectWhereClauseNode.java" afterDir="false" />
<list default="true" id="d8d12963-4777-48e3-9669-309cf5e41d60" name="更改" comment="add select">
<change afterPath="$PROJECT_DIR$/src/main/java/Document/Insert statement in Oracle" 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/Document/Select statement in Oracle" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Document/Select statement in Oracle" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/Document/Todolist" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Document/Todolist" 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" />
<change beforePath="$PROJECT_DIR$/src/main/java/Parser/AST/Select/SelectObjNode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/Parser/AST/Select/SelectObjNode.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -279,7 +276,14 @@
<option name="project" value="LOCAL" />
<updated>1725896687932</updated>
</task>
<option name="localTasksCounter" value="25" />
<task id="LOCAL-00025" summary="add select">
<created>1725937361130</created>
<option name="number" value="00025" />
<option name="presentableId" value="LOCAL-00025" />
<option name="project" value="LOCAL" />
<updated>1725937361130</updated>
</task>
<option name="localTasksCounter" value="26" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -306,7 +310,8 @@
<MESSAGE value="finish the framework of sqltranslate (createTab sql is now being supported!)" />
<MESSAGE value="add insert sql" />
<MESSAGE value="add todolist" />
<option name="LAST_COMMIT_MESSAGE" value="add todolist" />
<MESSAGE value="add select" />
<option name="LAST_COMMIT_MESSAGE" value="add select" />
</component>
<component name="XDebuggerManager">
<watches-manager>

View File

@ -0,0 +1 @@
DROP TABLE _table (CASCADE CONSTRAINTS)?

View File

@ -0,0 +1,2 @@
INSERT INTO employees (first_name, last_name, email) VALUES ('Jane', 'Smith', 'janesm@example.com');
INSERT INTO employees VALUES ('Jane', 'Smith', 'janesm@example.com');

View File

@ -1,2 +1,21 @@
INSERT INTO employees (first_name, last_name, email) VALUES ('Jane', 'Smith', 'janesm@example.com');
INSERT INTO employees VALUES ('Jane', 'Smith', 'janesm@example.com');
SELECT DISTINCT? select_obj FROM select_tab where_clause? select_option? union_clause? ;
select_obj = * | column* | function
select_tab = table join_clause?
select_option = GROUP BY | ORDER BY | HAVING
function = COUNT() | SUM() | AVG() | MAX() | MIN()
example:
SELECT * FROM employees;
SELECT employee_id, first_name, last_name FROM employees;
SELECT * FROM employees WHERE department_id = 10;
SELECT * FROM employees ORDER BY hire_date DESC;
SELECT COUNT(*), AVG(salary) FROM employees;
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;
SELECT e.first_name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id;
SELECT
column1,
CASE WHEN column2 > 0 THEN 'Positive' ELSE 'Non-positive' END as status,
SUBSTR(column3, 1, 5) as substring_column3
FROM table_name;
SELECT column1, COUNT(column2) FROM table_name GROUP BY column1 HAVING COUNT(column2) > 10;

View File

@ -8,7 +8,7 @@ Operation
 update... set
 delete
 if... elsif... else... end if
 case... when... then
 case... when... then 1
 loop... end loop
 while... loop... end loop
 for ... in () loop end loop

View File

@ -17,7 +17,9 @@ public class OracleLexer {
"NOT NULL", "PRIMARY KEY", "UNIQUE", "CHECK", "REFERENCES", "DEFAULT",
"CONSTRAINT", "FOREIGN KEY"
// keywords of drop table
,"DROP", "CASCADE", "CONSTRAINTS"
, "DROP", "CASCADE", "CONSTRAINTS"
// keywords of select
, "DISTINCT", "JOIN", "GROUP BY", "ORDER BY", "HAVING", "UNION", "CASE", "WHEN", "END", "AS"
};
private static final Pattern TOKEN_PATTERN = Pattern.compile(
"(NUMBER\\(.*?\\))|" + // NUMBER() function

View File

@ -9,11 +9,24 @@ public class SelectObjNode extends ASTNode {
public SelectObjNode(List<Token> tokens)
{
super(tokens);
this.isDistinct = "";
}
public SelectObjNode(ASTNode node)
{
super(node);
this.isDistinct = "";
}
private String isDistinct;
public String getIsDistinct()
{
return isDistinct;
}
public void setIsDistinct(String isDistinct) {
this.isDistinct = isDistinct + " ";
}
@Override
@ -33,7 +46,7 @@ public class SelectObjNode extends ASTNode {
@Override
public void visit(ASTNode node, StringBuilder queryString)
{
queryString.append(toString() + " FROM ");
queryString.append(isDistinct + toString() + " FROM ");
for (ASTNode child : getChildren())
{
child.visit(child, queryString);