Skip to content

feat(plugin-mysql): add OceanBase MySQL-mode connection type - #7

Closed
J2TeamNNL wants to merge 58 commits into
mainfrom
cursor/oceanbase-mysql-flavor-c3a9
Closed

feat(plugin-mysql): add OceanBase MySQL-mode connection type#7
J2TeamNNL wants to merge 58 commits into
mainfrom
cursor/oceanbase-mysql-flavor-c3a9

Conversation

@J2TeamNNL

@J2TeamNNL J2TeamNNL commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Fixes TableProApp#1748

Summary

Adds OceanBase as a connection type on the bundled MySQL plugin (libmariadb), same family as TiDB and MariaDB. Type id OceanBase, default port 2881, scheme oceanbase://. Oracle compatibility mode is out of scope.

This is not a cloned MySQL snapshot. The flavor is resolved from @@version_comment when the connection type is OceanBase. The MySQL handshake reports 5.7.25 (or 5.6.25 through OBProxy) and does not name the engine, so a server opened as MySQL stays on the MySQL path. Choose OceanBase for the OceanBase sidebar, EXPLAIN, Stop, and timeout.

Grid save

OceanBase keeps a hidden __pk_increment column on a table declared without a primary key. The catalog never reports it and SELECT * never returns it, so TablePro edits such a table the way it edits one on MySQL: the UPDATE or DELETE matches every column of the row, and a save that would touch more than one row is rolled back.

Flavor

  • MySQLServerFlavor.oceanbase(version:) from @@version_comment: OceanBase_CE 4.4.2.1, OceanBase 3.1.3, OceanBase_CE-v4.3.5.
  • OceanBase-type connection whose comment is silent stays OceanBase. A comment from another engine is refused.
  • Databend opened as MySQL is still refused.
  • Stop uses KILL QUERY with the handshake thread id. Query timeout sets max_execution_time and ob_query_timeout together, because OceanBase's own 10 second default still fires on statements that are not read-only.
  • System databases: information_schema, mysql, oceanbase. User database test stays listed.
  • Maintenance: ANALYZE TABLE only, on the same PluginMaintenanceOperation descriptors as TiDB and Databend.
  • CHECK and GENERATION_EXPRESSION are gated on OceanBase 4.0+, not on the 5.7 banner.

Curated snapshot

Port 2881, oceanbase://, EXPLAIN as plain text (no FORMAT=JSON, no ANALYZE), no Spatial types, no Server Dashboard, no native dump, Compare only OceanBase-to-OceanBase, no SET FOREIGN_KEY_CHECKS, no Users & Roles connection limit, triggers browse without edit, routines yes. Idle-release field only; no AWS IAM or Unix socket.

iOS

Type routing only, the same shape as TiDB. The iOS MySQL driver has no flavor path. Databend stays Mac-only.

iOS also compiles PostgreSQLObjectQueries and PostgreSQLCapabilities with the foreign-key catalog, so the quoting change from TableProApp#2777 builds on iPhone. The iOS driver now passes the raw schema and table names and lets that helper quote them.

Verification

This environment has no Docker and no Xcode. Live OceanBase was not measured. Unit tests cover version comments, flavor/SQL/Stop paths, registry count 36, allKnownTypes count 30, oceanbase://, Docker Compose oceanbase/oceanbase-ce as root@sys, and iOS foreign-key quoting including a backslash.

Docs house style and check-docs-against-source.py pass. swiftlint --strict and xcodebuild could not run here.

Not in this PR

Open in Web Open in Cursor 

