Back to Clickhouse

2025 Changelog

docs/changelogs/v25.12.1.649-stable.md

26.4.1.1-new129.0 KB
Original Source

2025 Changelog

ClickHouse release v25.12.1.649-stable (bf4280aa19d) FIXME as compared to v25.12.1.1-new (4a90b95163c)

Backward Incompatible Change

  • ALTER MODIFY COLUMN now requires explicit DEFAULT when converting nullable columns to non-nullable types. Previously such ALTERs could get stuck with cannot convert null to not null errors, now NULLs are replaced with column's default expression. Resolves #5985. #84770 (Vladimir Cherkasov).
  • Ngram tokenizer will no longer return ngrams less than the length N it was set with. Text Search will return no rows when search tokens are empty. #89757 (George Larionov).
  • When alter column from String to Nullable(String), we will not do mutation to the data. but for uniq aggregate function, it use different data strucuture: for nullable column, it will use AggregateFunctionNull with a nested uniq aggregator. the AggregateFunctionNull will serialize an extra bool flag. This will make the statistics file incompatible. The fix is add a flag to record if it is a nullable column during serialization. The format of statisticis has changed, the server will crash if we have statistics with old format. This PR https://github.com/ClickHouse/ClickHouse/pull/90904 will fix the crash, and throw exception when the existing statisticis uses lagecy format. To avoid exception, we should run ALTER TABLE [db.]table MATERIALIZE STATISTICS ALL to regenerate the statistics` to fix it. #90311 (Han Fei).
  • Remove settings allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Allowing non-comparable types in order by or comparison functions may lead to logical errors and unexpected results. Resolves #90028. #90527 (Pavel Kruglov).
  • Changed the default of setting check_query_single_value_result from true to false. This causes CHECK TABLE to return detailed per-part results instead of an aggregated result (1 = okay, 0 = errors found). Compared to the previous behavior, this is likely more aligned with what the user wants. #91009 (Robert Schulze).
  • Multiple fixes around implicit indices. The schema shown or stored (keeper metadata) won't include implicit indices, such as the ones created by settings add_minmax_index_for_numeric_columns or add_minmax_index_for_string_columns. This might cause metadata errors when a ReplicatedMergeTree table is created or updated in a newer version, while there is a replica in an older release. For those cases send DDLs to the old replica until the cluster is upgraded completely. #91429 (Raúl Marín).
  • Update clickhouse-client to return a non-zero exit code (159 - TIMEOUT_EXCEEDED) when a query times out due to receive_timeout. Previously, timeouts would return exit code 0 (success), making it difficult for scripts and automation to detect timeout failures. #91432 (Sav).
  • Improved storage layout of the inverted text index to be more efficient for reading from the object storage. Improved performance of merges in tables with inverted text indexes. If you used the experimental text index before version 25.12, you need to drop the index before the upgrade and rebuild it on the new version. #91518 (Anton Popov).
  • It is now forbidden to create special MergeTree tables (such as ReplacingMergeTree, CollapsingMergeTree, etc.) with an empty ORDER BY key, since merge behavior in these tables is undefined. If you still need to create such a table, enable the allow_suspicious_primary_key setting. #91569 (Anton Popov).
  • Fix functions bitShiftLeft and bitShiftRight to return 0 or empty value in case of a shift exactly of the size of the type. #91943 (Pablo Marcos).
  • Follow-up to https://github.com/ClickHouse/ClickHouse/pull/88380. This PR marks disabled positional arguments in the projections as a backward-incompatible change. Additionally, it introduces the enable_positional_arguments_for_projections setting to enable a safe ClickHouse cluster upgrade when positional arguments are present in the projections. #92007 (Dmitry Novik).

New Feature

  • Users can now configure S3/Azure Queue tables to move or tag processed files, in addition to the previous options to keep or remove files. Resolves #72944. #86907 (Murat Khairulin).
  • Add allow_reentry option to windowFunnel aggregate function. When enabled with strict_order, it ignores events that violate the order instead of stopping the funnel analysis. This enables handling user journeys with refreshes (A->A->B) or back-navigation (A->B->A->C) without underreporting conversion rates. #86916 (Lee ChaeRok).
  • CLI client can now suppress the 'ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded.' message by specifying --no-server-client-version-message or false. #87784 (Larry Snizek).
  • Keeper compatibility with zookeeper: create with statistics. #88797 (Konstantin Vedernikov).
  • Support for ZooKeeper persistent watches in ClickHouse Keeper. Continuation part 2: https://github.com/ClickHouse/ClickHouse/pull/78207. #88813 (Konstantin Vedernikov).
  • Functions to calculate area and perimeter for the geometry type. #89047 (Konstantin Vedernikov).
  • Add instrumentation at runtime using XRay to debug issues in production and profile deterministically. Resolves #74249. #89173 (Pablo Marcos).
  • Implement dictGetKeys function that returns the dictionary key(s) whose attribute equals the specified value. It uses a per-query reverse-lookup cache, tuned by the max_reverse_dictionary_lookup_cache_size_bytes setting, to speed up repeated lookups. #89197 (Nihal Z. Miaji).
  • Access ClickHouse Cloud instances using Cloud credentials with --login. #89261 (Krishna Mannem).
  • Add setting type_json_skip_invalid_typed_paths to disable exceptions for inserts/type casts to JSON type when input JSON cannot be cast to explicit typed paths in JSON type. Falls back to null/zero value of typed path. #89886 (Max Justus Spransy).
  • Support direct (nested loop) join for MergeTree tables. To use it, specify it as the single option in the setting: join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • Support ORDER BY in CREATE operation for iceberg + sorting in INSERT. Resolves #89916. #90141 (Konstantin Vedernikov).
  • This PR introduces projection-level settings, exposed through the new WITH SETTINGS clause in ALTER TABLE ... ADD PROJECTION. These settings allow projections to override certain MergeTree storage parameters (e.g. index_granularity, index_granularity_bytes) on a per-projection basis. #90158 (Amos Bird).
  • Add data masking policy parser. #90552 (pufit).
  • Add HMAC(algorithm, message, key) sql function as a part of #73900 and #38775. #90837 (Mikhail f. Shiryaev).
  • Add support for has() function to use primary key and data skipping indexes when first argument is constant array. Closes #90980. #91023 (Nihal Z. Miaji).
  • Implement new input output format Buffers. This format is similar to Native; however, unlike Native, it does not store column names, column types, or any extra metadata. Closes #84017. #91156 (Nihal Z. Miaji).
  • Add a setting max_streams_for_files_processing_in_cluster_functions to control number of streams for parallel files reading in Cluster table functions. Closes #90223. #91323 (Pavel Kruglov).

