You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/02/13 00:35:41 UTC
(superset) branch feat/add-db-engine-specs created (now 47e3172da53)
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch feat/add-db-engine-specs
in repository https://gitbox.apache.org/repos/asf/superset.git
at 47e3172da53 feat(db-engine-specs): add engine specs for PostGIS, DoltDB, TiDB, QuestDB, and Timeplus
This branch includes the following new commits:
new 47e3172da53 feat(db-engine-specs): add engine specs for PostGIS, DoltDB, TiDB, QuestDB, and Timeplus
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(superset) 01/01: feat(db-engine-specs): add engine specs for PostGIS, DoltDB, TiDB, QuestDB, and Timeplus
Posted by ru...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch feat/add-db-engine-specs
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 47e3172da53807e259b73df255ebe3133b683c7a
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Thu Feb 12 16:33:48 2026 -0800
feat(db-engine-specs): add engine specs for PostGIS, DoltDB, TiDB, QuestDB, and Timeplus
Add database engine specs with metadata and logos for five databases:
- PostGIS: PostgreSQL-compatible spatial database extension
- DoltDB: MySQL-compatible version-controlled database
- TiDB: MySQL-compatible distributed HTAP database
- QuestDB: High-performance time-series database
- Timeplus: Streaming-first analytics platform
Also fixes MSSQL's logo reference (msql.png → mssql-server.png).
Co-Authored-By: Claude Opus 4.5 <no...@anthropic.com>
---
superset-frontend/src/assets/images/doltdb.png | Bin 0 -> 5838 bytes
superset-frontend/src/assets/images/postgis.svg | Bin 0 -> 94811 bytes
superset-frontend/src/assets/images/questdb.png | Bin 0 -> 53162 bytes
superset-frontend/src/assets/images/tidb.svg | Bin 0 -> 2139 bytes
superset-frontend/src/assets/images/timeplus.svg | Bin 0 -> 9072 bytes
superset/db_engine_specs/doltdb.py | 49 +++++++++++++++
superset/db_engine_specs/mssql.py | 2 +-
superset/db_engine_specs/postgis.py | 53 ++++++++++++++++
superset/db_engine_specs/questdb.py | 62 +++++++++++++++++++
superset/db_engine_specs/tidb.py | 74 +++++++++++++++++++++++
superset/db_engine_specs/timeplus.py | 63 +++++++++++++++++++
11 files changed, 302 insertions(+), 1 deletion(-)
diff --git a/superset-frontend/src/assets/images/doltdb.png b/superset-frontend/src/assets/images/doltdb.png
new file mode 100644
index 00000000000..23740015101
Binary files /dev/null and b/superset-frontend/src/assets/images/doltdb.png differ
diff --git a/superset-frontend/src/assets/images/postgis.svg b/superset-frontend/src/assets/images/postgis.svg
new file mode 100644
index 00000000000..ea09e7f38cc
Binary files /dev/null and b/superset-frontend/src/assets/images/postgis.svg differ
diff --git a/superset-frontend/src/assets/images/questdb.png b/superset-frontend/src/assets/images/questdb.png
new file mode 100644
index 00000000000..fca78fcd463
Binary files /dev/null and b/superset-frontend/src/assets/images/questdb.png differ
diff --git a/superset-frontend/src/assets/images/tidb.svg b/superset-frontend/src/assets/images/tidb.svg
new file mode 100644
index 00000000000..50ddfe76084
Binary files /dev/null and b/superset-frontend/src/assets/images/tidb.svg differ
diff --git a/superset-frontend/src/assets/images/timeplus.svg b/superset-frontend/src/assets/images/timeplus.svg
new file mode 100644
index 00000000000..fc208f6ea91
Binary files /dev/null and b/superset-frontend/src/assets/images/timeplus.svg differ
diff --git a/superset/db_engine_specs/doltdb.py b/superset/db_engine_specs/doltdb.py
new file mode 100644
index 00000000000..e83b38b7094
--- /dev/null
+++ b/superset/db_engine_specs/doltdb.py
@@ -0,0 +1,49 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from superset.db_engine_specs.base import DatabaseCategory
+from superset.db_engine_specs.mysql import MySQLEngineSpec
+
+
+class DoltDBEngineSpec(MySQLEngineSpec):
+ """
+ Engine spec for DoltDB.
+
+ DoltDB is a SQL database with Git-like version control for data and schema.
+ It is fully MySQL-compatible.
+ """
+
+ engine = "doltdb"
+ engine_name = "DoltDB"
+
+ metadata = {
+ "description": (
+ "DoltDB is a SQL database with Git-like version control for data "
+ "and schema. It is fully MySQL-compatible."
+ ),
+ "logo": "doltdb.png",
+ "homepage_url": "https://www.dolthub.com/",
+ "categories": [
+ DatabaseCategory.TRADITIONAL_RDBMS,
+ DatabaseCategory.OPEN_SOURCE,
+ ],
+ "pypi_packages": ["mysqlclient"],
+ "connection_string": "mysql://{username}:{password}@{host}:{port}/{database}",
+ "default_port": 3306,
+ "notes": (
+ "DoltDB uses the MySQL wire protocol. Connect using any MySQL driver."
+ ),
+ }
diff --git a/superset/db_engine_specs/mssql.py b/superset/db_engine_specs/mssql.py
index 3a8bdfa8dbe..dc47a92c770 100644
--- a/superset/db_engine_specs/mssql.py
+++ b/superset/db_engine_specs/mssql.py
@@ -57,7 +57,7 @@ class MssqlEngineSpec(BaseEngineSpec):
"description": (
"Microsoft SQL Server is a relational database management system."
),
- "logo": "msql.png",
+ "logo": "mssql-server.png",
"homepage_url": "https://www.microsoft.com/en-us/sql-server",
"categories": [
DatabaseCategory.TRADITIONAL_RDBMS,
diff --git a/superset/db_engine_specs/postgis.py b/superset/db_engine_specs/postgis.py
new file mode 100644
index 00000000000..c02b95cd82c
--- /dev/null
+++ b/superset/db_engine_specs/postgis.py
@@ -0,0 +1,53 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from superset.db_engine_specs.base import DatabaseCategory
+from superset.db_engine_specs.postgres import PostgresBaseEngineSpec
+
+
+class PostGISEngineSpec(PostgresBaseEngineSpec):
+ """
+ Engine spec for PostGIS.
+
+ PostGIS is a spatial database extender for PostgreSQL, adding support for
+ geographic objects and location queries.
+ """
+
+ engine = "postgis"
+ engine_name = "PostGIS"
+ default_driver = "psycopg2"
+
+ metadata = {
+ "description": (
+ "PostGIS is a spatial database extender for PostgreSQL, adding "
+ "support for geographic objects and location queries."
+ ),
+ "logo": "postgis.svg",
+ "homepage_url": "https://postgis.net/",
+ "categories": [
+ DatabaseCategory.TRADITIONAL_RDBMS,
+ DatabaseCategory.OPEN_SOURCE,
+ ],
+ "pypi_packages": ["psycopg2"],
+ "connection_string": (
+ "postgresql://{username}:{password}@{host}:{port}/{database}"
+ ),
+ "default_port": 5432,
+ "notes": (
+ "PostGIS extends PostgreSQL with geospatial capabilities. "
+ "Uses the standard PostgreSQL driver."
+ ),
+ }
diff --git a/superset/db_engine_specs/questdb.py b/superset/db_engine_specs/questdb.py
new file mode 100644
index 00000000000..ae7a6f492c3
--- /dev/null
+++ b/superset/db_engine_specs/questdb.py
@@ -0,0 +1,62 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from superset.constants import TimeGrain
+from superset.db_engine_specs.base import BaseEngineSpec, DatabaseCategory
+
+
+class QuestDBEngineSpec(BaseEngineSpec):
+ """
+ Engine spec for QuestDB.
+
+ QuestDB is a high-performance, open-source time-series database optimized
+ for fast ingest and SQL queries.
+ """
+
+ engine = "questdb"
+ engine_name = "QuestDB"
+ default_driver = "questdb"
+
+ metadata = {
+ "description": (
+ "QuestDB is a high-performance, open-source time-series database "
+ "optimized for fast ingest and SQL queries."
+ ),
+ "logo": "questdb.png",
+ "homepage_url": "https://questdb.io/",
+ "categories": [
+ DatabaseCategory.ANALYTICAL_DATABASES,
+ DatabaseCategory.OPEN_SOURCE,
+ ],
+ "pypi_packages": ["questdb-connect"],
+ "connection_string": "questdb://{username}:{password}@{host}:{port}/{database}",
+ "default_port": 8812,
+ "notes": (
+ "QuestDB is optimized for time-series data. Install questdb-connect "
+ "for SQLAlchemy support."
+ ),
+ }
+
+ _time_grain_expressions = {
+ None: "{col}",
+ TimeGrain.SECOND: "timestamp_floor('s', {col})",
+ TimeGrain.MINUTE: "timestamp_floor('m', {col})",
+ TimeGrain.HOUR: "timestamp_floor('h', {col})",
+ TimeGrain.DAY: "timestamp_floor('d', {col})",
+ TimeGrain.WEEK: "timestamp_floor('w', {col})",
+ TimeGrain.MONTH: "timestamp_floor('M', {col})",
+ TimeGrain.YEAR: "timestamp_floor('y', {col})",
+ }
diff --git a/superset/db_engine_specs/tidb.py b/superset/db_engine_specs/tidb.py
new file mode 100644
index 00000000000..e913640d0eb
--- /dev/null
+++ b/superset/db_engine_specs/tidb.py
@@ -0,0 +1,74 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from superset.db_engine_specs.base import DatabaseCategory
+from superset.db_engine_specs.mysql import MySQLEngineSpec
+
+
+class TiDBEngineSpec(MySQLEngineSpec):
+ """
+ Engine spec for TiDB.
+
+ TiDB is an open-source, cloud-native, distributed SQL database designed for
+ hybrid transactional and analytical processing (HTAP) workloads. It is
+ MySQL-compatible.
+ """
+
+ engine = "tidb"
+ engine_name = "TiDB"
+
+ metadata = {
+ "description": (
+ "TiDB is an open-source, cloud-native, distributed SQL database "
+ "designed for hybrid transactional and analytical processing (HTAP) "
+ "workloads. It is MySQL-compatible."
+ ),
+ "logo": "tidb.svg",
+ "homepage_url": "https://www.pingcap.com/tidb/",
+ "categories": [
+ DatabaseCategory.TRADITIONAL_RDBMS,
+ DatabaseCategory.OPEN_SOURCE,
+ ],
+ "pypi_packages": ["mysqlclient", "sqlalchemy-tidb"],
+ "connection_string": "mysql://{username}:{password}@{host}:{port}/{database}",
+ "default_port": 4000,
+ "drivers": [
+ {
+ "name": "mysqlclient",
+ "pypi_package": "mysqlclient",
+ "connection_string": (
+ "mysql://{username}:{password}@{host}:{port}/{database}"
+ ),
+ "is_recommended": True,
+ "notes": (
+ "Standard MySQL driver, works with TiDB's MySQL compatibility."
+ ),
+ },
+ {
+ "name": "tidb",
+ "pypi_package": "sqlalchemy-tidb",
+ "connection_string": (
+ "tidb://{username}:{password}@{host}:{port}/{database}"
+ ),
+ "is_recommended": False,
+ "notes": "Native TiDB dialect with TiDB-specific optimizations.",
+ },
+ ],
+ "notes": (
+ "TiDB is MySQL-compatible. Use the standard MySQL driver or the "
+ "native sqlalchemy-tidb dialect."
+ ),
+ }
diff --git a/superset/db_engine_specs/timeplus.py b/superset/db_engine_specs/timeplus.py
new file mode 100644
index 00000000000..4aea3e29b3b
--- /dev/null
+++ b/superset/db_engine_specs/timeplus.py
@@ -0,0 +1,63 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from superset.constants import TimeGrain
+from superset.db_engine_specs.base import BaseEngineSpec, DatabaseCategory
+
+
+class TimeplusEngineSpec(BaseEngineSpec):
+ """
+ Engine spec for Timeplus.
+
+ Timeplus is a streaming-first analytics platform that provides real-time
+ data processing with SQL.
+ """
+
+ engine = "timeplus"
+ engine_name = "Timeplus"
+ default_driver = "timeplus"
+
+ metadata = {
+ "description": (
+ "Timeplus is a streaming-first analytics platform that provides "
+ "real-time data processing with SQL."
+ ),
+ "logo": "timeplus.svg",
+ "homepage_url": "https://www.timeplus.com/",
+ "categories": [
+ DatabaseCategory.ANALYTICAL_DATABASES,
+ DatabaseCategory.OPEN_SOURCE,
+ ],
+ "pypi_packages": ["timeplus-connect"],
+ "connection_string": "timeplus://{username}:{password}@{host}:{port}",
+ "default_port": 8123,
+ "notes": (
+ "Timeplus provides real-time streaming SQL analytics. Install "
+ "timeplus-connect for SQLAlchemy and Superset support."
+ ),
+ }
+
+ _time_grain_expressions = {
+ None: "{col}",
+ TimeGrain.SECOND: "date_trunc('second', {col})",
+ TimeGrain.MINUTE: "date_trunc('minute', {col})",
+ TimeGrain.HOUR: "date_trunc('hour', {col})",
+ TimeGrain.DAY: "date_trunc('day', {col})",
+ TimeGrain.WEEK: "date_trunc('week', {col})",
+ TimeGrain.MONTH: "date_trunc('month', {col})",
+ TimeGrain.QUARTER: "date_trunc('quarter', {col})",
+ TimeGrain.YEAR: "date_trunc('year', {col})",
+ }