docs(concepts): update per-backend terminology map#12082
Conversation
Co-authored-by: deepyaman <14007150+deepyaman@users.noreply.github.com>
Co-authored-by: deepyaman <14007150+deepyaman@users.noreply.github.com>
Oracle implements `current_catalog` (returning `global_name`), and natively organizes schemas inside a database, so the catalog level is `database` rather than `N/A`. Druid's `current_database` returns the hardcoded `druid` schema, and Druid SQL exposes that level as `INFORMATION_SCHEMA.SCHEMATA`, so the native term is `schema` rather than `N/A`. Also pad the `singlestoredb` row to match the rest of the table. Assisted-by: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
I verified every row in this table against the backend implementations on main rather than taking the description's "verified" claim at face value. Summary: the diff looks alarming (−20/+24) but that's almost entirely because the column widths changed, forcing a rewrite of all 18 original rows. Substantively it's two real corrections, one wrong row replaced, one removal, and five additions.
Completeness ✅
pyproject.toml registers exactly 22 backend entry points, and the new table has exactly those 22 rows — nothing missing, nothing invented. pandas is genuinely gone (no ibis/backends/pandas, no entry point). The pre-existing sqlite/snowflake sort-order bug is also fixed.
Substantive changes, with evidence
| Change | Verdict | Evidence |
|---|---|---|
bigquery database → dataset |
correct | bigquery/__init__.py:307-308 — database = self._session_dataset.dataset_id, catalog = ....project; do_connect takes dataset_id |
pyspark database|schema → catalog|database |
correct | pyspark/__init__.py:256-263 — SELECT CURRENT_DATABASE() / SELECT CURRENT_CATALOG() |
druid dataSourceType|dataSource removed |
correct to remove — a dataSource is a table, and dataSourceType isn't a hierarchy level at all |
druid/__init__.py:69 |
athena data catalog | database |
correct | athena/__init__.py:308 list_data_catalogs(), then list_databases(catalog_name=...) |
databricks catalog | schema |
correct | databricks/__init__.py:359-366 — cur.schemas(catalog_name=...) → TABLE_SCHEM |
exasol N/A | schema |
correct | exasol/__init__.py:443 SELECT CURRENT_SCHEMA; :488 rejects catalog |
materialize database | schema |
correct | materialize/__init__.py:20 — class Backend(PostgresBackend) |
singlestoredb N/A | database |
correct | singlestoredb/__init__.py:190 SELECT DATABASE(); matches the "SingleStoreDB doesn't support catalogs" comment in test_client.py |
blank → N/A for clickhouse/impala/mysql/polars/sqlite |
correct, cosmetic | none of these define current_catalog |
Two cells I've corrected in b05e574
oracle: N/A → database (Catalog). Oracle was the only backend this PR marked N/A that actually implements current_catalog — oracle/__init__.py:239-242 returns global_name. Natively Oracle does have a database → schema hierarchy, and this table documents native terminology, so database is the accurate value. (The database → schema fix in the Database column was right and I've kept it: oracle/__init__.py:245-250 returns the user, with the comment "databases correspond to users".)
The counterargument for N/A is that Ibis can't traverse it — list_databases rejects a catalog argument (oracle/__init__.py:328), and Oracle has no db.schema.table qualification without DB links. Happy to be overruled here, but I think the table's stated purpose ("the terminology used by each backend for the two levels of hierarchy") favors describing the backend rather than Ibis's support level.
druid: N/A → schema (Database). druid/__init__.py:64-66 returns the hardcoded "druid", citing the INFORMATION_SCHEMA.SCHEMATA docs — Druid SQL calls that level a schema. N/A isn't wrong in spirit (Druid has no list_databases, and test_client.py marks it notyet for "the common notion of a database"), but schema is more informative and consistent with how the rest of the column is filled in. This is the softer of my two changes — revert it if you'd rather the column reflect Ibis support.
I also padded the singlestoredb row, which was one character wider than the separator. For the record this would never have failed CI: identify tags .qmd as {'text', 'file', 'non-executable'}, not markdown, so the prettier pre-commit hook skips this file entirely.
🤖 Generated with Claude Code
Follow-up, not blocking this PR: once the chdb backend lands (#12059), this table will need a chdb | N/A | database row — chdb defines no current_catalog and mirrors ClickHouse's single-level hierarchy. Flagging it so the table doesn't immediately go stale again. Whichever of the two merges second should pick it up; I'm happy to add the row on that side.
The backend hierarchy table was stale: it listed the removed pandas backend, omitted supported backends, and used inaccurate terminology for several systems.
Coverage
Terminology
database/schemalevels.N/A.schema.