# What changed in starrocks

> 108 changes in starrocks 3 to 4 from its official release notes, upgrade guides and advisories: 12 breaking, 7 security, 8 new APIs and options. Each one cited. Sources checked 2026-10-25. HTML: https://unstale.sh/pypi/starrocks/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## starrocks 4

### Breaking changes

- CTAS preserves explicitly declared VARCHAR(N) lengths; newly created tables enforce those lengths on subsequent writes. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- INT64 Parquet timestamps with isAdjustedToUTC=false are loaded as wall-clock values without a session timezone shift; reload older data if consistency is required. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Constant folding now matches MySQL 8 backslash-escape semantics, correcting results for some patterns. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Malformed JSON now fails the query in ALLOW_THROW_EXCEPTION SQL mode instead of silently returning NULL. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- When unset, newly discovered partitions in auto-discovery jobs with consuming progress start at OFFSET_BEGINNING instead of OFFSET_END. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The query memory limit is now enforced during unnest execution, so large arrays fail the query rather than potentially OOM-killing the BE. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Queries without OPERATE ON SYSTEM now return a clear access-denied error instead of a misleading node-lookup failure. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- ARRAY and MAP constructors fail with CapacityLimitExceed when a single chunk exceeds the addressable byte limit; reduce chunk_size or split the expression. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Static partition clauses for Iceberg and Hive tables are validated even when an INSERT specifies target columns; non-partition columns are rejected. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- On columns with a GIN inverted index, NOT MATCH no longer returns rows whose value is NULL, following SQL three-valued logic. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)

### Security

- Negative width values no longer permit unbounded string growth and BE memory exhaustion. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- This FE configuration controls HTTP authentication and RBAC enforcement on all external HTTP endpoints. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Fixes SQL injection where a single quote in a predicate value could escape the literal boundary. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Upgraded jackson-databind to fix two deserialization vulnerabilities. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Upgraded Netty to address SNI handler heap exhaustion, IPv6 subnet filter bypass, and DNS cache poisoning. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Masks Tencent COS access and secret keys and the Iceberg JDBC password in catalog output. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Fixes an out-of-bounds read when input ends with a truncated percent-escape sequence. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)

### New APIs and options

- Adds a BE configuration to reduce memory usage during Primary Key compaction in shared-nothing mode by releasing retained chunk capacity. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Adds refresh_warehouse, refresh_resource_group, refresh_mode, refresh_type, and last_refresh_details observability columns. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Adds a BE configuration item for jemalloc runtime options and exposes it through information_schema.be_configs. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Iceberg and Delta Lake external tables now support partition filter requirements and partition count limits. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Routine Load can continue partition auto-discovery when kafka_partitions and kafka_offsets seed exact starting offsets. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Adds a catalog property that bounds the Iceberg partition cache by memory rather than entry count; its default is 0.1. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Adds LAST_REFRESH_TIME to information_schema.materialized_views and SHOW MATERIALIZED VIEWS, reporting the data-freshness timestamp used by mv_rewrite_staleness_second. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Adds a mutable BE configuration item for the S3 and Azure Blob client cache capacity; its default is 8. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)

### Performance

- Changing only a column comment uses a lightweight metadata-only path, including for Primary Key columns. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Enables page-level predicate pushdown for BOOLEAN columns in Parquet files. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Table-level locks held during INSERT OVERWRITE are relaxed or shortened, reducing lock contention. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)

### Behavior and default changes

- Avro Routine Load supports native MAP and STRUCT target columns. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- FLOOR and CEIL are non-reserved keywords and can be used as column names without quoting. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Incremental materialized views support bitmap_agg, hll_union, percentile_union, and bitmap_union aggregate functions. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The default increases from 100 to 200, batching more stale-file deletions per object-storage DeleteObjects request. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The function accepts a non-constant needle argument. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The Properties column includes partition, column, and snapshot metadata for external table statistics jobs. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Length increases are allowed on range-distribution shared-data sort-key columns through fast schema evolution without a data rewrite. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- With zstd compression, flat JSON sub-columns and synthetic null and offset sub-columns of ARRAY, MAP, and STRUCT columns are compressed for newly written segments. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- The Operation column now shows a readable description of the optimize operation instead of an internal object address. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)

