SQL Parser Coverage
Lexega includes dedicated parsers for Snowflake and PostgreSQL SQL dialects with full semantic extraction and governance signal emission.
Snowflake
DML (Data Manipulation)
- SELECT (including CTEs, window functions, PIVOT/UNPIVOT)
- INSERT (single/multi-value, subquery)
- UPDATE (simple, multi-table)
- DELETE
- MERGE (with complex MATCHED/NOT MATCHED branches)
- COPY INTO (stage to table, table to stage)
DDL (Data Definition)
- CREATE/ALTER/DROP: TABLE, VIEW, STAGE, STREAM, TASK, DATABASE, SCHEMA
- CREATE/ALTER/DROP: MASKING POLICY, ROW ACCESS POLICY, NETWORK POLICY
- CREATE/ALTER/DROP: SESSION POLICY, PASSWORD POLICY, AGGREGATION POLICY, PROJECTION POLICY, AUTHENTICATION POLICY
- CREATE/ALTER/DROP: STORAGE INTEGRATION, API INTEGRATION, EXTERNAL ACCESS INTEGRATION
- CREATE/DROP: FUNCTION, PROCEDURE, DYNAMIC TABLE
- ALTER FUNCTION, ALTER PROCEDURE, ALTER DYNAMIC TABLE
- GRANT/REVOKE (span-preservation mode)
- TRUNCATE, SHOW, DESCRIBE/DESC, USE
- UNDROP DATABASE, UNDROP SCHEMA
Not yet supported (structured parsing/analysis): CREATE/ALTER for WAREHOUSE, PIPE, FILE FORMAT. These are preserved as
OpaqueContent(verbatim span emission) so formatting proceeds safely; risk analysis marks them as skipped.
Snowflake Scripting
- DECLARE, SET, LET
- IF/ELSEIF/ELSE, CASE statement
- FOR/WHILE/LOOP/REPEAT...UNTIL
- BREAK/CONTINUE
- BEGIN/END blocks with exception handling
- RETURN statements
- CALL (stored procedure invocation)
- Cursors (DECLARE CURSOR, OPEN, FETCH, CLOSE)
- EXECUTE IMMEDIATE (dynamic SQL)
- RAISE (exception raising)
- Transaction control (BEGIN TRANSACTION, COMMIT, ROLLBACK)
- Async job management (AWAIT, CANCEL)
Optional Rendering (CLI): The CLI can render/execute templates (e.g. with
--render-jinjaor by providing variables via--var/--var-file). Rendering produces pure SQL, so the original Jinja structure is not preserved in the formatted output.
PostgreSQL
Full parsing and governance signal support for PostgreSQL-specific constructs.
DML
- SELECT, INSERT, UPDATE, DELETE, MERGE (PostgreSQL 15+)
- Common Table Expressions (WITH / WITH RECURSIVE)
- UPSERT via
INSERT ... ON CONFLICT DO NOTHING / DO UPDATE
DDL
- CREATE/ALTER/DROP TABLE (including
IF EXISTS,IF NOT EXISTS,CASCADE) - CREATE/ALTER/DROP INDEX (including
CONCURRENTLY, expression indexes) - CREATE/ALTER/DROP VIEW (including
CREATE OR REPLACE) - CREATE/ALTER/DROP SCHEMA
- CREATE/ALTER/DROP SEQUENCE (including
OWNED BY) - CREATE/ALTER/DROP TYPE (composite types, enums, ranges, domains)
- CREATE/ALTER/DROP FUNCTION / PROCEDURE (including
LANGUAGE,RETURNS, body) - CREATE/ALTER/DROP TRIGGER (row-level, statement-level,
BEFORE/AFTER/INSTEAD OF) - CREATE/ALTER/DROP EXTENSION (including
CASCADE) - CREATE/ALTER/DROP TABLESPACE
- COMMENT ON (tables, columns, functions, schemas, types, indexes, views)
Security & Access Control
- CREATE/ALTER/DROP ROLE (including
LOGIN,SUPERUSER,CREATEDB,CREATEROLE,INHERIT,REPLICATION,BYPASSRLS) - GRANT / REVOKE (table, schema, sequence, function privileges)
- Row Level Security:
CREATE POLICY,ALTER POLICY,DROP POLICY ALTER TABLE ... ENABLE/DISABLE ROW LEVEL SECURITYALTER TABLE ... FORCE/NO FORCE ROW LEVEL SECURITY
Data Management
- COPY (TO/FROM with format options)
- TRUNCATE (with
CASCADE,RESTART IDENTITY) - VACUUM, ANALYZE
- CLUSTER, REINDEX
- LISTEN, NOTIFY, UNLISTEN
- LOCK TABLE (with lock modes)
Transaction & Session Control
- BEGIN, COMMIT, ROLLBACK, SAVEPOINT, RELEASE SAVEPOINT
- SET (session parameters)
- PREPARE, EXECUTE, DEALLOCATE
- EXPLAIN (with
ANALYZE,VERBOSE,FORMAT) - DO (anonymous code blocks)
Governance Signal Coverage
PostgreSQL statements emit 75 built-in governance rules (PG-RLS-NEW through PG-TBLSPC-DROP) covering:
| Category | Examples |
|---|---|
| Critical | SUPERUSER granted, RLS disabled, DROP EXTENSION CASCADE, TRUNCATE CASCADE |
| High | BYPASSRLS granted, trigger disabled, RLS policy dropped, function security definer |
| Medium | Index dropped concurrently, schema dropped, role altered, type changed |
| Low | VACUUM FULL, CLUSTER, extension version pinned, tablespace created |
| Info (positive) | RLS enabled, trigger created, policy created, security invoker used |
Need Help?
Can't find what you're looking for? Check out our GitHub or reach out to support.