Repository navigation
Releases: xo/dbmeta
Release list
dbmeta v0.7.0
go get github.com/xo/dbmeta@v0.7.0This is a v0 release, so the API can still change.
What is new since v0.6.0
- The Cassandra dialect is
cassandra, and it wascql(D196). The driver
moved fromgithub.com/xo/cqltogithub.com/xo/cassandrav0.1.0, and dburl
v0.47.0 renamed its scheme. ScyllaDB shares the dialect and the model. The
test module requires dburl v0.47.0, anddbrungives the tests
DBMETA_CASSANDRA. - The Cassandra and ScyllaDB entries print the
cassandra://URL as their
dsn, which the new driver requires, and they make an ordinary user,
dbmeta_user, with parity recorded for it (D195). - Elasticsearch, Solr and OpenSearch read the release with
SELECT version()
since dbimp v0.15.0, and every user can read it, because the entries grant
cluster:monitor/main(D191, D192). SurrealDB reads it the same way. - Snowflake has parity for three principals, a conformance target, and a run
ofChangePasswordwith seven hostile passwords (D193). - GizmoSQL and Avatica are models (D187, D186). OpenSearch 2.19.6 answers
Columns (D189). No model is built for Pinot, DynamoDB, VoltDB, H2, chai, csvq
or the hosted services other than Redshift and Snowflake (D184, D185, D188,
D194).
How it was tested
- All checks of the Test workflow passed in CI on abe2ca1, the commit this
release is tagged on. - Cassandra 3.11, 4.1 and 5.0, and ScyllaDB 2025.1 and 2026.3 were run live on
the new driver.
dbmeta v0.6.0
go get github.com/xo/dbmeta@v0.6.0This is a v0 release, so the API can still change.
What is new since v0.5.0
- Two dialects. GizmoSQL answers 20 of the 56 kinds on 1.40.0 and 1.41.0 by
sharing the DuckDB model (D187). Avatica answers 24 on 1.28.0 and 1.29.0,
reading the HSQLDB catalog of the standalone server (D186). Phoenix has no
model, because it shares no catalog statement with that server. dbmeta now
has 41 models. - Snowflake ran against a trial account for the first time. One statement,
the sequences query, failed and is fixed, and so is the label of a grant on a
view (D190). Parity is not measured, because the role cannot make a second
login. - OpenSearch 2.19.6 answers Columns, since dbimp v0.14.1 reads its DESCRIBE row
(D189). - Apache Pinot and Amazon DynamoDB have no catalog that a statement can reach,
so they have no model (D185, D184). H2, VoltDB, chai and csvq get none
either (D188). - dbrun connects a hosted service with the driver DSN that dburl gives, so
Snowflake and Redshift work throughdbrun. The test module pins dbimp
v0.14.1.
How it was tested
- All 30 checks of the Test workflow passed in CI on 90d0261, the commit this
release is tagged on. Two jobs failed on the first run,oracle-26aiand
questdb-9.4.3, and passed when rerun. Neither touches this change. - GizmoSQL 1.40.0 and 1.41.0, Avatica 1.28.0 and 1.29.0, OpenSearch 2.19.6 and
3.9.0, and Snowflake 10.36.101 were run live.
dbmeta v0.5.0
go get github.com/xo/dbmeta@v0.5.0This is a v0 release, so the API can still change.
What is new since v0.4.0
- The OpenSearch dialect. It answers Databases, Tables and Columns on 3.9.0 by
walking SHOW TABLES and DESCRIBE (D181). On 2.19.6 Columns has no answer
through dbimp's driver, which cannot read a DESCRIBE row, so the column
checks skip there until dbimp fixes it. Views is unanswered on both
releases. Both releases accept a trailing semicolon. dbmeta now has 39
models. - Redshift ran against a real service for the first time, Redshift Serverless
in us-east-1. One statement failed, the roles query, and it is fixed. The
model answers 11 of the 56 kinds, and parity covers an owner, a grantee and
a stranger (D182). - D183 amends D176. Only Elasticsearch has aliases as views. Ken asked dbimp
to answerSELECT version()for Elasticsearch, OpenSearch and Solr, and
each model will use it when dbimp tags it. - The documents count the models again, and the backlog names the new work:
the version query, the OpenSearch 2.19.6 columns, the surveys of DynamoDB,
Apache Pinot and Apache Avatica, and the rest of the Redshift measurements.
How it was tested
- All 30 checks of the Test workflow passed in CI on 8f3115b, the commit this
release is tagged on. - OpenSearch 2.19.6 and 3.9.0 were run live, and so was Redshift Serverless
1.0.434008. Snowflake has not run, because no account is provisioned.
dbmeta v0.4.0
go get github.com/xo/dbmeta@v0.4.0This is a v0 release, so the API can still change.
What is new since v0.3.0
- Three dialects, each through dbimp's driver at v0.14.0 and the scheme that
dburl v0.46.0 names. Apache Drill answers 10 of the 56 kinds on 1.21.2 and
1.22.0 (D178). Elasticsearch answers 8 on 8.19.22, 9.4.6 and 9.5.3 (D177).
Apache Solr answers 4 on 9.9.0, 9.10.1 and 10.0.0 (D179). Each sets
TerminatorStripped, because the server refuses a trailing semicolon.
dbmeta now has 38 models. - Elasticsearch and OpenSearch can walk SHOW statements (D175). The release of
Elasticsearch and Solr is not a statement, so a caller reads it over HTTP
and passes it toParseVersion(D176). - The OpenSearch role of the ordinary user can list indices, describe them
and page a plain SELECT. The user can also see the name of every index. - The
DynamoDBdialect is nowdynamodb, and the DSN of every DynamoDB entry
ends withtls=false. - VoltDB has no model, because no statement can reach its catalog (D180). Its
entry now starts on both releases.
How it was tested
- The Tested tier passed in CI on 9388928, the commit this release is tagged
on. - Every release that a model reads was run live: Drill 1.21.2 and 1.22.0,
Elasticsearch 8.19.22, 9.4.6 and 9.5.3, and Solr 9.9.0, 9.10.1 and 10.0.0. - The OpenSearch role was measured on 2.19.6 only. Release 3.9.0 is not
measured.
dbmeta v0.3.0
go get github.com/xo/dbmeta@v0.3.0This is a v0 release, so the API can still change.
What is new since v0.2.0
- The Apache Druid dialect. It answers 7 of the 56 kinds on Druid 37.0.0 and
38.0.0, through dbimp's Druid driver and thedruidscheme of dburl. The
ordinary user cannot read the version, so only the administrator has one
(D171). dbmeta now has 35 models. - The Trino and Presto tests use
github.com/xo/dbimp/trino, which dburl
names for both schemes. Both entries print
trino://user@host:port/memory/defaultas their DSN and URL, and the vendor
clients are out of the test module (D172). - rqlite, Couchbase, Databend, the BigQuery emulator and InfluxDB 3 print an
apiaddress, and the ClickHouse entry publishes its HTTP port as the second
port, prints anapi, and makes an ordinary user,dbmeta_user, for
dbimp's driver (D167). - The ODBC fallback for a database that has no model belongs to the client,
such as usql, and not to dbmeta (D173).
How it was tested
- The Tested tier passed in CI on 7cbe9bf, the commit this release is tagged
on. - Every release that a model reads and that changed was run live: Druid
37.0.0 and 38.0.0, Trino 476 and 483, Presto 0.299, and ClickHouse 25.3,
25.8, 26.8 and 26.9. - The Verified tier was not run again for this release.
dbmeta v0.2.0
go get github.com/xo/dbmeta@v0.2.0This is a v0 release, so the API can still change.
What is new since v0.1.0
- InfluxDB 3 answers Triggers, from the processing engine (D170). It now
answers 9 of the 56 kinds. - The DSN that
dbrunprints is whatsql.Opentakes. For libSQL, Neo4j,
ArangoDB, SurrealDB, InfluxDB 1 and 2, Druid, Drill, Solr, Elasticsearch,
OpenSearch and DynamoDB it is the URL of the driver, and a newapifield
holds thehttp://address that other tools read (D167). The DynamoDB form
is nowdynamodb://key:secret@host:port?region=us-east-1. This changes what
a test or a script that reads thedsnof those products gets. dbrun startprints the URL that usql takes after the test variable.- The ready check of InfluxDB 1 also needs a query with no credentials to be
refused. A nightly run had connected in the gap while the image restarted
its server. - The container sweep of 2026-10-07 moved the pins of 14 products to the
newest release of each line. It adopted the new lines of InfluxDB 3 (3.12.0),
Druid (38.0.0), Weaviate (1.40.0) and MongoDB (9.0.2), and dropped InfluxDB
3.9.13, Druid 36.0.0, Weaviate 1.38.17 and MongoDB 7.0.43.
How it was tested
- The Tested tier passed in CI on 39b74b2, the commit this release is tagged
on, and the Nightly tier passed on the manual run of 4367158. - Every release that a model reads and that moved was run live on its new
tag: InfluxDB 3.10.6, 3.11.6 and 3.12.0, rqlite 10.5.2, Vitess 23.0.7 and
24.0.4, YDB 26.3.1.19, Databend 1.2.951 and Exasol nano.6. - The new pins of products that no model reads were not started.
- The Verified tier was not run again for this release.
dbmeta v0.1.0
The first release of dbmeta. It reads the metadata of a database, such as its
schemas, tables, columns, indexes, constraints, functions and roles, with one
API for every database. usql and dbtpl read through it.
go get github.com/xo/dbmeta@v0.1.0The module depends on the standard library alone and uses no cgo. The caller
opens the connection with the driver of its choice and passes it in.
What it answers
There are 34 models, one for each database, and the shape of every answer
follows the metadata commands of psql. PostgreSQL answers all 56 kinds of
object. The other models answer what their catalog holds, and
Query.Support says which kinds each one answers.
The models are for PostgreSQL, CockroachDB, MySQL and MariaDB, TiDB, Vitess,
SingleStore, SQLite, libSQL, rqlite, DuckDB, SQL Server, Oracle, Cassandra and
ScyllaDB, ClickHouse, Trino, Presto, Firebird, SAP HANA, Apache Hive, Apache
Impala, Exasol, Vertica, Couchbase, CrateDB, QuestDB, Databend, Snowflake,
Amazon Redshift, InfluxDB 3, InfluxDB 1 and 2 through InfluxQL, Neo4j, YDB,
ArangoDB and SurrealDB. A shared model reads a standard information_schema.
docs/COVERAGE.md holds what each database answers, and why it does not answer
the rest.
How it was tested
Every release of a database sits in a tier, and README.md names the tier of
each one.
- The Tested tier ran in CI on the commit before this tag, 380e597, and
passed. - The Nightly tier passed on 3a0ff0f, the night before this release.
- The Verified tier runs only on a development machine, and it was not run
again for this release. It holds Exasol, SQL Server releases on Windows
machines, and Oracle 18c and 19c. - The Snowflake and Redshift models were written from the vendors'
documentation and have never run against a server.
Before v1
This is a v0 release, so the API can still change. The decisions behind every
part of it are in docs/decisions/.