feat(compat): Apache Doris is a partial MySQL relative, and the fork we shipped was the wrong half (#424) - #503
Merged
Merged
Conversation
This was referenced Aug 26, 2026
…we shipped was the wrong half (#424) This registry was carrying StarRocks - a FORK of Apache Doris - while missing the original. Doris is now measured and registered, so relatives go 19 -> 20 and the published figure 33 -> 34 (14 external drivers + 20), both re-derived from `connectableProductCount()` rather than incremented by hand. Probed 2026-08-26 against `apache/doris:all-in-one-4.1.3` (`doris version doris-4.1.3-rc02-7126cf65d96`), every introspection surface called separately through the real provider, then read again in Chrome on the built app. Thirteen of the fifteen surfaces answer, and the fork's row is a prior rather than an inheritance: the numbers are where they part company. Doris reports the truth - `getSchema()` read 3 rows / 2.65 KB and 2000 rows / 9.95 KB against a ground truth of 3 and 2000, `getTableStats()` read 10187 bytes against `SHOW DATA`'s 9.948 KB - where StarRocks reports hard zeros. Cancellation genuinely cancels: an 8-second `SELECT sleep(8)` died at 1513 ms with Doris's own message. Sessions, storage and slow queries answer, permission errors arrive as the right class with the server's sentence intact, and gate 7 passes - a plan run captured 2 tables and drafted a LEFT JOIN over the real objects, which ran unmodified and answered TR 667, DE 667, US 666. The two failures share one cause and it is ours, not the engine's: the overview and health reads send `SHOW STATUS LIKE '...'`, a parse error in the Doris grammar, while a bare `SHOW STATUS` is accepted and answers zero rows - so a panel that could render absence renders an error instead. Filed as D30 rather than fixed here: it changes what two panels read on every MySQL-wire engine, which needs its own probe pass, not a by-the-way edit inside a labelling change. What the browser added that the provider boundary could not (the U14 lesson): the badge reads Slow, the Monitoring Overview tab carries the engine's own sentence while the other six tabs answer, Performance and Queries read N/A with "Not measured" rather than a fabricated zero, and creating the connection takes two clicks of Establish Connection - Test Connection answers "Connected, but this server answered no health data", the first click reports that and stores nothing, the second stores it. That is the D9 contract working on a new engine. One reading is recorded as suspect rather than claimed healthy: the Tables card summarises Vacuum 0 / OK on an engine with no vacuum-like operation. Also corrects three claims in README.md and DOCKERHUB.md that D8, D9 and the per-panel degradation had already overtaken: ScyllaDB's connection can be saved through the dialog, four of SingleStore's five lost surfaces are back, and StarRocks' monitoring dashboard renders. `docs/providers/README.md` was already right on all three; only the front-door prose was behind. Local gates: format, lint, typecheck, knip, build, run-core.sh (351 files), run-components.sh (33 groups).
cevheri
force-pushed
the
probe/doris-wire-compat
branch
from
August 26, 2026 20:50
bb9c7f6 to
21456c4
Compare
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Closes nothing; ticks Apache Doris in the Phase 0 list of #424.
Why this engine, and why it was missing
StarRocks is a fork of Apache Doris, and this registry had the fork while missing the
original. That gap was found by an audit of #424's body on 2026-08-26, not by a probe -
six of the candidates named in that audit appear nowhere in this repository at all. Doris
is the highest-value one: MySQL wire, a single all-in-one container, real demand, and a
registered relative whose measured failure modes are the prior for it.
A prior is not an inheritance, which is the point of the numbers below.
What was measured
Probed against
apache/doris:all-in-one-4.1.3(doris version doris-4.1.3-rc02-7126cf65d96),every surface called separately through
createDatabaseProvider, then read again in realChrome against
bun run build && bun run start.Thirteen of fifteen surfaces answer. Where Doris and its fork part company is the data:
SHOW DATA: 9.948 KB)sleepdied at 1513 msversion()5.7.99, real build in@@version_comment5.1.0, real build incurrent_version()information_schema.statisticsempty)EXPLAIN FORMAT='json'Also measured: permission errors arrive as the right class with the server's own sentence,
a
SELECT_PRIVrole saw only its granted table,Analyzeworks whileOptimizeandCheckdo not exist in the grammar, and a declared foreign key is invisible andunenforced -
SHOW CONSTRAINTSlists it,information_schema.KEY_COLUMN_USAGEisempty, and an order row referencing customer 424242 inserted successfully.
Gate 7 passes. A plan run captured 2 tables (
ctx_adf7) and draftedSELECT c.country, COUNT(o.id) ... LEFT JOIN ...over the real objects; run unmodified itanswered
TR 667,DE 667,US 666.The two failures are ours, and they are filed rather than fixed
getOverview()andgetHealth()sendSHOW STATUS LIKE '...', which ismismatched input 'LIKE'in the Doris grammar - while a bareSHOW STATUSis acceptedand answers zero rows. So the filter we add for our own convenience is the difference
between a panel that renders absence and a panel that renders an error.
Filed as D30. Not fixed here on purpose: it changes what two panels read on every
MySQL-wire engine (MySQL, MariaDB, TiDB, Vitess, OceanBase, SingleStore, StarRocks, Doris),
so it needs its own probe pass rather than a by-the-way edit inside a labelling change.
What only the browser found
The provider's boundary is not the product's - the U14 lesson from Cassandra:
could not answer this panel with Doris's own sentence beneath it - one panel, not the
dashboard;
2 / 2.0K rows / 12.60 KBwith the correct per-table numbers,Storage shows
DB Size N/Aabove a populated tablespace list, Sessions lists 7,and Performance, Queries and Pool read
N/Awith Not measured rather thana fabricated zero;
answers Connected, but this server answered no health data: ...; the first Establish
reports that and stores nothing, the second stores it. That is the D9 contract
working on an engine it was never tested against;
summarises Vacuum 0 / OK on an engine with no vacuum-like operation.
The connection dialog's hint and the login hero both pick the engine up from the registry
with no per-engine code: the hero reads Plus 20 wire-compatible engines and the dialog
shows Apache Doris (verified on Apache Doris 4.1.3-rc02-...) - partial support.
Counts
Relatives 19 -> 20, published figure 33 -> 34, both re-derived from
connectableProductCount()(14 external drivers + 20 relatives). The shipped half does notmove - no new driver, no new dependency.
Three stale claims corrected along the way
README.mdandDOCKERHUB.mdstill told a reader that a ScyllaDB connection "has to beseeded or admin-managed", that SingleStore "loses five surfaces", and that StarRocks loses
its monitoring panel. D9 (#472), D8 (#476) and the per-panel degradation (#477) had already
overtaken all three.
docs/providers/README.mdwas correct; only the front-door prose wasbehind.
Verification
format·lint·typecheck·knip·build·tests/run-core.sh(351 files) ·tests/run-components.sh(33 groups). Registry, docs table and compose fixture landtogether, so the existing tests that hold each of those to the others stayed green - the
compose-service test and the docs-table test both failed first, which is how the entry was
driven in.