Context
Hi! We have been building a third-party DM / Dameng database driver as a Tabularis external plugin: https://github.com/haos666/tabularis-dameng-plugin
The plugin has reached a plugin-side v1.0.0 baseline: https://github.com/haos666/tabularis-dameng-plugin/releases/tag/v1.0.0
It is implemented as a standalone Java process using Tabularis' JSON-RPC-over-stdin/stdout plugin contract. The Dameng JDBC driver is provided locally by the user and is not redistributed by the plugin.
The plugin side currently implements and validates:
- connect / ping / schemas / tables / columns
- indexes / foreign keys / schema snapshot / batch metadata
- views and view definitions
- routines and routine parameters
- triggers and trigger definitions, plus plugin-side create/drop trigger RPCs
- explain plans
- SQL execution for SELECT, DML, and DDL
- row editing CRUD
- DDL preview helpers
execute_query_batch
- BLOB/CLOB handling, including a Tabularis-compatible BLOB wire format
We have validated it with:
- a local Docker DM instance
- direct JSON-RPC protocol smoke tests
- the Tabularis UI
- the Tabularis MCP connection path
While doing this, we found a few host-side gaps where the external plugin contract or host forwarding does not yet expose capabilities that the plugin can already provide. We would like to help with PRs, but wanted to open an issue first to align on scope and sequencing.
Gaps found
1. Manifest schema and plugin guide are slightly behind runtime capabilities
The TypeScript runtime model and UI already use capabilities.triggers, but plugins/manifest.schema.json does not declare it yet.
Also, plugins/PLUGIN_GUIDE.md still shows older column metadata field names in at least one example:
column_default
is_primary_key
The current runtime model appears to consume:
The guide also does not currently document the trigger RPCs used by the UI.
2. SQL dump/import does not support external plugin drivers
When using the SQL/database import flow with an external plugin connection, Tabularis currently returns Unsupported driver. In src-tauri/src/dump_commands.rs, import/export paths appear to dispatch only built-in drivers such as MySQL, PostgreSQL, and SQLite.
For the DM plugin, this means a valid schema script can be executed through database-native tooling or plugin SQL execution paths, but not through Tabularis' import UI.
3. External plugin batch execution is implemented plugin-side but not fully host-forwarded
The DM plugin implements execute_query_batch and verifies it directly through JSON-RPC. This is useful for multi-statement scripts because the plugin can execute all statements on the same JDBC connection and return per-statement results.
The host external plugin driver would need to forward batch execution to the plugin when available, with a graceful fallback for plugins that do not implement it.
4. Oracle-like SQL block splitting
DM trigger/function/procedure DDL commonly uses Oracle-like blocks such as:
CREATE OR REPLACE TRIGGER ...
BEGIN
...
END;
/
If the host SQL splitter splits inside these blocks, the plugin receives incomplete statements. This affects DM and would likely also affect Oracle-like external plugins.
5. BLOB preview/export hooks for external plugins
Tabularis has host-side BLOB preview/export hooks for built-in drivers. For external plugins, forwarding equivalent RPCs such as save_blob_to_file and fetch_blob_as_data_url would allow full UI parity.
Suggested PR sequencing
To keep reviews manageable, we are thinking of a small number of focused PRs rather than one large DM-specific change:
PR 1: External plugin contract/docs alignment
- Add
capabilities.triggers to plugins/manifest.schema.json
- Update
PLUGIN_GUIDE.md column metadata examples to current runtime field names
- Document trigger RPCs used by the UI
This is documentation/schema alignment only and should not change runtime behavior.
PR 2: External plugin execution/import support
- Forward
execute_query_batch to external plugins when implemented
- Use external plugin execution for SQL import instead of returning
Unsupported driver
- Improve Oracle-like block splitting for
CREATE FUNCTION, CREATE PROCEDURE, and CREATE TRIGGER blocks
This would let external plugins run real initialization scripts through Tabularis.
PR 3: External plugin BLOB UI hooks
- Forward BLOB preview/export RPCs to external plugins
- Preserve existing built-in driver behavior
Goal
We are not asking Tabularis to add a built-in Dameng driver. The DM driver is intentionally maintained as an external plugin. The goal is to close a few generic host-side gaps so external plugins that already implement richer metadata, execution, triggers, batch, and BLOB behavior can expose those capabilities through the Tabularis UI.
Would this sequencing be acceptable? If preferred, we can start with the contract/docs alignment PR first and keep the runtime forwarding changes separate.
Context
Hi! We have been building a third-party DM / Dameng database driver as a Tabularis external plugin: https://github.com/haos666/tabularis-dameng-plugin
The plugin has reached a plugin-side
v1.0.0baseline: https://github.com/haos666/tabularis-dameng-plugin/releases/tag/v1.0.0It is implemented as a standalone Java process using Tabularis' JSON-RPC-over-stdin/stdout plugin contract. The Dameng JDBC driver is provided locally by the user and is not redistributed by the plugin.
The plugin side currently implements and validates:
execute_query_batchWe have validated it with:
While doing this, we found a few host-side gaps where the external plugin contract or host forwarding does not yet expose capabilities that the plugin can already provide. We would like to help with PRs, but wanted to open an issue first to align on scope and sequencing.
Gaps found
1. Manifest schema and plugin guide are slightly behind runtime capabilities
The TypeScript runtime model and UI already use
capabilities.triggers, butplugins/manifest.schema.jsondoes not declare it yet.Also,
plugins/PLUGIN_GUIDE.mdstill shows older column metadata field names in at least one example:column_defaultis_primary_keyThe current runtime model appears to consume:
default_valueis_pkThe guide also does not currently document the trigger RPCs used by the UI.
2. SQL dump/import does not support external plugin drivers
When using the SQL/database import flow with an external plugin connection, Tabularis currently returns
Unsupported driver. Insrc-tauri/src/dump_commands.rs, import/export paths appear to dispatch only built-in drivers such as MySQL, PostgreSQL, and SQLite.For the DM plugin, this means a valid schema script can be executed through database-native tooling or plugin SQL execution paths, but not through Tabularis' import UI.
3. External plugin batch execution is implemented plugin-side but not fully host-forwarded
The DM plugin implements
execute_query_batchand verifies it directly through JSON-RPC. This is useful for multi-statement scripts because the plugin can execute all statements on the same JDBC connection and return per-statement results.The host external plugin driver would need to forward batch execution to the plugin when available, with a graceful fallback for plugins that do not implement it.
4. Oracle-like SQL block splitting
DM trigger/function/procedure DDL commonly uses Oracle-like blocks such as:
If the host SQL splitter splits inside these blocks, the plugin receives incomplete statements. This affects DM and would likely also affect Oracle-like external plugins.
5. BLOB preview/export hooks for external plugins
Tabularis has host-side BLOB preview/export hooks for built-in drivers. For external plugins, forwarding equivalent RPCs such as
save_blob_to_fileandfetch_blob_as_data_urlwould allow full UI parity.Suggested PR sequencing
To keep reviews manageable, we are thinking of a small number of focused PRs rather than one large DM-specific change:
PR 1: External plugin contract/docs alignment
capabilities.triggerstoplugins/manifest.schema.jsonPLUGIN_GUIDE.mdcolumn metadata examples to current runtime field namesThis is documentation/schema alignment only and should not change runtime behavior.
PR 2: External plugin execution/import support
execute_query_batchto external plugins when implementedUnsupported driverCREATE FUNCTION,CREATE PROCEDURE, andCREATE TRIGGERblocksThis would let external plugins run real initialization scripts through Tabularis.
PR 3: External plugin BLOB UI hooks
Goal
We are not asking Tabularis to add a built-in Dameng driver. The DM driver is intentionally maintained as an external plugin. The goal is to close a few generic host-side gaps so external plugins that already implement richer metadata, execution, triggers, batch, and BLOB behavior can expose those capabilities through the Tabularis UI.
Would this sequencing be acceptable? If preferred, we can start with the contract/docs alignment PR first and keep the runtime forwarding changes separate.