Skip to content

Latest commit

 

History

History
942 lines (841 loc) · 24.3 KB

README.md

File metadata and controls

942 lines (841 loc) · 24.3 KB

GitHub license Nuget QSI Unit Tests

Logo

The QSI is the pure C# Query Structure Interface.

Languages

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

Structure Compiler

It compiles the result structure and relation

based on semantic tree transformed by parser's for each language.

Status

Features MySql SingleStore PostgreSql Amazon Redshift Oracle SQLServer Cassandra(Cql) Amazon Athena SAP Hana Apache Impala Trino Trino
No table
Table access
Derived table
Derived table (Non-Alias)
Specify columns to table alias
Inline derived table
Table function
Table variable
Common table expression
Join tables
Union many tables
Table pivot
Table unpivot
Trace view definition
Trace variable definition
Execute prepared table query
Call table procedure

Table Features

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.id
table.id
name alias.name
table.name
Derived table (Non-Alias)
-- table : id, name
SELECT * FROM
    (SELECT * FROM table)
Column References
id derived.id
table.id
name derived.name
table.name
Specify columns to table alias
-- table : id, name
SELECT * FROM table AS alias(a, b)
Column References
a alias.a
table.id
b alias.b
table.name
Inline derived table
SELECT * FROM
    (
        VALUES (1, 2), (3, 4)
    ) AS inline_table(a, b)
Column References
a inline_table.a
1 (literal)
3 (literal)
b inline_table.b
2 (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.uid
right_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.a
second_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.a
table.id
b table_view.b
table.name
Trace variable definition
-- TODO
Execute prepared table query
-- TODO
Call table procedure
-- TODO

Development

Requirements

  • PowerShell
  • .NET 6.0
  • Java >= 1.8

Command

Setup

PowerShell

PS> cd ./qsi
PS> ./Setup.ps1

Terminal

cd ./qsi
./setup.sh

Publish

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

Debugger

It supports abstract syntax trees and semantic trees, and a debugger that can debug compilation results.

Preview

Run

$ cd qsi/Qsi.Debugger
$ dotnet run