docs/changelogs/v26.1.5.41-stable.md
CAST target type is Nullable and the conversion is monotonic; for example, with PRIMARY KEY x, ClickHouse can use read-in-order optimization for ORDER BY x::Nullable(UInt64) and can apply primary-key pruning for predicates such as WHERE x::Nullable(UInt64) > 500000. #98482 (Nihal Z. Miaji).allow_nullable_tuple_in_extracted_subcolumns controls whether extracted Tuple(...) subcolumns from Tuple, Variant, Dynamic and JSON are returned as Nullable(Tuple(...)) (NULL for missing rows) or as Tuple(...) (default tuple values for missing rows). Disabled by default, this setting can only be changed by restarting the server. #97299 (Nihal Z. Miaji).clearCaches caused by BlockIO::operator= not moving query_metadata_cache, leading to premature destruction of cached storage snapshots and use-after-free of MergeTreeData storage. #96995 (Alexey Milovidov).StorageKeeperMap backup due to use-after-free of dangling storage pointer in lazy backup batch. #97336 (Alexey Milovidov).sumCount aggregate function not being able to read older serialized states after introduction of Nullable(Tuple). Closes #97370. #97502 (Nihal Z. Miaji).replaceRegexpOne to extract query rewrite that produced wrong results when the regexp didn't match; also fix exception when replaceRegexpOne is used with GROUP BY ... WITH CUBE and group_by_use_nulls=1. #97546 (Alexey Milovidov).loop table function was calling inner_storage->read() directly, bypassing the interpreter layer where row policies, column-level grants, and other security checks are applied. This allowed a user restricted by row policies to read all rows via loop(table) even when a direct SELECT returned zero rows. #97682 (pufit).hasPartitionId will return false if another partition with a higher partition ID exists in the data part set. #97748 (Mikhail Artemenko).mapContainsKey/mapContainsKeyLike with tokenbf_v1 skip index. #97826 (Shankar Iyer).MergeTreeSetIndex" triggered by toDate conversion on key columns with data crossing the 65535 boundary. #98276 (Alexey Milovidov).SELECT x.a for Tuple(a UUID, b Int32)) for external tables passed via --external in clickhouse-client. Closes #96925. #98755 (Pavel Kruglov).reverseUTF8 exception on invalid (truncated) UTF-8 input. #98770 (Alexey Milovidov).SYSTEM START REPLICATED VIEW not waking up the refresh task. #98797 (Pablo Marcos).NOT_FOUND_COLUMN_IN_BLOCK for some queries with GROUP BY and expressions that include inverse dictionary lookup, Date/DateTime conversion comparisons, and tuple comparisons. Closes #98888. #98980 (Nihal Z. Miaji).ALTER TABLE ... DROP PART on a patch part after a schema change (e.g. ADD COLUMN). The crash was caused by missing system columns (_part) in the empty coverage part metadata, leading to an uncaught exception inside a NOEXCEPT_SCOPE. #99036 (Peng Jian).remote() + view(). #99081 (Konstantin Bogdanov).query_plan_convert_any_join_to_semi_or_anti_join optimization, returning an incorrect result for unmatched rows. Related: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi).InverseDictionaryLookupPass; they are apparently visible in a flame graph. Instead, check access only once before running the optimization pass. #99210 (Mikhail Artemenko).hasAllTokens with OR across columns that have separate text indexes. #99505 (Anton Popov).mongo-c-driver 2.2.2. #98304 (Konstantin Bogdanov).postgres REL_18_3. #98306 (Konstantin Bogdanov).COMMENT before AS SELECT in view parser for forward compatibility with newer versions. #99561 (Alexey Milovidov).