MatrixOne v26.4.1.0 Release Notes

Release Date: July 13, 2026 MatrixOne Version: v26.4.1.0 (v4.1.0)

MatrixOne v26.4.1.0 is a feature release that introduces SQL task scheduling and execution with cron-based triggers, a granular data branch privilege model, writable external table support, new SQL functions (hll_add_agg(), hll_merge_agg(), hll_cardinality(), JSON_ARRAY(), JSON_OBJECT(), JSON_KEYS(), JSON_LENGTH(), JSON_PRETTY(), JSON_TYPE(), JSON_VALID(), JSON_VALUE(), JSON_SCHEMA_VALID(), JSON_SCHEMA_VALIDATION_REPORT(), S2_CellID(), S2_CellID_Level(), S2_CellID_Parent(), S2_CellID_Center(), S2_CellID_Area(), S2_CellID_EdgeNeighbors(), S2_CellID_AllNeighbors(), S2_CellID_AreNeighbors(), H3_H3Index(), H3_H3Index_Resolution(), H3_H3Index_Parent(), H3_H3Index_Center(), H3_H3Index_Boundary(), H3_H3Index_Neighbors(), H3_H3Index_AreNeighbors()), PostgreSQL-style UPDATE FROM syntax, chained RENAME TABLE, and numerous improvements to ON DUPLICATE KEY UPDATE, LOAD DATA, prefix indexes, fulltext indexes, and the vector index plugin framework. This release also includes compatibility enhancements for MySQL syntax variants and several user-visible bug fixes.

New Features