datlechin and others added 3 commits September 11, 2026 22:20
…e MySQL text by its declared charset (TableProApp#2725) (TableProApp#2740)

* fix(plugin-mysql): set the session character set on connect and decode MySQL text by its declared charset (TableProApp#2725)

Claude-Session: https://claude.ai/code/session_01U7kkDGsR4M4v9NWiycc97U

* fix(plugin-mysql): rebind prepared-statement results after growing a truncated column buffer

Claude-Session: https://claude.ai/code/session_01U7kkDGsR4M4v9NWiycc97U
Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
@cursor
cursor Bot force-pushed the cursor/oceanbase-mysql-flavor-c3a9 branch from e3e5e51 to e163916 Compare September 11, 2026 15:43
datlechin and others added 24 commits September 11, 2026 23:32
…cket on macOS and iOS, and declare it in SQL exports (TableProApp#2743)

* fix(plugin-postgresql): pin client_encoding to UTF8 in the startup packet and stop reading invalid UTF-8 as Latin 1

Claude-Session: https://claude.ai/code/session_01U7kkDGsR4M4v9NWiycc97U

* fix(ios): pin client_encoding to UTF8 in the PostgreSQL connection string

Claude-Session: https://claude.ai/code/session_01U7kkDGsR4M4v9NWiycc97U

* fix(plugin-postgresql): open every PostgreSQL SQL export part with SET client_encoding = 'UTF8'

Claude-Session: https://claude.ai/code/session_01U7kkDGsR4M4v9NWiycc97U
Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
…App#2745)

Signed-off-by: Ngô Quốc Đạt <datlechin@gmail.com>
# Conflicts:
#	Plugins/MySQLDriverPlugin/MySQLServerFlavor.swift
…cell edit (TableProApp#2751)

Signed-off-by: Ngô Quốc Đạt <datlechin@gmail.com>
…ect comments (TableProApp#2726) (TableProApp#2753)

Signed-off-by: Ngô Quốc Đạt <datlechin@gmail.com>
TableProApp#2757)

* fix(plugin-postgresql): pair composite foreign-key columns by position

* fix(plugin-postgresql): make the shared foreign-key catalog reader nonisolated
…osition (TableProApp#2761)

* fix(datagrid): key pending edits by row identity instead of display position

* test(datagrid): find the Discard button in the window, not on the Touch Bar
datlechin and others added 28 commits September 12, 2026 08:24
…lans and JSON types (TableProApp#2763)

* fix: follow the PostgreSQL server version in the dashboard, backup, plans and JSON types

* refactor(export): name the locale variables the dump tools inherit
…error text (TableProApp#2765)

Signed-off-by: Ngô Quốc Đạt <datlechin@gmail.com>
…ableProApp#2764)

* fix(plugin-postgresql): generate DDL older PostgreSQL servers accept

Claude-Session: https://claude.ai/code/session_01X1ejXbmyPqUziRWVxJ5cu8

* docs(changelog): drop a stray merge marker
… a schema gate (TableProApp#2775)

Signed-off-by: Ngô Quốc Đạt <datlechin@gmail.com>
…ema (TableProApp#2726) (TableProApp#2776)

Signed-off-by: Ngô Quốc Đạt <datlechin@gmail.com>
* feat(plugin-weaviate): add Weaviate REST driver

Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>

* fix(plugin-weaviate): compile JSON display of objects and arrays

Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>

* fix(plugin-weaviate): hide built-in credentials and compile Swift 6 fixtures

Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>

* fix(plugin-weaviate): reject SQL as REST console and type expect comments

Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>

* fix(plugin-weaviate): gate the API key on the auth method and report unsupported filters

* fix(plugin-weaviate): write a text cell as text and ping an endpoint that checks the key

---------

Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
Co-authored-by: Ngo Quoc Dat <datlechin@gmail.com>
# Conflicts:
#	CHANGELOG.md
#	TablePro/Core/Plugins/ImportTypeMapper.swift
#	TableProTests/Core/Plugins/PluginMetadataRegistryTypeCountTests.swift
#	docs/snippets/driver-counts.mdx
…s type now requires (TableProApp#2779)

* test(datagrid): give the pending-change palette the boolean colors its type now requires

* docs(claude-md): count 41 plugin bundles and list Weaviate among the registry-only ones
Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
…theme has on chrome (TableProApp#2785)

* feat(settings): theme the content panes outside the editor and the data grid

Claude-Session: https://claude.ai/code/session_01EKDGt17u6TaVBDHm8rzSEj

* docs(claude-md): record that NSAppearance is the only native lever a theme has on chrome

Claude-Session: https://claude.ai/code/session_01EKDGt17u6TaVBDHm8rzSEj
…ion dialog

Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
…d chrome

Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
Co-authored-by: Nguyễn Nam Long <J2TeamNNL@users.noreply.github.com>
@J2TeamNNL J2TeamNNL closed this Sep 12, 2026
@J2TeamNNL

Copy link
Copy Markdown
Owner Author

Closed: this was a Cursor cloud-agent draft against the fork. The real PR is on the parent: TableProApp#2741

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Database request: Oceanbase

3 participants