The QSI is the pure C# Query Structure Interface.
based on semantic tree transformed by parser's for each language.
| Done? |
Feature |
Example |
| ☑ |
No table |
SELECT 1 AS a, '2' AS b
|
| Column |
References |
a |
1 (literal) |
b |
'2' (literal) |
|
| ☑ |
Table access |
-- table : id, name
SELECT * FROM table
|
| Column |
References |
id |
table.id |
name |
table.name |
|
| ☑ |
Derived table |
-- table : id, name
SELECT * FROM
(SELECT * FROM table) AS alias
|
| Column |
References |
id |
alias.idtable.id |
name |
alias.nametable.name |
|
| ☑ |
Derived table (Non-Alias) |
-- table : id, name
SELECT * FROM
(SELECT * FROM table)
|
| Column |
References |
id |
derived.idtable.id |
name |
derived.nametable.name |
|
| ☑ |
Specify columns to table alias |
-- table : id, name
SELECT * FROM table AS alias(a, b)
|
| Column |
References |
a |
alias.atable.id |
b |
alias.btable.name |
|
| ☑ |
Inline derived table |
SELECT * FROM
(
VALUES (1, 2), (3, 4)
) AS inline_table(a, b)
|
| Column |
References |
a |
inline_table.a1 (literal)3 (literal) |
b |
inline_table.b2 (literal)4 (literal) |
|
| ☐ |
Table function |
-- function : id, name
SELECT * FROM tbl_func('table function')
|
| Column |
References |
id |
no reference |
name |
no reference |
|
| ☐ |
Table variable |
-- TODO
|
|
| ☑ |
Common table expression |
WITH cte AS (SELECT 1 AS n)
SELECT * FROM cte
|
| Column |
References |
n |
1 (literal) |
|
| ☑ |
Common table expression (Aliases) |
WITH cte (n) AS (SELECT 1)
SELECT * FROM cte
|
| Column |
References |
n |
1 (literal) |
|
| ☑ |
Common table expression (Recursive) |
WITH RECURSIVE cte AS (
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM cte WHERE n < 10
)
SELECT * FROM cte
|
| Column |
References |
n |
1 (literal) |
|
cte.n (recursive) |
|
| ☑ |
Join tables |
-- left_table : name, uid
-- right_table : age, uid
SELECT * FROM
left_table l
JOIN right_table r ON l.uid = r.uid
|
| Column |
References |
name |
left_table.name |
uid |
left_table.uid |
age |
right_table.age |
uid |
right_table.uid |
|
| ☑ |
Join tables (Pivot columns) |
-- left_table : name, uid
-- right_table : age, uid
SELECT * FROM
left_table
JOIN right_table USING (uid)
|
| Column |
References |
uid |
left_table.uidright_table.uid |
name |
left_table.name |
age |
right_table.age |
|
| ☑ |
Union many tables |
SELECT a FROM first_table
UNION ALL
SELECT b FROM second_table
|
| Column |
References |
a |
first_table.asecond_table.b |
|
| ☐ |
Table pivot |
-- TODO
|
|
| ☐ |
Table unpivot |
-- TODO
|
|
| ☑ |
Trace view definition |
-- table_view : a, b
-- table : id, name
SELECT * FROM table_view
|
| Column |
References |
a |
table_view.atable.id |
b |
table_view.btable.name |
|
| ☐ |
Trace variable definition |
-- TODO
|
|
| ☐ |
Execute prepared table query |
-- TODO
|
|
| ☐ |
Call table procedure |
-- TODO
|
|
It supports abstract syntax trees and semantic trees, and a debugger that can debug compilation results.