SQL Task Scheduling & Execution (#24539, #25003)

MatrixOne now supports full SQL task management with a MySQL-compatible scheduling system:

  • CREATE TASK: Defines a scheduled SQL task with a cron expression (SCHEDULE clause) and optional gate conditions (WHEN clause with subquery support). Each task is scoped to a specific account for multi-tenant isolation.

  • ALTER TASK: Modifies an existing task’s schedule, gate condition, or SQL body.

  • DROP TASK: Removes a task and its associated run history.

  • EXECUTE TASK: Manually triggers an immediate run of a task, bypassing the schedule.

  • SHOW TASKS: Lists all tasks visible to the current account.

  • SHOW TASK RUNS: Shows execution history including status, start/end times, and error messages for each task run.

Tasks support configurable retry logic with a per-task retry count, a per-task execution timeout, and automatic cleanup of historical run records. The scheduler evaluates gate conditions before each run and skips execution when the condition is not met.

Data Branch Privilege Model (#24875)

Data branch operations now enforce granular, operation-by-operation privilege checks:

  • Each DATA BRANCH command (CREATE, DIFF, MERGE, PICK, DROP) requires specific source-object read privileges and target-object write or administrative privileges.

  • The new protected_databases system variable (SET GLOBAL protected_databases) designates databases that cannot be dropped accidentally, including via data branch operations.

  • Privilege checks are enforced at the SQL layer before any data branch operation begins execution.

Writable External Tables (#24889)

External tables can now accept INSERT ... SELECT and LOAD DATA statements, writing data back to stage files:

  • Output formats: CSV and JSONLine are supported, controlled by the WRITE_FILE_PATTERN option.

  • Column type fidelity: Full round-trip fidelity for all column types when writing to external stage files.

  • Multi-node dispatch: Supports multi-pipeline and multi-CN write dispatch for parallel throughput.

  • External tables continue to support read-only access and now provide full read-write semantics for stage-backed data.

New SQL Functions: hll_add_agg(), hll_merge_agg(), hll_cardinality(), JSON_ARRAY(), JSON_OBJECT(), JSON_KEYS(), JSON_LENGTH(), JSON_PRETTY(), JSON_TYPE(), JSON_VALID(), JSON_VALUE(), JSON_SCHEMA_VALID(), JSON_SCHEMA_VALIDATION_REPORT(), S2_CellID(), S2_CellID_Level(), S2_CellID_Parent(), S2_CellID_Center(), S2_CellID_Area(), S2_CellID_EdgeNeighbors(), S2_CellID_AllNeighbors(), S2_CellID_AreNeighbors(), H3_H3Index(), H3_H3Index_Resolution(), H3_H3Index_Parent(), H3_H3Index_Center(), H3_H3Index_Boundary(), H3_H3Index_Neighbors(), H3_H3Index_AreNeighbors()

HLL Sketch Functions (#24611)

HyperLogLog approximate distinct counting functions:

  • hll_add_agg(): Aggregate function that builds an HLL sketch from input values.

  • hll_merge_agg(): Aggregate function that merges multiple HLL sketches into one.

  • hll_cardinality(): Returns the approximate distinct count estimate from an HLL sketch.

JSON Functions (#24742)

MySQL-compatible JSON construction, inspection, and validation functions:

  • JSON_ARRAY(): Creates a JSON array from a list of values.

  • JSON_OBJECT(): Creates a JSON object from key-value pairs.

  • JSON_KEYS(): Returns the top-level keys of a JSON object as a JSON array.

  • JSON_LENGTH(): Returns the length of a JSON document or array.

  • JSON_PRETTY(): Pretty-prints a JSON document with indentation.

  • JSON_TYPE(): Returns the type of a JSON value as a string.

  • JSON_VALID(): Returns 1 if the argument is valid JSON, 0 otherwise.

  • JSON_VALUE(): Extracts a scalar value from a JSON document at a given path.

  • JSON_SCHEMA_VALID(): Validates a JSON document against a JSON Schema.

  • JSON_SCHEMA_VALIDATION_REPORT(): Returns a detailed validation report for a JSON document against a JSON Schema.

S2 and H3 Geospatial Cell Functions (#25065)

Google S2 Cell Hierarchy

  • S2_CellID(lat, lng): Returns the S2 cell ID covering the given latitude and longitude at the default level.

  • S2_CellID_Parent(cell_id): Returns the parent cell of the given S2 cell ID.

  • S2_CellID_Center(cell_id): Returns the center point (latitude, longitude) of the given S2 cell.

  • S2_CellID_Area(cell_id): Returns the approximate area of the given S2 cell in square meters.

  • S2_CellID_Level(cell_id): Returns the level of the given S2 cell ID.

  • S2_CellID_EdgeNeighbors(cell_id): Returns the edge-adjacent neighbors of the given S2 cell.

  • S2_CellID_AllNeighbors(cell_id): Returns all neighbors (edge and vertex) of the given S2 cell.

  • S2_CellID_AreNeighbors(cell_a, cell_b): Returns whether two S2 cell IDs are neighbors.

Uber H3 Hexagonal Grid

  • H3_H3Index(lat, lng, resolution): Returns the H3 index covering the given latitude and longitude at the specified resolution.

  • H3_H3Index_Parent(h3_index, resolution): Returns the parent H3 index at the specified coarser resolution.

  • H3_H3Index_Center(h3_index): Returns the center point (latitude, longitude) of the given H3 cell.

  • H3_H3Index_Boundary(h3_index): Returns the boundary polygon of the given H3 cell as a WKT string.

  • H3_H3Index_Resolution(h3_index): Returns the resolution of the given H3 index.

  • H3_H3Index_Neighbors(h3_index): Returns all neighboring H3 cells at the same resolution.

  • H3_H3Index_AreNeighbors(h3_a, h3_b): Returns whether two H3 indices are neighbors.

DOUBLE PRECISION Type Alias (#25109)

DOUBLE PRECISION is now accepted as a synonym for DOUBLE (float64) in column definitions and CAST expressions. This improves compatibility with SQL dialects that use DOUBLE PRECISION as the standard name for double-precision floating-point columns.

MySQL REPLACE Syntax Variants (#25083)

Additional MySQL-compatible REPLACE syntax forms are now supported, including variants with explicit column lists and different value specification styles.

Improvements

PostgreSQL-style UPDATE … FROM (#24536, #25023)

MatrixOne now supports the PostgreSQL-compatible UPDATE ... FROM syntax:

UPDATE target_table
SET target_table.col = source.col
FROM source_table
WHERE target_table.id = source_table.id;

This syntax allows updating a table using values from another table or subquery in the FROM clause with a join condition in the WHERE clause. CTE (WITH) clauses are supported in the UPDATE ... FROM statement.

ON DUPLICATE KEY UPDATE Modernization (#24973)

The ON DUPLICATE KEY UPDATE (ODKU) clause now uses a modern dedup-join execution path with the following improvements:

  • MySQL-aligned conflict priority: PRIMARY KEY conflicts take precedence over unique keys, and unique keys are checked in definition order.

  • Row-scoped foreign key validation ensures FK constraints are checked per-row during ODKU execution.

  • Improved plan generation for complex ODKU scenarios.

Chained RENAME TABLE (#24470)

RENAME TABLE now supports chaining multiple rename pairs in a single atomic statement:

RENAME TABLE t1 TO t1_old, t2 TO t1, t1_old TO t2;

This enables the MySQL atomic swap pattern where multiple tables are renamed in a single operation, with all-or-nothing semantics.

CREATE TABLE IF NOT EXISTS … LIKE (#25119)

The IF NOT EXISTS clause is now honored for CREATE TABLE ... LIKE statements. When the target table already exists, the statement succeeds silently instead of raising an error, making it safe for idempotent schema scripts.

Prefix Index DML Support

Prefix indexes on string columns now fully support INSERT, UPDATE, DELETE, and SELECT operations with uniqueness enforcement on the indexed prefix. This completes the DML support for prefix indexes, which were previously limited.

RESTORE FROM PITR ACCOUNT Clause (#24591)

RESTORE ... FROM PITR now supports an ACCOUNT clause for tenant-level restore operations. This allows restoring data scoped to a specific tenant account from a point-in-time recovery snapshot.

LOAD DATA Enhancements

  • CSV COMMENT option support for external tables.

  • Fixed YEAR column loading to correctly handle two-digit and four-digit year formats.

  • Improved string width handling for multi-byte character sets during import.

  • String-to-vector conversion support for loading vector-typed columns.

Fulltext Index Enhancements (#24884, #24297)

  • Fulltext index rewrite support for join queries, enabling fulltext search combined with table joins.

  • Dict-based tokenizer support using Jieba for Chinese text segmentation.

  • Plugin framework smoke testing for fulltext index extensions.

Protected Database (#25027)

A new protected_databases system variable allows administrators to designate databases that cannot be accidentally dropped. This provides an additional safety layer for critical databases:

SET GLOBAL protected_databases = 'db1,db2,db3';

Vector Index Plugin Framework (#24443)

A pluggable vector index architecture has been introduced with lifecycle hooks for compilation, planning, runtime execution, index cron maintenance, and ISCP phases. This framework enables integration of third-party vector index implementations.

GREATEST() / LEAST() Numeric Promotion (#25145, #24628)

GREATEST() and LEAST() now perform implicit numeric type promotion for mixed-type arguments (e.g., INT and DOUBLE), returning the promoted type. Both functions also accept NULL arguments, returning NULL when any argument is NULL, consistent with MySQL behavior.

CN Health Circuit Breaker (#25073)

The proxy layer now includes a CN health circuit breaker that monitors CN node health and automatically skips overloaded or unhealthy CNs when routing queries. This improves cluster reliability under load.

Bug Fixes

  • DELETE with JOIN (#25125): Fixed an issue where DELETE ... USING ... JOIN would incorrectly delete all rows from the target table instead of only the matched rows. The DELETE now correctly deletes only rows that satisfy the join condition.

  • DROP INDEX IF EXISTS (#25006): DROP INDEX IF EXISTS now correctly handles the case where the specified index does not exist, succeeding silently instead of raising an error.

  • event_scheduler Variable (#25020): The event_scheduler system variable now correctly reports DISABLED instead of ON. Since MatrixOne does not support CREATE EVENT, the scheduler cannot be enabled.

  • SELECT … FOR UPDATE Alignment (#24427): SELECT ... FOR UPDATE behavior has been aligned with MySQL for derived tables, aggregate queries, and subqueries. Previously, certain query structures would incorrectly allow or disallow locking.

  • LOCK TABLES in Transactions (#24421): LOCK TABLES is now supported within transactions, aligning with MySQL behavior for explicit table locking during transactional operations.

  • LIMIT 0 Handling (#24455): Fixed LIMIT 0 handling to correctly return an empty result set. Improved error messages for NULL and negative LIMIT/OFFSET values.

  • ORDER BY/GROUP BY NULL (#24426): ORDER BY NULL and GROUP BY NULL are now supported, matching MySQL behavior where they act as no-ops.

Compatibility Notes

  • Applications using advisory lock functions (GET_LOCK, RELEASE_LOCK, etc.) can now migrate from workarounds to native support.

  • DOUBLE PRECISION is now a valid type alias for DOUBLE. Existing SQL using DOUBLE is unaffected.

  • RENAME TABLE with multiple rename pairs is now supported. Single-pair syntax continues to work unchanged.

  • CREATE TABLE IF NOT EXISTS ... LIKE is now idempotent. Scripts that previously checked existence before cloning a table can simplify.

  • DELETE ... JOIN behavior has been corrected; applications that depended on the incorrect behavior should verify their queries.

  • event_scheduler now reports DISABLED. Scripts checking for ON should be updated.

  • The data branch privilege model is stricter. Users of data branch operations may need additional grants for source-object read and target-object write access.

  • The protected_databases variable is a new safety mechanism. Administrators should configure it for databases that must not be dropped.

About This Document

This document is generated by the docs sync agent based on the MatrixOne source diff and reviewed by humans via pull request.

Full Changelog

v4.0.0-rc4…v4.1.0