From 971822b598818c4edcb08939c29425903dba6b0a Mon Sep 17 00:00:00 2001 From: Victor Babenko Date: Sat, 31 Oct 2026 07:50:03 -0700 Subject: [PATCH 1/3] docs(databases): StarRocks Co-authored-by: Cursor --- connections/connection-form.mdx | 1 + customization/general-settings.mdx | 2 +- databases/index.mdx | 7 ++-- databases/mysql.mdx | 2 +- databases/starrocks.mdx | 57 ++++++++++++++++++++++++++++++ docs.json | 1 + index.mdx | 2 +- snippets/driver-counts.mdx | 2 +- 8 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 databases/starrocks.mdx diff --git a/connections/connection-form.mdx b/connections/connection-form.mdx index 686c1c4..6ddcaf9 100644 --- a/connections/connection-form.mdx +++ b/connections/connection-form.mdx @@ -179,6 +179,7 @@ Metadata connections are the extra ones opened to read a database's object list | [TiDB](/databases/tidb) | 4000 | Yes | Yes | Yes | No | Yes | Yes | | [Databend](/databases/databend) | 3307 | Yes | Yes | Yes | No | Yes | Yes | | [OceanBase](/databases/oceanbase) | 2881 | Yes | Yes | Yes | No | Yes | Yes | +| [StarRocks](/databases/starrocks) | 9030 | Yes | Yes | Yes | No | Yes | Yes | | [PostgreSQL](/databases/postgresql) | 5432 | Yes | Yes | Yes | Yes | Yes | Yes | | [Amazon Redshift](/databases/redshift) | 5439 | Yes | Yes | Yes | No | Yes | Yes | | [CockroachDB](/databases/cockroachdb) | 26257 | Yes | Yes | Yes | No | Yes | Yes | diff --git a/customization/general-settings.mdx b/customization/general-settings.mdx index a8f4101..15b2ae4 100644 --- a/customization/general-settings.mdx +++ b/customization/general-settings.mdx @@ -48,7 +48,7 @@ How many seconds a query runs before it is cancelled. The default is 60; the pic A connection can override this value under **Options > Query timeout**. Leave that field empty to inherit this setting, or enter `0` for no limit. The same section has a separate connect timeout for tunnels, proxies and database sign-in; it does not change how long a query can run. -Where the engine can enforce it, the timeout becomes a server-side setting: `statement_timeout` on PostgreSQL, `max_execution_time` on MySQL and ClickHouse, `max_statement_time` on MariaDB, `ob_query_timeout` on OceanBase. On SQLite it bounds how long a statement waits for a locked database instead. Drivers that talk HTTP (BigQuery, Bigtable, Spanner, Cloudflare D1, LibSQL, Etcd, DynamoDB, Elasticsearch, Typesense, and ClickHouse) bound the request at the timeout plus 30 seconds, and Oracle enforces it in the client: the connection is closed to unblock the call, and the next query reconnects and restores your current schema. SAP HANA ends the statement with the same `ALTER SYSTEM CANCEL SESSION` that **Stop** sends. +Where the engine can enforce it, the timeout becomes a server-side setting: `statement_timeout` on PostgreSQL, `max_execution_time` on MySQL and ClickHouse, `max_statement_time` on MariaDB, `ob_query_timeout` on OceanBase, `query_timeout` on StarRocks. On SQLite it bounds how long a statement waits for a locked database instead. Drivers that talk HTTP (BigQuery, Bigtable, Spanner, Cloudflare D1, LibSQL, Etcd, DynamoDB, Elasticsearch, Typesense, and ClickHouse) bound the request at the timeout plus 30 seconds, and Oracle enforces it in the client: the connection is closed to unblock the call, and the next query reconnects and restores your current schema. SAP HANA ends the statement with the same `ALTER SYSTEM CANCEL SESSION` that **Stop** sends. Older servers have neither: MySQL before 5.7.8, MariaDB before 10.1.1. A statement that passes the timeout there is stopped with `KILL QUERY` from a second connection, which reaches a `SELECT` on MySQL and any statement at all on MariaDB. A server behind a proxy that reports a version it does not have still gets the right one of the two. diff --git a/databases/index.mdx b/databases/index.mdx index 6916e3f..367e596 100644 --- a/databases/index.mdx +++ b/databases/index.mdx @@ -1,11 +1,11 @@ --- title: Supported Databases -description: All 42 engines TablePro connects to, their default ports, and which ones need a plugin +description: All 43 engines TablePro connects to, their default ports, and which ones need a plugin --- import DriverCounts from "/snippets/driver-counts.mdx"; -Forty-two engines, and every one of them is free to use. What differs between them is where the +Forty-three engines, and every one of them is free to use. What differs between them is where the driver comes from, not what the license covers. @@ -48,6 +48,7 @@ driver comes from, not what the license covers. | [ScyllaDB](/databases/cassandra) | 9042 | Plugin | | [Snowflake](/databases/snowflake) | 443 | Plugin | | [Spanner](/databases/spanner) | API-based | Plugin | +| [StarRocks](/databases/starrocks) | 9030 | Built-in | | [SQLite](/databases/sqlite) | File-based | Built-in | | [SurrealDB](/databases/surrealdb) | 8000 | Plugin | | [Teradata](/databases/teradata) | 1025 | Plugin | @@ -59,7 +60,7 @@ driver comes from, not what the license covers. Rows sharing a page share a driver. MariaDB reads as MySQL, ScyllaDB as Cassandra, Turso as libSQL, Presto as Trino, and Redshift, CockroachDB and PGlite all speak the PostgreSQL wire protocol. TiDB, -Databend and OceanBase also run on the bundled MySQL driver. +Databend, OceanBase and StarRocks also run on the bundled MySQL driver. ## Built-in against plugin diff --git a/databases/mysql.mdx b/databases/mysql.mdx index 61ab7dc..04daaac 100644 --- a/databases/mysql.mdx +++ b/databases/mysql.mdx @@ -3,7 +3,7 @@ title: MySQL description: Connect to MySQL 4.1 and later with the bundled MariaDB Connector/C driver --- -MySQL 8 accounts on `caching_sha2_password` connect on the first try, with no auth plugin to switch over. The same bundled driver covers every release from 4.1 (see [Older servers](#older-servers)), plus [MariaDB](/databases/mariadb), [TiDB](/databases/tidb), [Databend](/databases/databend), and [OceanBase](/databases/oceanbase). +MySQL 8 accounts on `caching_sha2_password` connect on the first try, with no auth plugin to switch over. The same bundled driver covers every release from 4.1 (see [Older servers](#older-servers)), plus [MariaDB](/databases/mariadb), [TiDB](/databases/tidb), [Databend](/databases/databend), [OceanBase](/databases/oceanbase), and [StarRocks](/databases/starrocks). ## Quick setup diff --git a/databases/starrocks.mdx b/databases/starrocks.mdx new file mode 100644 index 0000000..fac76a9 --- /dev/null +++ b/databases/starrocks.mdx @@ -0,0 +1,57 @@ +--- +title: StarRocks +description: Connect to StarRocks on its MySQL port and browse default_catalog and external catalogs such as Iceberg and Hive +--- + +Point the connection at a frontend's MySQL port, 9030, not the 8030 HTTP port. The bundled MySQL driver connects, then confirms the server is StarRocks with `SELECT current_version()`; a MySQL server saved under this type fails at connect and asks for the type to be changed. No minimum StarRocks version is enforced. + +## Quick setup + +A single-node cluster in Docker: + +```bash +docker run -d -p 9030:9030 -p 8030:8030 -p 8040:8040 starrocks/allin1-ubuntu +``` + +Connect as `root` with an empty password once the frontend reports ready, about a minute after start. + +## Connection settings + +| Field | Default | Notes | +|-------|---------|-------| +| **Port** | `9030` | The frontend's MySQL port | +| **Database** | empty | Optional. `catalog.database`, a catalog, or a database of `default_catalog` | +| **SSL Mode** | Preferred | TLS first, plain text if the server refuses | + +Host, user, password and SSH tunnels work as on [MySQL](/databases/mysql). + +## Connection URL + +No URL scheme opens a StarRocks connection. Create it in the form. **Copy Connection String** gives a `mysql://` URL, which other MySQL clients accept. + +## Catalogs and databases + +Catalogs fill the database level and each catalog's databases fill the schema level, so the sidebar shows `default_catalog` and every external catalog, with their databases beneath. `Cmd+K` switches catalog, and the database picker switches database within it. + +The Database field takes the same two levels. Write `glue_iceberg.sales` to open on database `sales` in catalog `glue_iceberg`. A name with no dot opens that catalog when the server has one, and otherwise a database of `default_catalog`. Leave the field empty to start in `default_catalog`. + +The sidebar hides `_statistics_`, `information_schema` and `sys`. + +## Editing rows + +StarRocks reports no primary keys to the driver, so a row edit or delete matches on every column of the row. ARRAY, MAP, STRUCT, JSON, BITMAP, HLL, PERCENTILE, BINARY and VARBINARY columns are left out of that match. Edits save one statement at a time with no transaction. Whether an external catalog's table accepts `UPDATE` or `DELETE` is up to its connector; a refused save shows the server's error. + +JSON and VARIANT columns read as text in the grid and the inspector. + +## Limitations + +- No indexes, foreign keys, triggers, routines, events or partitions. The Structure tab shows columns only, and does not edit them. +- No Create Database, Drop Database, renames or import. Create catalogs and databases in the SQL editor. +- No Users & Roles, Server Dashboard or Table Maintenance, and the table info panel shows no row counts or sizes. +- Not available on iPhone and iPad. + +## Related + +- [MySQL](/databases/mysql), for connection fields, SSL/TLS, and troubleshooting +- [Trino](/databases/trino), which browses catalogs the same way +- [SSH Tunneling](/connections/ssh-tunneling) diff --git a/docs.json b/docs.json index 7d896d6..a94b67d 100644 --- a/docs.json +++ b/docs.json @@ -269,6 +269,7 @@ "databases/sap-hana", "databases/snowflake", "databases/spanner", + "databases/starrocks", "databases/sqlite", "databases/surrealdb", "databases/teradata", diff --git a/index.mdx b/index.mdx index c64e11f..7079bb9 100644 --- a/index.mdx +++ b/index.mdx @@ -1,6 +1,6 @@ --- title: Introduction -description: Native macOS database client for MySQL, PostgreSQL, SQLite, MongoDB, Redis, and 37 more +description: Native macOS database client for MySQL, PostgreSQL, SQLite, MongoDB, Redis, and 38 more --- import DriverCounts from "/snippets/driver-counts.mdx"; diff --git a/snippets/driver-counts.mdx b/snippets/driver-counts.mdx index 44a8722..af7da4c 100644 --- a/snippets/driver-counts.mdx +++ b/snippets/driver-counts.mdx @@ -1,3 +1,3 @@ -Five drivers ship inside the app and cover twelve databases. Twenty-six registry plugins cover the +Five drivers ship inside the app and cover thirteen databases. Twenty-six registry plugins cover the other thirty and install on the first connection that needs one. See [Plugins](/features/plugins). From 790fd53716adc3d825c738a812639920e980a7d2 Mon Sep 17 00:00:00 2001 From: Victor Babenko Date: Sat, 31 Oct 2026 11:56:43 -0700 Subject: [PATCH 2/3] docs(databases): StarRocks keys, table info and materialized views Co-authored-by: Cursor --- databases/starrocks.mdx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/databases/starrocks.mdx b/databases/starrocks.mdx index fac76a9..b02c6d7 100644 --- a/databases/starrocks.mdx +++ b/databases/starrocks.mdx @@ -35,19 +35,30 @@ Catalogs fill the database level and each catalog's databases fill the schema le The Database field takes the same two levels. Write `glue_iceberg.sales` to open on database `sales` in catalog `glue_iceberg`. A name with no dot opens that catalog when the server has one, and otherwise a database of `default_catalog`. Leave the field empty to start in `default_catalog`. -The sidebar hides `_statistics_`, `information_schema` and `sys`. +Materialized views in `default_catalog` list apart from views, and open on their `CREATE MATERIALIZED VIEW`. The sidebar hides `_statistics_`, `information_schema` and `sys`. ## Editing rows -StarRocks reports no primary keys to the driver, so a row edit or delete matches on every column of the row. ARRAY, MAP, STRUCT, JSON, BITMAP, HLL, PERCENTILE, BINARY and VARBINARY columns are left out of that match. Edits save one statement at a time with no transaction. Whether an external catalog's table accepts `UPDATE` or `DELETE` is up to its connector; a refused save shows the server's error. +What a save can do depends on the table's key model. Edits save one statement at a time with no transaction. + +| Key model | Row matched on | Edit a cell | Delete a row | +|---|---|---|---| +| Primary key | Key columns | Yes | Yes | +| Unique key, aggregate key | Key columns | No, the server refuses `UPDATE` | Yes | +| Duplicate key | Every column | No, the server refuses `UPDATE` | Yes | +| External catalog table | Every column | Up to the connector | Up to the connector | + +A match on every column leaves out ARRAY, MAP, STRUCT, JSON, BITMAP, HLL, PERCENTILE, BINARY and VARBINARY columns. To change a row the server refuses to update, delete it and insert it again in the SQL editor. JSON and VARIANT columns read as text in the grid and the inspector. ## Limitations -- No indexes, foreign keys, triggers, routines, events or partitions. The Structure tab shows columns only, and does not edit them. +- No indexes, foreign keys, triggers, routines, events or partitions. The Structure tab shows columns, with key columns marked, and does not edit them. - No Create Database, Drop Database, renames or import. Create catalogs and databases in the SQL editor. -- No Users & Roles, Server Dashboard or Table Maintenance, and the table info panel shows no row counts or sizes. +- The table info panel shows row counts and sizes for `default_catalog` tables only. An external catalog's tables show none. +- `EXPLAIN ANALYZE` is not in the plan menu. Run it in the SQL editor; its report carries terminal color codes. +- No Users & Roles, Server Dashboard or Table Maintenance. - Not available on iPhone and iPad. ## Related From 0e6ea60038ecb0c80930bca95cc291f170db6641 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sun, 1 Nov 2026 03:32:24 +0700 Subject: [PATCH 3/3] docs(databases): StarRocks is a registry plugin --- databases/index.mdx | 4 ++-- databases/mysql.mdx | 2 +- databases/starrocks.mdx | 14 +++++++++----- snippets/driver-counts.mdx | 4 ++-- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/databases/index.mdx b/databases/index.mdx index 367e596..d6cab74 100644 --- a/databases/index.mdx +++ b/databases/index.mdx @@ -48,7 +48,7 @@ driver comes from, not what the license covers. | [ScyllaDB](/databases/cassandra) | 9042 | Plugin | | [Snowflake](/databases/snowflake) | 443 | Plugin | | [Spanner](/databases/spanner) | API-based | Plugin | -| [StarRocks](/databases/starrocks) | 9030 | Built-in | +| [StarRocks](/databases/starrocks) | 9030 | Plugin | | [SQLite](/databases/sqlite) | File-based | Built-in | | [SurrealDB](/databases/surrealdb) | 8000 | Plugin | | [Teradata](/databases/teradata) | 1025 | Plugin | @@ -60,7 +60,7 @@ driver comes from, not what the license covers. Rows sharing a page share a driver. MariaDB reads as MySQL, ScyllaDB as Cassandra, Turso as libSQL, Presto as Trino, and Redshift, CockroachDB and PGlite all speak the PostgreSQL wire protocol. TiDB, -Databend, OceanBase and StarRocks also run on the bundled MySQL driver. +Databend and OceanBase also run on the bundled MySQL driver. ## Built-in against plugin diff --git a/databases/mysql.mdx b/databases/mysql.mdx index 04daaac..61ab7dc 100644 --- a/databases/mysql.mdx +++ b/databases/mysql.mdx @@ -3,7 +3,7 @@ title: MySQL description: Connect to MySQL 4.1 and later with the bundled MariaDB Connector/C driver --- -MySQL 8 accounts on `caching_sha2_password` connect on the first try, with no auth plugin to switch over. The same bundled driver covers every release from 4.1 (see [Older servers](#older-servers)), plus [MariaDB](/databases/mariadb), [TiDB](/databases/tidb), [Databend](/databases/databend), [OceanBase](/databases/oceanbase), and [StarRocks](/databases/starrocks). +MySQL 8 accounts on `caching_sha2_password` connect on the first try, with no auth plugin to switch over. The same bundled driver covers every release from 4.1 (see [Older servers](#older-servers)), plus [MariaDB](/databases/mariadb), [TiDB](/databases/tidb), [Databend](/databases/databend), and [OceanBase](/databases/oceanbase). ## Quick setup diff --git a/databases/starrocks.mdx b/databases/starrocks.mdx index b02c6d7..b2b5a71 100644 --- a/databases/starrocks.mdx +++ b/databases/starrocks.mdx @@ -3,7 +3,7 @@ title: StarRocks description: Connect to StarRocks on its MySQL port and browse default_catalog and external catalogs such as Iceberg and Hive --- -Point the connection at a frontend's MySQL port, 9030, not the 8030 HTTP port. The bundled MySQL driver connects, then confirms the server is StarRocks with `SELECT current_version()`; a MySQL server saved under this type fails at connect and asks for the type to be changed. No minimum StarRocks version is enforced. +Point the connection at a frontend's MySQL port, 9030, not the 8030 HTTP port. The StarRocks driver is a plugin that installs the first time you pick StarRocks, and is built from the MySQL driver. It confirms the server is StarRocks with `SELECT current_version()`; a MySQL server saved under this type fails at connect and asks for the type to be changed. No minimum StarRocks version is enforced. ## Quick setup @@ -20,20 +20,24 @@ Connect as `root` with an empty password once the frontend reports ready, about | Field | Default | Notes | |-------|---------|-------| | **Port** | `9030` | The frontend's MySQL port | -| **Database** | empty | Optional. `catalog.database`, a catalog, or a database of `default_catalog` | +| **Database** | empty | Optional. `catalog.database`, `catalog.` for a catalog alone, or a database of `default_catalog` | | **SSL Mode** | Preferred | TLS first, plain text if the server refuses | Host, user, password and SSH tunnels work as on [MySQL](/databases/mysql). ## Connection URL -No URL scheme opens a StarRocks connection. Create it in the form. **Copy Connection String** gives a `mysql://` URL, which other MySQL clients accept. +```text +starrocks://root:password@fe.example.com:9030/glue_iceberg.sales +``` + +The path is the Database field, so it takes `catalog.database` too. **Copy Connection String** gives the same form. ## Catalogs and databases Catalogs fill the database level and each catalog's databases fill the schema level, so the sidebar shows `default_catalog` and every external catalog, with their databases beneath. `Cmd+K` switches catalog, and the database picker switches database within it. -The Database field takes the same two levels. Write `glue_iceberg.sales` to open on database `sales` in catalog `glue_iceberg`. A name with no dot opens that catalog when the server has one, and otherwise a database of `default_catalog`. Leave the field empty to start in `default_catalog`. +The Database field takes the same two levels. Write `glue_iceberg.sales` to open on database `sales` in catalog `glue_iceberg`, or `glue_iceberg.` to open the catalog with no database selected. A name with no dot is a database of `default_catalog`, as in other StarRocks clients. Leave the field empty to start in `default_catalog`. Materialized views in `default_catalog` list apart from views, and open on their `CREATE MATERIALIZED VIEW`. The sidebar hides `_statistics_`, `information_schema` and `sys`. @@ -48,7 +52,7 @@ What a save can do depends on the table's key model. Edits save one statement at | Duplicate key | Every column | No, the server refuses `UPDATE` | Yes | | External catalog table | Every column | Up to the connector | Up to the connector | -A match on every column leaves out ARRAY, MAP, STRUCT, JSON, BITMAP, HLL, PERCENTILE, BINARY and VARBINARY columns. To change a row the server refuses to update, delete it and insert it again in the SQL editor. +A match on every column leaves out ARRAY, MAP, STRUCT, JSON, BITMAP, HLL, PERCENTILE, BINARY and VARBINARY columns, and compares FLOAT columns as text. A delete from a duplicate key table reports 0 rows even when it removes some, so a delete matched on every column is not checked against the row count. To change a row the server refuses to update, delete it and insert it again in the SQL editor. JSON and VARIANT columns read as text in the grid and the inspector. diff --git a/snippets/driver-counts.mdx b/snippets/driver-counts.mdx index af7da4c..2f0288b 100644 --- a/snippets/driver-counts.mdx +++ b/snippets/driver-counts.mdx @@ -1,3 +1,3 @@ -Five drivers ship inside the app and cover thirteen databases. Twenty-six registry plugins cover the -other thirty and install on the first connection that needs one. See +Five drivers ship inside the app and cover twelve databases. Twenty-seven registry plugins cover the +other thirty-one and install on the first connection that needs one. See [Plugins](/features/plugins).