Skip to content

Commit 0fcb5b4

Browse files
committed
fix: include all 11 SQL corpora in benchmark script and CI
- Added: MySQL MTR, sqlparser-rs (MySQL + PostgreSQL + Common), TPC-H - Fixed TPC-H extraction for multi-line queries - CI corpus-test now covers SQLGlot, CockroachDB, Vitess, sqlparser-rs - Total: 86K+ queries across 11 corpora
1 parent 5b3ee4f commit 0fcb5b4

File tree

3 files changed

+205
-115
lines changed

3 files changed

+205
-115
lines changed

.github/workflows/ci.yml

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,34 @@ jobs:
5757
- name: Build
5858
run: make -f Makefile.new all && make -f Makefile.new build-corpus-test
5959

60-
- name: Download corpora and test
60+
- name: Test against SQLGlot
6161
run: |
62-
mkdir -p /tmp/sql_corpora
62+
git clone --depth 1 -q https://github.com/tobymao/sqlglot.git /tmp/sqlglot
63+
cat /tmp/sqlglot/tests/fixtures/identity.sql /tmp/sqlglot/tests/fixtures/tpch.sql \
64+
/tmp/sqlglot/tests/fixtures/tpcds.sql 2>/dev/null | \
65+
grep -v '^$' | grep -v '^--' | ./corpus_test mysql
6366
64-
# SQLGlot (easiest, fastest)
65-
git clone --depth 1 -q https://github.com/tobymao/sqlglot.git /tmp/sql_corpora/sqlglot
66-
cat /tmp/sql_corpora/sqlglot/tests/fixtures/identity.sql | ./corpus_test mysql
67+
- name: Test against CockroachDB
68+
run: |
69+
git clone --depth 1 --sparse -q https://github.com/cockroachdb/cockroach.git /tmp/cockroach
70+
cd /tmp/cockroach && git sparse-checkout set pkg/sql/parser/testdata 2>/dev/null && cd -
71+
grep -rh "^[A-Z]" /tmp/cockroach/pkg/sql/parser/testdata/ 2>/dev/null | \
72+
grep -v "^--" | grep -v "^#" | head -5000 | ./corpus_test pgsql
73+
74+
- name: Test against Vitess
75+
run: |
76+
git clone --depth 1 --sparse -q https://github.com/vitessio/vitess.git /tmp/vitess
77+
cd /tmp/vitess && git sparse-checkout set go/vt/sqlparser 2>/dev/null && cd -
78+
grep -ohP '"((?:select|SELECT|insert|INSERT|update|UPDATE|delete|DELETE|set|SET|create|CREATE|alter|ALTER|drop|DROP|explain|EXPLAIN)[^"]*)"' \
79+
/tmp/vitess/go/vt/sqlparser/parse_test.go 2>/dev/null | \
80+
sed 's/^"//' | sed 's/"$//' | head -2000 | ./corpus_test mysql
6781
68-
# TPC-H
69-
git clone --depth 1 -q https://github.com/tvondra/pg_tpch.git /tmp/sql_corpora/pg_tpch
70-
for f in /tmp/sql_corpora/pg_tpch/queries/*.sql; do
71-
cat "$f" | sed 's/--.*$//' | tr '\n' ' ' | sed 's/;/;\n/g' | grep -v '^\s*$'
72-
done | ./corpus_test pgsql
82+
- name: Test against sqlparser-rs
83+
run: |
84+
git clone --depth 1 -q https://github.com/apache/datafusion-sqlparser-rs.git /tmp/sqlparser-rs
85+
grep -ohP '"((?:SELECT|INSERT|UPDATE|DELETE|SET|CREATE|ALTER|DROP|EXPLAIN|WITH)[^"]*)"' \
86+
/tmp/sqlparser-rs/tests/sqlparser_mysql.rs 2>/dev/null | \
87+
sed 's/^"//' | sed 's/"$//' | sed 's/\\"/"/g' | ./corpus_test mysql
88+
grep -ohP '"((?:SELECT|INSERT|UPDATE|DELETE|SET|CREATE|ALTER|DROP|EXPLAIN|WITH)[^"]*)"' \
89+
/tmp/sqlparser-rs/tests/sqlparser_postgres.rs 2>/dev/null | \
90+
sed 's/^"//' | sed 's/"$//' | sed 's/\\"/"/g' | ./corpus_test pgsql

docs/benchmarks/latest.md

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# SQL Parser Performance Report
22

3-
**Date:** 2026-03-24 17:38 UTC
3+
**Date:** 2026-03-24 17:45 UTC
44
**Host:** ci-big6-202511.vm
55
**CPU:** AMD Ryzen 9 5950X 16-Core Processor
66
**OS:** Linux 6.17.0-14-generic
77
**Compiler:** g++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
8-
**Git:** main @ b63b194
8+
**Git:** main @ 5b3ee4f
99
**Unit tests:** 430 passing
1010

1111
---
@@ -14,38 +14,43 @@
1414

1515
| Operation | Latency | Target | Status |
1616
|---|---|---|---|
17-
| BM_Classify_Insert | 207 ns | <500ns | MET |
17+
| BM_Classify_Insert | 210 ns | <500ns | MET |
1818
| BM_Classify_Update | 240 ns | <500ns | MET |
19-
| BM_Classify_Delete | 185 ns | <500ns | MET |
20-
| BM_Classify_Begin | 36.0 ns | <100ns | MET |
21-
| BM_Set_Simple | 128 ns | <300ns | MET |
22-
| BM_Set_Names | 127 ns | <300ns | MET |
19+
| BM_Classify_Delete | 184 ns | <500ns | MET |
20+
| BM_Classify_Begin | 37.5 ns | <100ns | MET |
21+
| BM_Set_Simple | 130 ns | <300ns | MET |
22+
| BM_Set_Names | 130 ns | <300ns | MET |
2323
| BM_Set_MultiVar | 254 ns | <300ns | MET |
24-
| BM_Set_FunctionRHS | 219 ns | <300ns | MET |
25-
| BM_Select_Simple | 229 ns | <500ns | MET |
26-
| BM_Select_MultiColumn | 467 ns | <500ns | MET |
27-
| BM_Select_Join | 599 ns | <2us | MET |
28-
| BM_Select_Complex | 1405 ns | <2us | MET |
29-
| BM_Select_MultiJoin | 1446 ns | <2us | MET |
30-
| BM_Emit_SetSimple | 139 ns | <500ns | MET |
31-
| BM_Emit_SelectSimple | 258 ns | <500ns | MET |
32-
| BM_ArenaReset | 3.76 ns | <10ns | MET |
33-
| BM_PgSQL_Select_Simple | 221 ns |||
34-
| BM_PgSQL_Set_Simple | 95.8 ns |||
24+
| BM_Set_FunctionRHS | 213 ns | <300ns | MET |
25+
| BM_Select_Simple | 223 ns | <500ns | MET |
26+
| BM_Select_MultiColumn | 470 ns | <500ns | MET |
27+
| BM_Select_Join | 596 ns | <2us | MET |
28+
| BM_Select_Complex | 1406 ns | <2us | MET |
29+
| BM_Select_MultiJoin | 1492 ns | <2us | MET |
30+
| BM_Emit_SetSimple | 147 ns | <500ns | MET |
31+
| BM_Emit_SelectSimple | 284 ns | <500ns | MET |
32+
| BM_ArenaReset | 3.63 ns | <10ns | MET |
33+
| BM_PgSQL_Select_Simple | 230 ns |||
34+
| BM_PgSQL_Set_Simple | 97.4 ns |||
3535

3636
---
3737

3838
## Corpus Test Results
3939

4040
| Corpus | Dialect | Queries | OK | PARTIAL | ERROR |
4141
|---|---|---|---|---|---|
42-
| PostgreSQL regression | pgsql | 55562 | 55342 (99.6202%) | 204 | 7 |
43-
| SQLGlot | mysql | 954 | 941 (98.6373%) | 13 | 0 |
44-
| CockroachDB | pgsql | 5000 | 4998 (99.96%) | 2 | 0 |
45-
46-
| Vitess | mysql | 2000 | 1996 (99.8%) | 4 | 0 |
47-
| TiDB | mysql | 3000 | 2991 (99.7%) | 9 | 0 |
48-
42+
| PostgreSQL regression | pgsql | 55553 | 55342 (99.6202%) | 204 | 7 |
43+
| MySQL MTR | mysql | 2270 | 2268 (99.9119%) | 2 | 0 |
44+
| CockroachDB | pgsql | 17429 | 16570 (95.0714%) | 859 | 0 |
45+
| SQLGlot | mysql | 1450 | 1424 (98.2069%) | 13 | 13 |
46+
47+
48+
| sqlparser-rs MySQL | mysql | 424 | 424 (100%) | 0 | 0 |
49+
| sqlparser-rs PostgreSQL | pgsql | 471 | 468 (99.3631%) | 3 | 0 |
50+
| sqlparser-rs Common | mysql | 1536 | 1528 (99.4792%) | 8 | 0 |
51+
| Vitess | mysql | 2291 | 2286 (99.7818%) | 5 | 0 |
52+
| TiDB | mysql | 5043 | 5031 (99.762%) | 12 | 0 |
53+
| **TOTAL** | | **86467** | **85341** | **1106** | **20** |
4954

5055
---
5156

0 commit comments

Comments
 (0)