Skip to content

Releases: xo/dbmeta

dbmeta v0.7.0

Choose a tag to compare

@kenshaw kenshaw released this 08 Oct 03:16
go get github.com/xo/dbmeta@v0.7.0

This is a v0 release, so the API can still change.

What is new since v0.6.0

  • The Cassandra dialect is cassandra, and it was cql (D196). The driver
    moved from github.com/xo/cql to github.com/xo/cassandra v0.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, and dbrun gives 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
    of ChangePassword with 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

Choose a tag to compare

@kenshaw kenshaw released this 08 Oct 00:09
go get github.com/xo/dbmeta@v0.6.0

This 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 through dbrun. 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-26ai and
    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

Choose a tag to compare

@kenshaw kenshaw released this 07 Oct 23:01
go get github.com/xo/dbmeta@v0.5.0

This 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 answer SELECT 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

Choose a tag to compare

@kenshaw kenshaw released this 07 Oct 22:12
go get github.com/xo/dbmeta@v0.4.0

This 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 to ParseVersion (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 DynamoDB dialect is now dynamodb, and the DSN of every DynamoDB entry
    ends with tls=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

Choose a tag to compare

@kenshaw kenshaw released this 07 Oct 04:28
go get github.com/xo/dbmeta@v0.3.0

This 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 the druid scheme 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/default as 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
    api address, and the ClickHouse entry publishes its HTTP port as the second
    port, prints an api, 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

Choose a tag to compare

@kenshaw kenshaw released this 06 Oct 22:02
go get github.com/xo/dbmeta@v0.2.0

This 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 dbrun prints is what sql.Open takes. 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 new api field
    holds the http:// address that other tools read (D167). The DynamoDB form
    is now dynamodb://key:secret@host:port?region=us-east-1. This changes what
    a test or a script that reads the dsn of those products gets.
  • dbrun start prints 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

Choose a tag to compare

@kenshaw kenshaw released this 02 Oct 01:22

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.0

The 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/.