MatrixOne v26.4.0.0-rc1 Release Notes¶
Release Date: July 9, 2026 MatrixOne Version: v26.4.0.0-rc1
MatrixOne 4.0.0-rc1 is a major feature release. It introduces a resource quota management system for snapshots and data branches, role-based SQL rewrite rules for row-level security, sidecar GPU offload support for analytical queries, a CHECK SNAPSHOT FLUSHED statement for CDC consumers, and numerous stability and performance improvements accumulated since v3.0.13.
New Features¶
Feature Limit System: Resource Quota Management¶
New system functions mo_feature_registry_upsert() and mo_feature_limit_upsert() allow sys-account administrators to register features and set per-account, per-scope quotas. Supported built-in features:
SNAPSHOT(scopes:account,database,table) — controlsCREATE SNAPSHOTquota.BRANCH(scopeless) — controlsDATA BRANCH CREATE TABLEandDATA BRANCH CREATE DATABASEquota.
Quota values: -1 (unlimited), 0 (disabled), 1..32767 (capped). Non-sys accounts default to 50 for both features. Quota enforcement is runtime, not parse-time; changes take effect immediately; dropping resources frees quota. Both functions are restricted to the sys account.
Role Rewrite Rules: CREATE RULE / DROP RULE / SHOW RULES¶
New DDL for role-based query transformation. Administrators can define rules that automatically inject SELECT ... WHERE <condition> wrappers for specific roles, enabling row-level security. Key capabilities:
ALTER ROLE <role> ADD RULE "<sql>" ON TABLE <db>.<tbl>— adds a rewrite rule.ALTER ROLE <role> DROP RULE ON TABLE <db>.<tbl>— removes a rule.SHOW RULES ON ROLE <role>— lists rules for a role.Inline
/*+ remap(...) */hints support per-query table and database remapping (remapdb).Multi-role rule merging: active secondary roles’ rules are OR-merged for row-visibility union.
Inherited roles contribute rules through the role grant hierarchy.
Session-level overrides via the
remap_rewritessession variable.
Sidecar GPU Offload: CALL gpu_execution()¶
The /*+ SIDECAR */ and /*+ SIDECAR GPU */ query hints allow offloading SELECT queries to an external DuckDB sidecar for acceleration. With /*+ SIDECAR GPU */, queries are additionally wrapped in CALL gpu_execution(...) for Sirius GPU acceleration. Table references are automatically rewritten to tae_scan() calls against TAE manifests served via a debug HTTP endpoint. Configurable via the sidecar_url session variable or TOML configuration.
CHECK SNAPSHOT FLUSHED Statement¶
A new CHECK SNAPSHOT FLUSHED <snapshot> <account> <publication> statement verifies whether a snapshot’s data has been fully persisted (flushed) to storage, confirming it is safe for CDC or cross-account subscription consumers to read. Supports account, database, and table granularity levels. Authorization is enforced through the publication/subscription model.
Internal Cross-Account Utilities¶
New internal utilities accessible via internal command dispatch and publication authentication:
GET OBJECT: Retrieve raw object file data from the distributed fileservice in chunks, used for cross-account data synchronization.
OBJECT LIST: List object files belonging to tables within a time range, supporting snapshot-based differential queries.
GET DDL: Extract CREATE TABLE SQL for cross-account DDL replication via publication authorization.
All three utilities require publication permission verification and operate under the authorized account’s context.
Improvements¶
Data Branch: COLUMNS Projection in DIFF (#24115)¶
DATA BRANCH DIFF ... COLUMNS (c1, c2, ...) restricts value columns returned per diff row to the listed subset. Primary-key columns are always present; non-PK columns not listed are omitted. Use this to reduce payload size on wide tables.
Data Branch: DAG-Aware Diff/Merge Across Arbitrary Depth (#24371, #24378)¶
The LCA (Lowest Common Ancestor) resolution and collect-range computation now work across branches of arbitrary DAG depth, not just direct parent-child relationships. Large DAG topologies with thousands of intermediate ancestors are supported.
Export: Parquet Format Support in SELECT INTO OUTFILE¶
SELECT ... INTO OUTFILE now supports FORMAT 'parquet' with configurable SPLITSIZE. All MatrixOne data types are supported for Parquet export, including decimal, JSON, UUID, enum, and vector types. Date/time and decimal values are serialized as strings for compatibility.
Data Branch: Branch Protect Snapshots (#24313)¶
DATA BRANCH CREATE TABLE and DATA BRANCH CREATE DATABASE now automatically create internal branch protect snapshots (__mo_branch_<child_table_id>) in mo_catalog.mo_snapshots. These snapshots pin the parent table’s data at the clone timestamp, protecting it from garbage collection. Branch snapshots are invisible to SHOW SNAPSHOTS, rejected by DROP SNAPSHOT, and reclaimed automatically when the entire DAG subtree is deleted.
Bug Fixes¶
Lock Tables in Transactions (#24422)¶
Fixed an issue where LOCK TABLES inside explicit transactions (BEGIN ... COMMIT) was incorrectly rejected. LOCK TABLES is now allowed within transaction blocks.
Data Branch: Merge Channel Race (#24582)¶
Fixed a race condition in the data branch merge channel that could lead to incorrect merge results.
Data Branch: Diff Returns Wrong Results After GC+Restart (#24010)¶
Fixed an issue where DATA BRANCH DIFF could return incorrect results after garbage collection and a CN restart.
Drop Table Foreign Key Cleanup (#24132)¶
Fixed handling of missing child tables during DROP TABLE foreign key cascade cleanup.
CHECK Constraints in SHOW CREATE TABLE (#24134)¶
Fixed an issue where CHECK constraints were not preserved in the output of SHOW CREATE TABLE.
Fix Explicit Transaction Long-Holder Leak (#24105)¶
Fixed a memory leak where explicit transactions could hold resources too long after backend failures.
Data Branch: Create Table + DROP DATABASE Race Condition (#23788)¶
Fixed a race condition between DATA BRANCH CREATE TABLE and DROP DATABASE that could leave orphan snapshot records.
Test & Infrastructure Updates¶
The following changes are internal infrastructure or test-coverage improvements with no new user-facing SQL syntax:
CDC State Machine (
cdc_state_machine): Internal Go state machine component (ExecutorStateMachine) for CDC task executor lifecycle management. Defines states (Idle, Starting, Running, Pausing, Paused, Restarting, Cancelling, Cancelled, Failed) and transitions. No user-facing SQL surface.Charset/Collation Test Coverage (
charset_collation): Comprehensive regression test cases exercisingCHARACTER SET/COLLATEsyntax inCREATE DATABASE,CREATE TABLE,ALTER TABLE,SHOW CHARSET,SHOW COLLATION, and related string operations. These features are already documented; tests validate existing functionality.TPCDS Benchmark Regression Tests (
benchmark): Test-case fixes for TPCDS query correctness issues (#24208 GROUP BY with NULL groups, #24219 join merge correctness). No new SQL syntax; underlying engine bugs were fixed.
Compatibility Notes¶
mo_feature_registry_upsert()andmo_feature_limit_upsert()are new sys-only functions with no MySQL equivalent.CHECK SNAPSHOT FLUSHEDis a MatrixOne-specific statement with no MySQL equivalent.Role rewrite rules (
CREATE RULE/DROP RULE) are MatrixOne-specific with no MySQL equivalent; MySQL uses a different model based on views for row-level security.The
INTERNALflag on CDC/PITR DDL restricts some commands to sys tenant only. Non-sys tenants calling these with the flag will receive an explicit error.Sidecar GPU offload requires external DuckDB and optionally Sirius GPU infrastructure to be configured.
About This Document¶
This document is generated by the docs sync agent based on the MatrixOne source diff between v3.0.13 and v4.0.0-rc1, and reviewed by humans via pull request.
Full Changelog¶
For the complete list of changes between v3.0.13 and v4.0.0-rc1, see: https://github.com/matrixorigin/matrixone/compare/v3.0.13…v4.0.0-rc1