Покрытие SQL-операций по диалектам
Матрица показывает, какие SQL-конструкции семантический listener реально обрабатывает (строит граф зависимостей), а какие — только разбирает синтаксически.
42 операции · 6 диалектов · обновлено 15.06.2026
| Операция | PL/SQLOracle 19c+ | PostgreSQLPG 13–17 | MySQL8.x | MariaDB10.x–11.x | ClickHouse23.x+ | Trino400+ |
|---|---|---|---|---|---|---|
| DQL — запросы | ||||||
SELECT (базовый) atoms, output columns | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
JOIN (типизированный) INNER / LEFT / RIGHT / FULL / CROSS | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
Subquery вложенный SELECT как источник | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
CTE (WITH … AS) рекурсивные и нерекурсивные | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
Nested CTE (WITH в теле CTE) WITH a AS ( WITH b AS(…) SELECT… ) SELECT… | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
UNION / INTERSECT / EXCEPT каждый arm — отдельный scope | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
Window Functions (OVER) atoms ✓; frame / PARTITION не анализируется | partial | partial | partial | partial | partial | partial |
WHERE / HAVING capture предикат → StatementInfo | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
Literal (STRING / NUMBER / NULL) константы → atom с типом | partial | partial | ✓ done | ✓ done | partial | ✓ done |
Lambda guard x -> expr — x не регистрируется как column | N/A | N/A | N/A | N/A | ✓ done | ✓ done |
LATERAL JOIN коррелированный подзапрос; outer scope lookup | ✓ done | — | — | — | — | — |
CONNECT BY (иерархический) Oracle: PRIOR, LEVEL, SYS_CONNECT_BY_PATH | partial | N/A | N/A | N/A | N/A | N/A |
| DML — модификация | ||||||
INSERT (VALUES / SELECT) target table + column list | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
UPDATE target + SET columns | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
DELETE target + WHERE atoms | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
MERGE target + USING source + WHEN clauses | ✓ done | ✓ done | N/A | N/A | N/A | ✓ done |
REPLACE (MySQL / MariaDB) INSERT OR REPLACE upsert | N/A | N/A | ✓ done | ✓ done | N/A | N/A |
CALL / EXEC вызов процедуры → call edge | ✓ done | ✓ done | ✓ done | ✓ done | N/A | N/A |
DO (анонимный блок) outer stmt; тело не перепарсивается | N/A | ✓ done | N/A | N/A | N/A | N/A |
ARRAY JOIN ClickHouse: ARRAY_INNER / ARRAY_LEFT | N/A | N/A | N/A | N/A | ✓ done | N/A |
INSERT ON DUPLICATE KEY UPDATE MySQL / MariaDB upsert | N/A | N/A | partial | partial | N/A | N/A |
SELECT INTO (переменная / таблица) присваивание через SELECT | ✓ done | ✓ done | ✓ done | ✓ done | N/A | N/A |
| DDL — схема | ||||||
CREATE TABLE columns, types → DaliTable + DaliColumn | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
CREATE VIEW view declaration + source SELECT | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
ALTER TABLE (ADD / DROP / RENAME col) affectedColumnGeoids | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done | ✓ done |
CREATE TRIGGER DDL stmt; тело не перепарсивается | ✓ done | ✓ done | ✓ done | ✓ done | N/A | N/A |
CREATE INDEX ссылка на таблицу | ✓ done | ✓ done | ✓ done | ✓ done | N/A | N/A |
CREATE DICTIONARY ClickHouse-специфик | N/A | N/A | N/A | N/A | ✓ done | N/A |
CREATE SEQUENCE авто-инкрементный генератор | partial | ✓ done | N/A | partial | N/A | — |
RENAME TABLE / COLUMN переименование объекта | — | — | partial | partial | — | — |
| Процедуры / функции | ||||||
CREATE PROCEDURE routine decl + call graph | ✓ done | ✓ done | ✓ done | ✓ done | N/A | N/A |
CREATE FUNCTION routine decl + return type | ✓ done | ✓ done | ✓ done | ✓ done | N/A | N/A |
Параметры функции IN / OUT / INOUT / VARIADIC → DaliRoutine | ✓ done | ✓ done | ✓ done | ✓ done | N/A | N/A |
Cursor (DECLARE / FETCH) cursorGeoid; record.field mapping | ✓ done | partial | ✓ done | ✓ done | N/A | N/A |
REF CURSOR (typed / untyped) слабый и сильный курсорный тип | ✓ done | partial | N/A | N/A | N/A | N/A |
BULK COLLECT / FORALL коллекция как источник atoms | ✓ done | N/A | N/A | N/A | N/A | N/A |
Package / Package Body PL/SQL namespace для процедур и функций | ✓ done | N/A | N/A | N/A | N/A | N/A |
TYPE / OBJECT definition RECORD / VARRAY / OBJECT / REF CURSOR | ✓ done | — | N/A | N/A | N/A | — |
DECLARE (переменные) объявление переменных в теле процедуры | ✓ done | ✓ done | ✓ done | ✓ done | N/A | N/A |
IF / ELSIF / ELSE условный ветвящийся блок | partial | partial | partial | partial | N/A | N/A |
CASE (expression / statement) searched и simple; выражения и блоки | partial | partial | partial | partial | partial | partial |
LOOP / WHILE / FOR cursor FOR — explicit scope; WHILE — implicit | ✓ done | partial | partial | partial | N/A | N/A |
EXECUTE IMMEDIATE и SQL, собранный из строк на лету, непрозрачны для статического разбора — текст, построенный в рантайме, нельзя восстановить из исходного кода. Поэтому динамический SQL покрывается не матрицей выше, а рантайм-слоем: если запрос логируется (события OpenLineage или логи выполнения), захваченный результат проходит функцию нормализации идентификаторов — приводится к каноническому виду и встраивается в тот же граф зависимостей. То, что не видно в статике, видно в выполнении.
MySQL на корпусе Beaver
Прогон MySQL-диалекта на корпусе Beaver (DDL + аналитические запросы): два файла, разбор за 14 минут, граф зависимостей на уровне колонок записан в YGG.
Источник: сессия DALI на тенанте soak-main · MySQL 8.x · 2 файла (DDL + запросы).
Oracle PL/SQL на синтезированном ERP-корпусе
Прогон PL/SQL-диалекта на синтезированном Oracle ERP-корпусе (валидные файлы, сгенерированы программно): 78 файлов · 255 580 строк, схемы DWH / FIN / CRM / HR, 22 361 процедура. Разбор за 8 минут, граф зависимостей на уровне колонок записан в YGG.
Крупнейшие файлы корпуса: PKG_MEGA_ANALYTICS.sql — 23 806 строк (один файл), FIN/_tables — 12 801, CRM — 11 094, HR — 9 317.
Источник: сессия DALI · корпус ERP_CORE_CANONICAL (78 файлов · 255 580 строк) · 99.93% разобрано.