### Fixes and other changes

- Prevents committing cyclic view definitions that could cause subsequent SELECT statements to throw StackOverflowError. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Fixes dropped NULL rows and incorrect row counts when all non-null arrays are empty. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Materialized-view rewriting no longer drops DISTINCT from avg(DISTINCT x), preventing incorrect results when duplicates exist. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- CAST(json/variant AS struct) no longer crashes fragment preparation when a struct field name is not a parseable JSON path. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- count_combine over nullable columns no longer crashes the BE in the streaming pre-aggregation pass-through path. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- CTAS into a Unified catalog using a Hive metastore works with the ENGINE clause in CREATE TABLE AS SELECT. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- DATETIME microseconds use ASCII digits regardless of the JVM default locale, so tablet pre-split boundary values remain parseable. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Nested dictionary expressions no longer produce incompatible dictionary translations between producer and consumer fragments that cause runtime failures. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The table-level override can enable first-load statistics collection even when the global config disables it. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Vacuum no longer deletes bundle files still referenced by sibling tablets when bundled segments have zero rows. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The planner locates the target scan node by physical table identity, preserving the base snapshot ID and conflict-detection filter. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- DATETIME_PRECISION no longer always returns NULL, restoring column-size metadata for MySQL-protocol clients. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Successfully committed multi-table transaction stream load jobs are shown as VISIBLE rather than remaining at PREPARING. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Shared-data tables now report each physical partition's actual bucket count rather than the table-level default. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Java UDFs load on JDK 21 and later without relying on the removed reflective DirectByteBuffer constructor lookup. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Feedback-driven join rebuild preserves predicateCommonOperators, avoiding InputDependenciesChecker validation failures with common sub-expression reuse. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Changing a flat-JSON column from NOT NULL to nullable no longer causes a CHECK crash in the compaction read path. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The optimizer rule no longer produces nullable outputs with non-nullable declared types when a union branch has no input rows. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Query cache normalization no longer crashes on tables with sub-partitions when empty sub-partitions are pruned. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Query dump replay no longer skips session variables stored under a legacy alias, preventing fallback to default values. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The Iceberg _row_id virtual column returns correct values for data files with multiple Parquet row groups. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Schema changes no longer crash when get_rowset_by_version returns nullptr. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The audit log now records the actual exported row count instead of ReturnRows=0. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Snapshots remain restorable after tablet splits or merges because reshard jobs are considered before parent tablet metadata is reaped. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Compaction dropped during tablet reshard no longer deletes SSTable files reused by pass-through. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Compaction publish preserves rollup and synchronous materialized view indexes that become visible after the compaction transaction begins. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- The Properties column always includes the isolation property, shared or isolated, for UDFs and UDAFs. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Partition row counts are no longer written as zero after INSERT OVERWRITE before tablet statistics are refreshed, preserving optimizer cardinality estimates. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Sampling ratios below 1% are supported, including in histogram ANALYZE, avoiding failures when computed ratios previously truncated to zero. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Fixes crashes and incorrect results when multiple UNNEST operators share an input array column and consume different subfields. (4.1.3) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.1.3)
- Fixes failures when the first argument is an untyped NULL literal. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Integer adjacent differences are widened before calculation, preventing overflow when the difference exceeds the INT range. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Fixes failures when the first argument is an untyped NULL literal. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Prepared-statement ADBC clients can open behind a load balancer; forwarded create and close actions now carry the correct Flight SQL action type. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Fixes std::length_error for predicates on wildcard CHAR columns, such as CAST(json_col->'$.x' AS char). (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Fixes over-counting for COUNT(DISTINCT) on bucket-partitioned Iceberg tables with bucket-aware execution and a GROUP BY list containing the bucket column. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Division expressions with a non-constant divisor are no longer treated as monotonic, preventing unsafe Zone Map pruning and incorrect missing rows. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- JSON subfield pushdown excludes case-colliding keys from pushdown to prevent wrong results. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Grouping key columns are no longer incorrectly reported as non-nullable at analysis time, correcting result schemas for Arrow Flight SQL clients. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- OAuth2 client-credential catalogs rebuild their session and retry a request once after background token refresh exhausts retries; at most one rebuild occurs per 60 seconds. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Garbage collection no longer journals a failed-state change for a table already dropped. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Fixes Java UDF failures on JDK 21 and later caused by removal of a private DirectByteBuffer constructor. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Fixes query rewrite for materialized views on un-partitioned Delta Lake or Kudu tables after successful refresh. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Materialized views no longer treat negative staleness after rollback_to_snapshot as within the rewrite staleness budget. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Paimon tables now support ARRAY, MAP, and STRUCT columns, which could previously crash the BE when queried. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Unconvertible Paimon predicates no longer discard the whole conjunction; convertible conjuncts are retained. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Fixes incomplete per-tablet results being stored and served from the query cache, which could return wrong results. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- With checked consistency and a staleness threshold, chained partial refreshes no longer renew freshness for the whole view while another partition lags. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Escapes double quotes in the jsonpaths value so emitted DDL can be parsed and replayed. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Fixes loading column statistics for all-NULL columns when sql_mode includes ERROR_IF_OVERFLOW. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Fixes plan-time failures when aggregating a whole STRUCT column with ROLLUP, CUBE, or GROUPING SETS. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)
- Cyclic view definitions are detected and reported instead of failing with an opaque Unknown error caused by StackOverflowError. (4.0.14) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/4.0.14)

