Dialect feature coverage
Generated by tools/coverage.py on 2026-10-02. Do not edit by hand.
Every probe is parsed by this grammar and by independent reference parsers (SQLGlot, ANTLR grammars-v4, pglast, sqlfluff). A feature is not "covered" just because our own grammar accepts our own probe.
Legend: yes implemented, no absent (tracked gap), n/a not applicable, - not observable.
Scores
| Dialect | Parent | Score | Implemented / Applicable | Agrees with references |
|---|---|---|---|---|
| base (ANSI Core) | none | 100.0% | 59 / 59 | 28/29 |
| postgres | base | 100.0% | 94 / 94 | 52/52 |
| mysql | base | 100.0% | 80 / 80 | 40/40 |
| mariadb | mysql | 100.0% | 83 / 83 | 41/41 |
| tsql | base | 100.0% | 82 / 82 | 41/42 |
| oracle | base | 100.0% | 82 / 82 | 41/43 |
| db2 | base | 100.0% | 80 / 80 | 31/41 |
| sqlite | base | 100.0% | 64 / 64 | 28/28 |
| hive | base | 100.0% | 69 / 69 | 34/35 |
| spark | hive | 100.0% | 74 / 74 | 36/38 |
| databricks | spark | 100.0% | 74 / 74 | 37/38 |
| snowflake | base | 100.0% | 82 / 82 | 42/42 |
| bigquery | base | 100.0% | 77 / 77 | 35/37 |
| redshift | base | 100.0% | 74 / 74 | 40/40 |
| trino | base | 100.0% | 71 / 71 | 34/36 |
| athena | trino | 100.0% | 71 / 71 | 35/36 |
| duckdb | base | 100.0% | 79 / 79 | 40/40 |
| clickhouse | base | 100.0% | 71 / 71 | 32/36 |
| flink | base | 100.0% | 70 / 70 | 0/35 |
| cockroachdb | postgres | 100.0% | 90 / 90 | 0/50 |
| spanner | bigquery | 100.0% | 72 / 72 | 0/33 |
| teradata | base | 100.0% | 70 / 70 | 31/35 |
| hana | base | 100.0% | 83 / 83 | 0/41 |
Suspect probes
Our grammar accepts these, but no independent parser does. The grammar may be too loose, or the probe may not be real SQL.
base/cursor, asked: antlr, sqlfluff, sqlglottsql/security_label, asked: antlr, sqlfluff, sqlglotoracle/create_operator, asked: sqlfluff, sqlglotoracle/materialized_view_log, asked: sqlfluff, sqlglotdb2/returning_clause, asked: sqlfluffdb2/savepoint, asked: sqlfluffdb2/procedural_block, asked: sqlfluffdb2/prepared_statements, asked: sqlfluffdb2/cursor, asked: sqlfluffdb2/security_label, asked: sqlfluffdb2/alter_set_options, asked: sqlfluffdb2/index_rebuild, asked: sqlfluffdb2/database_link, asked: sqlfluffdb2/optimize_table, asked: sqlfluffhive/show_statement, asked: sqlfluff, sqlglotspark/procedural_block, asked: sqlfluff, sqlglotspark/optimize_table, asked: sqlfluff, sqlglotdatabricks/procedural_block, asked: sqlfluff, sqlglotbigquery/returning_clause, asked: sqlfluff, sqlglotbigquery/database_link, asked: sqlfluff, sqlglottrino/prepared_statements, asked: sqlfluff, sqlglottrino/database_link, asked: sqlfluff, sqlglotathena/database_options, asked: sqlfluff, sqlglotclickhouse/show_statement, asked: sqlfluff, sqlglotclickhouse/alter_set_options, asked: sqlfluff, sqlglotclickhouse/index_rebuild, asked: sqlfluff, sqlglotclickhouse/optimize_table, asked: sqlfluff, sqlglotteradata/procedural_block, asked: sqlfluff, sqlglotteradata/cursor, asked: sqlfluff, sqlglotteradata/alter_set_options, asked: sqlfluff, sqlglotteradata/database_link, asked: sqlfluff, sqlglot
Confirmed gaps
Our grammar rejects these, but at least one independent parser accepts them. These are genuinely missing features.
None.
Feature matrix
| Feature (ISO, weight) | base | postgres | mysql | mariadb | tsql | oracle | db2 | sqlite | hive | spark | databricks | snowflake | bigquery | redshift | trino | athena | duckdb | clickhouse | flink | cockroachdb | spanner | teradata | hana |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
select_basic (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
cte (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
recursive_cte (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
window_functions (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
grouping_sets (n/a, 1) | yes | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
rollup (n/a, 1) | yes | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
offset_fetch (n/a, 1) | yes | yes | n/a | n/a | yes | yes | yes | n/a | n/a | n/a | n/a | yes | n/a | yes | yes | yes | yes | n/a | yes | yes | n/a | n/a | n/a |
limit_offset (n/a, 3) | no | yes | yes | yes | n/a | n/a | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | n/a | yes |
qualify_clause (n/a, 1) | no | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | yes | yes | yes | n/a | n/a | n/a | yes | yes | n/a | n/a | n/a | yes | n/a |
lateral_join (n/a, 1) | yes | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
tablesample (n/a, 1) | yes | yes | n/a | n/a | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | n/a | yes | n/a | yes |
set_operations (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
distinct_on (n/a, 1) | no | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | yes | n/a | n/a | n/a |
insert_values (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
update_where (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
delete_where (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
merge_statement (n/a, 3) | yes | yes | n/a | n/a | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | n/a | yes | n/a | n/a | yes | yes |
returning_clause (n/a, 3) | no | yes | n/a | yes | yes | yes | yes | yes | n/a | n/a | n/a | yes | yes | n/a | n/a | n/a | yes | yes | n/a | yes | yes | n/a | n/a |
upsert (n/a, 3) | no | yes | yes | yes | n/a | n/a | n/a | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | yes | yes | yes | n/a | yes |
locking_clause (n/a, 3) | no | yes | yes | yes | yes | yes | yes | n/a | n/a | n/a | n/a | yes | n/a | n/a | yes | yes | n/a | n/a | n/a | yes | yes | n/a | yes |
truncate (n/a, 1) | yes | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
create_table (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
alter_table_add_column (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
create_view (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
materialized_view (n/a, 1) | no | yes | n/a | n/a | yes | yes | n/a | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | n/a | yes |
comment_on (n/a, 1) | no | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes | yes |
create_index (n/a, 3) | no | yes | yes | yes | yes | yes | yes | yes | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a | yes | yes | n/a | yes | yes | yes | yes |
create_temporary_table (n/a, 1) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | n/a | yes | yes |
transactions (n/a, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
savepoint (n/a, 1) | yes | yes | yes | yes | yes | yes | yes | yes | n/a | n/a | n/a | yes | n/a | yes | n/a | n/a | yes | n/a | n/a | yes | n/a | yes | yes |
grant_revoke (n/a, 1) | yes | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes |
explain (n/a, 1) | no | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
show_statement (n/a, 1) | no | yes | yes | yes | n/a | n/a | n/a | n/a | yes | yes | yes | yes | n/a | n/a | yes | yes | yes | yes | yes | yes | n/a | n/a | n/a |
procedural_block (n/a, 3) | no | n/a | yes | yes | yes | yes | yes | n/a | n/a | yes | yes | yes | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | yes |
prepared_statements (n/a, 1) | no | yes | yes | yes | n/a | n/a | yes | n/a | n/a | n/a | n/a | n/a | n/a | yes | yes | yes | yes | n/a | n/a | yes | n/a | n/a | n/a |
quantified_comparison (E061-07, 1) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
like_escape (E061-05, 1) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
typed_temporal_literal (F051-03, 1) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
datetime_value_function (F051-06, 1) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
cast_expression (F201, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
case_expression (F261, 3) | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
cursor (E121, 1) | yes | yes | yes | yes | yes | yes | yes | n/a | n/a | n/a | n/a | yes | n/a | yes | n/a | n/a | n/a | n/a | n/a | yes | n/a | yes | yes |
reindex (n/a, 1) | no | yes | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a |
cluster_table (n/a, 1) | no | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a |
discard (n/a, 1) | no | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a |
security_label (n/a, 1) | no | yes | n/a | n/a | yes | n/a | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a |
import_foreign_schema (n/a, 1) | no | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a |
create_operator (n/a, 1) | no | yes | n/a | n/a | n/a | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a |
create_rule (n/a, 1) | no | yes | n/a | n/a | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a |
cache_table (n/a, 1) | no | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
alter_set_options (n/a, 2) | no | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes | yes | yes | n/a | yes | yes | yes | yes | yes | yes |
index_rebuild (n/a, 1) | no | n/a | n/a | n/a | yes | yes | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a | n/a | yes |
database_options (n/a, 1) | no | yes | yes | yes | yes | yes | n/a | n/a | yes | yes | yes | yes | n/a | yes | n/a | yes | n/a | yes | yes | yes | n/a | yes | n/a |
bulk_load (n/a, 2) | no | yes | yes | yes | yes | n/a | n/a | n/a | yes | yes | yes | yes | yes | yes | n/a | n/a | yes | n/a | n/a | yes | n/a | n/a | yes |
materialized_view_log (n/a, 1) | no | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
database_link (n/a, 1) | no | yes | yes | yes | yes | yes | yes | n/a | n/a | n/a | n/a | yes | yes | yes | yes | n/a | n/a | n/a | yes | yes | n/a | yes | yes |
optimize_table (n/a, 1) | no | n/a | yes | yes | n/a | yes | yes | yes | yes | yes | yes | n/a | n/a | yes | n/a | n/a | n/a | yes | n/a | n/a | n/a | n/a | yes |
commit_synonym (n/a, 1) | no | yes | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a | n/a | n/a | yes | n/a | n/a | n/a |
sqlstate (E171, 1) | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
host_language_binding (E182, 1) | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
ANSI purity (base grammar)
No purity violations.