The QSI is the pure C# Query Structure Interface.
Language | Parser | Repos |
---|---|---|
MySql | MySQL Workbench source code(Antlr4) | mysql-fworkbench |
SingleStore | based on Qsi.MySql | |
PostgreSql | PostgreSQL server source code(yacc) | libpg_query |
Redshift | based on Qsi.PostgreSql | |
Oracle | Antlr4 | |
SqlServer | Microsoft.SqlServer.TransactSql.ScriptDom, Microsoft.SqlServer.Management.SqlParser | MSDN, NuGet (ScriptDom),NuGet (Management) |
Cassandra | Antlr4 | |
Athena | Antlr4 | |
SAP Hana | Antlr4 | |
Impala | Antlr4 | |
Trino | Trino source code(Antlr4) | trino |
PrimarSql | PrimarSql | PrimarSql |
It compiles the result structure and relation
based on semantic tree transformed by parser's for each language.
Done? | Feature | Example | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
☑ | No table |
SELECT 1 AS a, '2' AS b |
|
||||||||||
☑ | Table access |
-- table : id, name
SELECT * FROM table |
|
||||||||||
☑ | Derived table |
-- table : id, name
SELECT * FROM
(SELECT * FROM table) AS alias |
|
||||||||||
☑ | Derived table (Non-Alias) |
-- table : id, name
SELECT * FROM
(SELECT * FROM table) |
|
||||||||||
☑ | Specify columns to table alias |
-- table : id, name
SELECT * FROM table AS alias(a, b) |
|
||||||||||
☑ | Inline derived table |
SELECT * FROM
(
VALUES (1, 2), (3, 4)
) AS inline_table(a, b) |
|
||||||||||
☐ | Table function |
-- function : id, name
SELECT * FROM tbl_func('table function') |
|
||||||||||
☐ | Table variable |
-- TODO |
|||||||||||
☑ | Common table expression |
WITH cte AS (SELECT 1 AS n)
SELECT * FROM cte |
|
||||||||||
☑ | Common table expression (Aliases) |
WITH cte (n) AS (SELECT 1)
SELECT * FROM cte |
|
||||||||||
☑ | 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 |
|
||||||||||
☑ | Join tables |
-- left_table : name, uid
-- right_table : age, uid
SELECT * FROM
left_table l
JOIN right_table r ON l.uid = r.uid |
|
||||||||||
☑ | Join tables (Pivot columns) |
-- left_table : name, uid
-- right_table : age, uid
SELECT * FROM
left_table
JOIN right_table USING (uid) |
|
||||||||||
☑ | Union many tables |
SELECT a FROM first_table
UNION ALL
SELECT b FROM second_table |
|
||||||||||
☐ | Table pivot |
-- TODO |
|||||||||||
☐ | Table unpivot |
-- TODO |
|||||||||||
☑ | Trace view definition |
-- table_view : a, b
-- table : id, name
SELECT * FROM table_view |
|
||||||||||
☐ | Trace variable definition |
-- TODO |
|||||||||||
☐ | Execute prepared table query |
-- TODO |
|||||||||||
☐ | Call table procedure |
-- TODO |
- PowerShell
- .NET 6.0
- Java >= 1.8
PowerShell
PS> cd ./qsi
PS> ./Setup.ps1
Terminal
cd ./qsi
./setup.sh
PS> cd ./qsi
PS> ./Publish.ps1 <VERSION> [-Mode <PUBLISH_MODE>]
-
<VERSION>
Specifies the package version.
Version must be greater than the latest version tag on git.
-
-Mode <PUBLISH_MODE>
Specifies the publish mode.
PUBLISH_MODE Action Publish(Default) Publish packages to NuGet, GitHub repositories Local Publish packages to local repository Archive Build packages to ./qsi/Publish
It supports abstract syntax trees and semantic trees, and a debugger that can debug compilation results.
$ cd qsi/Qsi.Debugger
$ dotnet run