## starrocks 3

### Breaking changes

- ALTER VIEW now rejects changes that create cyclic view definitions, rather than allowing a later SELECT to recurse and crash. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Constructors reject results whose flattened size exceeds 4 GB instead of wrapping around and returning corrupted values. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)

### Behavior and default changes

- The configured codec now also compresses synthetic null/offset sub-columns of flat JSON, ARRAY, MAP, and STRUCT columns. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Manually setting a materialized view from INACTIVE to ACTIVE no longer forces a full-partition refresh. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)

### Fixes and other changes

- Integer-array differences are widened to BIGINT before subtraction, preventing incorrect results when the true difference exceeds the INT range. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Forwarded requests now use the correct action-type string, fixing prepared statements for ADBC clients behind a load balancer. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Prepared-statement schemas now report view-column nullability correctly; nullability for grouping-set key columns was also corrected. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- The missing arrow-compression module was added, restoring LZ4 and ZSTD codec support for compressed Arrow IPC clients. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Statements forwarded to the leader FE now log leader-resolved, fully qualified table relations, excluding CTEs. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- dictionary_get no longer rejects a non-NULL key when the input column's cached has_null flag is stale. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Expressions with a non-constant divisor are no longer treated as monotonic, preventing incorrect ZoneMap-based pruning. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Expired external scan contexts now cancel their pipeline fragments instead of leaving them running. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- External scan plans now set query delivery timeouts so their query contexts do not wait indefinitely for fragments that will never arrive. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- GIN indexes on Primary Key tables now read the correct segment after a column-mode partial update, avoiding stale index data. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Hive getTable now reconnects before falling back to get_table_req(), avoiding intermittent errors when querying Iceberg tables through a Hive metastore catalog. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Background token-refresh sessions now self-heal after prolonged failure, allowing the catalog to refresh its access token again. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Caching of vended-credential tables was reverted on branch-3.5 to avoid delayed visibility of INSERT OVERWRITE transactions against slow REST catalogs. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- The cache no longer stores incomplete per-tablet results for aggregations with LIMIT, preventing wrong results from cache hits. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
- Output struct pruning now uses the input array's subfield group, fixing mismatches between the struct type materialized by BE and declared by FE. (3.5.21) — [release notes](https://github.com/StarRocks/starrocks/releases/tag/3.5.21)