Experimental Feature

  • The new logic is introduced to automatically execute queries using parallel replicas, controlled by the setting automatic_parallel_replicas_mode. During normal single-node execution, ClickHouse collects statistics that will later be considered during the planning stage. If statistics suggest that parallel replicas are likely to be beneficial, ClickHouse will automatically execute the given query with parallel replicas. The set of supported queries is currently fairly limited. #87541 (Nikita Taranov).

Performance Improvement

  • Fail fast when queries reach row limits. Resolves #61872. #62804 (Sean Haynes).
  • Add optimization to remove unused columns in query plans. Resolves #75152. #76487 (János Benjamin Antal).
  • Https://github.com/clickhouse/clickhouse/pull/84477 added constrains regarding select queries which can be used in insert select from s3cluster() queries for parallel distributed execution. this change allows using where, which was possible before. #84611 (Igor Nikonov).
  • Prefetch keys during hash table iteration to minimize cache misses. #84708 (lgbo).
  • Optimize AggregateFunctionHistogram by sorting only the tail of points array and skipping sort for monotonic inputs, achieving ~10% speedup. #85760 (MakarDev).
  • ClickHouse now uses skip indexes to perform index analysis on WHERE clauses with mixed AND- and OR-connected filter conditions. Previously, the WHERE clause needed to be a conjunction (AND) of filter conditions to utilize skip indexes. A new setting use_skip_indexes_for_disjunctions (default: on) controls this feature. (issue #75228). #87781 (Shankar Iyer).
  • Improved filtering performance for predicates with functions such as like, equals, has, and others by leveraging an additional preliminary filter built from the text index. This optimization is enabled via the query_plan_text_index_add_hint setting. Improved usage of the text index for columns of Map data type. #88550 (Anton Popov).
  • Optimize repeated inverse dictionary lookups by doing faster lookups into a precomputed set of possible key values. Closes #7968. #88971 (Nihal Z. Miaji).
  • Added support of sparse serialization for columns of Nullable type. This continues #44539. #88999 (Amos Bird).
  • Support JOIN runtime filters for ANTI JOINs. Also, refactor the runtime filters implementation to reduce lock contention. #89710 (Dmitry Novik).
  • Support keeping reading in order from the left table in LEFT/INNER JOIN operations, which can be utilized by subsequent steps. Can be disabled using setting query_plan_read_in_order_through_join. Support virtual row while reading optimization (see setting read_in_order_use_virtual_row) for LEFT/INNER JOINs. #89815 (Vladimir Cherkasov).
  • Optimize ORDER BY...LIMIT N queries by using skip index and dynamic threshold filter to significantly reduce rows processed. #89835 (Shankar Iyer).
  • Improve topK performance and behaviour. #90091 (Raúl Marín).
  • Improved performance of Decimal comparison operations. Resolves #28192. #90153 (Konstantin Bogdanov).
  • Support partition pruning for Paimon functions, continuing from https://github.com/ClickHouse/ClickHouse/pull/84423. #90253 (JIaQi).
  • Improve the performance of lazily materialized columns with a bigger limit. #90309 (Nikolai Kochetov).
  • Users should see lower latency in index analysis when large minmax indexes (millions of granules) are present. #90428 (Shankar Iyer).
  • Use advanced SIMD operations for logical functions via dynamic dispatch. #90432 (Raúl Marín).
  • Improve JIT function performing by not initializing the result column to zero unnecessarily. #90449 (Raúl Marín).
  • Speed up T64 decompression via dynamic dispatch. #90610 (Raúl Marín).
  • Optimize MergeTree reader inplace filtering. Resolves #87119. #90630 (Xiaozhe Yu).
  • Fail fast when queries reach row limits. Resolves #61872. #90767 (Sean Haynes).
  • Implement simple DPsize join reordering algorithm for INNER JOINs. A new experimental setting controls what algorithms are used in which order, e.g. query_plan_optimize_join_order_algorithm='dpsize,greedy' means that DPsize is tried first with fallback to greedy. #91002 (Alexander Gololobov).
  • Introduce an additional heuristic to reduce the widths of the selected merge choices. Performing more narrow merges will increase write amplification, but at the same time, can help prevent falling under the TOO_MANY_PARTS errors. #91163 (Mikhail Artemenko).
  • Improve query performance for S3 tables created with glob pattern by pushing down _path filter values, which allows to avoid S3 listing operations. Controlled by the s3_path_filter_limit setting. #91165 (Eduard Karacharov).
  • Speed up converting columns to bool (in WHERE clauses) via dynamic dispatch. #91203 (Raúl Marín).
  • Speed up sorting of single numeric block via dynamic dispatch. #91213 (Raúl Marín).

Improvement

  • Allows the use of non-constant second arguments for IN. It also supports a tuple as a second argument. #77906 (Yarik Briukhovetskyi).
  • Add error message that the part was deduplicated. #80264 (Aleksandr Musorin).
  • Allows INSERT into ALIAS columns (columns that simply refers to a physical column without any expression). Closes #80060. #84154 (Shaurya Mohan).
  • Fixes some bugs with prewhere, involving supertypes for Time and Time64 data types. Resolves #84544. #84715 (Yarik Briukhovetskyi).
  • Added dependencies and missing_dependencies columns to system.kafka_consumers to report materialized view target tables for Kafka tables. Added KafkaMVNotReady counter. #85346 (Ilya Golshtein).
  • Adds session-level setting aggregate_function_input_format to improve INSERT queries into tables with AggregateFunction columns, allowing insertion of data as serialized state, raw values, or arrays. #88088 (Punith Nandyappa Subashchandra).
  • Now, default expressions work correctly with remote and native protocol. Closes #87972. #88540 (Pervakov Grigorii).
  • Allow disabling of PSI_*_* async metrics collection. #88557 (MikhailBurdukov).
  • The default value of query_plan_optimize_join_order_limit is changed to 10. #89312 (Alexey Milovidov).
  • Enable the setting allow_statistics_optimize by default, so the JOINs optimizer will use column statistics. #89332 (Alexey Milovidov).
  • Add a MergeTree setting alter_column_secondary_index_mode to control what to do with indices during mutations. Possible values: throw, drop, rebuild, and compatibility. Closes #77797. #89335 (Raúl Marín).
  • Setting enable_time_time64_type is now enabled by default. #89345 (Yarik Briukhovetskyi).
  • plain-rewritable disk has its own implementation and layout. Let's not base it on top of regular plain disks. #89807 (Mikhail Artemenko).
  • Reduces memory usage during merges in system.metric_log table (enabled by default) by setting min_bytes_for_wide_part and vertical_merge_algorithm_min_bytes_to_activate to 128MB. #89811 (filimonov).
  • Added fields last_error_time, last_error_message, last_error_query_id and last_error_trace to system.error_log table. #89879 (Narasimha Pakeer).
  • Enable using inverted index in PREWHERE. Resolves #89975. #89977 (Peng Jian).
  • Any exception in HTTP should never contain final zero chunk. #89998 (Kaviraj Kanagaraj).
  • Add a keeper-server-side check during handshake to reject clients when last_zxid_seen (provided by the client) > last_processed_zxid. This prevents stale reads when clients reconnect to lagging replicas. #90016 (Miсhael Stetsyuk).
  • Add kafka_consumer_reschedule_ms as a tunable Kafka table engine setting in order to adjust how long consumers sleep for new data. Resolves #89204. #90112 (Jeremy Aguilon).
  • Changed the default of setting check_query_single_value_result from true to false. This causes CHECK TABLE to return detailed per-part results instead of an aggregated result (1 = okay, 0 = errors found). Compared to the previous behavior, this is likely more aligned with what the user wants. #90150 (Robert Schulze).
  • Add a new column parts_in_progress_names to system.mutations to improve diagnostics. #90155 (Shaohua Wang).
  • Retry network errors when S3 library parses XML response. #90216 (Sema Checherinda).
  • We want to run keepers in separate server processes and, to avoid overwhelming Prometheus in large regions, we should continue to expose only keeper-related metrics. #90244 (Miсhael Stetsyuk).
  • Add support for loading ClickHouse Client configuration from XDG Base Directory paths (e.g., ~/.config/clickhouse/config.xml) in addition to the legacy ~/.clickhouse-client/ location. Resolves #89882. #90306 (Wujun Jiang).
  • Add byte size limit for append request batch in Keeper. Limit is controlled with keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic).
  • Add setting to prevent large partitions count. #90365 (Konstantin Vedernikov).
  • Support reading DeltaLake CDF via deltaLake table function with settings delta_lake_snapshot_start_version, delta_lake_snapshot_end_version. The CDF (Change Data Feed, a feature that lets you automatically capture and query row-level data changes—such as inserts, updates, and deletes—between versions of a Delta table) is enabled in DeltaLake via delta.enableChangeDataFeed. The columns provided along with the data are _change_type, _commit_version, _commit_timestamp. #90431 (Kseniia Sumarokova).
  • Update warning messages when approaching guardrails limits: show current and throw values. #90438 (Nikita Fomichev).
  • Stream chunks in system.filesystem_cache table instead of creating a single chunk with all cache state. Reading filesystem cache state can take a long time for large caches and consume a lot of memory, so streaming it is indispensable for large deployments. #90508 (Kseniia Sumarokova).
  • Fix bad exception message in Hive partitioning: it was missing a space. #90685 (Alexey Milovidov).
  • Entries in the vector similarity index cache are now removed when table parts are dropped or replaced by newer parts. Prior to this, these would be cleared only lazily by cache eviction. #90750 (Shankar Iyer).
  • Bump chdig to v25.11.2+. #90773 (Azat Khuzhin).
  • Now pre-signed URLs work with S3. Closes #65032. #90827 (Yarik Briukhovetskyi).
  • Remove stuff from performance test configs. #90879 (Raúl Marín).
  • Bump internal croaring library from v4.3.3 to v4.4.3. #90891 (Robert Schulze).
  • Entries in the vector similarity index cache are now removed when table parts are dropped or replaced by newer parts. Prior to this, these would be cleared only lazily by cache eviction. #90903 (Robert Schulze).
  • Due to https://github.com/ClickHouse/ClickHouse/pull/90311 , the format of statisticis has changed, the server will crash if we have statistics with old format. This PR will fix the crash, and throw exception when the existing statisticis uses legacy format. To avoid exception, we should run ALTER TABLE [db.]table MATERIALIZE STATISTICS ALL to regenerate the statistics` to fix it. #90904 (Han Fei).
  • The text index now works with ReplacingMergeTree tables. #90908 (Elmi Ahmadov).
  • Avoid exposing the ClickHouse server version in HTTP error responses returned before authentication. #91003 (filimonov).
  • Now HTTP_CONNECTION_LIMIT_REACHED exception would be thrown when hard_limit for the http clients connection is reached. It is set as 20000 for the disk connections. #91016 (Sema Checherinda).
  • Added a new setting apply_row_policy_after_final that allows the query to apply row policy only after final, which will make the behavior for ReplacingMergeTree with row policies more correct. Fixes #90986. #91065 (Yarik Briukhovetskyi).
  • Introduce system.background_schedule_pool{,_log} to improve introspection of background jobs. #91157 (Azat Khuzhin).
  • You can now quickly comment or uncomment your currently selected lines in the Web UI query editor using Ctrl+/ (or Cmd+/ on Mac), making it easier to temporarily disable parts of your query while testing. #91160 (Samuel K.).
  • Add system.completions to list of always accessible tables. #91166 (Yakov Olkhovskiy).
  • Add profile events FailedInitialQuery and FailedInitialSelectQuery. #91172 (RinChanNOW).
  • Fixed potential thread pool starvation when reading column samples for JSON columns with many subcolumns by respecting the merge_tree_use_prefixes_deserialization_thread_pool setting instead of unconditionally using the thread pool. #91208 (Raufs Dunamalijevs).
  • Support JSON type in tupleElement. Closes #81630. #91327 (Pavel Kruglov).
  • Fixed spurious memory limit errors when userspace page cache is enabled. #91361 (Michael Kolupaev).
  • Bump chdig to v25.12.1. #91394 (Azat Khuzhin).
  • In storage S3(Azure)Queue add setting commit_on_select (to define whether processed data needs to be committed and whether to apply after_processing action). The default value is false, fix check for attached mv during select. #91450 (Kseniia Sumarokova).
  • Ngrams tokenizer can now be built with ngram_length = 1. #91529 (George Larionov).
  • Now, default expressions work correctly with remote and native protocol. Closes #87972. Improved schema inference for table functions. Fixed schema inference for EXPLAIN or CREATE TABLE AS SELECT queries. #91599 (Pervakov Grigorii).
  • Support negative indexes for tuple element access (e.g. tuple.-1). #91665 (Amos Bird).
  • Don't add S3 providers if GCP OAuth is used. #91706 (Antonio Andelic).
  • Support storage settings in insert into table function for consistency with select. Closes #89386. #91707 (Kseniia Sumarokova).
  • Throw an "not implemented" for truncate query for data lakes instead of silently doing nothing. Closes #86604. #91713 (Kseniia Sumarokova).
  • Set max message size on parquet v3 reader to avoid getting DB::Exception: apache::thrift::transport::TTransportException: MaxMessageSize reached. #91737 (Arthur Passos).
  • In Pretty format, named tuples are now displayed as Pretty JSON. This closes #65022. #91779 (Mostafa Mohamed Salah).
  • Add a setting insert_select_deduplicate. Which makes it more clear how do we handle insert deduplication when INSERT SELECT. In general it is not possible to do deduplication for such queries, but if the table is not changed and the result is sorted then it is possible to do deduplication on retry. We could not track that the source is the same. But we could check that the result of select query is sorted. Actually it turned out that in general case it is really hard to check, but the simple case with ORDER BY ALL is easy. Right now the logic here actually is broken. We try to deduplicate, but in the most cases it just does not see duplicates among the blocks because the select returns different data. #91830 (Sema Checherinda).
  • Allow implicit type conversion when casting Array to QBit. Integer and float arrays can now be inserted directly into QBit columns without explicit type casts. #91846 (Raufs Dunamalijevs).
  • Add CapnProto message size limit. It can be changed with format_capn_proto_max_message_size. #91888 (Antonio Andelic).
  • Refine marks cache metrics to track only queries (after #83415 MarkCacheHits/MarkCacheMisses was updated for merges as well, this PR will revert this behavior back). #91910 (Azat Khuzhin).
  • Fix client_info.interface being set to TCP for local connections. #91933 (Konstantin Bogdanov).
  • Deduce Iceberg table metadata location if metadata_location not specified in Glue metadata. #91994 (Andrey Zvonov).
  • refresh_certificates_task_interval parameter in ACME client configuration now expects a value in seconds. #92211 (Konstantin Bogdanov).
  • Log parts events in system.part_log for system.*_log. #92217 (Azat Khuzhin).
  • Add a new column, elapsed_time_microseconds to system.blob_storage_log. #92322 (Alexey Milovidov).
  • Backported in #92573: Make query memory usage detection for spilling to disk during aggregation/sorting more robust. #92500 (Azat Khuzhin).

Bug Fix (user-visible misbehavior in an official stable release)

  • Initialize DNSResolver before use to respect custom settings. Fixes #76296. #81302 (Zhigao Hong).
  • Fix reading subcolumns from a column with dot in the name in some cases. Resolves #81261, #82058, #88169. #87205 (Pavel Kruglov).
  • Fix GenerateRandom engine crash on non-literal parameters: return BAD_ARGUMENTS with a clear message instead of LOGICAL_ERROR. #88157 (Shafi Ahmed).
  • Fix removing unused projection columns in the presence of UNION. Fixes #88180. #88350 (Sema Checherinda).
  • Fixed incorrect sharding in JOIN optimization when the primary key is sorted in descending order. Resolves #88512. #88794 (Amos Bird).
  • Re-enable s3queue_keeper_fault_injection_probablility, fix issues. #88800 (Kseniia Sumarokova).
  • Fixed several issues caused by premature column removal in TTL. Resolves #88002. #88860 (Amos Bird).
  • Throw exception when temporary_files_buffer_size is set to 0. Resolves #88900. #88917 (Vladimir Cherkasov).
  • Fix Bad get error that happened during Set index analysis in case the predicate contained NULL constant. Fixes #84856 and #82974. #89429 (Nikolai Kochetov).
  • Fix Cannot add subcolumn X.Y: column with this name already exists. Resolves #89599. #89602 (Azat Khuzhin).
  • Fix bugs in the theilsU and contingency functions that caused incorrect results. #89760 (Nihal Z. Miaji).
  • Fix Alias stability issues: Fix StrictnessLevel with SharedDatabaseCatalog, disallow target is also an alias, and implement additional interfaces (getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare). Resolves #89106. #89812 (Kai Zhu).
  • Fix possible crash during remote query with ARRAY JOIN inside IN and enabled enable_lazy_columns_replication setting. Resolves #90361. #89997 (Pavel Kruglov).
  • Fix possible logical error when using analyzer_compatibility_join_using_top_level_identifier with multiple joins. #90010 (Vladimir Cherkasov).
  • Fix inference of bad DateTime64 values from Strings in text formats in some cases. Resolves #89368. #90013 (Pavel Kruglov).
  • Do size checks when deserializing data from aggregation states and other sources. #90031 (Raúl Marín).
  • Split part ranges by volume characteristics to enable TTL drop merges for cold volumes. After this patch, parts with a max TTL < now will be removed from cold storage. The algorithm will schedule only single part drops. #90059 (Mikhail Artemenko).
  • In case when Kafka table was created with a setting kafka_handle_error_mode = 'dead_letter_queue' and the table system.dead_letter_queue is not configured the server may have crashed. This behaviour is fixed. Resolves #87573. #90064 (Nikita Mikhaylov).
  • Fix possible error Column with Array type is not represented by ColumnArray column: Replicated during insertion with usage of ARRAY JOIN and enabled enable_lazy_columns_replication setting. #90066 (Pavel Kruglov).
  • Fixed a crash during the clean server shutdown due to wrong destruction order. Resolves #82420. #90076 (Nikita Mikhaylov).
  • Fix logical error and modulo bug in numbers system table when big step size is used. Closes #83398. #90123 (Nihal Z. Miaji).
  • Fix parquet writing not preserving original order when using single threaded writing with the native writer. Partially reverts https://github.com/ClickHouse/ClickHouse/pull/64424/files. #90126 (Arthur Passos).
  • Do not apply constant node optimization to LIMIT/OFFSET expression. Fixes #89607. #90156 (Yakov Olkhovskiy).
  • Fix hive partitioning incompatibility preventing smooth upgrade in 25.8 (fixes error All hive partitioning columns must be present in the schema during upgrade). #90202 (Kseniia Sumarokova).
  • Fix JSON Exception in iceberg table with timestamp column when using glue catalog. Resolves #90210. #90209 (Alsu Giliazova).
  • Fixes a row-count mismatch in MergeTreeReaderIndex when the part's only has fewer rows than index_granularity. Resolves #89691. #90254 (Peng Jian).
  • Fix infinite nan/inf WITH FILL query. Resolves #69261. #90255 (Konstantin Bogdanov).
  • Fix 'column not found' error with query_plan_use_logical_join_step=0 and residual condition in JOIN ON. Resolves #88635. #90279 (Vladimir Cherkasov).
  • Fix some queries with aggregated projection optimization. #90288 (János Benjamin Antal).
  • Fix bug in reading subcolumns from JSON in compact parts that could lead to CANNOT_READ_ALL_DATA error. Resolves #90264. #90302 (Pavel Kruglov).
  • Now ClickHouse will not use read-in-order optimization for iceberg if sort order is not specified manifest files (or not the same) with default_sort_order in table. Fixes #89178. #90304 (alesapin).
  • Time and Time64 now should respect timezones correctly while converting from DateTime and DateTime64 (it must show time in the same timezone as it shows for the user as a DateTime[64]). Closes #89896. #90310 (Yarik Briukhovetskyi).
  • Fixes a bug where SELECT CAST(CAST(now(), 'Time'), 'Time64') was producing incorrect result. Closes #88349. #90324 (Yarik Briukhovetskyi).
  • Fixed crash on integer overflow in randomStringUTF8. #90326 (Michael Kolupaev).
  • Fixed cluster discovery updates in multicluster setups with multicluster_root_path to prevent delays and missing ZooKeeper updates. #90341 (RinChanNOW).
  • Fix possible logical error in prewhere on non-existing JSON path with index_granularity_bytes=0. Resolves #86924. #90375 (Pavel Kruglov).
  • Fixed a bug in L2DistanceTransposed that caused crashes when the precision argument exceeded valid range. Closes #90401. #90405 (Raufs Dunamalijevs).
  • Fix possible logical error in arrayUnion with Array(Dynamic) argument. Resolves #90270. #90409 (Pavel Kruglov).
  • Fix possible logical error during renaming and modifying the same Nested column in one ALTER. Resolves #90406. #90412 (Pavel Kruglov).
  • Fix parsing JSON/Dynamic/Variant values from HTTP parameters. Resolves #88925. #90430 (Pavel Kruglov).
  • Fixed a race condition in Hive partitioning where a static KeyValuePairExtractor caused data corruption or crashes during concurrent file reads. #90474 (Paresh Joshi).
  • Fixed incorrect distance calculations in L2DistanceTransposed when using array reference vectors (which default to Array(Float64)) with QBit columns of non-Float64 element types (Float32, BFloat16). The function now automatically casts the reference vector to match the QBit's element type. Resolves #89976. #90485 (Raufs Dunamalijevs).
  • Fixes a bug where toDateTimeOrNull of a negative argument returns NULL. #90490 (Yarik Briukhovetskyi).
  • Fix possible logical error during output of LowCardinality(Bool/Date32) in Arrow format. Resolves #83883. #90505 (Pavel Kruglov).
  • Fixed IPv4 parsing functions (e.g. IPv4StringToNumOrDefault) returning garbage for some invalid inputs. Resolves #90544. Resolves #87583. #90545 (Michael Kolupaev).
  • Retry to markReplicasActive when failing to resolve address during local host check: Print a warning log if there is an exception during self host check in DDLTask. In DDLWorker::markReplicasActive, throw an exception to retry if there is no local host found and there are host IDs in clusters. #90556 (Tuan Pham Anh).
  • Fix logical error caused by a rare case in equals function. Closes #88142. #90557 (Nihal Z. Miaji).
  • Hopefully fixes thread sanitizer crashes in test_ssh/test.py::test_paramiko_password. #90612 (Govind R Nair).
  • Fix logical error in concatWithSeparator function when using const non-string column. Closes #90596. #90655 (Nihal Z. Miaji).
  • Fix formatting for INTO OUTFILE. Resolves #90207. #90656 (Azat Khuzhin).
  • Fix potential crash when executing mutations with subqueries and allow_statistics_optimize=1. Resolves #90626. #90664 (Azat Khuzhin).
  • Fixed analyzer validation for LIMIT BY with GROUP BY to produce correct NOT_AN_AGGREGATE error instead of NOT_FOUND_COLUMN_IN_BLOCK when LIMIT BY uses columns not in GROUP BY. Closes #89713. #90665 (xiaohuanlin).
  • Fix type-casting errors when using LowCardinality columns in partition keys. Closes #89412. #90666 (xiaohuanlin).
  • Fix issue where queries with filter predicates containing constants folded from non-deterministic functions (e.g. shardNum()) could incorrectly use query condition cache. #90692 (Eduard Karacharov).
  • Fix segfault on query with EXISTS function in join on section. Now query simply returns INVALID_JOIN_ON_EXPRESSION error. Close #90698. #90719 (Vladimir Cherkasov).
  • Fix Logical error: 'Inconsistent AST formatting' for AccessRightsElement when using the default database without any table. #90742 (Pablo Marcos).
  • Fix access validation for ALTER UPDATE queries when a remote table function is used with localhost as a target host. #90761 (pufit).
  • Fix named collections hidden secrets to depend on display_secrets_in_show_and_select and format_display_secrets_in_show_and_select. #90765 (Pablo Marcos).
  • Disable enable_shared_storage_snapshot_in_query (leads to memory leaks). #90770 (Azat Khuzhin).
  • Fix duplicate data issue in RIGHT JOIN with distributed table when parallel replicas enabled. #90806 (zoomxi).
  • Fix possible inconsistent state of shared data and dynamic paths in JSON that could lead to logical errors and unexpected results. #90816 (Pavel Kruglov).
  • Fix ALTER MODIFY QUERY with dictGet() and dictionary name in CSE for SharedCatalog (cloud only feature). #90860 (Azat Khuzhin).
  • Fix compatibility of in-memory serialization of String aggregation state. Different serialization could lead to duplicate results if aggregation query is executed on instances with different versions. New serialization can be enabled with serialize_string_in_memory_with_zero_byte. #90880 (Antonio Andelic).
  • Fix background flush of Buffer in case of frequent INSERTs. #90892 (Azat Khuzhin).
  • Don't list contrib/ parent folder in system.licenses. #90901 (Raúl Marín).
  • Fix high memory usage during reading JSON/Dynamic/Variant columns. #90907 (Pavel Kruglov).
  • Fix buffer allocation for base58Decode function. #90909 (Antonio Andelic).
  • Fix possible logical error upon receiving another read request from a replica after a response with the finish=true flag was sent. This was possible due to a logical race condition within MergeTreeReadPoolParallelReplicas, although it was very unlikely to occur. #90921 (Nikita Taranov).
  • Fix wildcard grants check for partial revoke. Added more tests. #90922 (pufit).
  • Fixes SummingMergeTree aggregation for Nested LowCardinality columns. #90927 (Ivan Babrou).
  • Fix handling global grants with wildcard revokes Fixes the issue when revoking a wildcard grant can accidentally revoke some global-level grants like CREATE USER. #90928 (pufit).
  • Fix possible infinite loop in azure list blobs. #90947 (Julia Kartseva).
  • Fix excessive Buffer flushes (burns CPU and produce tons of logs). #91000 (Azat Khuzhin).
  • ... Don't allow adaptive_write_buffer_initial_size set to 0. #91001 (Pedro Ferreira).
  • Fix bug in JSON when path can be both in shared data and dynamic paths during sub-object reading in Compact parts with disabled write_marks_for_substreams_in_compact_parts. #91014 (Pavel Kruglov).
  • Fix std::out_of_range in CTE with dictGet with no arguments. Closes #91027. #91022 (Pavel Kruglov).
  • Fix reading dynamic subcolumns from materialized columns in mutations. Closes #90653. #91040 (Pavel Kruglov).
  • Fix arrayFilter function not working when using empty array and isNull function. Closes #73849. #91105 (Nihal Z. Miaji).
  • Fix logical error in ARRAY JOIN when one of the table columns is empty tuple column. Closes #90801. #91123 (Nihal Z. Miaji).
  • Fix lazy materialization of a column added via alter add column in old parts. #91142 (Pavel Kruglov).
  • Fix merging JSON columns in Summing/Aggregating/Coalescing MergeTree. Previously it could lead to unexpected dynamic paths durign writing to data parts. #91151 (Pavel Kruglov).
  • Fix possible inconsistent dynamic structure during writing in compact parts that could lead to segfault. #91152 (Pavel Kruglov).
  • Fix parsing of subnormal float values in scientific notation. Closes #78903. #91162 (Nihal Z. Miaji).
  • Fix wrong schema inference in INSERT SELECT from a subquery with a source with an implicit schema. #91204 (Pervakov Grigorii).
  • Fix https://github.com/clickhouse/clickhouse/issues/91206 when we create a table with statistics and write someting and drop one statistics, it will crash when we read it again. because we assume the serialize and deserialize will have same types statistics. in this fix, we will check if the current metadata contains the serialized statistics, if not, we make a mock statistics and deserialize only to skip it. #91227 (Han Fei).
  • Fix inserting into CoalescingMergeTree column with Tuple of JSON/Dynamic and LowCardinality. Closes #91215. #91270 (Pavel Kruglov).
  • Fix SYSTEM DROP FILESYSTEM CACHE ON CLUSTER. #91304 (Anton Ivashkin).
  • Fix possible logical error "Bad cast from type DB::ColumnSparse to DB::ColumnNullable". Closes #91284. #91309 (Pavel Kruglov).
  • Fix a crash when maliciously crafted byte streams deserialize into nested QBit types, which should be impossible but could be exploited to crash the server. #91313 (Raufs Dunamalijevs).
  • Fix Alias table with empty args in Replicated database. Resolved #91378. #91382 (Kai Zhu).
  • Currently, the setting is set to false, so when async insert queue is flushed to a remote server, the inserts are always synchronous. Even in case of the setting is True for a user. #91386 (Mikhail f. Shiryaev).
  • Remove Sparse columns from header in merge algorithms. Closes #91377. #91396 (Pavel Kruglov).
  • Fix hive partitioning bug in 25.8 which can lead to incorrectly thrown exception A hive partitioned file can't contain only partition columns. #91403 (Kseniia Sumarokova).
  • Fix crash in dictGetDescendants caused by NULL when dictionary type has Hierarchy support but no column is HIERARCHICAL. Closes #92026. Closes #92121. #91420 (Nihal Z. Miaji).
  • Fix crash in IN function when lambda and non-const tuple arguments are used. Closes #91379. #91446 (Nihal Z. Miaji).
  • Fixed parallel writes triggered by MaterializedView inserts into storages that do not support them. #91449 (Pervakov Grigorii).
  • Handle null values for Ytsaurus xml dictionaries. #91465 (MikhailBurdukov).
  • Fixed QBit type failing with query parameters like SET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}. #91488 (Raufs Dunamalijevs).
  • Fix LOGICAL_ERROR when untuple is used in the constant expression. #91507 (Pervakov Grigorii).
  • Fix possible datarace in librdkafka. #91521 (János Benjamin Antal).
  • Fix logical error caused by asterisks argument in remote function. Closes #90568. #91524 (Nihal Z. Miaji).
  • Fixes an overflow while reading from ORC format for Date and DateTime64 types. Closes #70976. #91572 (Yarik Briukhovetskyi).
  • Disallow ALTERs for Object Storage table engines. For example, ALTER ADD PROJECTION could have led to an inability to restart the server, since Object Storage engines do not support projections. #91573 (Nikolay Degterinsky).
  • Fixed L2DistanceTransposed returning incorrect results when using non-constant reference vectors (e.g., from a table). #91517. #91593 (Raufs Dunamalijevs).
  • Fixes a bug for JOINs on FALSE conditions returning LOGICAL_ERROR during a dispatch stage. Closes #91173. #91598 (Yarik Briukhovetskyi).
  • In MergeTreeDeduplicationLog::load, if the disk is a storage object with Plain metadata, skip the check for logs_dir existence. Because Plain metadata does not have the concept of directories. #91646 (Tuan Pham Anh).
  • Fix increased memory usage in join with "additional filter", close #91011. #91664 (Vladimir Cherkasov).
  • Backported in #92532: Fix possible logical error in Log engine during subcolumns reading. Closes #91710. #91711 (Pavel Kruglov).
  • Fixes JOIN queries with view and enabled parallel replicas. #91813 (Igor Nikonov).
  • Fix delta lake setting delta_lake_snapshot_version which could give incorrect result when used with table engine (not table function) and value -1 (disabled) after snapshot version was used before that. Closes #87676. #91818 (Kseniia Sumarokova).
  • Fix LOGICAL_ERROR in RecursiveCTEChunkGenerator. #91827 (Pablo Marcos).
  • Fix block structure mismatch with queries using FINAL and PREWHERE. #91847 (Antonio Andelic).
  • Fix logical error with join_use_nulls and multiple joins along with cross join. #91853 (Vladimir Cherkasov).
  • Add repair mechanism for JSON with duplicated path in shared data and dynamic paths that could happen because of the bug that was fixed in https://github.com/ClickHouse/ClickHouse/pull/90816. #91886 (Pavel Kruglov).
  • Fix the ORC reader bug when reading string columns that are encoded with DICTIONARY_V2 and contain only NULL values. #91889 (Peng Jian).
  • Fix a serialization inconsistency between sparse and nullable substreams in Tuple columns that could lead to corrupted parts or crashes during reading. This addresses https://github.com/ClickHouse/ClickHouse/pull/91851 . @Algunenano Could you please help check if this can fix the stress test in private repo? @CurtizJ Could you also help take a look please? Thanks!. #91932 (Amos Bird).
  • Fix Directory '{}' does not exist (LOGICAL_ERROR) when creating backups on plain-rewritable disks. #91935 (Julia Kartseva).
  • Prevent crash when connecting to mongodb with named collections. #91959 (Antonio Andelic).
  • Fix "TOO_MANY_MARKS" error which could have happened after some ALTER queries for compact parts. #91980 (alesapin).
  • Close https://github.com/clickhouse/clickhouse/issues/87417 the writing schema of v1 format has a mistake : the type of "added_snapshot_id" should be "long" rather than "null, long" because it is required. it is a bug because it's not compatible with other system like spark. when we mixed there manifest files, the bug happens. #92078 (Han Fei).
  • Fix the wrong names of readWKT, readWKB, which were in the wrong style in the previous versions. #92094 (Alexey Milovidov).
  • Fix numerous logical errors, overflow and functional bugs in midpoint function. Closes #91816. #92102 (Nihal Z. Miaji).
  • Fix a potential memory leak when enable_shared_storage_snapshot_in_query = 1 by properly scoping storage metadata and snapshot caches to query execution. This addresses the issue discovered in #90770 and re-enables enable_shared_storage_snapshot_in_query by default. #92118 (Amos Bird).
  • Fixes incorrect results that could appear when reading certain subcolumns (e.g., string size) with sparse encoding. #92156 (Pavel Kruglov).
  • Fix system.view_refreshes failing with error No macro 'replica' in config. #92203 (Michael Kolupaev).
  • Fix UDF replace in format. #92210 (Raúl Marín).
  • In ddlworker::markreplicasactive, if there is no active host found, and the remote_servers has some host_ids, we print a warning log instead of throwing an exception. #92223 (Tuan Pham Anh).
  • Surround operators IN, NOT IN with parentheses. Fixes #85075. #92225 (Mikhail f. Shiryaev).
  • Fix backup of KeeperMap and Memory tables. Creating backup of tables using one of those two engines with max_compress_block_size set to 0 could lead to a crash. #92237 (Antonio Andelic).
  • Fix crash when reading both String data and .size subcolumn from Log engine. This fixes #89909. This contains some commits in #92290. #92341 (Amos Bird).
  • Fix logical error caused by using Nothing type in caseWithExpression function arguments . Closes #85354. #92351 (Nihal Z. Miaji).
  • Fix possible crash in aggregate functions after MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).
  • Backported in #92549: Inherit source part serialization info settings during mutation in MergeTree. It fixes possible incorrect result of the query over mutated part after changes in data types serialization. #92419 (Pavel Kruglov).

Build/Testing/Packaging Improvement

NO CL ENTRY

NOT FOR CHANGELOG / INSIGNIFICANT