What ClickHouse/ClickHouse shipped
Written by FoxPlug from the repository's own releases; not affiliated with Clickhouse. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/ClickHouse/ClickHouse; Clickhouse did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- Fixed correlated scalar and EXISTS subqueries that were ignoring the rows produced for a NULL outer value. Pull request #129971
- Fixed lost arrayJoin rows when common-expression extraction absorbs an OR operand. Pull request #130152
- Fixed lost aggregation and arrayJoin rows when
optimize_inverse_dictionary_lookupfolds a dictGet comparison to a constant. Pull request #130138 - Fixed the USING key of a FULL JOIN over an Enum key for rows that only the right table has. Pull request #129920
- Fixed EXECUTE AS ignoring limit, filter and the other construction settings of its statement. Pull request #129949
- Fixed a hang of a query that lazily loads a dictionary in a CPU workload. Pull request #130133
- Bounded zero-sized nested aggregate states in one place for all combinators. Pull request #130120
- Fixed CREATE HANDLER dropping the trailing SETTINGS of a UNION DISTINCT query. Pull request #130109
Why it matters
This week is heavy on correctness fixes for JOINs, subqueries and aggregate combinators, several of which could silently drop rows. Iceberg users also get a cluster of pruning and schema fixes, including NULL partition handling and equality deletes that dropped NULL keys.
Changelog entry
- Fix correlated scalar and EXISTS subqueries ignoring the rows produced for a NULL outer value. Pull request #129971
- Fix lost arrayJoin rows when common-expression extraction absorbs an OR operand. Pull request #130152
- Fix lost aggregation and arrayJoin rows when
optimize_inverse_dictionary_lookupfolds a dictGet comparison to a constant. Pull request #130138 - Reject WITH FILL bounds that do not fit the ORDER BY column type. Pull request #112650
- Fix the USING key of a FULL JOIN over an Enum key for rows that only the right table has. Pull request #129920
- Fix EXECUTE AS ignoring limit, filter and the other construction settings of its statement. Pull request #129949
- Fix a hang of a query that lazily loads a dictionary in a CPU workload. Pull request #130133
- Bound zero-sized nested aggregate states in one place for all combinators. Pull request #130120
- Fix CREATE HANDLER dropping the trailing SETTINGS of a UNION DISTINCT query. Pull request #130109
- Fix Iceberg manifest-list pruning skipping NULL partitions for ifNull and coalesce filters. Pull request #130158
- Keep the NULL partition in Iceberg data file pruning when the filter's set holds NULL. Pull request #130177
- Fix Iceberg equality deletes dropping rows whose equality key is NULL. Pull request #130108
This week: fixed row loss in correlated subqueries with NULL outer values, arrayJoin under expression extraction, and dictGet constant folding. Also fixed WITH FILL bounds truncating, FULL JOIN over Enum keys, and a dictionary lazy-load hang.
This week's changes focus on correctness where rows could go missing. Correlated scalar and EXISTS subqueries now return rows produced for a NULL outer value, and arrayJoin and aggregation rows are no longer lost when common-expression extraction absorbs an OR operand or when dictionary lookup folding collapses a comparison to a constant. WITH FILL now rejects FROM and TO bounds that do not fit the ORDER BY column type instead of wrapping around silently. FULL JOIN over an Enum key now handles rows present only in the right table, and zero-sized nested aggregate states are bounded in one place for all combinators. A query that lazily loads a dictionary in a CPU workload no longer hangs. Iceberg readers also got fixes for pruning that skipped NULL partitions and for equality deletes droppin
Week of October 26, 2026
What shipped
- HTTP PUT uploads to existing table paths are now supported, the first step of the issue that tracks table access as files over HTTP. Pull request #115849
- Iceberg and Delta Lake reads now report
total_rows_approxfrom metadata instead of leaving it at zero. Pull request #128401 - The HTTP Request URI log line and clickhouse.uri span now hide the query text and query parameters. Pull request #128386
- RENAME now works on an S3Queue table whose startup previously failed. Pull request #127004
- Floor, ceil, round and roundBankers on integers with a negative N no longer return wrong values near the type limits. Pull request #128333
- DEFAULT expressions that read another omitted column through a subcolumn or an ALIAS are fixed. Pull request #128345
- PromQL operators on two constant numbers such as 1./6. now evaluate, so histogram_quantile(1./6.,...) works the same as with a literal fraction. Pull request #122781
- A server abort on Parquet reads that record no missing values is fixed. Pull request #116666
- SQL SECURITY DEFINER views without an invoker now send the definer identity to remote shards, fixing refreshes that reached shards with an empty user name. Pull request #117798
- The inverse dictionary lookup optimization now covers dictGet IN and NOT IN, not only plain comparisons. Pull request #100001
Why it matters
This week brings a new HTTP write path to tables plus a set of correctness fixes for Parquet reads, rounding near integer limits and DEFAULT expressions that read other columns. Iceberg and Delta Lake users get row counts in progress reporting instead of zeros, and logging no longer exposes query text in URI lines. Several CI and fuzzer changes target test stability rather than user-facing behavior.
Changelog entry
- Support PUT uploads to existing table paths over HTTP. Pull request #115849
- Report
total_rows_approxfor Iceberg and Delta Lake reads from table metadata. Pull request #128401 - Hide query text and query parameters in the HTTP Request URI log line and clickhouse.uri span. Pull request #128386
- Fix RENAME of an S3Queue table whose startup failed. Pull request #127004
- Fix floor, ceil, round and roundBankers on integers with a negative N returning wrong values near the type limits. Pull request #128333
- Fix DEFAULT expressions that read another omitted column through a subcolumn or an ALIAS. Pull request #128345
- Fix a server abort on Parquet reads that record no missing values. Pull request #116666
- Send the definer identity to remote shards from SQL SECURITY DEFINER views without an invoker. Pull request #117798
- Compute PromQL operators on two constant numbers so histogram_quantile(1./6.,...) works. Pull request #122781
- Extend inverse dictionary lookup optimization to IN and NOT IN on dictGet results. Pull request #100001
- Unwrap LowCardinality in ConvertEmptyStringComparisonToFunctionPass so comparisons like s!= '' on LowCardinality(String) columns are optimized. Pull request #128092
- Add CGroupMemoryInactiveFile async metric for cgroup page cache correlation. Pull request #98992
This week: HTTP PUT uploads to table paths, Iceberg and Delta Lake reads now report total_rows_approx, query text hidden from the HTTP Request URI log line, and fixes for S3Queue RENAME, integer rounding at type limits, DEFAULT expressions through subcolumns, and Parquet read abo
Changes this week in ClickHouse: HTTP PUT uploads to existing table paths are supported as a first step toward accessing tables as files. Iceberg and Delta Lake reads now report total_rows_approx from metadata so clients can show progress. The HTTP Request URI log line and clickhouse.uri span no longer include query text or parameters. Fixes landed for RENAME of an S3Queue table whose startup failed, floor/ceil/round on integers with a negative N near type limits, DEFAULT expressions that read another omitted column through a subcolumn or ALIAS, server aborts on Parquet reads with no missing values, and definer identity for SQL SECURITY DEFINER views without an invoker. PromQL now evaluates operators on two constant numbers, so histogram_quantile with a fraction like 1./6. works.
Week of October 19, 2026
What shipped
- The Cascades optimizer now runs DISTINCT on several nodes and prices the alternatives, instead of always requiring all input on one node. Pull request #126353
- Iceberg manifest files are now read on the IO thread pool, and the separate manifest decode pool is removed. Pull request #127100
- A GDeflate compression codec is available on the CPU. Pull request #127422
- The insert pipeline and merges were fitted into a small server's memory, addressing an out-of-memory failure when loading data on a 2 vCPU, 2 GiB machine. Pull request #116083
- CAST from Variant and Dynamic now fails only for the alternatives that are actually present in the data. Pull request #127142
- A fix corrects key analysis when a Decimal key is compared with a float, where the values are compared as Float64. Pull request #126584
- Restarting a whole-schema MaterializedPostgreSQL database now works after a new PostgreSQL table is created. Pull request #125962
- Deleting from S3-compatible stores that reject DeleteObjects with MissingContentMD5 now falls back to DeleteObject. Pull request #125507
Why it matters
This week the optimizer gained a real distributed plan for DISTINCT and cost-based pricing of it, and Variant and Dynamic casts became more forgiving by failing only on alternatives present in the data. Several correctness fixes landed for float-to-Decimal key comparison and for arrayReduceInRanges bounds, alongside memory work that lets inserts and merges survive on a small server. Iceberg manifest reading moved to the IO thread pool, and S3 batch delete now falls back to per-object deletes on stores that reject the batch request.
Changelog entry
- The Cascades optimizer now runs DISTINCT on several nodes and prices the alternatives instead of always gathering input on one node. Pull request #126353
- Iceberg manifest files are read on the IO thread pool, and the manifest decode pool is removed. Pull request #127100
- Added the GDeflate compression codec on the CPU. Pull request #127422
- CAST from Variant and Dynamic now fails only for alternatives present in the data. Pull request #127142
- Fixed key analysis for a Decimal key compared with a float, which is compared as Float64. Pull request #126584
- Fixed restart of a whole-schema MaterializedPostgreSQL database after a new PostgreSQL table is created. Pull request #125962
- Delete on S3-compatible stores that reject DeleteObjects with MissingContentMD5 now falls back to DeleteObject. Pull request #125507
- Obfuscate now keeps the date of DateTime and DateTime64 values on midnight DST days. Pull request #127749
- The insert pipeline and merges were fitted into a small server's memory. Pull request #116083
- Radix partitioned uniqExact gained spilling and fixes, including memory limit checks on unchecked flushes. Pull request #127252
- Rewrote the Using JOINs documentation page to cover JOIN types, strictness, execution, algorithms and selection. Pull request #127392
This week: DISTINCT now runs on several nodes in Cascades and is priced; Iceberg manifests read on the IO pool; GDeflate codec on CPU; CAST from Variant and Dynamic fails only for alternatives present in data; fixes for Decimal-vs-float key analysis and arrayReduceInRanges bounds
This week in ClickHouse: the Cascades optimizer now runs DISTINCT on several nodes and prices the alternatives, and Iceberg manifest files are read on the IO thread pool with the separate decode pool removed. A GDeflate compression codec is available on the CPU. Casts from Variant and Dynamic now fail only for alternatives present in the data, which makes them easier to work with. Correctness fixes landed for key analysis when a Decimal key is compared with a float and for arrayReduceInRanges when range bounds do not fit in the array. Restarting a whole-schema MaterializedPostgreSQL database is fixed after a new PostgreSQL table appears, and S3 batch delete falls back to single-object deletes on stores that reject the batch request.
Week of October 12, 2026
What shipped
- SELECT on a UNIQUE KEY table now skips rows killed by delete bitmaps, dropping fully dead granules during index analysis and subtracting dead rows from count(). Pull request #123008
- The columns cache now covers Parquet files for local files, object storage, and data lake tables, so repeated queries over hot Parquet data avoid re-reading metadata. Pull request #124531
- The external IN disk set is optimized for common workloads, with spilling enabled by default. Pull request #124907
- ParseDateTime now rejects ISO week 53 for week-years that only have 52 weeks, throwing CANNOT_PARSE_DATETIME. Pull request #126356
- Modulo with a constant minimum signed divisor now returns the correct value instead of throwing Division by the most negative number. Pull request #121645
- Conversion of Float32 and BFloat16 values to 128-bit and 256-bit integers is fixed. Pull request #126191
- Polygon dictionaries no longer return a wrong polygon or the default for small or far-apart polygons. Pull request #126246
- The Hive metastore catalog now respects
remote_url_allow_hosts. Pull request #119353 - Outer JOIN with
full_sorting_mergeno longer fails with NOT_IMPLEMENTED when the compare chain derives a bound evaluated on the preserved side. Pull request #126170 - Distributed INSERT SELECT with
automatic_parallel_replicas_modenow applies the mode from the SELECT settings. Pull request #126317
Why it matters
This week brings correctness fixes across parsing, arithmetic, dictionaries, and joins, and makes reads cheaper: UNIQUE KEY SELECTs skip deleted rows and Parquet reads reuse the columns cache. Users on stable releases also get the native SSH-key handshake fix backported so the handshake no longer reveals whether a user exists.
Changelog entry
- UNIQUE KEY: SELECT now skips rows killed by delete bitmaps, drops all-dead granules in index analysis, filters by _part_offset, and count() subtracts dead rows. Pull request #123008
- Columns cache for Parquet: extends the columns cache to file, File, s3, azureBlobStorage and data lake reads through the metadata-aware Parquet creator. Pull request #124531
- External IN: optimized the on-disk set for common workloads; spilling is enabled by default via max_bytes_ratio_before_external_... Pull request #124907
- ParseDateTime now rejects ISO week 53 for week-years with only 52 weeks and throws CANNOT_PARSE_DATETIME. Pull request #126356
- Fix modulo by a constant minimum signed divisor returning Division by the most negative number instead of the correct result. Pull request #121645
- Fixed Float32 and BFloat16 conversion to 128- and 256-bit integers. Pull request #126191
- Fixed polygon dictionaries returning a wrong polygon or the default for small or far-apart polygons. Pull request #126246
- Respect
remote_url_allow_hostsin the Hive metastore catalog. Pull request #119353 - Fixed NOT_IMPLEMENTED for outer JOIN with
full_sorting_mergewhen the compare chain derives a bound evaluated on the preserved side. Pull request #126170 - Distributed INSERT SELECT now distributes with
automatic_parallel_replicas_modetaken from the SELECT settings. Pull request #126317 - Keep hash table statistics of a capped GROUP BY separate from the uncapped aggregation. Pull request #126374
- Read subcolumns of a Memory table with compress = true without decompressing the whole column. Pull request #126253
This week: UNIQUE KEY SELECTs now skip deleted rows, the columns cache reaches Parquet, external IN disk sets are faster, and parseDateTime rejects invalid ISO week 53 dates. Plus fixes for modulo, polygon dictionaries, and float-to-wide-integer conversions.
This week's changes to ClickHouse focus on correct results and cheaper reads. SELECT on UNIQUE KEY tables now skips rows removed by delete bitmaps, and the columns cache extends to Parquet files on local and object storage. The external IN disk set is optimized for common workloads, with spilling on by default. Fixes include modulo by a constant minimum signed divisor, Float32 and BFloat16 conversion to 128- and 256-bit integers, polygon dictionaries for small or far-apart polygons, parseDateTime rejecting invalid ISO week 53 dates, and outer JOIN failures with full_sorting_merge. The Hive metastore catalog now respects remote_url_allow_hosts, and the SSH-key handshake no longer discloses whether a user exists.
Week of October 5, 2026
What shipped
- Bounded the collections read from the Native protocol so peer-declared sizes can no longer force allocation before the data arrives. Pull request #117015
- Answer min and max of Parquet file columns from column chunk statistics instead of reading the data. Pull request #124201
- Resolve a pending rename of a Nested leaf read as a subcolumn, which previously returned default values in SELECT from wide parts. Pull request #119134
- Keep both swapped columns' statistics through a mutation that exchanges two column names. Pull request #118977
- Fix CANNOT_COMPRESS with CODEC(T64) on a Map with bucketed serialization by carrying types on
bucket_indexesand restrictingbuckets_infoto generic codecs. Pull request #124695 - Build skip indexes from the merged rows when an INSERT merges its block. Pull request #123291
- Stop removing zero rows in SELECT FINAL from SummingMergeTree when only the columns the query read are considered. Pull request #115032
- Stop dropping rows of a part without rows TTL info in a TTL merge. Pull request #123068
- Fix wrong results of pointInPolygon for a polygon with huge coordinates. Pull request #123740
- Fix UNEXPECTED_PACKET_FROM_SERVER on INSERT when a subquery is evaluated during analysis. Pull request #118946
Why it matters
This week brought fixes for wrong results and for reads that depended on which columns a query touched, covering pointInPolygon, SummingMergeTree FINAL, TTL merges and skip index construction on insert. It also tightened protocol and file reading: Native protocol collections are now bounded, Parquet min and max can come from column chunk statistics, and several Parquet and S3 paths were adjusted. Alongside that came backports of outer JOIN conjunct and Iceberg decimal bound fixes to the 26.8 and 26.9 branches, plus a long list of CI test stabilizations.
Changelog entry
- Bounded the collections read from the Native protocol. Pull request #117015
- Answer min/max of Parquet file columns from column chunk statistics. Pull request #124201
- Resolve a pending rename of a Nested leaf read as a subcolumn. Pull request #119134
- Keep both swapped columns' statistics through a mutation. Pull request #118977
- Fixed CANNOT_COMPRESS with CODEC(T64) on a Map with bucketed serialization. Pull request #124695
- Build skip indexes from the merged rows when an INSERT merges its block. Pull request #123291
- Do not remove zero rows in SELECT FINAL from SummingMergeTree. Pull request #115032
- Do not drop rows of a part without rows TTL info in a TTL merge. Pull request #123068
- Fixed wrong results of pointInPolygon for a polygon with huge coordinates. Pull request #123740
- Fixed UNEXPECTED_PACKET_FROM_SERVER on INSERT when a subquery is evaluated during analysis. Pull request #118946
- Do not derive conjuncts in outer JOIN ON. Pull request #124233
- Do not cache a block read past the read-until position of CachedCompressedReadBuffer. Pull request #125079
This week: bounded Native protocol collections, Parquet min/max from column chunk statistics, fixes for pointInPolygon with huge coordinates, SummingMergeTree FINAL zero rows, TTL merges without row TTL info, and skip indexes built from merged insert rows.
This week in the project: Native protocol collections read from a peer are now bounded, Parquet min and max can be answered from column chunk statistics, and CODEC(T64) works on a bucketed Map. Wrong results were fixed for pointInPolygon with huge coordinates, SELECT FINAL from SummingMergeTree, and TTL merges on parts without row TTL info. Skip indexes are now built from the merged rows when an INSERT merges its block, and several fixes were backported to the 26.8 and 26.9 branches.
Week of September 28, 2026
What shipped
- Added experimental LATERAL JOIN support for correlated subqueries in the FROM clause, enabling standard SQL patterns like top N per group queries. Pull request #97833
- Overlay databases now work on the server, allowing CREATE DATABASE with multiple source databases whose tables are exposed as a union. Pull request #121878
- Added SYSTEM RESET FILELOG command to re-read files from a FileLog table or skip them. Pull request #123545
- FileLog table paths now support glob patterns in file names. Pull request #123590
- Added /dialect, /lang, and /language client commands as shortcuts for changing query dialects before parsing. Pull request #114568
- Vectorized least, greatest, and clamp functions for Nullable and multiple numeric arguments, improving performance 3-5 times. Pull request #109783
- Fixed zero-shard Distributed reads with
distributed_group_by_no_mergeor when nested under another Distributed table. Pull request #122982 - Distributed table ORDER BY now rejects queries where the declared type conflicts with shard ordering. Pull request #118445
- Fixed stale subcolumns left behind after ALTER TABLE RENAME COLUMN. Pull request #122527
- Fixed reading a struct together with its field from Delta Lake tables with column mapping enabled. Pull request #123852
Why it matters
This week brings experimental LATERAL JOIN for advanced SQL patterns, overlay databases for table unions, and FileLog improvements for flexible file reading. Multiple query execution and storage bugs were fixed, including distributed table edge cases and Delta Lake handling.
Changelog entry
- Experimental LATERAL JOIN support for correlated subqueries in FROM clause, controlled by
allow_experimental_lateral_joinsetting Pull request #97833 - Overlay databases now available on server: CREATE DATABASE db ENGINE = Overlay(db1, db2,...) for table union Pull request #121878
- Added SYSTEM RESET FILELOG command to re-read files or skip them in FileLog tables Pull request #123545
- FileLog table paths now support glob patterns in file names Pull request #123590
- Added /dialect, /lang, /language client commands for setting query dialect before parsing Pull request #114568
- Vectorized least/greatest for Nullable and 3+ numeric arguments, and clamp for numeric arguments Pull request #109783
- Fixed zero-shard Distributed reads with
distributed_group_by_no_mergeor nested under another Distributed table Pull request #122982 - ORDER BY over Distributed table now rejects queries where declared type conflicts with shard ordering Pull request #118445
- Fixed stale subcolumns left behind by ALTER TABLE RENAME COLUMN Pull request #122527
- Fixed reading struct and its fields from Delta Lake table with column mapping Pull request #123852
- Object storage synchronous reads no longer shrink buffer after short fills, improving performance Pull request #123777
- Fixed Enum constant pushdown to external databases to use ClickHouse comparison format Pull request #123843
New this week: experimental LATERAL JOIN for correlated subqueries, Overlay databases, FileLog glob patterns and reset command, dialect shortcuts, and vectorized least/greatest/clamp functions. Plus fixes for Distributed tables and Delta Lake.
ClickHouse updates this week include experimental LATERAL JOIN support for advanced SQL patterns and top-N-per-group queries, new Overlay databases that expose unions of source tables, and FileLog enhancements with glob patterns and reset capability. Performance improvements include vectorized least/greatest/clamp functions (3-5x faster) and dialect switching commands. Bug fixes address Distributed table edge cases, Delta Lake column mapping, and metadata handling.
Week of September 21, 2026
What shipped
- Clickhouse-server now applies a seccomp system call filter at startup to restrict kernel interfaces available to the process Pull request #119545
- Substring(s, 1) and substringUTF8(s, 1) now return the input column directly without creating a copy for String types Pull request #119820
- ArrayHasSubstr skips KMP preprocessing when the needle cannot fit in the haystack Pull request #119824
- PositionCaseInsensitiveUTF8 now gives consistent results regardless of whether arguments are constant or column values Pull request #122113
- INSERT... SELECT is now compatible with async insert for eligible single-block local inserts Pull request #111663
- Azure blob storage reads now correctly reopen when a response ends before the right bound Pull request #120963
- Query tree passes now preserve FunctionKind::WINDOW when rewriting aggregate functions Pull request #119681
- Promql_evaluation_time is now stored as double instead of float to prevent silent rounding Pull request #120942
- Column statistics are no longer kept for columns removed by column TTL Pull request #122058
- Format() function now correctly handles escaped braces surrounding replacement fields Pull request #120704
Why it matters
This week includes security improvements through seccomp filtering, several performance optimizations for string and array functions, and bug fixes for distributed queries, string handling, and storage operations. These changes address both performance scaling issues and correctness problems across various query types.
Changelog entry
- Clickhouse-server now applies a seccomp system call policy at startup to restrict available kernel interfaces Pull request #119545
- Performance: substring(s, 1) and substringUTF8(s, 1) now return the input column directly for String types without copying Pull request #119820
- Performance: arrayHasSubstr skips KMP preprocessing when haystack is shorter than needle Pull request #119824
- Fixed positionCaseInsensitiveUTF8 giving different results for constant and column arguments Pull request #122113
- Async insert now supports eligible single-block local INSERT... SELECT queries Pull request #111663
- Fixed Azure blob storage reads not reopening when response ends before right bound Pull request #120963
- Fixed window function kind not being preserved when query tree passes rewrite aggregate functions Pull request #119681
- Fixed
promql_evaluation_timesilently rounding by storing as double instead of float Pull request #120942 - Fixed column statistics being kept for columns removed by column TTL Pull request #122058
- Fixed format() function throwing error on escaped braces surrounding replacement fields Pull request #120704
ClickHouse now applies seccomp filtering at startup for improved containment. This week also brings performance optimizations for substring operations, array searches, and CSV reading, plus fixes for UTF8 case-insensitive search consistency.
ClickHouse continues improving security and performance. This week's updates include seccomp system call filtering at server startup for enhanced containment, performance optimizations for substring operations and array functions, and important fixes for UTF8-aware string operations and distributed query handling. These changes address both kernel interface containment and query execution consistency.
Week of September 14, 2026
What shipped
- Removed the query analysis that preceded the analyzer, completing the transition to the new analyzer as the sole query analysis path. Pull request #120311
- Fixed a critical security issue where HDFS database table cache did not check read source grants and host filters. Pull request #119523
- Fixed query-local text index caches to use plain LRU instead of a different cache policy. Pull request #120844
- Merged join-order conflict-detector settings into a single enum setting to reduce configuration complexity. Pull request #120630
- Added validation that Azure endpoint range responses match the requested offset to prevent data corruption from proxies that ignore range requests. Pull request #120955
- Fixed incorrect aggregate results when limit pushdown optimization was used with ORDER BY as a strict prefix of GROUP BY. Pull request #117573
- Changed server behavior to not terminate on retryable errors while loading outdated parts. Pull request #117981
- Fixed correlated subqueries in SELECT list to work correctly when the outer query has a WHERE clause. Pull request #118402
- Fixed parameterized views to work correctly when referenced by their own name in the analyzer. Pull request #120698
- Fixed WHERE f IN (nan) to not silently lose NaN rows from floating-point columns during statistics-based pruning. Pull request #117453
Why it matters
This week includes important stability fixes for query analysis, security hardening for cloud storage, and correctness fixes for aggregations and floating-point handling. The removal of legacy query analysis code simplifies the codebase after the analyzer became the default. Several edge-case bugs affecting correlated subqueries, parameterized views, and NaN handling have been resolved.
Changelog entry
- Removed legacy query analysis code that preceded the analyzer. Pull request #120311
- Fixed HDFS database to check read source grant and host filter when serving cached tables. Pull request #119523
- Fixed query-local text index caches to use plain LRU. Pull request #120844
- Added validation that Azure endpoint range responses match requested offset. Pull request #120955
- Fixed incorrect aggregates from limit pushdown when ORDER BY is a strict prefix of GROUP BY. Pull request #117573
- Server no longer terminates on retryable errors while loading outdated parts. Pull request #117981
- Fixed correlated subqueries in SELECT list to work with WHERE clauses. Pull request #118402
- Fixed parameterized views to work when referenced by their own name. Pull request #120698
- Fixed WHERE f IN (nan) to preserve NaN rows in floating-point columns. Pull request #117453
- Fixed formatDateTime functions to work with LowCardinality time zone arguments. Pull request #117006
New in ClickHouse: removed legacy query analysis code, fixed Azure range validation, secured HDFS table cache access checks, and resolved query correctness issues with correlated subqueries and NaN handling.
This week's ClickHouse updates focus on stability and correctness: we completed the transition to the new analyzer by removing legacy query analysis code; fixed a critical security issue in HDFS database table caching that wasn't enforcing read source grants; improved Azure Blob Storage reliability with range offset validation; resolved query correctness bugs affecting correlated subqueries, parameterized views, and floating-point NaN handling; and merged query optimization settings for cleaner configuration.