Skip to content

SQL Syntax Support

How much of each SQL dialect General SQL Parser actually parses — measured, versioned, and cross-referenced to the vendor documentation that defines each construct. Follow a dialect link for the construct-by-construct breakdown and its keyword-compatibility reference.

Parse coverage matrix

Measured against GSP Java 4.2.8 on 2026-08-31 (UTC) (artifact sha256 1117856ef134). Every number below comes from an automated parse run of GSP's documented-example corpus — one file per SQL construct, each cross-referenced to the vendor documentation that defines it.

How to read these numbers

Percentages are pass rates over each dialect's documented-example corpus, not a percentage of the entire SQL dialect. Corpora differ in size and exhaustiveness across dialects, so do not rank dialects against each other by percentage alone. Dialects without a corpus yet are listed as not measured — never as zero.

Across all measured dialects: 3480 of 3646 constructs (95%) and 10607 of 10996 individual statements (96%) parse fully.

Machine-readable: matrix.json · matrix.csv · dialect manifest · compatibility registry · per-dialect JSON linked in each row. Measured against open-source parsers: GSP vs sqlglot vs JSQLParser.

The SELECT, DML and stored-procedure columns are statement-level pass rates for the statement classes most users ask about first; each dialect page defines exactly what counts toward them.

Dialect Constructs fully parsed Statements parsed SELECT DML Stored procedures Keywords (usable as identifier) Data
Athena 32 of 32 (100%) 72 of 72 (100%) 8 of 8 (100%) 6 of 6 (100%) 529 (526) JSON
BigQuery 69 of 71 (97%) 221 of 223 (99%) 98 of 98 (100%) 31 of 31 (100%) 7 of 7 (100%) 271 (269) JSON
ClickHouse 156 of 156 (100%) 717 of 717 (100%) 258 of 258 (100%) 47 of 47 (100%) 4 of 4 (100%) 554 (551) JSON
Couchbase 30 of 38 (79%) 208 of 233 (89%) 97 of 108 (90%) 39 of 39 (100%) 172 (168) JSON
Databricks 34 of 38 (89%) 86 of 91 (95%) 11 of 11 (100%) 12 of 12 (100%) 2 of 3 (67%) 585 (582) JSON
DB2 174 of 174 (100%) 524 of 524 (100%) 15 of 15 (100%) 44 of 44 (100%) 47 of 47 (100%) 573 (570) JSON
Apache Doris 38 of 46 (83%) 123 of 134 (92%) 17 of 21 (81%) 16 of 17 (94%) 574 (571) JSON
Exasol 54 of 56 (96%) 194 of 199 (97%) 28 of 29 (97%) 14 of 14 (100%) 0 of 2 (0%) not measured JSON
Flink SQL 38 of 39 (97%) 127 of 129 (98%) 42 of 44 (95%) 6 of 6 (100%) 5 of 5 (100%) 312 (309) JSON
GaussDB 26 of 27 (96%) 59 of 60 (98%) 2 of 2 (100%) 9 of 9 (100%) 3 of 3 (100%) 584 (581) JSON
Greenplum 148 of 154 (96%) 460 of 487 (94%) 22 of 22 (100%) 35 of 35 (100%) 15 of 18 (83%) 519 (466) JSON
SAP HANA 122 of 126 (97%) 214 of 219 (98%) 26 of 26 (100%) 8 of 8 (100%) 4 of 6 (67%) 655 (643) JSON
Hive 75 of 89 (84%) 405 of 431 (94%) 145 of 147 (99%) 23 of 23 (100%) 0 of 1 (0%) 335 (334) JSON
Impala 46 of 47 (98%) 288 of 290 (99%) 75 of 75 (100%) 43 of 43 (100%) 1 of 1 (100%) 264 (262) JSON
Informix 134 of 164 (82%) 1089 of 1153 (94%) 177 of 187 (95%) 65 of 71 (92%) 5 of 16 (31%) 703 (674) JSON
MySQL 135 of 135 (100%) 242 of 242 (100%) 90 of 90 (100%) 16 of 16 (100%) 22 of 22 (100%) 538 (534) JSON
Netezza 65 of 73 (89%) 149 of 169 (88%) 13 of 13 (100%) 14 of 16 (88%) 435 (432) JSON
ODBC 19 of 22 (86%) 61 of 68 (90%) 41 of 42 (98%) 15 of 16 (94%) 469 (429) JSON
OpenEdge 49 of 49 (100%) 169 of 169 (100%) 20 of 20 (100%) 14 of 14 (100%) 3 of 3 (100%) 469 (425) JSON
Oracle 182 of 182 (100%) 319 of 319 (100%) 19 of 19 (100%) 21 of 21 (100%) 6 of 6 (100%) 690 (659) JSON
PostgreSQL 127 of 132 (96%) 467 of 481 (97%) 45 of 46 (98%) 45 of 45 (100%) 14 of 16 (88%) 613 (582) JSON
Presto 66 of 66 (100%) 157 of 157 (100%) 41 of 41 (100%) 8 of 8 (100%) 3 of 3 (100%) 519 (516) JSON
Redshift 88 of 90 (98%) 148 of 150 (99%) 22 of 22 (100%) 6 of 6 (100%) 3 of 3 (100%) 488 (463) JSON
Snowflake 455 of 455 (100%) 757 of 757 (100%) 94 of 94 (100%) 66 of 66 (100%) 38 of 38 (100%) 730 (689) JSON
Salesforce SOQL 28 of 30 (93%) 101 of 106 (95%) 101 of 106 (95%) 541 (500) JSON
Spark SQL 69 of 70 (99%) 241 of 243 (99%) 93 of 93 (100%) 17 of 17 (100%) 3 of 3 (100%) 330 (327) JSON
SQL Server 290 of 290 (100%) 1082 of 1082 (100%) 58 of 58 (100%) 58 of 58 (100%) 7 of 7 (100%) 586 (541) JSON
StarRocks 34 of 40 (85%) 99 of 109 (91%) 20 of 21 (95%) 6 of 13 (46%) 610 (607) JSON
Sybase 111 of 123 (90%) 296 of 335 (88%) 15 of 15 (100%) 16 of 16 (100%) 4 of 9 (44%) 456 (413) JSON
Sybase ASE 58 of 69 (84%) 232 of 245 (95%) 39 of 39 (100%) 12 of 14 (86%) 19 of 19 (100%) not measured JSON
SAP SQL Anywhere 108 of 119 (91%) 291 of 328 (89%) 15 of 15 (100%) 16 of 16 (100%) 4 of 8 (50%) not measured JSON
Sybase IQ 111 of 123 (90%) 296 of 335 (88%) 15 of 15 (100%) 16 of 16 (100%) 4 of 9 (44%) not measured JSON
Teradata 45 of 47 (96%) 116 of 118 (98%) 40 of 40 (100%) 8 of 8 (100%) 5 of 5 (100%) 702 (698) JSON
Trino 68 of 78 (87%) 151 of 175 (86%) 45 of 46 (98%) 9 of 9 (100%) 2 of 2 (100%) not measured JSON
Vertica 196 of 196 (100%) 446 of 446 (100%) 64 of 64 (100%) 14 of 14 (100%) 10 of 10 (100%) 576 (573) JSON
ANSI SQL not measured not measured 636 (632)
SQLite not measured not measured 567 (564)

Methodology

  • Corpus: one file per documented SQL construct, containing the complete set of examples from the vendor's own documentation for that construct, with the source URL recorded in the file header. The corpus lives in the GSP repository (sqlcoverage/sqlfiles/) (commit 2bcb45940).
  • Measurement: each file is parsed with TGSqlParser for the dialect; statements are split with the parser's own splitter and scored individually. A construct counts as fully parsed only when every one of its example statements parses without error.
  • Keyword data: extracted from the parser's lexer and grammar sources and runtime-validated (can this keyword be used as an identifier in SELECT/CREATE/INSERT contexts?). See each dialect's keyword-compatibility page.
  • Refresh cadence: regenerated with each GSP release; the version and date stamps above identify the exact build measured.