> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-vortex-format.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# changelog da v26.6 para Cloud

> Changelog da v26.6

<h2 id="backward-incompatible-changes">
  Alterações incompatíveis com versões anteriores
</h2>

<h3 id="query-and-syntax-changes">
  Mudanças em consultas e sintaxe
</h3>

* As window functions `RANK` e `DENSE_RANK` agora rejeitam argumentos e lançam `NUMBER_OF_ARGUMENTS_DOESNT_MATCH`, em conformidade com o SQL standard. Anteriormente, consultas como `RANK(x) OVER (ORDER BY id)` eram aceitas silenciosamente e o argumento era ignorado, o que causava frequente confusão entre os usuários. Para restaurar o comportamento permissivo anterior, defina `allow_rank_dense_rank_arguments = 1`. [#104324](https://github.com/ClickHouse/ClickHouse/pull/104324) ([groeneai](https://github.com/groeneai)).

<h3 id="data-type-changes">
  Alterações nos tipos de dados
</h3>

* `icebergHash` e `icebergBucket` agora rejeitam argumentos `Int128`, `UInt128`, `Int256`, `UInt256` e `Decimal256` com um erro explícito. Antes, truncavam silenciosamente valores maiores e produziam hashes com colisões. A especificação Iceberg define hashing apenas para inteiros de 32/64 bits e decimais com precisão de até 38; faça cast para `Int64` ou `Decimal128` para manter o comportamento anterior para valores compatíveis. [#105866](https://github.com/ClickHouse/ClickHouse/pull/105866) ([Algunenano](https://github.com/Algunenano)).
* `toUUID`, `toUUIDOrNull`, `toUUIDOrZero`, `toUUIDOrDefault`, `CAST` para `UUID` e `Nullable(UUID)`, `accurateCastOrNull` para `UUID` e os formatos de entrada que fazem parse de um UUID a partir de texto (`Avro`, `MsgPack`, `JSONExtract`, ...) agora rejeitam strings que têm o comprimento correto, mas contêm caracteres não hexadecimais. Antes, tais entradas eram silenciosamente convertidas em um UUID fabricado, ao ultrapassar o final da tabela de lookup de dígitos hexadecimais. Agora `toUUID` lança `CANNOT_PARSE_UUID`, e as variantes `Or*` retornam `NULL` / o zero UUID / o valor padrão fornecido. [#104370](https://github.com/ClickHouse/ClickHouse/pull/104370) ([groeneai](https://github.com/groeneai)).
* Os tipos `Dynamic` e `Variant` agora são validados na cláusula `PARTITION BY` de window; antes, isso não era verificado quando `allow_suspicious_types_in_group_by` está desabilitado. Consultas que particionam uma window sobre uma coluna `Dynamic` ou `Variant` agora lançam erro, a menos que `allow_suspicious_types_in_group_by = 1`. [#105450](https://github.com/ClickHouse/ClickHouse/pull/105450) ([Avogar](https://github.com/Avogar)).

<h3 id="storage-and-index-changes">
  Alterações no armazenamento e nos índices
</h3>

* Rejeita Dynamic/Variant aninhados em agregações min/max e índices minmax. Antes, apenas Dynamic/Variant de nível superior eram verificados. [#105468](https://github.com/ClickHouse/ClickHouse/pull/105468) ([Avogar](https://github.com/Avogar)).
* O valor padrão da configuração do servidor `insert_deduplication_version` muda de `compatible_double_hashes` para `new_unified_hash`. A desduplicação de inserts agora opera sobre todo o bloco inserido (por insert), e não mais por parte/partição: uma nova tentativa do mesmo insert continua sendo desduplicada, mas dois inserts diferentes que produzem uma parte idêntica não são mais desduplicados entre si, e inserts reordenados das mesmas linhas não são mais desduplicados. Defina `insert_deduplication_version = compatible_double_hashes` para restaurar o comportamento anterior. A desduplicação de inserts assíncronos também é controlada pela janela síncrona em `new_unified_hash`: tanto sua ativação (`replicated_deduplication_window`) quanto sua retenção (`replicated_deduplication_window_seconds`, cujo padrão é 1 hora) seguem as configurações síncronas. Portanto, `*_for_async_inserts` é legado e se aplica apenas a `old_separate_hashes` / `compatible_double_hashes`. As instâncias atualizadas diretamente de um lançamento cujo padrão era `old_separate_hashes` devem primeiro operar com `compatible_double_hashes` até que transcorra a maior janela de desduplicação relevante (incluindo `replicated_deduplication_window_for_async_inserts`, cujo padrão é uma semana, caso inserts assíncronos sejam usados) antes de adotar `new_unified_hash`. Workloads assíncronos que migram de `compatible_double_hashes` devem primeiro aumentar `replicated_deduplication_window[_seconds]` para a janela assíncrona (e operar durante uma janela assíncrona completa), interromper os inserts assíncronos ou permanecer em `compatible_double_hashes`, pois `new_unified_hash` não verifica mais os IDs de `async_blocks`, que têm retenção mais longa. [#107886](https://github.com/ClickHouse/ClickHouse/pull/107886) ([CheSema](https://github.com/CheSema)).
* Corrige o caso em que `hasToken`, com uma needle que contém separador, retornava resultados silenciosamente por meio de um índice de texto, em vez de gerar `BAD_ARGUMENTS`. [#108189](https://github.com/ClickHouse/ClickHouse/pull/108189) ([Ergus](https://github.com/Ergus)).

<h3 id="removed-features">
  Recursos removidos
</h3>

* Não é mais possível usar o leitor e o gravador de Parquet obsoletos baseados em Arrow. A implementação nativa é sempre usada em seu lugar. As configurações que selecionavam as implementações antigas ou as ajustavam agora são obsoletas e ignoradas: `input_format_parquet_use_native_reader_v3`, `output_format_parquet_use_custom_encoder`, `output_format_parquet_version`, `output_format_parquet_compliant_nested_types` e `output_format_parquet_unsupported_types_as_binary`. A implementação nativa de gravação sempre grava Parquet V2.6+ com tipos aninhados compatíveis e lança `UNKNOWN_TYPE` para tipos sem suporte em vez de gravá-los como binário bruto. [#100949](https://github.com/ClickHouse/ClickHouse/pull/100949) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Removida a configuração obsoleta `allow_experimental_query_deduplication` e o comportamento experimental sem suporte de desduplicação de consultas associado a ela. [#99398](https://github.com/ClickHouse/ClickHouse/pull/99398) ([devcrafter](https://github.com/devcrafter)).
* `ALTER TABLE ... REPLACE PARTITION ... FROM ...` não descarta mais silenciosamente os dados da partição de destino quando a tabela de origem não tem partes na partição solicitada. Antes, essa solicitação removia a partição de destino sem gravar nada em seu lugar. Agora, por padrão, ela é rejeitada com `BAD_ARGUMENTS`. Esta é uma alteração incompatível com versões anteriores: um `REPLACE PARTITION` de uma origem vazia que antes era bem-sucedido (limpando o destino) agora gerará um erro após o upgrade. Para restaurar o comportamento anterior de limpeza silenciosa, defina a nova configuração `allow_replace_partition_from_empty_source = 1` (por consulta ou no perfil) ou defina `compatibility` como `26.5` ou inferior. Para descartar explicitamente os dados de destino, use `ALTER TABLE ... DROP PARTITION ...`. [#104939](https://github.com/ClickHouse/ClickHouse/pull/104939) ([groeneai](https://github.com/groeneai)).
* Removidas as funções experimentais KQL (Kusto) `array_sort_asc` e `array_sort_desc`, bem como seus backends SQL `kql_array_sort_asc` e `kql_array_sort_desc`. Essas funções eram experimentais, tinham implementação de baixa qualidade e eram fonte de bugs de correção e no analisador sintático. As consultas que usam esses nomes agora retornam `UNKNOWN_FUNCTION`. [#108101](https://github.com/ClickHouse/ClickHouse/pull/108101) ([groeneai](https://github.com/groeneai)).

<h2 id="new-features">
  Novos recursos
</h2>

<h3 id="functions">
  Funções
</h3>

* Adicionado suporte à função PromQL `histogram_quantile` nas funções de tabela `prometheusQuery` e `prometheusQueryRange`. Isso permite calcular quantis em buckets de histogramas clássicos do Prometheus identificados pelo rótulo `le`. [#103477](https://github.com/ClickHouse/ClickHouse/pull/103477) ([Yasumoto](https://github.com/Yasumoto)).
* Adicionada a função `h3PolygonToCellsWithContainment`, que oferece suporte aos modos de contenção baseado no centro, totalmente contido e sobreposto. [#104455](https://github.com/ClickHouse/ClickHouse/pull/104455) ([yousefQadry](https://github.com/yousefQadry)).
* Agora, é possível especificar um argumento opcional de precisão para as funções `formatReadableSize`, `formatReadableDecimalSize` e `formatReadableQuantity`, controlando o número de dígitos após o separador decimal. O padrão é 2, preservando o comportamento anterior. [#104648](https://github.com/ClickHouse/ClickHouse/pull/104648) ([antoniofilipovic](https://github.com/antoniofilipovic)).
* Adicionados os aliases de agregação `min_by` e `max_by` para `argMin` e `argMax`. [#105712](https://github.com/ClickHouse/ClickHouse/pull/105712) ([itsjoeoui](https://github.com/itsjoeoui)).

<h3 id="sql-and-query-features">
  Recursos de SQL e de consultas
</h3>

* `formatReadableTimeDelta` agora aceita como entrada uma expressão `INTERVAL` de tipo diferente de `Month` e `Year`. [#64315](https://github.com/ClickHouse/ClickHouse/pull/64315) ([Beetelbrox](https://github.com/Beetelbrox)).
* Adicionado suporte ao formato de saída PNG, permitindo renderizar diretamente os resultados das consultas como imagens PNG. [#74691](https://github.com/ClickHouse/ClickHouse/pull/74691) ([m7kss1](https://github.com/m7kss1)).
* Introduzido um recurso de reserva de memória para workloads. Consulte a documentação sobre [agendamento de workloads](https://clickhouse.com/docs/operations/workload-scheduling). [#82414](https://github.com/ClickHouse/ClickHouse/pull/82414) ([serxa](https://github.com/serxa)).
* Adicionadas as opções `IPV4_PREFIX_BITS` e `IPV6_PREFIX_BITS` para cotas definidas por `IP_ADDRESS` ou `FORWARDED_IP_ADDRESS`, permitindo compartilhar os limites de cota por sub-rede IP, em vez de aplicá-los separadamente a cada endereço completo. [#89270](https://github.com/ClickHouse/ClickHouse/pull/89270) ([adityachopra29](https://github.com/adityachopra29)).
* Implementado `ADD ENUM VALUES` em consultas `ALTER TABLE` para simplificar a adição de novos valores a um tipo Enum existente, sem a necessidade de especificar novamente todos os valores atuais. [#93830](https://github.com/ClickHouse/ClickHouse/pull/93830) ([ilejn](https://github.com/ilejn)).
* Adicionado o formato de entrada `GeoJSON` para leitura. [#98124](https://github.com/ClickHouse/ClickHouse/pull/98124) ([mneedham](https://github.com/mneedham)).
* Adicionado um pós-processador ao índice de texto que transforma os tokens após a tokenização. [#98939](https://github.com/ClickHouse/ClickHouse/pull/98939) ([Ergus](https://github.com/Ergus)).
* Adicionado suporte opcional a nós TTL no ClickHouse Keeper. Os nós TTL expiram automaticamente após o ciclo de vida configurado e não podem ter filhos. [#100397](https://github.com/ClickHouse/ClickHouse/pull/100397) ([scanhex12](https://github.com/scanhex12)).
* Adicionado armazenamento das posições dos tokens para índices de texto, oferecendo suporte a buscas exatas com `hasPhrase`. Habilite o argumento de índice `support_phrase_search` e a configuração `allow_experimental_text_index_phrase_search` do `MergeTree`. [#103172](https://github.com/ClickHouse/ClickHouse/pull/103172) ([ahmadov](https://github.com/ahmadov)).
* Adicionadas as funções arrayTopK e arrayBottomK: - `arrayTopK(k, array)` retorna os K maiores elementos em ordem decrescente - `arrayBottomK(k, array)` retorna os K menores elementos em ordem crescente. [#104563](https://github.com/ClickHouse/ClickHouse/pull/104563) ([vitlibar](https://github.com/vitlibar)).
* Adicionado suporte para selecionar colunas por padrão de nome com `* LIKE '<pattern>'` e `* ILIKE '<pattern>'`, incluindo formas qualificadas como `table.* LIKE '<pattern>'` e `table.* ILIKE '<pattern>'`. `LIKE` corresponde a nomes de colunas diferenciando maiúsculas de minúsculas, enquanto `ILIKE` não faz essa distinção. [#104569](https://github.com/ClickHouse/ClickHouse/pull/104569) ([niyue](https://github.com/niyue)).
* Adicionadas consultas contínuas para tabelas `MergeTree` usando uma sequência de leituras de snapshots. [#105114](https://github.com/ClickHouse/ClickHouse/pull/105114) ([Michicosun](https://github.com/Michicosun)).
* Adicionado o formato `RowBinaryWithNamesAndTypesAndDefaults` para aprimorar o suporte à evolução de esquema. [#105736](https://github.com/ClickHouse/ClickHouse/pull/105736) ([mzitnik](https://github.com/mzitnik)).
* Adicionadas funções para disponibilizar Mapbox Vector Tiles diretamente do SQL: `MVTEncodeGeom` projeta uma geometria no espaço de pixels de um tile slippy-map e a recorta; `MVTEncode` agrega as geometrias projetadas de um grupo nos bytes binários de um tile de camada única; e `MVTBoundingBox` / `MVTBoundingBoxMercator` retornam a caixa delimitadora de um tile para restringir linhas a ela. Há suporte para geometrias de pontos, linhas e polígonos. Também disponíveis pelos aliases PostGIS `ST_AsMVTGeom` e `ST_AsMVT`. [#106107](https://github.com/ClickHouse/ClickHouse/pull/106107) ([saarthak2002](https://github.com/saarthak2002)).
* Adicionados `LOCALTIME` e `LOCALTIMESTAMP` (sintaxe padrão SQL / PostgreSQL). `LOCALTIMESTAMP` é um alias de `now()` (retorna `DateTime`); `LOCALTIME` retorna a hora atual como um valor `Time`. [#106139](https://github.com/ClickHouse/ClickHouse/pull/106139) ([thomas-cabral](https://github.com/thomas-cabral)).
* Adicionadas duas novas estratégias de `load_balancing`, `hostname_longest_common_prefix` e `hostname_longest_common_suffix`, que preferem a réplica cujo hostname compartilha com o hostname do iniciador o prefixo comum mais longo (ou, respectivamente, o sufixo). Elas são úteis quando o data center é codificado como prefixo ou sufixo de hostnames cujos segmentos numéricos têm comprimento variável, caso em que as estratégias existentes `nearest_hostname` e `hostname_levenshtein_distance` selecionam a réplica errada. [#107360](https://github.com/ClickHouse/ClickHouse/pull/107360) ([den-crane](https://github.com/den-crane)).
* Novas funções `quantizeBFloat16ToInt8` e `dequantizeInt8ToBFloat16`: um codec escalar que comprime componentes de embedding para 8 bits usando um quantizador Gaussiano Lloyd-Max de 256 níveis, do qual códigos Int4/Int2/binários podem ser extraídos por truncamento de bits. [#108102](https://github.com/ClickHouse/ClickHouse/pull/108102) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="table-engines-and-storage">
  Motores de tabela e armazenamento
</h3>

* Adicionado suporte à gravação no Azure Data Lake Storage Gen2. [#105406](https://github.com/ClickHouse/ClickHouse/pull/105406) ([scanhex12](https://github.com/scanhex12)).

<h3 id="settings-and-configuration">
  Configurações e configuração
</h3>

* Adicionada a configuração `output_format_always_write_decimal_point_in_float_and_decimal` para sempre exibir o separador decimal em números de ponto flutuante e `Decimal` em formatos de texto, mesmo quando o valor for inteiro. Por exemplo, exibe `1.` em vez de `1`. Desabilitada por padrão. [#62614](https://github.com/ClickHouse/ClickHouse/pull/62614) ([qoega](https://github.com/qoega)).
* Adicionada uma nova configuração imutável do `MergeTree`, `allow_tuple_element_aggregation`, desabilitada por padrão. Quando habilitada, `SummingMergeTree`, `AggregatingMergeTree` e `CoalescingMergeTree` achatam recursivamente as colunas `Tuple` e agregam cada elemento folha de forma independente durante as mesclagens, exatamente como se fosse uma coluna de nível superior — o `SummingMergeTree` o soma, o `AggregatingMergeTree` mescla seu estado de função agregada e o `CoalescingMergeTree` mantém seu último valor não NULL. A configuração deve ser especificada no momento da criação da tabela e é ignorada silenciosamente por motores que não a suportam. [#98039](https://github.com/ClickHouse/ClickHouse/pull/98039) ([JingYanchao](https://github.com/JingYanchao)).
* Adicionada a configuração `output_format_float_precision` para controlar o número de dígitos decimais na saída de texto de números de ponto flutuante. [#99721](https://github.com/ClickHouse/ClickHouse/pull/99721) ([phulv94](https://github.com/phulv94)).
* Adicionadas as configurações de tabela MergeTree `materialize_projections_on_insert` e `materialize_projections_on_merge`. Quando `materialize_projections_on_insert = 0`, os INSERTs não criam partes de projeção, o que melhora a taxa de inserção em tabelas com muitas projeções. Quando `materialize_projections_on_merge = 1`, uma mesclagem recria uma projeção ausente de todas as partes de origem, permitindo que projeções sejam criadas durante as mesclagens em vez de na inserção. As mesclagens ainda combinam apenas partes que compartilham o mesmo conjunto de projeções. [#100993](https://github.com/ClickHouse/ClickHouse/pull/100993) ([cwurm](https://github.com/cwurm)).
* Adicionada uma nova configuração do S3Queue, `after_processing_move_preserve_path`. Quando habilitada junto com `after_processing='move'` e `after_processing_move_prefix`, os objetos processados são movidos preservando todo o caminho de origem sob o prefixo de destino, em vez de serem reduzidos apenas ao nome do arquivo. [#105354](https://github.com/ClickHouse/ClickHouse/pull/105354) ([asya-ch](https://github.com/asya-ch)).
* Adicionados os elementos de configuração do handler HTTP `url_prefix` e `full_url_prefix` para corresponder a todos os caminhos com determinado prefixo, além dos elementos explícitos `url_regexp`, `full_url_regexp` e `headers_regexp`. A forma legada `<url>regex:...</url>` continua com suporte. [#107492](https://github.com/ClickHouse/ClickHouse/pull/107492) ([vitlibar](https://github.com/vitlibar)).

<h3 id="authentication">
  Autenticação
</h3>

* Adicionada uma credencial `external_id` opcional para acesso ao S3 baseado em funções. [#106941](https://github.com/ClickHouse/ClickHouse/pull/106941) ([eliangidoni](https://github.com/eliangidoni)).
* Adicionadas à tabela `system.session_log` informações do certificado TLS do cliente (subjects, número de série, emissor e período de validade) para melhorar a observabilidade da autenticação baseada em certificado. [#107679](https://github.com/ClickHouse/ClickHouse/pull/107679) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="system-tables">
  Tabelas do sistema
</h3>

* Adicionada a tabela `system.iceberg_files`, que expõe metadados por arquivo para tabelas Iceberg, com uma linha para cada arquivo de dados ou de exclusão no snapshot atual de cada tabela. [#104415](https://github.com/ClickHouse/ClickHouse/pull/104415) ([asya-ch](https://github.com/asya-ch)).
* Adicionados índices de descarte hipotéticos (what-if). Use `CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ...` para definir um índice de descarte virtual com escopo de sessão e, em seguida, `EXPLAIN WHATIF SELECT ...` para estimar sua taxa de descarte e custo sem materializá-lo. Os índices definidos ficam visíveis na nova tabela `system.hypothetical_indexes`. [#104608](https://github.com/ClickHouse/ClickHouse/pull/104608) ([yariks5s](https://github.com/yariks5s)).
* Adicionada a tabela do sistema `system.constraints`, que fornece informações sobre todas as restrições CHECK e ASSUME em todas as tabelas, incluindo o nome, o tipo e a expressão da restrição. [#105337](https://github.com/ClickHouse/ClickHouse/pull/105337) ([PedroTadim](https://github.com/PedroTadim)).
* Adicionada a tabela do sistema `system.documentation`, que reúne em uma única tabela a documentação de referência embutida dos componentes padronizados do sistema (funções, motores de tabela, tipos de dados, configurações, formatos e outros), com a documentação renderizada em Markdown. [#107463](https://github.com/ClickHouse/ClickHouse/pull/107463) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h2 id="experimental-features">
  Recursos experimentais
</h2>

* Adicionado o algoritmo experimental `dphyp` de reordenação de junções baseada em custo para junções internas, como opção da configuração `query_plan_optimize_join_order_algorithm`, e a configuração `query_plan_optimize_join_order_max_searched_plans`, que limita a busca pela ordem das junções e recorre ao próximo algoritmo da cadeia quando esse limite é excedido; defina-a como `0` para manter o comportamento anterior de busca ilimitada. [#98798](https://github.com/ClickHouse/ClickHouse/pull/98798) ([davenger](https://github.com/davenger)).
* Adicionado o modo de aplicação lazy de posting lists para o índice de texto. Quando habilitado por meio de `SET allow_experimental_text_index_lazy_apply = 1` e `SET text_index_posting_list_apply_mode = 'lazy'`, as posting lists são decodificadas sob demanda, na granularidade de blocos packed, usando uma abordagem baseada em cursor, em vez de serem totalmente materializadas em bitmaps Roaring, reduzindo o uso de memória e o tempo de CPU em consultas seletivas de índice de texto. [#100035](https://github.com/ClickHouse/ClickHouse/pull/100035) ([fastio](https://github.com/fastio)).
* Permite anexar handlers do prometheus à porta HTTP principal com um prefixo opcional. [#104975](https://github.com/ClickHouse/ClickHouse/pull/104975) ([JTCunning](https://github.com/JTCunning)).
* Adicionada uma configuração experimental do MergeTree, `packed_skip_index_max_bytes`, que agrupa pequenos subfluxos de índices de descarte em um único arquivo `skp_idx.packed` por parte, reduzindo a pressão sobre os inodes quando muitos índices de descarte são definidos em uma tabela. A decisão é tomada por subfluxo no momento da gravação: os subfluxos cujo tamanho serializado fica abaixo do limite são incluídos no arquivo, enquanto os maiores mantêm o layout independente `skp_idx_<name>.idx2` / `.mrk2`. Uma única parte pode combinar layouts. Índices de texto completo não são compatíveis e sempre são armazenados em arquivos separados. O padrão é 0 (empacotamento desabilitado). [#105321](https://github.com/ClickHouse/ClickHouse/pull/105321) ([Algunenano](https://github.com/Algunenano)).
* Compatibilidade com a serialização `Buffers` para UDFs WebAssembly usando `ABI BUFFERED_V1`, além da adição de `webassembly_udf_enable_fuel` como uma configuração persistente de função UDF WASM. [#105574](https://github.com/ClickHouse/ClickHouse/pull/105574) ([antonio2368](https://github.com/antonio2368)).
* Execução de consultas distribuídas em vários estágios: o planejador divide o plano de consulta em estágios conectados por exchanges scatter / broadcast / gather / shuffle e encaminha os fragmentos do plano aos nós worker. Os dados entre os estágios são transmitidos via TCP ou transferidos por arquivos temporários no armazenamento de objetos compartilhado; há suporte para shuffle distribuído e hash joins por broadcast, agregação com shuffle e ordenação distribuída. O recurso é experimental e vem desabilitado por padrão. [#106020](https://github.com/ClickHouse/ClickHouse/pull/106020) ([davenger](https://github.com/davenger)).
* O mecanismo experimental de plano de consulta distribuída (`make_distributed_plan`) agora pode usar portas diferentes para encaminhamento de tarefas e streaming exchanges por worker, configuradas por réplica em `<remote_servers>` com `stateless_worker_port` e `streaming_exchange_port`. Quando não definidas, são usadas as portas anteriores no nível do servidor (`stateless_worker_client.port` e `distributed_query.streaming_exchange_port`). Isso possibilita executar vários workers em um único host. [#107885](https://github.com/ClickHouse/ClickHouse/pull/107885) ([davenger](https://github.com/davenger)).

<h2 id="performance-improvements">
  Melhorias de desempenho
</h2>

<h3 id="join-performance">
  Desempenho de JOIN
</h3>

* Implementada a aplicação lazy de índices de seletor e de replicação em JOINs seguidos de um LIMIT seletivo, TopN ou outro JOIN. Para controlar o número de colunas de payload necessário para habilitar índices de seletor lazy, use a configuração `query_plan_min_columns_for_join_lazy_indexing` (0 significa que a otimização está desabilitada). Para controlar o LIMIT ao qual a otimização é aplicada, use a configuração `query_plan_max_limit_for_join_lazy_indexing`. [#98883](https://github.com/ClickHouse/ClickHouse/pull/98883) ([m-selmi](https://github.com/m-selmi)).
* Permite que `ASOF JOIN` use o algoritmo de join `parallel_hash`, paralelizando a compilação entre valores distintos de chaves de igualdade. Antes, ASOF era incondicionalmente excluído de `parallel_hash`. [#105375](https://github.com/ClickHouse/ClickHouse/pull/105375) ([gregakinman](https://github.com/gregakinman)).
* Compartilha o FixedHashMap do hash join como filtro de runtime de JOIN no lado de sondagem. Quando a tabela hash do lado de compilação é, ou pode ser convertida em, um FixedHashMap, ela é publicada como filtro de runtime e substitui o `Set`/`BloomFilter` que `BuildRuntimeFilterStep` instalaria de outra forma. Controlado pela nova configuração `enable_join_runtime_filter_shared_fixed_hash_table` (o padrão é `true`). [#105640](https://github.com/ClickHouse/ClickHouse/pull/105640) ([wudidapaopao](https://github.com/wudidapaopao)).
* A reordenação de JOIN por DP agora é permitida com réplicas paralelas. [#105889](https://github.com/ClickHouse/ClickHouse/pull/105889) ([nickitat](https://github.com/nickitat)).
* Plano de consulta aprimorado quando JOIN usa filtros de runtime (`enable_join_runtime_filters` habilitado por padrão): o modelo de custo de reordenação de join agora considera `WindowTransform` (e outras etapas do plano que preservam linhas) na subárvore direita e usa a contagem de linhas subjacente e o NDV por coluna, em vez de assumir a ausência de estatísticas. [#107229](https://github.com/ClickHouse/ClickHouse/pull/107229) ([UnamedRus](https://github.com/UnamedRus)).

<h3 id="query-optimization">
  Otimização de consultas
</h3>

* Melhorado o desempenho da análise de índices de texto em buscas com vários tokens, otimizando o tratamento de tokens raros. [#98226](https://github.com/ClickHouse/ClickHouse/pull/98226) ([CurtizJ](https://github.com/CurtizJ)).
* Melhora o desempenho das funções `encrypt`, `decrypt` e `halfMD5` ao evitar buscas implícitas de provedores do OpenSSL por linha no OpenSSL 3.x. [#99105](https://github.com/ClickHouse/ClickHouse/pull/99105) ([thevar1able](https://github.com/thevar1able)).
* Combina blocos de origem antes de `projection.calculate()` durante `MATERIALIZE PROJECTION` para reduzir o número de partes temporárias de projeção e a sobrecarga de mesclagem. Aceleração de \~3,4x em uma tabela com 50 milhões de linhas. [#100047](https://github.com/ClickHouse/ClickHouse/pull/100047) ([amosbird](https://github.com/amosbird)).
* Os usuários agora se beneficiam de melhor desempenho dos filtros de runtime aproximados e dos índices de filtro de Bloom. [#100201](https://github.com/ClickHouse/ClickHouse/pull/100201) ([cv4g](https://github.com/cv4g)).
* Acelera consultas `ORDER BY ... LIMIT BY` executando `LIMIT BY` em cada stream ordenado em paralelo durante `Sort`, quando as colunas de `LIMIT BY` são um prefixo de `ORDER BY`. Isso reduz o número de linhas que passam pela mesclagem final da ordenação e por todas as etapas subsequentes do pipeline. Essa otimização é controlada pela nova configuração `query_plan_push_limit_by_into_sort` (habilitada por padrão). [#104000](https://github.com/ClickHouse/ClickHouse/pull/104000) ([nihalzp](https://github.com/nihalzp)).
* Reduz a sobrecarga por consulta em consultas SELECT simples (análise sintática, análise e planejamento). Por exemplo, `SELECT count() FROM hits` em uma única conexão é aproximadamente 50% mais rápido. [#104513](https://github.com/ClickHouse/ClickHouse/pull/104513) ([Algunenano](https://github.com/Algunenano)).
* Melhora o desempenho de `bitmapContains` para estados `groupBitmap` diferentes de `UInt64` ao evitar chamadas repetidas a `rb_max` durante verificações de intervalo. [#105960](https://github.com/ClickHouse/ClickHouse/pull/105960) ([niyue](https://github.com/niyue)).
* Melhorado o desempenho de inserção em colunas `LowCardinality` com índices `bloom_filter`. [#106410](https://github.com/ClickHouse/ClickHouse/pull/106410) ([EmeraldShift](https://github.com/EmeraldShift)).
* Melhorado o desempenho das funções `L2DistanceTransposed` e `cosineDistanceTransposed` para o tipo de dados `QBit`. [#106701](https://github.com/ClickHouse/ClickHouse/pull/106701) ([rienath](https://github.com/rienath)).
* Melhora o desempenho da análise de consultas em tabelas com muitas colunas: evita calcular hashes de nós de coluna (que incluem toda a expressão da tabela de origem) quando isso não é necessário. A análise de subconsultas `SELECT *` aninhadas em uma tabela com \~1200 colunas agora é cerca de 50 vezes mais rápida. [#106957](https://github.com/ClickHouse/ClickHouse/pull/106957) ([novikd](https://github.com/novikd)).
* Melhora em até uma ordem de grandeza o desempenho das funções `encrypt`, `decrypt`, `tryDecrypt`, `aes_encrypt_mysql` e `aes_decrypt_mysql`, recuperando o desempenho perdido na migração do BoringSSL para o OpenSSL 3.x (24.4). [#107339](https://github.com/ClickHouse/ClickHouse/pull/107339) ([thevar1able](https://github.com/thevar1able)).
* Melhora a execução de `arrayElement` em `Array(LowCardinality(String))` e de funções LIKE para map em maps com chaves ou valores `LowCardinality(String)` ao evitar a materialização desnecessária de strings. [#107450](https://github.com/ClickHouse/ClickHouse/pull/107450) ([EmeraldShift](https://github.com/EmeraldShift)).
* Reduzido o uso de CPU e melhorado o desempenho da avaliação de skip-index em consultas que filtram colunas `DateTime64`. [#107707](https://github.com/ClickHouse/ClickHouse/pull/107707) ([shankar-iyer](https://github.com/shankar-iyer)).
* Melhorado o desempenho de buscas de substrings que não diferenciam maiúsculas de minúsculas, incluindo `positionCaseInsensitiveUTF8`, `ILIKE` e `multiSearchAnyCaseInsensitiveUTF8`. [#107882](https://github.com/ClickHouse/ClickHouse/pull/107882) ([Algunenano](https://github.com/Algunenano)).
* Corrigida uma regressão de \~16% no throughput do codec de ponto flutuante `FPC` no ARM, introduzida quando suas tabelas de predição passaram a usar `VectorWithMemoryTracking`. [#108182](https://github.com/ClickHouse/ClickHouse/pull/108182) ([groeneai](https://github.com/groeneai)).
* Corrigida uma regressão de desempenho em que uma única exclusão leve `DELETE` desabilitava o cache de condições de consulta para toda a tabela. Consultas seletivas repetidas em uma tabela que tivesse sido afetada por uma exclusão leve deixavam de eliminar grânulos e passavam a ler todas as marcas. [#112947](https://github.com/ClickHouse/ClickHouse/pull/112947) ([fm4v](https://github.com/fm4v)).
* Limitado o custo de estimar a seletividade de `col IN (...)` com base nas estatísticas da coluna, que poderia acrescentar centenas de milissegundos ao planejamento de uma única consulta. O estimador não executa mais a subconsulta em `col IN (subquery)` para preencher um conjunto do qual precisa apenas de um valor de seletividade — em vez disso, um conjunto não construído é ignorado. Para um conjunto maior que a nova configuração `statistics_max_set_size_for_exact_selectivity_estimation` (padrão: 10000), a seletividade agora é derivada do tamanho do conjunto e de seu intervalo delimitador. [#114389](https://github.com/ClickHouse/ClickHouse/pull/114389) ([nickitat](https://github.com/nickitat)).

<h3 id="function-and-aggregation-performance">
  Desempenho de funções e agregações
</h3>

* Otimizada a análise do índice de chave primária para chaves primárias longas e de alta cardinalidade. Para uma chave primária longa, o tempo de execução da análise do índice agora depende principalmente da complexidade do filtro da consulta (das colunas-chave que ela realmente utiliza), e não do comprimento da chave primária. Portanto, estender a chave de ordenação gera uma sobrecarga adicional insignificante na análise do índice para consultas que filtram apenas algumas de suas colunas. Para uma chave primária de alta cardinalidade, em que o ClickHouse mantém na memória apenas um prefixo seletivo das colunas-chave e não carrega as colunas finais, a análise do índice agora opera somente sobre esse prefixo em memória, em vez da chave inteira. A otimização é habilitada por padrão e pode ser desativada com a nova configuração `use_lightweight_primary_key_index_analysis`. [#91836](https://github.com/ClickHouse/ClickHouse/pull/91836) ([nihalzp](https://github.com/nihalzp)).
* Reduzido o pico de uso de memória ao mesclar resultados parciais de agregação em dois níveis com estados de agregação grandes (por exemplo, `groupArray`), liberando incrementalmente os estados de origem de cada bucket durante a mesclagem, em vez de mantê-los todos na memória até a conclusão da mesclagem. [#102330](https://github.com/ClickHouse/ClickHouse/pull/102330) ([yurifedoseev](https://github.com/yurifedoseev)).
* Nova otimização de `GROUP BY` para chaves de alta cardinalidade distribuídas uniformemente, que distribui as linhas entre threads por meio do hash da chave de agrupamento, para que cada thread agregue um subconjunto distinto de chaves sem uma fase de mesclagem. Defina `enable_sharding_aggregator = 1` para habilitá-la. [#104233](https://github.com/ClickHouse/ClickHouse/pull/104233) ([nihalzp](https://github.com/nihalzp)).
* Aceleradas as consultas `LIMIT BY` em tabelas `MergeTree` particionadas ao executar `LIMIT BY` em paralelo no fluxo de cada partição, em vez de mesclar todos os fluxos em um só antes de aplicar o limite. Isso se aplica quando a expressão de partição é uma função determinística das colunas de `LIMIT BY`, de modo que nenhum grupo de `LIMIT BY` pode abranger duas partições. Controlado pela nova configuração `allow_limit_by_partitions_independently` (habilitada por padrão). [#105126](https://github.com/ClickHouse/ClickHouse/pull/105126) ([nihalzp](https://github.com/nihalzp)).
* Aceleradas as consultas `SELECT ... LIMIT N BY <cols>` quando `<cols>` são um prefixo da chave de ordenação da tabela ou passam a sê-lo após `WHERE col = const` fixar as colunas iniciais. Com essa otimização habilitada, o `MergeTree` lê os dados na ordem da chave primária, e `LIMIT BY` primeiro filtra os dados no modo de streaming, usando memória O(1) por fluxo ordenado e descartando a maior parte dos dados; em seguida, executa o `LIMIT BY` normal sobre os dados reduzidos para obter o resultado final. Controlado pela nova configuração `optimize_limit_by_in_order` (habilitada por padrão). [#105135](https://github.com/ClickHouse/ClickHouse/pull/105135) ([nihalzp](https://github.com/nihalzp)).
* Aceleradas as consultas `LIMIT BY` com a remoção de expressões-chave redundantes: uma chave que é uma função determinística das outras chaves é descartada (por exemplo, `LIMIT 5 BY x, f(x)` torna-se `LIMIT 5 BY x`), e uma função injetiva de uma chave é substituída por seu argumento (por exemplo, `LIMIT 5 BY toString(x)` torna-se `LIMIT 5 BY x`). Assim, menos expressões são avaliadas por linha, e elas são mais baratas. Controlado pelas novas configurações `optimize_limit_by_function_keys` e `optimize_injective_functions_in_limit_by`, ambas habilitadas por padrão. [#106818](https://github.com/ClickHouse/ClickHouse/pull/106818) ([nihalzp](https://github.com/nihalzp)).
* Acelerada a análise de consultas com muitas chamadas de função ou chamadas de função profundamente aninhadas, com a remoção de um hash redundante da árvore de consultas do cache de resolução de funções. [#107516](https://github.com/ClickHouse/ClickHouse/pull/107516) ([novikd](https://github.com/novikd)).
* Paralelizado o processamento do resultado de uma CTE recursiva: uma operação `GROUP BY` ou outra operação sobre um resultado grande de `WITH RECURSIVE` não está mais limitada a uma única thread. [#107694](https://github.com/ClickHouse/ClickHouse/pull/107694) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="storage-and-io-performance">
  Desempenho de armazenamento e E/S
</h3>

* Clientes S3 com o mesmo endpoint e bucket compartilham um cache, evitando a descoberta duplicada da região. [#96802](https://github.com/ClickHouse/ClickHouse/pull/96802) ([zvonand](https://github.com/zvonand)).
* Melhorado o desempenho de cópia no armazenamento de objetos ao copiar blobs em paralelo. [#105089](https://github.com/ClickHouse/ClickHouse/pull/105089) ([asya-ch](https://github.com/asya-ch)).
* Evita a leitura do conteúdo de arquivos ao usar o formato de entrada One com funções de tabela baseadas em arquivos, como file e s3. [#105157](https://github.com/ClickHouse/ClickHouse/pull/105157) ([niyue](https://github.com/niyue)).
* A chave primária do `MergeTree` e os índices de descarte agora podem eliminar grânulos para filtros em que `ifNull` ou `coalesce` envolve uma condição, como `ifNull(key = 0, 0)` ou `coalesce(key = 0, 0)`. Esses predicados — frequentemente gerados por geradores de consultas para transformar uma comparação possivelmente `NULL` em um booleano definido — antes eram opacos à análise de índices e não podiam ignorar grânulos. Isso estende a configuração existente `allow_key_condition_coalesce_rewrite` (ativada por padrão). [#106272](https://github.com/ClickHouse/ClickHouse/pull/106272) ([andyzzhao](https://github.com/andyzzhao)).
* Melhorado o desempenho de decodificação de colunas Parquet `FLOAT` e `DOUBLE` codificadas com `BYTE_STREAM_SPLIT`. [#106376](https://github.com/ClickHouse/ClickHouse/pull/106376) ([Algunenano](https://github.com/Algunenano)).
* Corrigidas longas pausas no login e no início de consultas com armazenamento de acesso replicado quando muitas entidades de acesso (políticas de linha, funções, cotas e perfis de configurações) mudam ao mesmo tempo. Cada cache por entidade agora é recalculado uma vez por lote de notificações, em vez de uma vez por entidade alterada, eliminando trabalho quadrático que poderia manter o bloqueio de acesso por minutos. [#107672](https://github.com/ClickHouse/ClickHouse/pull/107672) ([azat](https://github.com/azat)).
* Corrigida uma regressão de desempenho em que a leitura de muitos arquivos pequenos do armazenamento de objetos por meio de `s3` e outras funções de tabela deixou de fazer pré-busca e passou a usar leituras síncronas, reduzindo significativamente a velocidade de leituras de muitos arquivos pequenos em thread única ou com baixa concorrência. [#108872](https://github.com/ClickHouse/ClickHouse/pull/108872) ([fm4v](https://github.com/fm4v)).
* Ativada a pré-busca inicial de objetos pequenos quando as leituras do armazenamento de objetos passam pelo cache do sistema de arquivos (`filesystem_cache_name`). Anteriormente, leituras de muitos arquivos pequenos, como na ingestão com `S3Queue`, permaneciam síncronas e limitadas pela latência quando o cache do sistema de arquivos estava ativado. [#109478](https://github.com/ClickHouse/ClickHouse/pull/109478) ([fm4v](https://github.com/fm4v)).
* Melhorada a otimização de `PREWHERE` para subcolunas `Map` ao considerar seu tamanho em disco. [#110623](https://github.com/ClickHouse/ClickHouse/pull/110623) ([Avogar](https://github.com/Avogar)).
* A materialização tardia agora é aplicada a consultas com `FINAL`, um filtro e um `LIMIT` pequeno, mesmo sem `ORDER BY` (para `ReplacingMergeTree`). [#110722](https://github.com/ClickHouse/ClickHouse/pull/110722) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Reduzido o tempo de CPU da desduplicação para descarregamentos de inserções assíncronas que abrangem muitas partições. [#111150](https://github.com/ClickHouse/ClickHouse/pull/111150) ([valerypetrov](https://github.com/valerypetrov)).
* Corrigida uma regressão de CPU em consultas que realizam muitas leituras pequenas e independentes na mesma parte do `MergeTree` quando a tabela tem colunas `LowCardinality`. A verificação que determina se uma parte tem um único dicionário compartilhado percorria todas as marcas da parte inteira em cada tarefa de leitura; agora, ela encontra cada sequência de marcas iguais usando busca binária. Consultas desse tipo em tabelas com `index_granularity` pequena ficaram até várias vezes mais lentas desde a versão 26.6. [#116134](https://github.com/ClickHouse/ClickHouse/pull/116134) ([groeneai](https://github.com/groeneai)).

<h3 id="memory-optimization">
  Otimização de memória
</h3>

* Redução de até 10 vezes no uso de memória dos metadados do tipo `Enum` em tabelas com colunas `Enum`. As buscas de valor para nome permanecem semelhantes ou mais rápidas, enquanto as buscas de nome para valor durante a análise e a desserialização podem ser mais lentas. [#95668](https://github.com/ClickHouse/ClickHouse/pull/95668) ([qoega](https://github.com/qoega)).
* Redução do pico de uso de memória de `BACKUP` ao não copiar mais a lista interna de informações de arquivos durante a gravação de entradas de backup (relevante para backups que contêm milhões de arquivos). [#111162](https://github.com/ClickHouse/ClickHouse/pull/111162) ([jkartseva](https://github.com/jkartseva)).

<h2 id="improvements">
  Melhorias
</h2>

<h3 id="query-and-sql-improvements">
  Consultas e SQL
</h3>

* Identificar colunas pela posição (em vez do nome) ao remover colunas não utilizadas no plano de consulta. Isso permite remover colunas não utilizadas quando há nomes de colunas duplicados. [#100586](https://github.com/ClickHouse/ClickHouse/pull/100586) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* Adicionado `SESSION_USER` como um alias de `currentUser()` que não diferencia maiúsculas de minúsculas, para compatibilidade com PostgreSQL / SQL padrão. [#106081](https://github.com/ClickHouse/ClickHouse/pull/106081) ([takumihara](https://github.com/takumihara)).
* Reduzida a latência de cancelamento de consultas executadas pelo protocolo wire do PostgreSQL: KILL QUERY agora interrompe a serialização da saída em um único fragmento, em vez de aguardar o envio de todo o fragmento ao cliente. [#106535](https://github.com/ClickHouse/ClickHouse/pull/106535) ([rvasin](https://github.com/rvasin)).
* Corrigido um erro `ILLEGAL_TYPE_OF_ARGUMENT` em consultas distribuídas com `serialize_query_plan = 1` que contêm uma lambda com um argumento constante (por exemplo, `arrayMap(t -> t.2, ...)`). As colunas constantes dos nós `INPUT` de `ActionsDAG` agora são preservadas durante a serialização do plano de consulta. [#107124](https://github.com/ClickHouse/ClickHouse/pull/107124) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Reduzida a latência de cancelamento de consultas executadas pelo protocolo wire do MySQL: KILL QUERY agora interrompe a serialização da saída em um único fragmento, em vez de aguardar o envio de todo o fragmento ao cliente. [#107228](https://github.com/ClickHouse/ClickHouse/pull/107228) ([rvasin](https://github.com/rvasin)).

<h3 id="functions-improvements">
  Funções
</h3>

* `EXPLAIN SYNTAX` agora formata operadores consistentemente como chamadas de função na saída do explain (por exemplo, `plus(1, 2)` em vez de `1 + 2`). [#94681](https://github.com/ClickHouse/ClickHouse/pull/94681) ([1abdelhalim](https://github.com/1abdelhalim)).
* Agora há suporte à sintaxe do PostgreSQL `expr OP SOME(array)` / `expr OP ALL(array)` (com lado direito que não é uma subconsulta), que é reescrita como `has` / `NOT has` para `=`/`<>` ou como lambdas `arrayExists` / `arrayAll` para outros operadores de comparação. `ANY` não é aceito na forma de array porque `any` também é uma função de agregação; use `SOME` em seu lugar. A forma de subconsulta de `ANY`/`SOME`/`ALL` continua sendo convertida para `IN` / `NOT IN`. [#105129](https://github.com/ClickHouse/ClickHouse/pull/105129) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Adicionado suporte às funções `multiSearchAny`, `multiSearchAnyUTF8` e `multiMatchAny` em índices de texto. Também foi aprimorada a análise de índices de texto da função `match`: agora, padrões com grupos alternativos podem ignorar mais grânulos. [#106279](https://github.com/ClickHouse/ClickHouse/pull/106279) ([CurtizJ](https://github.com/CurtizJ)).
* A função `h3PolygonToCells` agora aplica o tamanho máximo do array ao conjunto de todos os polígonos de um `MultiPolygon`, valida os códigos de retorno da biblioteca H3 subjacente e rejeita argumentos `MultiLineString` em vez de retornar silenciosamente um resultado vazio. [#106399](https://github.com/ClickHouse/ClickHouse/pull/106399) ([Algunenano](https://github.com/Algunenano)).
* A desserialização dos estados das funções de agregação `contingency`, `cramersV`, `cramersVBiasCorrected` e `theilsU` agora valida se as contagens armazenadas formam uma tabela de contingência consistente e lança uma exceção `CORRUPTED_DATA` caso contrário. [#107185](https://github.com/ClickHouse/ClickHouse/pull/107185) ([nihalzp](https://github.com/nihalzp)).
* Melhoria na estimativa de cardinalidade no otimizador do plano de consulta: uma coluna produzida por uma função determinística de um único argumento (por exemplo, `toYear(date)`) agora herda, como limite superior, o número de valores distintos de seu argumento, em vez de ficar sem estatísticas, levando a uma reordenação de junções mais precisa. [#107757](https://github.com/ClickHouse/ClickHouse/pull/107757) ([davenger](https://github.com/davenger)).

<h3 id="table-engines-and-storage-improvements">
  Motores de tabela e armazenamento
</h3>

* Corrige os consumidores do motor de tabela Kafka que continuavam usando um intervalo de poll curto após a atribuição de partições, fazendo com que voltem a usar o `kafka_poll_timeout_ms` configurado e evitando polls vazios excessivos, partes inseridas menores e sobrecarga adicional de merge após rebalanceamentos. [#100431](https://github.com/ClickHouse/ClickHouse/pull/100431) ([sugaf1204](https://github.com/sugaf1204)).
* Os motores de tabela para data lakes, incluindo `Iceberg` e `DeltaLake`, agora podem usar discos S3 e Azure com cache, permitindo que leituras repetidas usem o cache do sistema de arquivos. [#102017](https://github.com/ClickHouse/ClickHouse/pull/102017) ([RinChanNOWWW](https://github.com/RinChanNOWWW)).
* Permite que filtros introduzidos após a seleção inicial de PREWHERE (pushdown de predicados, filtros de runtime ou um PREWHERE explícito com um WHERE definido pelo planejador) sejam mesclados ao PREWHERE existente em uma segunda passagem do otimizador, em vez de permanecerem como uma etapa Filter separada acima da leitura do MergeTree. [#105445](https://github.com/ClickHouse/ClickHouse/pull/105445) ([yariks5s](https://github.com/yariks5s)).
* Adicionada a configuração `wait_for_part_commit_in_dependent_materialized_views`. Quando ativada, uma visão materializada em cascata que faz join com sua origem pode ver a linha que está sendo inserida. [#105943](https://github.com/ClickHouse/ClickHouse/pull/105943) ([ahmadov](https://github.com/ahmadov)).
* Adicionado suporte compatível com PostgreSQL a `EXTRACT(TIMEZONE_HOUR FROM dt)` e `EXTRACT(TIMEZONE_MINUTE FROM dt)` para obter as partes de hora e minuto de um deslocamento de fuso horário, e a `EXTRACT(<unit> FROM INTERVAL n <unit>)` / `date_part('<unit>', INTERVAL n <unit>)` para extrair o valor de um intervalo. [#106227](https://github.com/ClickHouse/ClickHouse/pull/106227) ([vinayakj592](https://github.com/vinayakj592)).
* Implementado `SYSTEM RESTART DISK <name>`: agora ele recarrega os metadados do disco na memória e reexamina as partes de dados das tabelas de réplicas somente leitura localizadas nele. Isso permite que uma réplica somente leitura de uma tabela em armazenamento compartilhado `plain_rewritable` observe, sob demanda, os dados gravados por outro servidor, sem aguardar `refresh_parts_interval` ou reiniciar o servidor. [#106645](https://github.com/ClickHouse/ClickHouse/pull/106645) ([jrdi](https://github.com/jrdi)).
* Evita o carregamento desnecessário de arquivos de marcas para dados compartilhados avançados de JSON. [#107051](https://github.com/ClickHouse/ClickHouse/pull/107051) ([Avogar](https://github.com/Avogar)).
* Adicionada a configuração `materialized_postgresql_use_extended_date_and_time_types`, aplicável no momento da criação, para o motor de banco de dados `MaterializedPostgreSQL`. Por padrão (ativada), as colunas `date`/`timestamp` do PostgreSQL são inferidas como `Date32`/`DateTime64`; defini-la como `0` ao executar `CREATE DATABASE` faz com que sejam inferidos os tipos mais restritos `Date`/`DateTime`. A configuração não se aplica ao motor de tabela `MaterializedPostgreSQL`. [#107428](https://github.com/ClickHouse/ClickHouse/pull/107428) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* O MergeTree agora pode ler um fluxo compactado cujos blocos usam codecs diferentes. Este é o pré-requisito no lado da leitura para a Seleção Adaptativa de Codecs. [#108592](https://github.com/ClickHouse/ClickHouse/pull/108592) ([rienath](https://github.com/rienath)).
* Usa o índice de descarte `bloom_filter` para predicados `IN` em uma coluna diretamente indexada quando `transform_null_in = 1` e o conjunto `IN` não contém nenhum valor `NULL`. Antes, o índice era ignorado nessas consultas, forçando uma varredura completa. [#111329](https://github.com/ClickHouse/ClickHouse/pull/111329) ([groeneai](https://github.com/groeneai)).

<h3 id="s3-and-object-storage-improvements">
  S3 e armazenamento de objetos
</h3>

* Registra privilégios em `system.query_log.used_privileges` para todas as verificações de acesso concedido, inclusive as que seguem o caminho sem exceção de `isGranted` (`checkAccessWithFilter`). Anteriormente, apenas os privilégios verificados por pontos de entrada que lançam exceção (`checkAccess` / `checkGrantOption`) eram registrados, o que fazia com que `READ ON FILE` / `READ ON S3` / `READ ON AZURE` / `READ ON URL` não aparecessem no log de auditoria de consultas `DESCRIBE`, `CREATE TABLE AS` e semelhantes que usam as funções de tabela `file` / `s3` / `azure` / `url`. A aplicação do controle de acesso permanece inalterada. [#104693](https://github.com/ClickHouse/ClickHouse/pull/104693) ([alexbakharew](https://github.com/alexbakharew)).
* Conclui de forma assíncrona a solicitação final de upload multipart do S3 por meio do rastreador de tarefas, permitindo que ela se sobreponha ao upload da última parte, em vez de ser executada sequencialmente na finalização. [#105487](https://github.com/ClickHouse/ClickHouse/pull/105487) ([asya-ch](https://github.com/asya-ch)).
* Aumentou de uma hora para seis horas a configuração padrão `persistent_processing_node_ttl_seconds` de `S3Queue` e `AzureQueue`, evitando que processamentos de longa duração ou reiniciados percam o bloqueio do bucket cedo demais. [#106838](https://github.com/ClickHouse/ClickHouse/pull/106838) ([kssenii](https://github.com/kssenii)).
* Oferece suporte aos valores `REDUCED_REDUNDANCY`, `STANDARD_IA`, `ONEZONE_IA`, `GLACIER_IR` e `EXPRESS_ONEZONE` (além de `STANDARD` e `INTELLIGENT_TIERING`) para a configuração `s3_storage_class_name`. [#107251](https://github.com/ClickHouse/ClickHouse/pull/107251) ([adityaksolves](https://github.com/adityaksolves)).
* O caminho de exemplo para particionamento Hive em tabelas de armazenamento de objetos (por exemplo, `S3`) é resolvido no primeiro uso da tabela, em vez de durante `CREATE`/`ATTACH`, para que um endpoint inacessível não bloqueie mais a criação da tabela nem a inicialização do servidor. [#111842](https://github.com/ClickHouse/ClickHouse/pull/111842) ([evillique](https://github.com/evillique)).

<h3 id="settings-and-configuration-improvements">
  Configurações e configuração
</h3>

* Torna a estratégia de particionamento hive padrão na configuração de compatibilidade `file_like_engine_default_partition_strategy`. [#86746](https://github.com/ClickHouse/ClickHouse/pull/86746) ([kssenii](https://github.com/kssenii)).
* Adicionadas quatro novas configurações de tabela MergeTree para controlar os parâmetros padrão dos índices de texto: `text_index_dictionary_block_size`, `text_index_dictionary_block_frontcoding_compression`, `text_index_posting_list_block_size` e `text_index_posting_list_codec`. Essas configurações permitem ajustar o comportamento dos índices de texto no nível da tabela sem especificar parâmetros em cada definição de índice. Argumentos explícitos por índice continuam tendo precedência. [#100626](https://github.com/ClickHouse/ClickHouse/pull/100626) ([CurtizJ](https://github.com/CurtizJ)).
* Adiciona a configuração `output_format_pretty_use_nbsp_for_padding` para renderizar o preenchimento do layout de tabela nos formatos `Pretty` em estilo de tabela como ESPAÇO SEM QUEBRA `U+00A0` quando `output_format_pretty_grid_charset` for `UTF-8`. Isso ajuda a saída `Pretty` copiada a manter o alinhamento da tabela em ferramentas que reduzem espaços comuns. A configuração é desabilitada por padrão, e a saída com conjunto de caracteres `ASCII` mantém espaços comuns. [#103559](https://github.com/ClickHouse/ClickHouse/pull/103559) ([ashrithb](https://github.com/ashrithb)).
* Oferece compatibilidade com o analisador antigo por meio da configuração `analyzer_compatibility_allow_non_aggregate_in_having`. Se habilitada, as condições não agregadas serão movidas de HAVING para WHERE. [#104232](https://github.com/ClickHouse/ClickHouse/pull/104232) ([novikd](https://github.com/novikd)).
* `OPTIMIZE TABLE ... ON CLUSTER` e outros comandos DDL não ficam mais bloqueados quando a tabela de destino tem `table_readonly = 1`. A configuração agora gera um novo código de erro específico, `TABLE_IS_PERMANENTLY_READ_ONLY`, que o `DDLWorker` trata como não repetível (diferentemente do erro transitório `TABLE_IS_READ_ONLY`, que ocorre durante desconexões temporárias do ZooKeeper em `ReplicatedMergeTree`). A configuração `table_readonly` também passa a ser explicitamente rejeitada para `ReplicatedMergeTree`, tanto na criação quanto por meio de `ALTER MODIFY SETTING`. [#105109](https://github.com/ClickHouse/ClickHouse/pull/105109) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* A ordenação decrescente nas chaves de ordenação do `MergeTree` (por exemplo, `ORDER BY (time DESC, key)`) agora é sempre compatível e não requer mais a configuração experimental `allow_experimental_reverse_key`, que se tornou obsoleta. [#106440](https://github.com/ClickHouse/ClickHouse/pull/106440) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Oferece suporte a `keyed_by_normalized_query_hash` para cotas definidas na configuração estática do servidor (`users.xml`), em conformidade com a sintaxe DDL existente `CREATE QUOTA ... KEYED BY normalized_query_hash`. [#107654](https://github.com/ClickHouse/ClickHouse/pull/107654) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* A configuração de compatibilidade não aplica mais configurações obsoletas; portanto, não as marca como alteradas nem gera avisos sobre configurações obsoletas. [#107737](https://github.com/ClickHouse/ClickHouse/pull/107737) ([UberDever](https://github.com/UberDever)).
* Adicionada a configuração `analyzer_compatibility_multiple_joins_qualify_column_names` (padrão: `false`). Quando habilitada e a cláusula `FROM` de uma consulta contém duas ou mais `JOIN`s, os nomes das colunas de resultado produzidos pelo analisador imitam a reescrita de múltiplas junções do analisador antigo: colunas expandidas de `*` são nomeadas como `<alias-or-table>.<column>`, e uma referência de coluna sem alias na lista `SELECT` mantém o nome exatamente como foi escrito. Isso permite que consultas externas que fazem referência a esses nomes qualificados, como `SELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...)`, funcionem como no analisador antigo. Também foi corrigido um problema em que o analisador perdia nomes qualificados de colunas de resultado para colunas expandidas de `*` quando `group_by_use_nulls` era combinado com `ROLLUP`, `CUBE` ou `GROUPING SETS`, o que produzia nomes de colunas de resultado duplicados e impedia referências externas a essas colunas. [#110746](https://github.com/ClickHouse/ClickHouse/pull/110746) ([novikd](https://github.com/novikd)).
* Adicionada a configuração `analyzer_compatibility_apply_final_to_all_joined_tables`, que restaura o comportamento antigo, em que o modificador `FINAL` na tabela mais à esquerda de um JOIN também era aplicado às demais tabelas associadas. A configuração é registrada no histórico de alterações das configurações; portanto, a `compatibility` com versões anteriores à 26.6 restaura automaticamente a semântica antiga. [#111589](https://github.com/ClickHouse/ClickHouse/pull/111589) ([fm4v](https://github.com/fm4v)).
* Adicionada uma nova configuração do MergeTree, `text_index_version`, que controla a versão do formato em disco dos índices de texto: `v0_initial`, `v1_with_codec` ou `v2_with_positions`. Durante uma atualização gradual ou antes de um downgrade, defina-a como uma versão mais antiga para que os servidores mais novos continuem gravando partes de índices de texto em um formato que os servidores mais antigos ainda possam ler; a configuração de compatibilidade a ajusta automaticamente. [#111803](https://github.com/ClickHouse/ClickHouse/pull/111803) ([CurtizJ](https://github.com/CurtizJ)).

<h3 id="system-tables-and-monitoring-improvements">
  Tabelas de sistema e monitoramento
</h3>

* Preenche `used_storages` em `system.query_log` com o nome do motor de armazenamento ao consultar tabelas por meio do DataLakeCatalog. [#100706](https://github.com/ClickHouse/ClickHouse/pull/100706) ([melvynator](https://github.com/melvynator)).
* Adiciona as colunas `current_projection`, `current_projection_progress`, `projections_completed` e `projections_remaining` a `system.merges` para expor o progresso da mesclagem de projeções. [#102611](https://github.com/ClickHouse/ClickHouse/pull/102611) ([amosbird](https://github.com/amosbird)).
* Os motores de tabela agora incluem documentação embutida, que pode ser consultada pelas novas colunas `description`, `syntax`, `examples`, `introduced_in` e `related` da tabela `system.table_engines`. [#106177](https://github.com/ClickHouse/ClickHouse/pull/106177) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Os motores de banco de dados agora incluem documentação embutida, que pode ser consultada pelas novas colunas `description`, `syntax`, `examples`, `introduced_in` e `related` da tabela `system.database_engines`. [#106178](https://github.com/ClickHouse/ClickHouse/pull/106178) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Os tipos de dados agora incluem documentação embutida, que pode ser consultada pelas novas colunas `description`, `syntax`, `examples`, `introduced_in` e `related` da tabela `system.data_type_families`. [#106180](https://github.com/ClickHouse/ClickHouse/pull/106180) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Os formatos de entrada e saída agora incluem documentação embutida, que pode ser consultada pelas novas colunas `description`, `examples`, `introduced_in` e `related` da tabela `system.formats`. [#106181](https://github.com/ClickHouse/ClickHouse/pull/106181) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Os combinadores de funções agregadas agora incluem documentação embutida, que pode ser consultada pelas novas colunas `description`, `syntax`, `examples`, `introduced_in` e `related` da tabela `system.aggregate_function_combinators`. [#106185](https://github.com/ClickHouse/ClickHouse/pull/106185) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Adicionada uma nova tabela `system.data_skipping_index_types`, que lista os tipos disponíveis de índices de ignorar dados juntamente com documentação embutida (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106186](https://github.com/ClickHouse/ClickHouse/pull/106186) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Adicionada uma nova tabela `system.disk_types`, que lista os tipos de disco disponíveis juntamente com documentação embutida (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106187](https://github.com/ClickHouse/ClickHouse/pull/106187) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Adicionadas as métricas assíncronas `TotalUncompressedBytesOfMergeTreeTables` e `TotalUncompressedBytesOfMergeTreeTablesSystem`, que informam o tamanho total não comprimido dos dados armazenados em tabelas da família MergeTree. [#106364](https://github.com/ClickHouse/ClickHouse/pull/106364) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Adiciona o evento de perfil `GlobalMemoryLimitExceeded`, permitindo que os operadores monitorem quando o limite de memória de todo o servidor é atingido. [#106466](https://github.com/ClickHouse/ClickHouse/pull/106466) ([sacheendra](https://github.com/sacheendra)).
* Adicionadas as métricas assíncronas `ExecutableUserDefinedFunctionMemoryResidentBytes` e `ExecutableUserDefinedFunctionProcesses`, que informam a memória residente (`VmRSS`) e o número de processos em execução das funções definidas pelo usuário `executable` e `executable_pool`, incluindo processos descendentes e workers ociosos do pool. [#107300](https://github.com/ClickHouse/ClickHouse/pull/107300) ([HanziJiang](https://github.com/HanziJiang)).
* Adicionada a configuração `show_remote_databases_in_system_tables`, habilitada por padrão, que permite ocultar bancos de dados `MySQL` e `PostgreSQL` de `system.tables`, `system.columns` e `system.completions`. `show_data_lake_catalogs_in_system_tables` continua controlando apenas a visibilidade de `DataLakeCatalog`. [#104416](https://github.com/ClickHouse/ClickHouse/pull/104416) ([pamarcos](https://github.com/pamarcos)). [#109082](https://github.com/ClickHouse/ClickHouse/pull/109082) ([pamarcos](https://github.com/pamarcos)).

<h3 id="clickhouse-keeper-improvements">
  ClickHouse Keeper
</h3>

* Várias alterações no Keeper que o tornam cerca de 2x mais rápido em geral (melhor batching, envio de mensagens em pipeline ao líder e adições ao log em pipeline). [#101757](https://github.com/ClickHouse/ClickHouse/pull/101757) ([al13n321](https://github.com/al13n321)).
* Adiciona mais eventos de perfil do Keeper, tanto no servidor quanto no cliente, para watches. [#105336](https://github.com/ClickHouse/ClickHouse/pull/105336) ([scanhex12](https://github.com/scanhex12)).
* Adiciona uma nova tabela exclusiva do Keeper, `system.keeper_snapshots`, com informações sobre snapshots locais do ClickHouse Keeper. [#105571](https://github.com/ClickHouse/ClickHouse/pull/105571) ([mstetsyuk](https://github.com/mstetsyuk)).
* Adiciona uma nova tabela exclusiva do Keeper, `system.keeper_changelogs`, com informações sobre arquivos locais de changelog (log do Raft) do ClickHouse Keeper. [#105617](https://github.com/ClickHouse/ClickHouse/pull/105617) ([mstetsyuk](https://github.com/mstetsyuk)).
* Adiciona uma tabela exclusiva do Keeper, `system.keeper_cluster`. Contém uma linha para cada membro do cluster Raft, conforme identificado pelo Keeper atual. [#105646](https://github.com/ClickHouse/ClickHouse/pull/105646) ([mstetsyuk](https://github.com/mstetsyuk)).
* Reduz o pico de uso de memória ao aplicar snapshots recebidos no ClickHouse Keeper com `KeeperMemoryStorage`. [#105851](https://github.com/ClickHouse/ClickHouse/pull/105851) ([antonio2368](https://github.com/antonio2368)).
* Adiciona configurações de coordenação do Keeper (`coordination_settings`) para limitar a admissão de entradas de log não confirmadas do `NuRaft` e aplicar throttling a sondagens reversas de append-entries. [#106108](https://github.com/ClickHouse/ClickHouse/pull/106108) ([antonio2368](https://github.com/antonio2368)).

<h3 id="memory-management-improvements">
  Gerenciamento de memória
</h3>

* Corrigidas mensagens de erro de sintaxe que poderiam incluir bytes da memória adjacente após o analisador retroceder além do fim de uma instrução. [#105086](https://github.com/ClickHouse/ClickHouse/pull/105086) ([groeneai](https://github.com/groeneai)).
* Reduzido o uso de memória ao abrir um backup (para `RESTORE` ou como base de um `BACKUP` incremental). Os metadados `.backup` agora são processados como um fluxo, em vez de serem carregados em uma árvore de documentos XML na memória, o que evita a alocação de uma árvore DOM de vários gigabytes para backups grandes, especialmente incrementais. [#109107](https://github.com/ClickHouse/ClickHouse/pull/109107) ([jkartseva](https://github.com/jkartseva)).
* Reduzido o pico de uso de memória ao finalizar um `BACKUP`. A gravação dos metadados do backup não copia mais as informações de todos os arquivos para um vetor temporário (o que, em backups com milhões de arquivos, consumia transitoriamente vários gigabytes); agora, as informações são percorridas no próprio local. [#109861](https://github.com/ClickHouse/ClickHouse/pull/109861) ([jkartseva](https://github.com/jkartseva)).

<h3 id="data-formats-improvements">
  Formatos de dados
</h3>

* Agora, os usuários podem inserir campos Fixed do Avro para variantes de inteiros de 8/16/32/64 bits. [#98139](https://github.com/ClickHouse/ClickHouse/pull/98139) ([patrickpichler](https://github.com/patrickpichler)).
* O formato `AvroConfluent` agora repete as tentativas do cliente HTTP do Confluent Schema Registry em caso de falhas transitórias (timeouts de transporte, conexão recusada, erros de DNS, HTTP `5xx`/`408`/`429`), com backoff exponencial, em vez de abortar o INSERT na primeira falha de rede. As novas configurações `format_avro_schema_registry_max_retries` (padrão `5`) e `format_avro_schema_registry_retry_initial_backoff_ms` (padrão `100`) controlam essa política. Erros de validação de schema (HTTP `409`, JSON do Avro malformado) continuam sendo fatais. [#106661](https://github.com/ClickHouse/ClickHouse/pull/106661) ([groeneai](https://github.com/groeneai)).
* Preservados os códigos de erro originais do ClickHouse para erros retornados pelo Apache Arrow. [#107267](https://github.com/ClickHouse/ClickHouse/pull/107267) ([azat](https://github.com/azat)).

<h3 id="named-collections-and-dictionaries">
  Coleções nomeadas e dicionários
</h3>

* Adicionada a configuração `enable_compression` à função de tabela `mysql`, ao mecanismo de tabela `MySQL`, ao mecanismo de banco de dados `MySQL`, à fonte de dicionário `SOURCE(MYSQL)` e às coleções nomeadas. Quando ativada, o ClickHouse negocia a compressão no nível do protocolo MySQL para todos os dados transferidos pela conexão. [#103229](https://github.com/ClickHouse/ClickHouse/pull/103229) ([bernardlim](https://github.com/bernardlim)).
* Adicionada uma nova tabela `system.dictionary_layouts`, que lista os layouts de dicionário disponíveis juntamente com a documentação embutida (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106182](https://github.com/ClickHouse/ClickHouse/pull/106182) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Adicionada uma nova tabela `system.dictionary_sources`, que lista as fontes de dicionário disponíveis juntamente com a documentação embutida (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106184](https://github.com/ClickHouse/ClickHouse/pull/106184) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* O tipo de armazenamento efetivo das coleções nomeadas agora está disponível como `named_collections_storage.type` em `system.server_settings` e por meio de `getServerSetting('named_collections_storage_type')`. [#111806](https://github.com/ClickHouse/ClickHouse/pull/111806) ([pamarcos](https://github.com/pamarcos)).

<h3 id="other-improvements">
  Outras melhorias
</h3>

* Melhoradas as sugestões de nomes de tabelas nas mensagens de erro: não sugerem mais exatamente o mesmo nome e incluem o nome do banco de dados na sugestão (por exemplo, "Talvez você quis dizer other\_db.my\_table?"). [#95116](https://github.com/ClickHouse/ClickHouse/pull/95116) ([matt-metivier](https://github.com/matt-metivier)).
* Melhorada a mensagem de erro para identificadores não resolvidos em consultas sem cláusula FROM, sugerindo adicionar uma. [#101769](https://github.com/ClickHouse/ClickHouse/pull/101769) ([Onyx2406](https://github.com/Onyx2406)).
* Corrigido o `PREWHERE` com subconsulta `IN` em colunas de chave primária que não usava o índice de chave primária para eliminação de grânulos, causando varreduras completas da tabela em vez de ler apenas os grânulos relevantes. [#102570](https://github.com/ClickHouse/ClickHouse/pull/102570) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* As views materializadas atualizáveis agora continuam sendo atualizadas após a substituição de sua tabela de destino com `EXCHANGE TABLES` e a remoção da tabela antiga. Anteriormente, as atualizações podiam falhar com uma exceção `UNKNOWN_TABLE` porque mantinham o UUID da tabela antiga. [#102724](https://github.com/ClickHouse/ClickHouse/pull/102724) ([seva-potapov](https://github.com/seva-potapov)).
* Ative `enable_join_transitive_predicates` por padrão. [#103724](https://github.com/ClickHouse/ClickHouse/pull/103724) ([davenger](https://github.com/davenger)).
* A view materializada atualizável agora oferece suporte a `REFRESH DEPENDS ON` para disparar atualizações com base nas atualizações de outra RMV, em vez de em um agendamento baseado em tempo. (`REFRESH EVERY ... DEPENDS ON` já existia, mas não podia ser usado de forma confiável para esse caso de uso.) Consulte a documentação de CREATE MATERIALIZED VIEW. [#104440](https://github.com/ClickHouse/ClickHouse/pull/104440) ([al13n321](https://github.com/al13n321)).
* Adicionada a opção `EXPLAIN PIPELINE` para compactar cadeias repetidas de processadores. [#104662](https://github.com/ClickHouse/ClickHouse/pull/104662) ([niyue](https://github.com/niyue)).
* Adicionado `REGEXP_SUBSTR` como um alias de `regexpExtract` que não diferencia maiúsculas de minúsculas, para compatibilidade com Oracle/MySQL/Snowflake. [#105122](https://github.com/ClickHouse/ClickHouse/pull/105122) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Adicionado `date_part('unit', expr)` como açúcar sintático para `EXTRACT(unit FROM expr)`. Há suporte a todos os tipos de intervalo padrão e aos extras do PostgreSQL (`epoch`, `dow`, `doy`, `isodow`, `isoyear`, `century`, `decade`, `millennium`). [#105127](https://github.com/ClickHouse/ClickHouse/pull/105127) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* O `QueryConditionCache` agora registra individualmente os grânulos filtrados, inclusive em lotes de leitura que passam parcialmente pelo PREWHERE, reduzindo o número de marcas relidas por consultas subsequentes com a mesma condição. [#105335](https://github.com/ClickHouse/ClickHouse/pull/105335) ([hanfei1991](https://github.com/hanfei1991)).
* Adicionado suporte a BFloat16 para funções de predicados numéricos. [#105391](https://github.com/ClickHouse/ClickHouse/pull/105391) ([mohhddhassan](https://github.com/mohhddhassan)).
* Adicionado suporte a estatísticas básicas, uma estatística compacta por coluna que armazena valores numéricos mínimo/máximo, comprimento médio de strings e contagens de NULL quando aplicável. [#106048](https://github.com/ClickHouse/ClickHouse/pull/106048) ([hanfei1991](https://github.com/hanfei1991)).
* Adicionado suporte a um modificador `NULL` / `NOT NULL` ao final de `ALTER TABLE ... ADD/MODIFY COLUMN`, espelhando `CREATE TABLE`. [#106150](https://github.com/ClickHouse/ClickHouse/pull/106150) ([takumihara](https://github.com/takumihara)).
* O otimizador PREWHERE agora agrupa conjunções que fazem referência ao mesmo conjunto de colunas antes de estimar a seletividade, para que condições como `a > 2500 AND a < 2502` sejam avaliadas em conjunto como um intervalo combinado (\~0,02% de seletividade), em vez de dois predicados independentes (\~50% cada). Isso resulta em uma ordenação mais precisa das condições PREWHERE quando há estatísticas de coluna disponíveis. [#106337](https://github.com/ClickHouse/ClickHouse/pull/106337) ([hanfei1991](https://github.com/hanfei1991)).
* Não exibir o preâmbulo "Rastreamento de pilha (ao copiar esta mensagem, sempre inclua as linhas abaixo):" nas mensagens de exceção quando o rastreamento de pilha estiver vazio. [#106524](https://github.com/ClickHouse/ClickHouse/pull/106524) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigido o `CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM)` em discos criptografados, que copiava os dados em vez de criar links físicos. [#106731](https://github.com/ClickHouse/ClickHouse/pull/106731) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Corrigida a leitura de dados de tabelas por bancos de dados `DataLakeCatalog` com `catalog_type = 'onelake'`, que agora usa o endpoint Blob do OneLake (`.blob.fabric.microsoft.com`) por padrão. Defina `onelake_use_blob_endpoint = false` para manter o comportamento anterior do endpoint DFS (`.dfs.fabric.microsoft.com`). [#106843](https://github.com/ClickHouse/ClickHouse/pull/106843) ([scanhex12](https://github.com/scanhex12)).
* Reduzida a sobrecarga de CPU do logging assíncrono em altas taxas de logs, notificando o consumidor de logs apenas na transição da fila de vazia para não vazia, em vez de a cada mensagem. [#107352](https://github.com/ClickHouse/ClickHouse/pull/107352) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Corrigida a leitura do comprimento de `auth_response` no handshake do MySQL, em que um byte de comprimento `>= 128` era interpretado como um valor de vários gigabytes por ser lido como um `char` com sinal. [#107384](https://github.com/ClickHouse/ClickHouse/pull/107384) ([uwezkhan](https://github.com/uwezkhan)).
* `MaterializedPostgreSQL` agora mapeia colunas PostgreSQL `numeric(p, 0)` com precisão maior que 76 (por exemplo, `numeric(78, 0)`, usado para inteiros de 256 bits) para `Int256` do ClickHouse, em vez de falhar com "Precisão muito grande". Valores que não cabem em `Int256` são rejeitados com uma mensagem de erro clara. [#107431](https://github.com/ClickHouse/ClickHouse/pull/107431) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Nullable(Tuple(...))` agora está em Beta. Desabilitado por padrão; defina `enable_nullable_tuple_type = 1` para usá-lo. [#107754](https://github.com/ClickHouse/ClickHouse/pull/107754) ([nihalzp](https://github.com/nihalzp)).
* As inserções assíncronas não registram mais a lista completa de `query_id`s no nível `trace`/`debug`, o que, desde a versão 26.2, poderia fazer `text_log` crescer excessivamente em serviços com tráfego intenso de inserções assíncronas. As linhas detalhadas agora são registradas no nível `test`. [#107852](https://github.com/ClickHouse/ClickHouse/pull/107852) ([CheSema](https://github.com/CheSema)).
* Reduzido o uso de metadados do cache do sistema de arquivos com a liberação imediata de entradas de prioridade invalidadas. [#107903](https://github.com/ClickHouse/ClickHouse/pull/107903) ([kssenii](https://github.com/kssenii)).
* Um índice de salto `bloom_filter` em uma coluna `Array` agora é usado para `arrayJoin(column) IN (set)`, `arrayJoin(column) GLOBAL IN (set)` e `arrayJoin(column) = const`, da mesma forma que já era usado para `hasAny(column, set)` e `has(column, const)`. Anteriormente, essas formas de `arrayJoin ...` recorriam a uma varredura completa. [#109536](https://github.com/ClickHouse/ClickHouse/pull/109536) ([groeneai](https://github.com/groeneai)).
* `IS NOT DISTINCT FROM` e `IS TRUE` agora usam índices de chave primária e minmax para eliminar grânulos, assim como `=`. Antes, `k IS NOT DISTINCT FROM 42` e `(k = 42) IS TRUE` examinavam todos os grânulos. [#110006](https://github.com/ClickHouse/ClickHouse/pull/110006) ([groeneai](https://github.com/groeneai)).

<h2 id="bug-fixes">
  Correção de bugs
</h2>

<h3 id="join-fixes">
  Correções relacionadas a JOIN
</h3>

* Corrigida a função `nested` (usada internamente por `ARRAY JOIN`), que removia `LowCardinality` dos tipos de coluna e fazia com que `Array(LowCardinality(String))` se tornasse `Array(String)` na saída. [#98974](https://github.com/ClickHouse/ClickHouse/pull/98974) ([Onyx2406](https://github.com/Onyx2406)).
* Corrigida a reordenação de junções que descartava silenciosamente linhas sem correspondência de um `RIGHT`/`LEFT JOIN` quando ele era combinado por vírgula (cross join) com outra tabela, por exemplo, `t1 RIGHT JOIN t2 ON t1.c = t2.c, t3`. Antes, a consulta retornava o resultado de uma junção interna em vez do resultado de uma junção externa. [#101684](https://github.com/ClickHouse/ClickHouse/pull/101684) ([groeneai](https://github.com/groeneai)).
* Corrigido um `LOGICAL_ERROR` ("Port is not connected", código 49) que podia ocorrer ao executar consultas envolvendo uma VIEW com agregação dentro de um JOIN.. [#102574](https://github.com/ClickHouse/ClickHouse/pull/102574) ([Ergus](https://github.com/Ergus)).
* Corrigido o problema de `max_rows_to_transfer` e `max_bytes_to_transfer` serem silenciosamente ignorados em consultas `GLOBAL IN` e `GLOBAL JOIN` com o novo analisador. As configurações agora geram `SET_SIZE_LIMIT_EXCEEDED` (ou interrompem a execução, dependendo de `transfer_overflow_mode`) quando a tabela externa materializada excede o limite configurado, reproduzindo o comportamento do analisador antigo. [#104119](https://github.com/ClickHouse/ClickHouse/pull/104119) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos ou falhas em consultas `JOIN` que usam `join_algorithm = 'direct'` com uma tabela `MergeTree` no lado direito quando a otimização reordenava as colunas de pesquisa. [#104174](https://github.com/ClickHouse/ClickHouse/pull/104174) ([groeneai](https://github.com/groeneai)).
* Corrigido um bug em que consultas que combinavam `arrayJoin` com `ORDER BY ... LIMIT` após um `JOIN` podiam retornar silenciosamente zero linhas. A otimização do plano de consulta que move a avaliação de funções para acima de `SortingStep` não se aplica mais quando a expressão movida contém `arrayJoin`, pois `arrayJoin` pode alterar o número de linhas. [#104558](https://github.com/ClickHouse/ClickHouse/pull/104558) ([groeneai](https://github.com/groeneai)).
* Corrigido um erro lógico em `LIMIT BY` negativo, em alguns casos, quando usado com `ARRAY JOIN`. [#105403](https://github.com/ClickHouse/ClickHouse/pull/105403) ([nihalzp](https://github.com/nihalzp)).
* Adicionada uma nova configuração de compatibilidade `analyzer_compatibility_prefer_alias_over_subcolumn` (desabilitada por padrão). Quando habilitada, o novo analisador prioriza a interpretação de prefixo de alias em vez de correspondências de subcolunas de Tuple/colunas com ponto para identificadores compostos, restaurando o comportamento do interpretador anterior. Isso evita erros `AMBIGUOUS_IDENTIFIER` (e relacionados) quando uma consulta une uma tabela cujo nome corresponde a uma tabela interna de uma CTE/subconsulta que usa `SELECT *` em uma junção, em que colunas renomeadas pelo asterisco (por exemplo, `b.id`) poderiam, de outra forma, fazer os identificadores da tabela interna vazarem para o escopo externo. [#105491](https://github.com/ClickHouse/ClickHouse/pull/105491) ([vdimir](https://github.com/vdimir)).
* Corrigidos resultados possivelmente incorretos em consultas que combinam uma junção externa com uma junção interna subsequente que referencia o lado da junção externa que fornece valores nulos. A reordenação de junções podia escolher um plano que movia as condições da junção interna para a cláusula ON da junção externa. [#105992](https://github.com/ClickHouse/ClickHouse/pull/105992) ([vdimir](https://github.com/vdimir)).
* Melhorada a compatibilidade com o analisador antigo. Se a tabela tiver colunas como `x.a Array, x.b Array, x String`, prefira arrays para `ARRAY JOIN x`. [#106069](https://github.com/ClickHouse/ClickHouse/pull/106069) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrigida uma exceção em consultas `INNER JOIN` com uma tabela `MergeTree` vazia no lado esquerdo quando `enable_parallel_replicas`, `query_plan_use_new_logical_join_step` e `query_plan_optimize_join_order_algorithm = 'greedy'` estão habilitados. [#106338](https://github.com/ClickHouse/ClickHouse/pull/106338) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige um erro lógico (`Left and right columns have same names`) no otimizador de ordem de junção que poderia ocorrer em junções executadas com réplicas paralelas quando duas relações no grafo de junção compartilham nomes de colunas. [#106418](https://github.com/ClickHouse/ClickHouse/pull/106418) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige uma `LOGICAL_ERROR` (`Invalid number of rows in Chunk`) em `JoiningTransform` para um `LEFT JOIN` com chaves exclusivas no lado direito, uma condição `ON` mista e um `max_joined_block_size_rows` pequeno. [#106928](https://github.com/ClickHouse/ClickHouse/pull/106928) ([groeneai](https://github.com/groeneai)).
* Corrige uma exceção (`LOGICAL_ERROR`) no filtro de runtime de JOIN quando a chave de junção contém um tipo `Variant` ou `Dynamic` aninhado em uma `Tuple`, `Array` ou `Map`, e o lado direito da junção tem um único valor distinto. [#106931](https://github.com/ClickHouse/ClickHouse/pull/106931) ([groeneai](https://github.com/groeneai)).
* Corrige uma `LOGICAL_ERROR` (`Expected the argument N to have X rows, but it has Y`) ao executar uma função em uma coluna `Dynamic` criada por um JOIN em `Dynamic` (por exemplo, as linhas sem correspondência de um `RIGHT`/`FULL JOIN` ou uma subconsulta `EXISTS` correlacionada e descorrelacionada em uma junção). [#107095](https://github.com/ClickHouse/ClickHouse/pull/107095) ([groeneai](https://github.com/groeneai)).
* Corrige uma exceção de erro lógico `Bad cast from type DB::IColumn const* to DB::ColumnNullable const*` quando um asterisco qualificado (`t.*`) aplicado a uma chave `JOIN ... USING` é passado a uma função de agregação, e o outro lado de um OUTER JOIN tem uma chave `Nullable` (com `join_use_nulls = 0`). [#107129](https://github.com/ClickHouse/ClickHouse/pull/107129) ([groeneai](https://github.com/groeneai)).
* Corrige um erro lógico (`Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8`) quando a otimização de push-down de disjunção (predicado parcial) envia uma condição para uma chave `USING` cujo tipo é ampliado pelo JOIN. Também corrige uma falha do servidor (falha de segmentação) no analisador ao resolver identificadores em consultas `JOIN ... USING` que contêm ramificações `if`/`multiIf` passíveis de redução a constantes e que referenciam identificadores desconhecidos. [#107407](https://github.com/ClickHouse/ClickHouse/pull/107407) ([groeneai](https://github.com/groeneai)).
* Corrige o filtro de runtime de JOIN que produzia resultados incorretos para colunas JSON. [#107663](https://github.com/ClickHouse/ClickHouse/pull/107663) ([Avogar](https://github.com/Avogar)).
* Corrige uma exceção de erro lógico `Bad cast from type DB::ColumnNullable to DB::ColumnVector<...>` quando um asterisco qualificado (`t.*`) seleciona uma chave `JOIN USING` e essa junção está aninhada abaixo de uma junção `PASTE`/`CROSS`/por vírgula ou de uma junção `ON` externa, com `join_use_nulls = 0`. [#108043](https://github.com/ClickHouse/ClickHouse/pull/108043) ([groeneai](https://github.com/groeneai)).
* Corrige um bug no novo analisador em que FINAL em uma tabela de um JOIN (por exemplo, `FROM t1 FINAL JOIN t2`) também era aplicado incorretamente às demais tabelas da junção, o que poderia tornar essas consultas mais lentas. [#108979](https://github.com/ClickHouse/ClickHouse/pull/108979) ([vdimir](https://github.com/vdimir)).
* Com `analyzer_compatibility_join_using_top_level_identifier = 1`, um identificador em `JOIN ... USING` agora pode ser resolvido a partir de um alias definido em uma subexpressão na lista SELECT (por exemplo, `SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id)`), reproduzindo o comportamento do analisador antigo. Anteriormente, apenas aliases de projeção de nível superior eram considerados, e essas consultas falhavam com uma exceção `UNKNOWN_IDENTIFIER` mesmo com a configuração ativada. A dica de erro que sugere essa configuração agora também é exibida quando o alias correspondente está aninhado. [#110739](https://github.com/ClickHouse/ClickHouse/pull/110739) ([novikd](https://github.com/novikd)).
* Corrigido o erro `INCOMPATIBLE_TYPE_OF_JOIN` em uma junção `ANY` com uma tabela do mecanismo `Join` quando um filtro `WHERE` em uma coluna do lado direito permitia que o planejador de consultas reescrevesse a junção como `SEMI` ou `ANTI`. Uma tabela do mecanismo `Join` tem uma strictness declarada fixa, que não pode ser alterada; por isso, essa conversão agora é recusada para essas tabelas. [#111362](https://github.com/ClickHouse/ClickHouse/pull/111362) ([groeneai](https://github.com/groeneai)).
* Corrigido `TYPE_MISMATCH` ("O tipo da chave complexa ... não corresponde") quando um `JOIN` com um dicionário usa uma chave de junção `Nullable`, `LowCardinality` ou `LowCardinality(Nullable)`, enquanto a chave do dicionário não está encapsulada. A busca no dicionário para a junção direta agora normaliza a chave para o tipo de chave declarado do dicionário (como `dictGet`/`dictHas` já fazem), e uma chave `NULL` nunca encontra correspondência. [#111857](https://github.com/ClickHouse/ClickHouse/pull/111857) ([groeneai](https://github.com/groeneai)).
* Corrigido `AMBIGUOUS_COLUMN_NAME` (`Incompatibilidade na estrutura do bloco em (colunas com o mesmo nome devem ter estruturas idênticas)`) para uma consulta que repete uma condição `JOIN ON` em `WHERE` com `join_use_nulls = 1`. Essa consulta agora retorna o resultado em vez de falhar. [#112007](https://github.com/ClickHouse/ClickHouse/pull/112007) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos ou o encerramento do servidor em `JOIN`s diretos com dicionários cuja chave usa serialização esparsa. [#112327](https://github.com/ClickHouse/ClickHouse/pull/112327) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos quando uma junção hash tem uma única chave `LowCardinality` de um tipo com mais de 8 bytes (`UInt128`, `Int128`, `UInt256`, `Int256` e suas variantes `Nullable`). Essa junção retornava silenciosamente linhas cujos valores de chave eram diferentes. [#113230](https://github.com/ClickHouse/ClickHouse/pull/113230) ([groeneai](https://github.com/groeneai)).
* Corrigida a poda de partes e grânulos para uma condição `JOIN ON` que envolve colunas constantes do outro lado. [#113484](https://github.com/ClickHouse/ClickHouse/pull/113484) ([vdimir](https://github.com/vdimir)).
* Corrigido o retorno de um valor incorreto para uma coluna virtual como `_table` ou `_database`, selecionada do lado direito de um `JOIN` atendido por `DirectKeyValueJoin` (um armazenamento de chave-valor, como `EmbeddedRocksDB`, `KeeperMap`, `Redis` ou um dicionário). A consulta retornava o conteúdo de uma coluna de dados ou falhava com `LOGICAL_ERROR`. [#113698](https://github.com/ClickHouse/ClickHouse/pull/113698) ([groeneai](https://github.com/groeneai)).

<h3 id="query-and-analyzer-fixes">
  Correções de consultas e do analisador
</h3>

* Corrige um bug em que splitMultipartQuery gerava o erro "Consulta vazia" para consultas que terminavam com um comentário após o ponto e vírgula. [#85491](https://github.com/ClickHouse/ClickHouse/pull/85491) ([yariks5s](https://github.com/yariks5s)).
* Corrige o caso em que um alias após uma subconsulta em DESCRIBE TABLE não era aceito pelo analisador sintático e resultava em erro de sintaxe. [#100205](https://github.com/ClickHouse/ClickHouse/pull/100205) ([yariks5s](https://github.com/yariks5s)).
* Corrige o caso em que a cláusula `FORMAT` era consumida por `INSERT`, em vez de ser aplicada à saída de `EXPLAIN` em `EXPLAIN INSERT INTO ... SELECT ... FORMAT ...`. [#101772](https://github.com/ClickHouse/ClickHouse/pull/101772) ([Onyx2406](https://github.com/Onyx2406)).
* Corrige a lentidão significativa de consultas SELECT quando INSERTs simultâneos estão em execução. Anteriormente, um pipeline de INSERT reservava slots de CPU até `max_threads` no início da consulta, mesmo que a maioria deles nunca fosse usada, privando SELECTs simultâneos de recursos. A alocação de slots de CPU agora é orientada pela demanda: o pipeline solicita slots apenas à medida que envia trabalho paralelizável. Isso se aplica tanto ao controle de simultaneidade quanto ao scheduler de CPU preemptivo para workloads. A nova configuração do servidor `concurrent_threads_lazy_allocation` (padrão `true`) funciona como um mecanismo de rollback. [#102928](https://github.com/ClickHouse/ClickHouse/pull/102928) ([seva-potapov](https://github.com/seva-potapov)).
* Corrige um bug em que `ALTER TABLE ... MODIFY SETTING` em uma tabela `EmbeddedRocksDB` podia persistir um valor de configuração inválido no arquivo de metadados da tabela, mesmo quando o servidor rejeitava a consulta. Na reinicialização seguinte do servidor, não era possível anexar a tabela devido a `CANNOT_PARSE_BOOL` (ou a um erro de análise semelhante) e, em bancos de dados nos quais falhas de carregamento são fatais, o servidor se recusava a iniciar. Valores de configuração inválidos agora são rejeitados antes da gravação de qualquer metadado. [#103417](https://github.com/ClickHouse/ClickHouse/pull/103417) ([groeneai](https://github.com/groeneai)).
* Corrige o `INSERT` em streaming com `input_format_max_block_wait_ms` para a interface `HTTP` e para `INSERT SELECT FROM input`, para que blocos de entrada parciais sejam liberados antes do término da solicitação. [#104534](https://github.com/ClickHouse/ClickHouse/pull/104534) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige a expressão `CASE`, que retornava a ramificação `ELSE` em vez da ramificação `THEN` correspondente quando tanto a expressão quanto um valor `WHEN` eram `NULL`. [#105556](https://github.com/ClickHouse/ClickHouse/pull/105556) ([Algunenano](https://github.com/Algunenano)).
* Corrige o suporte ao uso de UDFs SQL `WASM` em definições de `MATERIALIZED VIEW`. [#106161](https://github.com/ClickHouse/ClickHouse/pull/106161) ([niyue](https://github.com/niyue)).
* Corrige `INTERPOLATE ()` gerando `INVALID_WITH_FILL_EXPRESSION` quando colunas de ORDER BY recebem aliases na lista SELECT com o analisador antigo. [#106252](https://github.com/ClickHouse/ClickHouse/pull/106252) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* As funções `base58Encode`, `base58Decode` e `tryBase58Decode` agora respeitam `max_execution_time` e o cancelamento de consultas para entradas grandes, além de rejeitarem entradas maiores que 10 KB, em vez de serem executadas por muito tempo. O limite é configurável pela nova configuração `function_base58_max_input_size` (`0` o desativa). [#106428](https://github.com/ClickHouse/ClickHouse/pull/106428) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige um bug de resultados incorretos em que `WHERE c0 = const` não retornava linhas para tabelas com `ORDER BY f(c0)` quando `f(const)` era avaliado como NaN, por exemplo, `ORDER BY sqrt(c0)` com uma constante negativa. A análise da chave primária descartava incorretamente todos os grânulos e corrompia o cache de condições de consulta para consultas subsequentes. [#106507](https://github.com/ClickHouse/ClickHouse/pull/106507) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos para `SELECT c, count() FROM t WHERE c GROUP BY c` em tabelas com a `_minmax_count_projection` implícita, uma projeção agregada explícita ou uma projeção normal: todos os grupos eram reduzidos a uma única linha com uma chave constante e a contagem total de linhas. [#106590](https://github.com/ClickHouse/ClickHouse/pull/106590) ([groeneai](https://github.com/groeneai)).
* Agora `FORMAT` também se aplica à saída de `EXPLAIN` em `EXPLAIN ... INSERT ... SELECT ... FORMAT ...` quando `SETTINGS` precede `FORMAT` ou o formato de saída é `Values`. [#106686](https://github.com/ClickHouse/ClickHouse/pull/106686) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigido um raro erro espúrio de `RESOURCE_ACCESS_DENIED` ("Scheduler queue with resource request is about to be destructed") em uma consulta que de fato tinha recebido acesso a um recurso de workload, causado pela reutilização de um objeto de solicitação local à thread que mantinha a falha de uma solicitação anterior. [#106690](https://github.com/ClickHouse/ClickHouse/pull/106690) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigido o retorno de resultados incorretos por `match`, `extract`, `extractAll` e `countMatches` para expressões regulares contendo escapes hexadecimais ou octais. [#106709](https://github.com/ClickHouse/ClickHouse/pull/106709) ([ofeliacode](https://github.com/ofeliacode)).
* Corrigido um underflow de inteiro no analisador do protocolo wire do PostgreSQL, em que uma mensagem com um campo de comprimento menor que 4 causava um wraparound em `size - 4` e um `resize`/`ignore` excessivamente grande. [#107485](https://github.com/ClickHouse/ClickHouse/pull/107485) ([uwezkhan](https://github.com/uwezkhan)).
* Com `enable_analyzer = 1` (o padrão), consultar uma tabela pelo nome simples quando ela existe apenas em outro banco de dados agora sugere a tabela correta; por exemplo, `SELECT * FROM functions` informa `Maybe you meant system.functions?`. Anteriormente, o novo analisador retornava o erro `Unknown table expression identifier` sem nenhuma dica, enquanto o analisador antigo já fornecia essa sugestão útil. [#107550](https://github.com/ClickHouse/ClickHouse/pull/107550) ([groeneai](https://github.com/groeneai)).
* Corrigido um abort do servidor (`std::terminate`, sinal 6) durante o encerramento de uma consulta com plano distribuído (`make_distributed_plan = 1`) quando uma verificação de status de worker não conseguia reagendar a próxima verificação (por exemplo, `CANNOT_SCHEDULE_TASK` durante o desligamento ou `MEMORY_LIMIT_EXCEEDED`). Agora, a consulta falha corretamente e o servidor permanece em execução. [#107575](https://github.com/ClickHouse/ClickHouse/pull/107575) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos de consultas distribuídas que selecionavam colunas `ALIAS` com uma subexpressão comum: as colunas podiam ficar desalinhadas e os valores eram retornados na coluna errada. [#107675](https://github.com/ClickHouse/ClickHouse/pull/107675) ([vdimir](https://github.com/vdimir)).
* Corrigido um erro lógico `Inconsistent AST formatting` em uma função de janela sem argumentos dentro de uma declaração `CODEC` ou de mecanismo (por exemplo, `CODEC(cume_dist() OVER (...))`); essa função agora mantém os parênteses para que a consulta preserve sua integridade após um ciclo de formatação/análise. [#107806](https://github.com/ClickHouse/ClickHouse/pull/107806) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `getClientHTTPHeader` agora é corretamente tratado como não determinístico, portanto seu resultado não é mais reutilizado incorretamente pelo cache de resultados de consulta. [#108029](https://github.com/ClickHouse/ClickHouse/pull/108029) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigidos resultados incorretos ao usar `SELECT [...] SAMPLE [...]` junto com o cache de condições de consulta (configuração `use_query_condition_cache = 1`, que também é o padrão). [#108488](https://github.com/ClickHouse/ClickHouse/pull/108488) ([groeneai](https://github.com/groeneai)).
* Corrige `NOT_FOUND_COLUMN_IN_BLOCK` quando um predicado composto recebe um alias em `GROUP BY` e é referenciado novamente, com `enable_identifier_resolve_cache` habilitado (o padrão). A otimização `optimize_and_compare_chain` não era idempotente, e um nó resolvido compartilhado acumulava uma conjunção transitiva duplicada. [#108553](https://github.com/ClickHouse/ClickHouse/pull/108553) ([groeneai](https://github.com/groeneai)).
* Corrige o erro `NUMBER_OF_COLUMNS_DOESNT_MATCH` quando uma subconsulta em uma tabela `Distributed` lê duas ou mais colunas `ALIAS` que se expandem para a mesma expressão (por exemplo, `a1 String ALIAS toString(x), a2 String ALIAS toString(x)`) e alimenta uma consulta externa, por exemplo, `SELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2)`. [#108725](https://github.com/ClickHouse/ClickHouse/pull/108725) ([groeneai](https://github.com/groeneai)).
* Corrige o erro `UNKNOWN_IDENTIFIER` em `ALTER TABLE ... DROP COLUMN` quando outra coluna tem uma expressão `DEFAULT` ou `MATERIALIZED` que define e referencia um alias inline. [#109374](https://github.com/ClickHouse/ClickHouse/pull/109374) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige o fato de `system.tables` ignorar silenciosamente bancos de dados para usuários com permissões por banco de dados quando a consulta lê apenas as colunas `name`/`database`. Introduzido na versão 26.2. [#109723](https://github.com/ClickHouse/ClickHouse/pull/109723) ([samay-sharma](https://github.com/samay-sharma)).
* Corrige o erro `UNKNOWN_IDENTIFIER` para colunas qualificadas pelo nome da CTE (`cte_name.column`) em consultas armazenadas em visualizações quando o analisador está habilitado. [#111386](https://github.com/ClickHouse/ClickHouse/pull/111386) ([novikd](https://github.com/novikd)).
* Corrige `NOT_FOUND_COLUMN_IN_BLOCK` quando uma consulta `FINAL` filtra por uma coluna da chave de ordenação que não está na lista `SELECT` e o filtro é movido para `PREWHERE` (por exemplo, `SELECT s FROM t FINAL WHERE k GROUP BY s` com `optimize_move_to_prewhere_if_final = 1`). [#111721](https://github.com/ClickHouse/ClickHouse/pull/111721) ([groeneai](https://github.com/groeneai)).
* Corrige a falha na inicialização do servidor e em `ATTACH` com `WITH RECURSIVE is not supported with the old analyzer` para uma visualização com uma CTE recursiva quando `enable_analyzer = 0` é o padrão do servidor. [#112784](https://github.com/ClickHouse/ClickHouse/pull/112784) ([evillique](https://github.com/evillique)).
* Corrige a propagação das configurações da consulta e o tratamento de NULL em `accurateCastOrDefault`. [#114912](https://github.com/ClickHouse/ClickHouse/pull/114912) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige `read_rows`, `read_bytes`, `written_rows` e `written_bytes` em `system.query_thread_log`, que reportavam o total acumulado ao longo do ciclo de vida da thread, em vez dos valores da consulta registrada. Linhas de threads de pool de longa duração, em particular a thread `HTTPHandler` que inicia a consulta, eram afetadas. [#115596](https://github.com/ClickHouse/ClickHouse/pull/115596) ([groeneai](https://github.com/groeneai)).

<h3 id="mergetree-and-storage-fixes">
  Correções no MergeTree e no armazenamento
</h3>

* Agora é possível descartar partes desanexadas com o sufixo `tryN`. [#58957](https://github.com/ClickHouse/ClickHouse/pull/58957) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* Corrigida uma exceção `MULTIPLE_EXPRESSIONS_FOR_ALIAS` em consultas com aliases de projeção duplicados (por exemplo, `SELECT *, day + 365 AS day`) dentro de subconsultas aninhadas executadas com réplicas paralelas. [#80310](https://github.com/ClickHouse/ClickHouse/pull/80310) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigida a seleção incorreta do codec de compressão para partes `MergeTree` quando a configuração `default_compression_codec` no nível da tabela era definida explicitamente. As partes gravadas durante inserções, merges e para projeções usavam o codec default do servidor, em vez da configuração no nível da tabela (isso também abrange agora a parte vazia produzida por uma mutation que exclui todos os dados). [#101784](https://github.com/ClickHouse/ClickHouse/pull/101784) ([Onyx2406](https://github.com/Onyx2406)).
* Corrigidos erros `MULTIPLE_EXPRESSIONS_FOR_ALIAS` lançados por réplicas remotas ao executar consultas que referenciam aliases de projeção em `PREWHERE` / `WHERE` / `HAVING` / `QUALIFY` (por exemplo, `SELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c`) ou `SELECT *` em autojoins com nomes de colunas sobrepostos, usando réplicas paralelas e `parallel_replicas_local_plan = 0`. [#103806](https://github.com/ClickHouse/ClickHouse/pull/103806) ([groeneai](https://github.com/groeneai)).
* Corrigida uma patch part corrompida após `ALTER TABLE ... DROP PARTITION ID 'patch-...'`, seguido de `DETACH`/`ATTACH TABLE`. Anteriormente, a parte de cobertura vazia era gravada sem `partition.dat` e `source_parts.dat`, resultando em uma entrada `broken-on-start_patch-...` em `system.detached_parts` após o próximo anexo ou a reinicialização do servidor. [#104353](https://github.com/ClickHouse/ClickHouse/pull/104353) ([groeneai](https://github.com/groeneai)).
* Corrigida a substituição silenciosa de dados por valores default quando `ALTER TABLE ... RENAME COLUMN` era executado simultaneamente com `OPTIMIZE TABLE ... FINAL` ou outro merge em segundo plano. [#104822](https://github.com/ClickHouse/ClickHouse/pull/104822) ([groeneai](https://github.com/groeneai)).
* Corrigidas duas situações que geravam `LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materialized` em consultas com `enable_materialized_cte`: (1) uma CTE materializada reutilizada e filtrada por `IN (subquery)` em outra CTE materializada e (2) uma CTE materializada referenciada diretamente e também em um filtro `WHERE ... IN (...)` que acessa uma chave primária MergeTree por meio de uma subconsulta IN aninhada. O `EXPLAIN` das mesmas consultas também era afetado, pois os erros ocorriam durante a otimização do plano. [#105041](https://github.com/ClickHouse/ClickHouse/pull/105041) ([novikd](https://github.com/novikd)).
* Com `skip_cache_on_disk_failure = 1`, as consultas agora continuam quando `FileCache` não consegue criar um diretório de cache no disco. A falha é registrada em log em vez de interromper a consulta. [#105250](https://github.com/ClickHouse/ClickHouse/pull/105250) ([Diskein](https://github.com/Diskein)).
* Corrigida a exceção de erro lógico `Mutation of Memory table produced incomplete output` gerada por `ALTER TABLE <memory_table> APPLY PATCHES` e `ALTER TABLE <memory_table> APPLY DELETED MASK`. As tabelas `Memory` não possuem patch parts nem máscaras de exclusão; portanto, ambos os comandos agora são corretamente tratados como operações sem efeito. [#105286](https://github.com/ClickHouse/ClickHouse/pull/105286) ([groeneai](https://github.com/groeneai)).
* Corrigido `CANNOT_CONVERT_TYPE` para `Merge` sobre `Merge` sobre `Distributed` com `distributed_group_by_no_merge=1` [#105330](https://github.com/ClickHouse/ClickHouse/pull/105330) ([azat](https://github.com/azat)).
* Corrigido o retorno de um valor concreto por `singleValueOrNullMerge`, em vez de `NULL`, ao mesclar um estado que já havia observado vários valores distintos. [#105734](https://github.com/ClickHouse/ClickHouse/pull/105734) ([fallintoplace](https://github.com/fallintoplace)).
* Corrige uma falha na função de tabela `mongodb`, no armazenamento MongoDB e na fonte de dicionário MongoDB quando o nome da coleção está vazio ou contém bytes NUL. [#105776](https://github.com/ClickHouse/ClickHouse/pull/105776) ([Algunenano](https://github.com/Algunenano)).
* Corrige a rejeição de `ALTER TABLE ... CLEAR COLUMN` para colunas `columns_to_sum` explicitamente definidas de `SummingMergeTree` e `CoalescingMergeTree`. [#105785](https://github.com/ClickHouse/ClickHouse/pull/105785) ([antonio2368](https://github.com/antonio2368)).
* Corrige erros `UNKNOWN_DATABASE` ao criar uma visualização parametrizada cujo nome do banco de dados é fornecido por meio de um parâmetro de consulta. [#105799](https://github.com/ClickHouse/ClickHouse/pull/105799) ([groeneai](https://github.com/groeneai)).
* Restaura a otimização de leitura em ordem para tabelas `Merge` ao usar o analisador. [#105867](https://github.com/ClickHouse/ClickHouse/pull/105867) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige mutações `UPDATE` e `DELETE` em tabelas Iceberg acessadas por meio de um catálogo, incluindo atualizações e exclusões repetidas que não correspondem a nenhuma linha. [#106111](https://github.com/ClickHouse/ClickHouse/pull/106111) ([scanhex12](https://github.com/scanhex12)).
* Corrige o problema em que `optimize_skip_unused_shards` não era aplicado (e force\_optimize\_skip\_unused\_shards falhava incorretamente) quando uma tabela `Distributed` era consultada por meio de uma tabela `Merge` ou da função de tabela `merge`, com o predicado aplicado acima dela. [#106250](https://github.com/ClickHouse/ClickHouse/pull/106250) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige um erro lógico `Column identifier ... is already registered` quando um predicado de mutação (`DELETE`/`UPDATE`) contém uma subconsulta `IN`/`EXISTS` que lê de uma expressão de tabela padrão aninhada em outra subconsulta. [#106414](https://github.com/ClickHouse/ClickHouse/pull/106414) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige resultados incorretos esporádicos em consultas `ORDER BY ... DESC` ao ler partes largas em ordem inversa com `read_in_order_use_virtual_row_per_block = 1` e um `max_block_size` pequeno. [#106429](https://github.com/ClickHouse/ClickHouse/pull/106429) ([vdimir](https://github.com/vdimir)).
* Corrige uma exceção `Bad cast exception` em dicionários Redis que usam `STORAGE_TYPE 'simple'` com layout `cache`/`direct` e uma única chave de string (complexa); esses dicionários agora funcionam, e chaves compostas no armazenamento `simple` geram um erro claro. [#106501](https://github.com/ClickHouse/ClickHouse/pull/106501) ([vdimir](https://github.com/vdimir)).
* Corrige a exceção `Mutation of Memory table produced incomplete output` gerada por comandos `ALTER TABLE <memory_table>` que não têm efeito nos dados por linha em um mecanismo `Memory`, incluindo `APPLY PATCHES`, `APPLY DELETED MASK`, `MATERIALIZE STATISTICS`, `MATERIALIZE INDEX`, `MATERIALIZE PROJECTION` e `REWRITE PARTS`. As tabelas `Memory` não possuem essas estruturas, portanto esses comandos agora são tratados como operações sem efeito. [#106621](https://github.com/ClickHouse/ClickHouse/pull/106621) ([groeneai](https://github.com/groeneai)).
* Corrige a falha na inicialização do servidor com `Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0)` quando uma tabela `MergeTree` tem uma parte de índice de salto com zero grânulos e um arquivo de marcas não vazio no disco. [#106675](https://github.com/ClickHouse/ClickHouse/pull/106675) ([groeneai](https://github.com/groeneai)).
* Corrige o caso em que réplicas paralelas não eram aplicadas a uma visualização com UNION devido a uma tabela vazia no UNION. [#106900](https://github.com/ClickHouse/ClickHouse/pull/106900) ([devcrafter](https://github.com/devcrafter)).
* Corrige uma exceção de erro lógico `conflicted_part_name.has_value()` que poderia ocorrer durante uma inserção síncrona em uma tabela `ReplicatedMergeTree` quando o bloco inserido era totalmente desduplicado e o nó de desduplicação da parte conflitante já tinha sido removido (por exemplo, por um `DROP PARTITION` concorrente). [#107026](https://github.com/ClickHouse/ClickHouse/pull/107026) ([groeneai](https://github.com/groeneai)).
* Corrige o raro `LOGICAL_ERROR` "Attempt to release query context that does not exist" e a falha do servidor associada ao ler tabelas `MergeTree` por meio de um disco de cache do sistema de arquivos criado com `enable_filesystem_query_cache_limit = 1`. [#107028](https://github.com/ClickHouse/ClickHouse/pull/107028) ([groeneai](https://github.com/groeneai)).
* Corrige uma falha do servidor ao mover uma parte vazia para um disco `plain_rewritable` (por exemplo, com `ALTER TABLE ... MOVE PARTITION ... TO DISK` em uma parte vazia preservada por `remove_empty_parts = 0`). [#107040](https://github.com/ClickHouse/ClickHouse/pull/107040) ([groeneai](https://github.com/groeneai)).
* Corrige uma exceção `Logical error: Too large size passed to allocator` em um `INSERT` em uma tabela `MergeTree` quando `adaptive_write_buffer_initial_size` está definido como um valor extremamente alto. O tamanho inicial do buffer de gravação adaptativo agora é limitado ao tamanho máximo do buffer. [#107104](https://github.com/ClickHouse/ClickHouse/pull/107104) ([groeneai](https://github.com/groeneai)).
* Corrige lotes `ALTER TABLE ... ON CLUSTER` que combinam `MODIFY SETTING`/`RESET SETTING` com uma alteração de comentário (por exemplo, `MODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123`) e eram aplicados apenas na réplica líder, deixando as demais réplicas divergentes. Também corrige um `MODIFY COLUMN ... COMMENT` `SETTINGS` posicional ou por coluna classificado incorretamente como uma alteração local de metadados apenas de comentário, o que deixava a reordenação de colunas fora dos metadados replicados e poderia causar `INCOMPATIBLE_COLUMNS` ao reiniciar a réplica. [#107142](https://github.com/ClickHouse/ClickHouse/pull/107142) ([groeneai](https://github.com/groeneai)).
* Corrige o erro `Argument ... of GROUPING function is not a part of GROUP BY clause` em consultas que usam a função `grouping` com a configuração `group_by_use_nulls` habilitada. [#107206](https://github.com/ClickHouse/ClickHouse/pull/107206) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige consultas `UPDATE` leves com réplicas paralelas legadas habilitadas em tabelas `MergeTree` não replicadas. [#107246](https://github.com/ClickHouse/ClickHouse/pull/107246) ([groeneai](https://github.com/groeneai)).
* Corrige uma possível exceção de erro lógico em SYSTEM SYNC DATABASE REPLICA ... STRICT e faz com que o modificador STRICT efetivamente se aplique às réplicas de banco de dados. [#107344](https://github.com/ClickHouse/ClickHouse/pull/107344) ([PedroTadim](https://github.com/PedroTadim)).
* Corrige `Logical error: 'Duplicate announcement received for replica number N'`, que poderia ocorrer com réplicas paralelas quando uma subconsulta escalar continha subconsultas aninhadas que liam a mesma tabela. [#107381](https://github.com/ClickHouse/ClickHouse/pull/107381) ([groeneai](https://github.com/groeneai)).
* Corrige a perda silenciosa de dados em `MergeTree` simples (não replicado) quando `REPLACE PARTITION`, `MOVE PARTITION`, `DETACH PARTITION` ou `DETACH PART` é executado em uma partição que ainda tem patches de `UPDATE` leves não aplicados. Essas operações agora rejeitam o comando (como `ReplicatedMergeTree` já faz), indicando `ALTER TABLE ... APPLY PATCHES`, em vez de reverter silenciosamente a atualização confirmada. [#107386](https://github.com/ClickHouse/ClickHouse/pull/107386) ([groeneai](https://github.com/groeneai)).
* Corrige o problema em que `MaterializedPostgreSQL` interrompia silenciosamente a replicação de alterações quando o nome do banco de dados ou da tabela PostgreSQL continha letras maiúsculas (o consumidor `pgoutput` solicitava um nome de publicação sem aspas e em minúsculas, que não correspondia à publicação com distinção entre maiúsculas e minúsculas). [#107423](https://github.com/ClickHouse/ClickHouse/pull/107423) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige o erro `THERE_IS_NO_COLUMN` quando `optimize_if_transform_strings_to_enum = 1` e a expressão otimizada `if`/`transform` sobre literais de string é uma chave de `GROUP BY` ou `ORDER BY` em uma tabela Distributed ou em réplicas paralelas. [#107455](https://github.com/ClickHouse/ClickHouse/pull/107455) ([groeneai](https://github.com/groeneai)).
* Corrigido o problema em que `SELECT ... FINAL` e `OPTIMIZE TABLE ... FINAL` retornavam linhas duplicadas após `CREATE TABLE ... CLONE AS`, `ATTACH PARTITION ... FROM` ou `MOVE PARTITION ... TO TABLE` adotarem partes de uma `MergeTree` simples em uma `ReplacingMergeTree`, `SummingMergeTree` ou `AggregatingMergeTree`. O nível de mesclagem da parte adotada agora é redefinido para 0 quando os mecanismos de origem e destino diferem, para que ela seja desduplicada na próxima mesclagem. [#107481](https://github.com/ClickHouse/ClickHouse/pull/107481) ([groeneai](https://github.com/groeneai)).
* O cancelamento de consultas agora é rastreado de forma mais adequada durante a espera pelo quórum em ReplicatedMergeTree. [#107513](https://github.com/ClickHouse/ClickHouse/pull/107513) ([nickitat](https://github.com/nickitat)).
* A memória usada pela biblioteca rapidjson (em `prettyPrintJSON`, `JSONMergePatch` e no analisador JSON do rapidjson) agora é contabilizada pelo rastreador de memória, para que entradas patológicas sejam rejeitadas com `MEMORY_LIMIT_EXCEEDED`, em vez de alocarem memória sem limite. [#107555](https://github.com/ClickHouse/ClickHouse/pull/107555) ([Algunenano](https://github.com/Algunenano)).
* Corrige um `Logical error: Stream ... variant_discr ... is not found` que podia ocorrer ao mesclar ou ler uma parte de uma `MergeTree` produzida por uma mutação de uma tabela com uma coluna `Dynamic`. [#107562](https://github.com/ClickHouse/ClickHouse/pull/107562) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige um `LOGICAL_ERROR` (`updateFormatPrewhereInfo called more than once`) gerado ao consultar uma fonte `file()`, `url()` ou de armazenamento de objetos com `PREWHERE` e `WHERE` explícitos quando `optimize_prewhere_after_pushdown` estava habilitado. [#107568](https://github.com/ClickHouse/ClickHouse/pull/107568) ([groeneai](https://github.com/groeneai)).
* Corrigida uma exceção do servidor (erro lógico `Digest does not match`) que podia ocorrer em `RENAME TABLE`, `RENAME DATABASE` ou `CREATE OR REPLACE TABLE` envolvendo uma tabela `TimeSeries` em um banco de dados `Replicated`. Agora há suporte para renomear tabelas `TimeSeries`. [#107583](https://github.com/ClickHouse/ClickHouse/pull/107583) ([groeneai](https://github.com/groeneai)).
* Corrige `DROP TABLE` de uma tabela `TimeSeries` em um banco de dados `Replicated`, que anteriormente deixava as tabelas internas órfãs e fazia com que a tarefa de remoção em segundo plano tentasse novamente indefinidamente (`DROP TABLE ... SYNC` ficava bloqueado). [#107604](https://github.com/ClickHouse/ClickHouse/pull/107604) ([groeneai](https://github.com/groeneai)).
* Corrigidos dois problemas de travessia de diretórios no protocolo de busca de partes replicadas que podiam permitir que uma réplica maliciosa gravasse arquivos fora do diretório da parte. [#107606](https://github.com/ClickHouse/ClickHouse/pull/107606) ([antonio2368](https://github.com/antonio2368)).
* Corrigido `ALTER TABLE ... REPLACE PARTITION` em uma tabela `MergeTree` simples, que fazia as partes substituídas reaparecerem após a reinicialização do servidor, fazendo com que a tabela retornasse tanto as linhas de substituição quanto as linhas obsoletas substituídas. [#107623](https://github.com/ClickHouse/ClickHouse/pull/107623) ([groeneai](https://github.com/groeneai)).
* Corrigido um `LOGICAL_ERROR` ("Block structure mismatch ... between `ConvertingTransform` and `RemovingReplicatedColumnsTransform`") ao inserir em uma visão materializada cuja tabela de destino `TO` declara uma coluna com um `Enum` mais amplo do que o produzido pelo `SELECT` da visão. A ampliação válida de `Enum` agora é aplicada no caminho de inserção da visão materializada, como em um `INSERT ... SELECT` direto. [#107648](https://github.com/ClickHouse/ClickHouse/pull/107648) ([groeneai](https://github.com/groeneai)).
* Corrige o erro `NUMBER_OF_COLUMNS_DOESNT_MATCH` ao consultar uma tabela `Distributed` (ou ao usar réplicas paralelas) que tenha várias colunas `ALIAS` expandidas para a mesma expressão e referenciá-las com `ORDER BY`/`GROUP BY`/`HAVING`. [#107913](https://github.com/ClickHouse/ClickHouse/pull/107913) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Um erro transitório durante a atualização das partes de dados de uma tabela somente leitura não interrompe mais permanentemente a tarefa de atualização em segundo plano. [#108034](https://github.com/ClickHouse/ClickHouse/pull/108034) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `index_granularity_bytes` agora é respeitado para colunas de estado `AggregateFunction`. Anteriormente, o limite de bytes por grânulo era ignorado para essas colunas (por exemplo, estados `uniqExact` em tabelas `AggregatingMergeTree` e projeções agregadas), produzindo grânulos muito maiores que o limite configurado e aumentando a amplificação de leitura e o uso de memória durante a consulta. [#108297](https://github.com/ClickHouse/ClickHouse/pull/108297) ([groeneai](https://github.com/groeneai)).
* Corrigido o fato de `insert_quorum = 'auto'` não rejeitar inserções antecipadamente quando menos da maioria das réplicas estava ativa. Essas inserções agora falham imediatamente com `TOO_FEW_LIVE_REPLICAS`, em vez de gravar uma parte local e, posteriormente, expirar com `UNKNOWN_STATUS_OF_INSERT`. [#108800](https://github.com/ClickHouse/ClickHouse/pull/108800) ([gagandhakrey](https://github.com/gagandhakrey)).
* Corrigida uma falha do servidor em inserções assíncronas com desduplicação quando `optimize_on_insert` torna vazio o bloco inserido (por exemplo, linhas cuja soma é zero em `SummingMergeTree`). [#109229](https://github.com/ClickHouse/ClickHouse/pull/109229) ([Diskein](https://github.com/Diskein)).
* Corrige a perda de dados de uma coluna sem expressão padrão quando uma mesclagem é executada simultaneamente com `ALTER TABLE ... RENAME COLUMN` ou quando os únicos valores da coluna vêm de um `UPDATE` leve. A coluna poderia ser removida da parte mesclada, fazendo com que todos os seus valores fossem lidos como NULL. [#109356](https://github.com/ClickHouse/ClickHouse/pull/109356) ([groeneai](https://github.com/groeneai)).
* Corrigida uma rara interrupção do servidor ao mesclar estados agregados `uniqExact` em paralelo com `GROUPING SETS`, `ROLLUP` ou `CUBE`. [#109389](https://github.com/ClickHouse/ClickHouse/pull/109389) ([groeneai](https://github.com/groeneai)).
* Corrigido o reagendamento indefinido de mesclagens de rollup. [#109410](https://github.com/ClickHouse/ClickHouse/pull/109410) ([Michicosun](https://github.com/Michicosun)).
* Corrigidas mutações `GROUP BY` em tabelas com colunas virtuais materializadas ou persistentes. [#109532](https://github.com/ClickHouse/ClickHouse/pull/109532) ([Michicosun](https://github.com/Michicosun)).
* Corrigido o erro `UNKNOWN_IDENTIFIER: Missing columns: '_block_offset'` ao executar `ALTER TABLE ... MATERIALIZE INDEX` no índice minmax implícito criado por `add_minmax_index_for_block_number_column`/`add_minmax_index_for_block_offset_column` em uma tabela com partes recém-inseridas (nível 0). O índice agora é criado para essas partes, em vez de falhar. [#110236](https://github.com/ClickHouse/ClickHouse/pull/110236) ([groeneai](https://github.com/groeneai)).
* Corrigido o fato de uma réplica de armazenamento de objetos somente leitura (um disco configurado com `read_only = true`) não descobrir novas partes por meio de `refresh_parts_interval` e de `table_disk = true` ser rejeitado nesse disco com "table\_disk não é compatível com discos que não são ObjectStorage". [#110460](https://github.com/ClickHouse/ClickHouse/pull/110460) ([jkartseva](https://github.com/jkartseva)).
* Corrige um LOGICAL\_ERROR ("No set is registered for key") em ALTER TABLE ... DROP COLUMN, mutações ALTER TABLE ... DELETE/UPDATE e DELETE leve, em tabelas com uma coluna ALIAS cuja expressão usa o operador IN, inclusive por meio de outra coluna ALIAS. [#111039](https://github.com/ClickHouse/ClickHouse/pull/111039) ([PedroTadim](https://github.com/PedroTadim)).
* Corrige casos em que a política de linha não era aplicada a projeções MergeTree durante a execução de consultas. [#112329](https://github.com/ClickHouse/ClickHouse/pull/112329) ([yariks5s](https://github.com/yariks5s)).
* Corrige o erro lógico `ReadBufferFromEncryptedFile: Wrong file position` ao ler uma parte `Compact` de um disco `encrypted` com E/S direta, que fazia as mesclagens ficarem bloqueadas em `system.replication_queue`. [#112943](https://github.com/ClickHouse/ClickHouse/pull/112943) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige a leitura do banco de dados interno `_temporary_and_external_tables` por meio da função de tabela `merge` e do mecanismo de tabela `Merge`, que permitia que uma sessão lesse as tabelas temporárias de outras sessões e usuários e causava uma exceção no caminho do analisador antigo. Agora, uma expressão regular de banco de dados ignora esse banco, e nomeá-lo explicitamente é proibido, assim como acessá-lo diretamente. [#113224](https://github.com/ClickHouse/ClickHouse/pull/113224) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige o problema em que uma política de linha contendo uma subconsulta escalar era avaliada apenas uma vez e, após a tabela ser lida por meio de uma tabela `Merge`, reutilizada indefinidamente. A condição da política convertida é armazenada em cache e compartilhada por todas as consultas, e a leitura por meio de `Merge` reescrevia a expressão em cache no próprio local, o que também causava uma condição de corrida entre consultas simultâneas que usavam a mesma política. [#113563](https://github.com/ClickHouse/ClickHouse/pull/113563) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige erros `CANNOT_CONVERT_TYPE` ao ler uma tabela `Merge` contendo uma tabela `Distributed` com réplicas paralelas com chave personalizada. [#113742](https://github.com/ClickHouse/ClickHouse/pull/113742) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige `Logical error: No set is registered for key ...` ao ler por meio de uma tabela `Merge` cujos filhos declaram uma coluna `ALIAS` contendo `IN`, mas divergem quanto ao valor padrão dessa coluna. [#113757](https://github.com/ClickHouse/ClickHouse/pull/113757) ([groeneai](https://github.com/groeneai)).
* Corrige uma falha que permitia contornar a política de linha: a função de tabela mergeTreeIndex expunha valores da chave primária e do índice minmax de linhas ocultadas por uma política de linha SELECT na tabela de origem. Agora, a leitura de mergeTreeIndex para uma tabela com política de linha é proibida. [#115304](https://github.com/ClickHouse/ClickHouse/pull/115304) ([yariks5s](https://github.com/yariks5s)).

<h3 id="data-type-and-serialization-fixes">
  Correções de tipos de dados e serialização
</h3>

* Corrigida uma exceção em `ARRAY JOIN` ao usar tipos numéricos `LowCardinality`. [#91784](https://github.com/ClickHouse/ClickHouse/pull/91784) ([Ergus](https://github.com/Ergus)).
* Corrigida a criação silenciosa de colunas `NOT NULL` como `Nullable` quando `data_type_default_nullable = 1` e a tabela é criada em um banco de dados `Replicated` ou via `ON CLUSTER`. [#97572](https://github.com/ClickHouse/ClickHouse/pull/97572) ([xiaohuanlin](https://github.com/xiaohuanlin)).
* Corrigido o número incorreto de linhas retornado por uma consulta a uma `MaterializedView` com `query_plan_enable_optimizations = 0` quando a view mapeia uma coluna `integer` para uma coluna `Bool`. [#100692](https://github.com/ClickHouse/ClickHouse/pull/100692) ([Maximus5](https://github.com/Maximus5)).
* Corrigidos metadados inconsistentes de partes após mutações em colunas com serializações diferentes da padrão. [#102817](https://github.com/ClickHouse/ClickHouse/pull/102817) ([korowa](https://github.com/korowa)).
* Corrigida a propagação de `NULL` ao ler subcolunas extraídas de colunas `Nullable(Tuple(...))`. Por exemplo, para `tup Nullable(Tuple(s Nullable(String)))`, `SELECT tup.s` agora retorna corretamente `NULL` nas linhas em que a tupla externa é `NULL`, em vez de valores inválidos. Isso abrange todos os tipos de elemento que podem representar `NULL`: `Nullable`, `Dynamic`, `Variant` e `LowCardinality(Nullable(...))`. [#102942](https://github.com/ClickHouse/ClickHouse/pull/102942) ([nihalzp](https://github.com/nihalzp)).
* Corrigida a remoção, por `recursiveRemoveLowCardinality`, de nomes personalizados de tipos de geometria (por exemplo, `LineString` vs. `Ring`, `MultiLineString` vs. `Polygon`), que causava a interpretação incorreta do tipo de geometria. [#103041](https://github.com/ClickHouse/ClickHouse/pull/103041) ([jh0x](https://github.com/jh0x)).
* Corrigida a sobrescrita silenciosa, por `dictGetOrNull`, de outras colunas na projeção `SELECT` com `NULL` quando chamada com uma coluna-chave `Nullable` cujos valores estão ausentes no dicionário. A função alterava in loco um mapa de nulos com alias de entrada; agora, cria um clone profundo da coluna de resultado antes da mutação. [#104327](https://github.com/ClickHouse/ClickHouse/pull/104327) ([groeneai](https://github.com/groeneai)).
* Corrigida uma exceção em consultas distribuídas que contêm uma tupla `IN` vazia na chave de sharding quando `optimize_skip_unused_shards_rewrite_in` está ativado. [#104966](https://github.com/ClickHouse/ClickHouse/pull/104966) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigida a estimativa de seletividade de `PREWHERE` das estatísticas count-min para colunas `Float32`, incluindo comparações com literais `Float64`. [#105047](https://github.com/ClickHouse/ClickHouse/pull/105047) ([hanfei1991](https://github.com/hanfei1991)).
* Corrigido `ILLEGAL_TYPE_OF_ARGUMENT` ao mesclar os estados agregados de `quantileExactWeightedInterpolated`, `quantileDD` ou `quantilePrometheusHistogram` com suas contrapartes plurais `quantilesXxxMerge` (e vice-versa). As variantes singular e plural dessas três famílias de quantis compartilham o mesmo estado agregado interno, mas não estavam listadas na tabela interna de mapeamento de nomes; por isso, a mesclagem de estados entre funções — e a otimização de fusão de funções para essas famílias — era rejeitada. [#105189](https://github.com/ClickHouse/ClickHouse/pull/105189) ([groeneai](https://github.com/groeneai)).
* Corrige resultados incorretos de `toStartOfWeek`, `toLastDayOfWeek`, `toMonday`, `toStartOfMonth`, `toLastDayOfMonth`, `toStartOfQuarter` e `toStartOfYear` para argumentos `Date32` e `DateTime64` cujo resultado fica fora do intervalo de `Date`: em vez de sofrerem overflow para datas arbitrárias, os resultados anteriores a `1970-01-01` agora são limitados a `1970-01-01`, e os posteriores a `2149-06-06` são limitados a `2149-06-06`. Isso também corrige resultados de consulta incorretos (partes e grânulos removidos incorretamente) quando essas funções eram usadas em `WHERE` sobre uma chave `Date32` ou `DateTime64` contendo valores fora do intervalo. [#105244](https://github.com/ClickHouse/ClickHouse/pull/105244) ([yariks5s](https://github.com/yariks5s)).
* Corrige um erro lógico em `arrayRemove` quando o primeiro argumento é um array de `Variant` cujas alternativas são todas incompatíveis com o tipo do segundo argumento e `variant_throw_on_type_mismatch` está desabilitado. Agora, a função trata a comparação como "nunca igual" e retorna o array inalterado, em vez de acionar uma falha de `assertTypeEquality` no servidor. [#105248](https://github.com/ClickHouse/ClickHouse/pull/105248) ([groeneai](https://github.com/groeneai)).
* Corrige o fato de `toFloat64`/`toUInt32`/`toString`/etc. em `Dynamic` ignorarem `cast_keep_nullable`. [#105467](https://github.com/ClickHouse/ClickHouse/pull/105467) ([Avogar](https://github.com/Avogar)).
* Corrige um segfault do servidor em `uniqStateOrNull` / `uniqStateOrDefault` / `uniqOrNullState` (e cadeias de combinadores semelhantes sobre `uniq`) quando usados com `GROUP BY ... WITH ROLLUP`, `WITH CUBE` ou `WITH TOTALS` e um argumento Nullable. [#105470](https://github.com/ClickHouse/ClickHouse/pull/105470) ([groeneai](https://github.com/groeneai)).
* Corrige `toStartOfMillisecond` e `toStartOfMicrosecond`, que retornavam resultados com uma diferença de quase um segundo para valores `DateTime64` negativos (anteriores à época), e o overflow de inteiros com sinal detectado pelo `UndefinedBehaviorSanitizer` em `toStartOfSecond`, `toStartOfMillisecond` e `toStartOfMicrosecond` para entradas `DateTime64` próximas de `INT64_MIN`. [#105482](https://github.com/ClickHouse/ClickHouse/pull/105482) ([groeneai](https://github.com/groeneai)).
* Corrige o encerramento do servidor ao desserializar estados `singleValueOrNull` para `JSON`. [#105535](https://github.com/ClickHouse/ClickHouse/pull/105535) ([Avogar](https://github.com/Avogar)).
* Corrige a ignorância de `input_format_try_infer_datetimes` durante a inserção em dados compartilhados em JSON. [#105544](https://github.com/ClickHouse/ClickHouse/pull/105544) ([Avogar](https://github.com/Avogar)).
* Corrige o overflow circular de `DateTime` para valores fora do intervalo em `JSONExtract` e desserializações de texto. [#105551](https://github.com/ClickHouse/ClickHouse/pull/105551) ([Avogar](https://github.com/Avogar)).
* Corrige uma falha ao inserir tuplas de tamanhos diferentes na mesma cláusula VALUES em uma coluna String. [#105582](https://github.com/ClickHouse/ClickHouse/pull/105582) ([Avogar](https://github.com/Avogar)).
* Corrige o erro NOT\_IMPLEMENTED em `toString` de `DateTime` com `Timezone` contendo valor NULL. [#105587](https://github.com/ClickHouse/ClickHouse/pull/105587) ([yariks5s](https://github.com/yariks5s)).
* Adiciona validação para colunas `Dynamic` achatadas malformadas na entrada Native. [#105666](https://github.com/ClickHouse/ClickHouse/pull/105666) ([Avogar](https://github.com/Avogar)).
* Corrige um `LOGICAL_ERROR` (`Unexpected return type from if`) gerado durante o planejamento da consulta para expressões `if` cujo tipo de resultado é `Variant` e cujo segundo ou terceiro ramo é um `if` de condição constante sobre um literal `UInt64` que cabe em `Int64`. [#105680](https://github.com/ClickHouse/ClickHouse/pull/105680) ([groeneai](https://github.com/groeneai)).
* Corrige `Bad get: has Decimal32, requested Decimal128` em `sumMap` e `sumMapWithOverflow` sobre uma coluna `Nested(... Nullable(Decimal(P, S)))` quando o estado de agregação é serializado (por exemplo, réplicas paralelas, `sumMapState` por meio de um formatador de estado binário ou agregação externa). [#105816](https://github.com/ClickHouse/ClickHouse/pull/105816) ([groeneai](https://github.com/groeneai)).
* Corrige os erros `Expected ColumnLowCardinality, got String` / `Bad cast from type DB::ColumnString to DB::ColumnLowCardinality` quando `apply_mutations_on_fly = 1` é usado em uma tabela com mutações `UPDATE`/`DELETE` on-fly pendentes, enfileiradas antes de uma mutação `ALTER MODIFY COLUMN ... LowCardinality(...)`. [#105847](https://github.com/ClickHouse/ClickHouse/pull/105847) ([Algunenano](https://github.com/Algunenano)).
* Corrige o erro `Cannot find column` em consultas distribuídas com filtro `IN Array(...)` no novo analisador. [#105894](https://github.com/ClickHouse/ClickHouse/pull/105894) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige uma interrupção do servidor quando uma coluna com `STATISTICS` era modificada para `Nullable` enquanto outro `ALTER` a removia simultaneamente. [#105917](https://github.com/ClickHouse/ClickHouse/pull/105917) ([groeneai](https://github.com/groeneai)).
* Rejeita bytes `IntervalKind` fora do intervalo durante a decodificação de tipos de `RowBinaryWithNamesAndTypes` (`input_format_binary_decode_types_in_binary_format = 1`), com um erro `INCORRECT_DATA` claro, em vez de construir um `DataTypeInterval` com um tipo inválido que poderia posteriormente causar comportamento indefinido em operações de hash. [#106261](https://github.com/ClickHouse/ClickHouse/pull/106261) ([groeneai](https://github.com/groeneai)).
* Lê a subcoluna 'null' como caminho JSON em `Nullable(JSON)`, em vez de como null-map. [#106295](https://github.com/ClickHouse/ClickHouse/pull/106295) ([Avogar](https://github.com/Avogar)).
* Corrige uma leitura fora dos limites em `sipHash64Keyed`, `sipHash128Keyed` e `sipHash128ReferenceKeyed` ao calcular o hash de uma coluna cujos arrays estão todos vazios e cuja chave não é constante. [#106355](https://github.com/ClickHouse/ClickHouse/pull/106355) ([Algunenano](https://github.com/Algunenano)).
* Corrige um erro que impedia os usuários de usar subconsultas escalares no primeiro argumento de `IN` quando o segundo argumento é uma tupla não constante. [#106610](https://github.com/ClickHouse/ClickHouse/pull/106610) ([yariks5s](https://github.com/yariks5s)).
* Corrige o fato de `session_timezone` ser ignorado ao serializar colunas `LowCardinality(DateTime)` em formatos de texto (CSV, TSV, JSONEachRow etc.). Anteriormente, após a primeira gravação de uma coluna `LowCardinality(DateTime)` em um servidor, todas as consultas subsequentes que gravavam essa coluna renderizavam a string de horário local no primeiro fuso horário encontrado, independentemente de `session_timezone`. [#106634](https://github.com/ClickHouse/ClickHouse/pull/106634) ([groeneai](https://github.com/groeneai)).
* Corrige uma interrupção do servidor em `if` e `multiIf` quando a condição é um valor constante `Nullable(Nothing)`. [#106678](https://github.com/ClickHouse/ClickHouse/pull/106678) ([groeneai](https://github.com/groeneai)).
* Reverte uma alteração que fazia `sumMap` / o combinador `-Map` rejeitar tipos numéricos de valor com nomes personalizados (como `SimpleAggregateFunction(sum, T)` e `Bool`) com `ILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed`, interrompendo agregações que antes funcionavam. [#106729](https://github.com/ClickHouse/ClickHouse/pull/106729) ([fm4v](https://github.com/fm4v)).
* Corrige uma exceção `Bad cast` ao eliminar partes com base em estatísticas `MinMax` quando uma coluna-chave é `LowCardinality` e a constante do predicado é `LowCardinality(Nullable(...))`. [#106793](https://github.com/ClickHouse/ClickHouse/pull/106793) ([groeneai](https://github.com/groeneai)).
* Corrige um erro lógico em `parseDateTime` com bytes não ASCII na entrada. [#106856](https://github.com/ClickHouse/ClickHouse/pull/106856) ([Avogar](https://github.com/Avogar)).
* Corrige a exceção `THERE_IS_NO_COLUMN` em consultas distribuídas que envolvem a otimização `optimize_rewrite_aggregate_function_with_if` quando o argumento da função de agregação requer conversão para o tipo Nullable. [#106908](https://github.com/ClickHouse/ClickHouse/pull/106908) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Corrige um overflow de inteiro com sinal (comportamento indefinido) em `arrayLevenshteinDistanceWeighted` e `arraySimilarity` quando os arrays de pesos contêm valores inteiros grandes. A distância ponderada agora é acumulada em um tipo inteiro maior para pesos integrais; assim, pesos inteiros grandes não causam mais overflow e permanecem exatos. [#106934](https://github.com/ClickHouse/ClickHouse/pull/106934) ([groeneai](https://github.com/groeneai)).
* Corrige uma falha (`Source column is not Map` / `SIGSEGV`) ao mesclar blocos ordenados que contêm uma coluna `Variant` com uma variante `Map` cuja ordem de armazenamento local difere da ordem global. [#107011](https://github.com/ClickHouse/ClickHouse/pull/107011) ([groeneai](https://github.com/groeneai)).
* Corrige o erro `TYPE_MISMATCH` ("Cannot convert string ... to type ...") em consultas `ORDER BY <numeric column> ... LIMIT n` quando a materialização tardia posicionava outra coluna antes da coluna de ordenação. O limite top-K agora é lido da coluna de ordenação correta. [#107060](https://github.com/ClickHouse/ClickHouse/pull/107060) ([groeneai](https://github.com/groeneai)).
* Corrige um `ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO a` composto que reutiliza um nome de coluna liberado (uma "troca") entre colunas de tipos diferentes. A part materializada registrava o tipo de coluna incorreto, fazendo com que um `SELECT` posterior falhasse com `Conversion between numeric types and IPv6 is not supported` (ou fosse abortado ao carregar a part em compilações de depuração). [#107064](https://github.com/ClickHouse/ClickHouse/pull/107064) ([groeneai](https://github.com/groeneai)).
* Corrige resultados não determinísticos da função `roundDown` quando o array de fronteiras contém `NaN`. O mesmo valor de entrada podia retornar uma fronteira finita ou `NaN`, dependendo das linhas adjacentes em um lote. As fronteiras `NaN` agora são ignoradas; portanto, o resultado depende apenas das fronteiras finitas. [#107065](https://github.com/ClickHouse/ClickHouse/pull/107065) ([groeneai](https://github.com/groeneai)).
* Corrige o lançamento de `DECIMAL_OVERFLOW` por `quantileTDigest` e `quantileTDigestWeighted` para argumentos `Date` e `DateTime` quando o quantil interpolado é fracionário, mas está dentro do intervalo (por exemplo, `quantileTDigestWeighted(date, weight)` em valores que cabem no tipo). O resultado fracionário agora é truncado para o tipo de resultado, como em `quantilesTDigestWeighted`; valores realmente fora do intervalo ainda geram um erro. [#107066](https://github.com/ClickHouse/ClickHouse/pull/107066) ([groeneai](https://github.com/groeneai)).
* Corrige o truncamento silencioso de valores inteiros fora do intervalo nas definições dos tipos `Enum8`/`Enum16`. `Enum8('a' = 200)` agora gera `ARGUMENT_OUT_OF_BOUND` em vez de criar silenciosamente `Enum8('a' = -56)`. [#107081](https://github.com/ClickHouse/ClickHouse/pull/107081) ([groeneai](https://github.com/groeneai)).
* Corrige a ordem incorreta das linhas (e um `LOGICAL_ERROR` "Rows are not sorted with permutation" em compilações de depuração) em consultas `ORDER BY ... LIMIT` com múltiplas colunas que ordenam por colunas `Nullable` quando várias linhas empatam nas colunas iniciais. [#107094](https://github.com/ClickHouse/ClickHouse/pull/107094) ([groeneai](https://github.com/groeneai)).
* Corrige `Logical error: 'Bad cast from type DB::ColumnVector<...> to DB::ColumnTuple'` ao ler uma coluna `Array(Tuple(...))` cujo valor foi preenchido com valores padrão, por exemplo, após `ALTER TABLE ... ADD COLUMN` ou após uma mutação `ALTER TABLE ... CLEAR COLUMN` incompleta aplicada on the fly. [#107232](https://github.com/ClickHouse/ClickHouse/pull/107232) ([groeneai](https://github.com/groeneai)).
* Rejeita usos sem suporte de colunas `AggregateFunction` em expressões TTL durante o `CREATE TABLE` (por exemplo, `TTL toDateTime(state)`), em vez de falhar posteriormente, durante a execução do TTL, com `ILLEGAL_TYPE_OF_ARGUMENT`. Isso também abrange estados contidos em alternativas de `Variant` e valores `Dynamic`. Consumidores válidos que reconhecem estados, como `finalizeAggregation`, continuam sendo aceitos. [#107366](https://github.com/ClickHouse/ClickHouse/pull/107366) ([Ria-K912](https://github.com/Ria-K912)).
* Corrige `arrayResize` com um argumento de tamanho `Decimal`: agora, o tamanho é interpretado por seu valor real (por exemplo, `arrayResize([1, 2, 3], 1.5::Decimal(2, 1))` retorna um elemento), em vez da representação bruta sem escala. [#107389](https://github.com/ClickHouse/ClickHouse/pull/107389) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige `LOGICAL_ERROR: Unexpected return type from materialize` (e erros semelhantes de incompatibilidade de tipos) quando `apply_mutations_on_fly = 1` é usado em uma tabela com um `UPDATE` on the fly pendente, cuja coluna de destino também é lida como entrada de uma função por um `UPDATE` on the fly anterior, antes de uma mutação `ALTER MODIFY COLUMN ... LowCardinality(...)`. [#107475](https://github.com/ClickHouse/ClickHouse/pull/107475) ([groeneai](https://github.com/groeneai)).
* Corrige valores NULL convertidos silenciosamente em strings vazias ao inserir dados Arrow/ORC em uma coluna LowCardinality(Nullable(...)). Essa foi uma regressão introduzida na versão 26.5. [#107532](https://github.com/ClickHouse/ClickHouse/pull/107532) ([Ergus](https://github.com/Ergus)).
* Corrige um `LOGICAL_ERROR` ("Input nodes size mismatch in dag") quando uma consulta com `make_distributed_plan = 1` realiza uma junção por uma chave encapsulada em uma função, cujos dois lados não têm tipo comum (por exemplo, `ON intDiv(-1, t1.key) = t2.key` com uma chave à direita do tipo `UInt64`). [#107701](https://github.com/ClickHouse/ClickHouse/pull/107701) ([groeneai](https://github.com/groeneai)).
* Corrige a desduplicação de inserções que calculava hashes incorretos para colunas `String` e `Array` com a configuração do servidor `insert_deduplication_version = new_unified_hash`: inserções idênticas poderiam não ser desduplicadas porque o hash de desduplicação dependia da posição da linha no bloco inserido. [#107915](https://github.com/ClickHouse/ClickHouse/pull/107915) ([CheSema](https://github.com/CheSema)).
* Corrige uma terminação do servidor em `has` ao pesquisar um `Map` com chaves `Dynamic` usando um argumento `LowCardinality`. [#107956](https://github.com/ClickHouse/ClickHouse/pull/107956) ([groeneai](https://github.com/groeneai)).
* Corrige uma regressão de desempenho em subcolunas `Map` usadas com `PREWHERE`. [#107988](https://github.com/ClickHouse/ClickHouse/pull/107988) ([Avogar](https://github.com/Avogar)).
* Corrige um erro lógico ao converter uma coluna `Dynamic` ou `Variant` aninhada em uma `Tuple` para um tipo de elemento não `Nullable` com `accurateCastOrNull` ou `accurateCastOrDefault`. [#108061](https://github.com/ClickHouse/ClickHouse/pull/108061) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige uma exceção de erro lógico `Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t>` quando uma consulta `LIKE` lê de um índice `text` pelo caminho alternativo de leitura direta em uma coluna armazenada de forma esparsa. [#108068](https://github.com/ClickHouse/ClickHouse/pull/108068) ([groeneai](https://github.com/groeneai)).
* Corrige um `LOGICAL_ERROR` ("Tipo de retorno inesperado de if") ao ler uma coluna com `apply_mutations_on_fly = 1` após um `ALTER UPDATE col = ... WHERE <cond>` com condição não constante ou falsa, seguido de `ALTER MODIFY COLUMN col <new type>`. [#108128](https://github.com/ClickHouse/ClickHouse/pull/108128) ([groeneai](https://github.com/groeneai)).
* Corrige `signed integer overflow` (comportamento indefinido) em `dateDiff` com as unidades `hour` e `minute` para valores extremos de `DateTime64` próximos aos limites do intervalo de `Int64`. [#108229](https://github.com/ClickHouse/ClickHouse/pull/108229) ([groeneai](https://github.com/groeneai)).
* Corrige uma exceção do servidor (`Logical error` em `IColumn::insertFrom`) ao converter um `Array(Dynamic)` ou `Array(Variant)` para `QBit` com `accurateCastOrNull`, por exemplo, `accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')`. [#108288](https://github.com/ClickHouse/ClickHouse/pull/108288) ([groeneai](https://github.com/groeneai)).
* Corrige `parseDateTimeBestEffort` com fuso horário que gerava CANNOT\_PARSE\_DATETIME em linhas NULL de toString(Nullable(DateTime64)). [#108310](https://github.com/ClickHouse/ClickHouse/pull/108310) ([yariks5s](https://github.com/yariks5s)).
* Corrige uma falha do servidor (estouro de pilha) causada por expressões profundamente aninhadas, como `[[[ ... ]]]` ou `array(array( ... ))`, quando `max_parser_depth` está definido com um valor alto. [#108493](https://github.com/ClickHouse/ClickHouse/pull/108493) ([Algunenano](https://github.com/Algunenano)).
* Corrige uma projeção `SELECT *` que retornava o valor padrão do tipo da coluna (por exemplo, `0`) em vez de seu valor `DEFAULT` (por exemplo, `-1`) ao ler uma coluna adicionada com `ALTER TABLE ... ADD COLUMN ... DEFAULT` após a criação da projeção. As leituras da tabela base já estavam corretas; apenas as leituras atendidas pela projeção eram afetadas, até que ela fosse reconstruída. [#108569](https://github.com/ClickHouse/ClickHouse/pull/108569) ([tiandiwonder](https://github.com/tiandiwonder)).
* Corrige a desativação silenciosa da poda de partições e de chave primária quando uma coluna-chave `LowCardinality(FixedString)` (ou `LowCardinality(Nullable(FixedString))`) é encapsulada em uma função na chave, por exemplo, `PARTITION BY sipHash64(k) % N` com `WHERE k = 'literal'`. Essas consultas examinavam todas as partições em vez de eliminá-las pela poda. [#108777](https://github.com/ClickHouse/ClickHouse/pull/108777) ([groeneai](https://github.com/groeneai)).
* Preserva a ordem original das chaves na serialização de Map em buckets para corrigir operações de comparação que dependem dela. [#109178](https://github.com/ClickHouse/ClickHouse/pull/109178) ([Avogar](https://github.com/Avogar)).
* Corrige a inferência de esquema para os formatos `Arrow`, `ArrowStream`, `Avro` e os leitores legados `ORC` e `Parquet`, que retornavam `Nullable(Tuple)` para colunas struct anuláveis, embora o tipo `Nullable(Tuple)` não seja permitido (`allow_experimental_nullable_tuple_type` está desabilitado). `DESCRIBE` retornava um tipo que `CREATE TABLE` rejeita; por isso, a criação de tabelas ou a inserção de dados usando o esquema inferido falhava com o erro `Nullable Tuple type is not allowed`. [#109185](https://github.com/ClickHouse/ClickHouse/pull/109185) ([nihalzp](https://github.com/nihalzp)).
* Corrige um bug em que valores `DEFAULT` de colunas não eram aplicados a `INSERT INTO TABLE FUNCTION` (por exemplo, `remote(...)` ou `file(...)`) com dados `VALUES` embutidos quando o próprio servidor analisa esses dados (`send_table_structure_on_insert_with_inline_data = 0`). Um `NULL` explícito inserido em uma coluna não `Nullable` com `DEFAULT` tornava-se `0` em vez do padrão declarado. Agora, o comportamento é igual ao de um `INSERT` simples em tabela e ao do protocolo HTTP. [#109258](https://github.com/ClickHouse/ClickHouse/pull/109258) ([groeneai](https://github.com/groeneai)).
* Corrige um segfault em `groupArrayLastMerge`. A desserialização do estado da função de agregação agora é validada, evitando que um estado corrompido cause acesso fora dos limites. [#109485](https://github.com/ClickHouse/ClickHouse/pull/109485) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrige um segfault na função de agregação `largestTriangleThreeBuckets` ao rejeitar estados corrompidos da função de agregação durante a desserialização. [#109492](https://github.com/ClickHouse/ClickHouse/pull/109492) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrige a leitura de uma coluna Parquet com um `Tuple` não anulável quando o tipo ClickHouse solicitado o envolve em `Nullable` (por exemplo, `Nullable(Tuple(...))`), que antes falhava com `TYPE_MISMATCH`. [#109615](https://github.com/ClickHouse/ClickHouse/pull/109615) ([groeneai](https://github.com/groeneai)).
* O leitor nativo do Parquet v3 agora pode ler uma coluna struct fisicamente anulável (um grupo OPTIONAL do Parquet) como `Nullable(Tuple(...))`. Antes, isso gerava `TYPE_MISMATCH`. [#109898](https://github.com/ClickHouse/ClickHouse/pull/109898) ([groeneai](https://github.com/groeneai)).
* Corrige uma falha do servidor (estouro da pilha nativa) ao copiar ou destruir um literal `Array`/`Tuple`/`Map`/`Object` profundamente aninhado, por exemplo, em uma consulta com um literal muito profundamente aninhado e `max_parser_depth` elevado. [#110393](https://github.com/ClickHouse/ClickHouse/pull/110393) ([Algunenano](https://github.com/Algunenano)).
* Corrige resultados incorretos de `IS NULL` / `IS NOT NULL` / `count()` com `optimize_functions_to_subcolumns` em uma coluna convertida em `Nullable` por um `ALTER MODIFY COLUMN T` somente de metadados para `Nullable(T)`. Em partes gravadas antes da conversão, a subcoluna `.null` era preenchida com o valor padrão do tipo de armazenamento (NULL), em vez de ser derivada da coluna pai fisicamente presente. Assim, linhas existentes não nulas eram relatadas incorretamente como NULL. [#110584](https://github.com/ClickHouse/ClickHouse/pull/110584) ([groeneai](https://github.com/groeneai)).
* Corrige um `LOGICAL_ERROR` ("Bad cast from ColumnString to ColumnLowCardinality") durante a análise do índice de chave primária quando uma coluna-chave `LowCardinality` é envolvida em uma cadeia aninhada de `CAST` que reintroduz `LowCardinality`, por exemplo, `WHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5'`. Em compilações de depuração e com sanitizer, isso abortava o servidor; em versões de lançamento, fazia a consulta falhar. [#111050](https://github.com/ClickHouse/ClickHouse/pull/111050) ([groeneai](https://github.com/groeneai)).
* Corrige a leitura de dados `Arrow` e `ArrowStream` com colunas `Array` ou `Map` aninhadas vazias produzidas pelo Apache Arrow Java anterior à versão 19.0.0 (incluída no Apache Spark), que antes eram rejeitadas com um erro `INCORRECT_DATA` informando que o buffer de offsets era pequeno demais. [#111101](https://github.com/ClickHouse/ClickHouse/pull/111101) ([Algunenano](https://github.com/Algunenano)).
* Corrige um erro lógico `Block structure mismatch` (em compilações de depuração e com sanitizer) e um erro `Illegal types of arguments` em operações de conjunto sobre colunas compatíveis de estado de agregação (por exemplo, `quantileState` e `quantilesState(0.9)`) aninhadas em colunas contêiner, como `Tuple`, `Array`, `Map`, `Nullable` ou `Variant`. [#111191](https://github.com/ClickHouse/ClickHouse/pull/111191) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Adiciona validação para dados corrompidos de índice replicado recebidos pelo protocolo nativo. [#112331](https://github.com/ClickHouse/ClickHouse/pull/112331) ([Avogar](https://github.com/Avogar)).
* Corrige uma leitura fora dos limites durante a desduplicação de inserções quando um `INSERT` passa por uma visão materializada que altera a contagem de linhas antes de gravar em uma tabela de destino particionada. [#112649](https://github.com/ClickHouse/ClickHouse/pull/112649) ([CheSema](https://github.com/CheSema)).
* Corrigida uma gravação fora dos limites ao ler uma coluna `DECIMAL` do `Parquet` cujo tipo físico é mais largo que o tipo correspondente à precisão declarada, por exemplo, `DECIMAL(9, 2)` armazenado fisicamente como `INT64`. Esses arquivos são `Parquet` válidos e outros gravadores os produzem, mas o leitor dimensionava a coluna de destino com base na precisão declarada, enquanto o decodificador gravava a largura física, corrompendo a memória. A leitura desse tipo de arquivo agora também gera `DECIMAL_OVERFLOW` quando um valor não cabe na precisão declarada, em vez de retornar dados corrompidos, e é feita sem perda com uma dica de tipo que tenha pelo menos a largura do tipo físico. [#113046](https://github.com/ClickHouse/ClickHouse/pull/113046) ([groeneai](https://github.com/groeneai)).
* Corrigidas falhas em `ATTACH PARTITION FROM`, `REPLACE PARTITION`, `MOVE PARTITION TO TABLE` e na adição de uma réplica `ReplicatedMergeTree`, que exibiam `Tables have different ...`, `METADATA_MISMATCH` ou `INCOMPATIBLE_COLUMNS` em tabelas cujas definições foram escritas com parênteses redundantes, como `PARTITION BY (a)`, `ORDER BY (b)`, `INDEX ix (b * c) TYPE minmax`, `PROJECTION p (SELECT (b) ...)`, `CONSTRAINT c CHECK (a > 0)`, `TTL (d + INTERVAL 10 YEAR)` ou `DEFAULT (a + 1)`. [#114188](https://github.com/ClickHouse/ClickHouse/pull/114188) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige um bug em que uma entidade de acesso com uma configuração cujo valor é `Map`, como um perfil de configurações com `http_response_headers` ou `additional_table_filters`, era armazenada em um formato que o ClickHouse não conseguia reler, deixando a entidade permanentemente impossível de carregar após uma reinicialização. [#114620](https://github.com/ClickHouse/ClickHouse/pull/114620) ([groeneai](https://github.com/groeneai)).
* Corrige `has`, `indexOf`, `countEqual`, `mapContainsKey`, `mapContainsValue` e o subscrito de `Map`, que retornavam "não encontrado" para uma busca `LowCardinality` constante igual ao valor padrão do tipo de elemento, como uma `String` vazia ou o número zero. [#114624](https://github.com/ClickHouse/ClickHouse/pull/114624) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos da otimização trivial `GROUP BY ... LIMIT` (configuração `optimize_trivial_group_by_limit_query`) para consultas com `DISTINCT`, `QUALIFY`, funções de janela ou `arrayJoin` na projeção: esses elementos consomem ou filtram os grupos após a agregação, portanto, limitar a agregação a `LIMIT + OFFSET` chaves poderia retornar linhas de menos ou valores incorretos. A otimização não se aplica mais a essas consultas. [#114695](https://github.com/ClickHouse/ClickHouse/pull/114695) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigidos resultados incorretos para `SELECT count(arrayJoin(arr))` com o valor padrão `optimize_trivial_count_query = 1`. A contagem de linhas armazenada era retornada em vez do número de elementos do array, e, em `file()` e `url()`, a consulta retornava `0`. [#115227](https://github.com/ClickHouse/ClickHouse/pull/115227) ([groeneai](https://github.com/groeneai)).
* Corrigidos `uniq`, `uniqExact`, `uniqHLL12` e `uniqTheta`, que retornavam um resultado incorreto para um argumento envolto em uma função injetiva que oculta a nulabilidade, como `uniqExact(tuple(x))` em uma coluna `Nullable`. A otimização `optimize_injective_functions_inside_uniq` removia a função envolvente, fazendo com que as linhas NULL fossem ignoradas em vez de contadas. [#115466](https://github.com/ClickHouse/ClickHouse/pull/115466) ([vdimir](https://github.com/vdimir)).
* Permite que leitores do KeeperMap aceitem metadados compartilhados quando chaves primárias equivalentes diferem apenas por parênteses externos redundantes. [#115642](https://github.com/ClickHouse/ClickHouse/pull/115642) ([skuznetsov-clickhouse](https://github.com/skuznetsov-clickhouse)).

<h3 id="text-index-and-skip-index-fixes">
  Correções no índice de texto e no índice de salto
</h3>

* Corrige a interrupção do servidor quando uma consulta usa comparações `coalesce`/`ifNull` aninhadas (por exemplo, `WHERE coalesce(a, b, coalesce(c, d), e) = const`) em uma tabela `MergeTree` com vários índices de salto `minmax` e `use_skip_indexes_for_disjunctions = 1`. A reescrita de índice de salto de `<op>(coalesce(...), const)` agora é aplicada recursivamente aos argumentos internos de `coalesce`, para que a RPN de `KeyCondition` de cada índice corresponda à RPN do modelo, como o código de rastreamento de disjunções já pressupõe. [#103929](https://github.com/ClickHouse/ClickHouse/pull/103929) ([groeneai](https://github.com/groeneai)).
* Corrige `NOT_FOUND_COLUMN_IN_BLOCK` gerado por `ALTER TABLE ... MATERIALIZE INDEX` em partes criadas na versão 25.8 que contêm um índice de salto em uma coluna adicionada por meio de um `ALTER TABLE ... ADD COLUMN` separado. A mutação agora lê corretamente todas as colunas exigidas por cada índice de salto e projeção preexistentes na parte durante o recálculo forçado. [#105039](https://github.com/ClickHouse/ClickHouse/pull/105039) ([groeneai](https://github.com/groeneai)).
* Corrige uma subcontagem silenciosa em consultas `SELECT` quando `use_query_condition_cache = 1` (padrão). Uma consulta no formato `PREWHERE pk_prefix = X WHERE non_pk IN (...)` em uma coluna com um índice de salto de filtro Bloom corrompia o `QueryConditionCache` para o predicado `pk_prefix = X`, fazendo com que um `SELECT count() ... WHERE pk_prefix = X` subsequente e inofensivo retornasse um resultado incorreto, com contagem inferior à real. Afetava todas as versões 26.x. [#105686](https://github.com/ClickHouse/ClickHouse/pull/105686) ([groeneai](https://github.com/groeneai)).
* Corrige uma exceção quando uma consulta de busca vetorial usa um índice vetorial, outro índice de salto como `minmax` e `use_skip_indexes_on_data_read = 1`. [#106473](https://github.com/ClickHouse/ClickHouse/pull/106473) ([shankar-iyer](https://github.com/shankar-iyer)).
* Corrige "Too many marks" em um índice de texto de uma parte mesclada vazia. [#106867](https://github.com/ClickHouse/ClickHouse/pull/106867) ([azat](https://github.com/azat)).
* Corrige resultados incorretos ao consultar uma tabela `ReplacingMergeTree` com `FINAL` e um filtro em um índice de texto enquanto `query_plan_optimize_lazy_final` estava habilitada. A otimização `FINAL` lazy criava etapas de leitura que não reproduziam a leitura direta do índice de texto, fazendo com que o filtro descartasse todas as linhas correspondentes. [#106894](https://github.com/ClickHouse/ClickHouse/pull/106894) ([Ergus](https://github.com/Ergus)).
* Corrige `LOGICAL ERROR` (`Bad cast from type DB::ColumnString to DB::ColumnLowCardinality`) quando uma constante `Variant` contendo um membro `LowCardinality` é comparada a uma coluna-chave cuja expressão de chave é uma função determinística não monotônica (por exemplo, um índice de salto `minmax` em `sipHash64(col)`). [#107111](https://github.com/ClickHouse/ClickHouse/pull/107111) ([groeneai](https://github.com/groeneai)).
* Corrige resultados incorretos (frequentemente vazios) de `ORDER BY <col> LIMIT n` quando a otimização `use_skip_indexes_for_top_k` está ativa e uma parte com um índice de salto `minmax` na coluna de ordenação teve linhas removidas por um `DELETE` leve. A otimização não classifica mais o minmax desatualizado de partes com linhas excluídas por `DELETE` leve à frente das partes que contêm as linhas ativas no topo. [#107320](https://github.com/ClickHouse/ClickHouse/pull/107320) ([groeneai](https://github.com/groeneai)).
* Corrige a ausência de eliminação de grânulos pelo índice de salto Set em colunas LowCardinality. [#107868](https://github.com/ClickHouse/ClickHouse/pull/107868) ([thevar1able](https://github.com/thevar1able)).
* A configuração `use_skip_indexes_on_data_read` agora pode ser revertida ao padrão anterior à versão 26.1 (`false`) por meio da configuração `compatibility`, oferecendo uma alternativa para uma regressão de desempenho em que o caminho de leitura de dados impede a eliminação de intervalos de marcas por índices de salto `minmax`/`set`/`bloom_filter`. [#108330](https://github.com/ClickHouse/ClickHouse/pull/108330) ([egor-click](https://github.com/egor-click)).
* Corrigida a leitura direta de vários índices de texto parcialmente materializados. [#108607](https://github.com/ClickHouse/ClickHouse/pull/108607) ([CurtizJ](https://github.com/CurtizJ)).
* Corrigido o problema em que um índice de texto definido em `mapValues(map)` ou `mapKeys(map)` não era usado silenciosamente quando uma tabela era consultada por meio de uma tabela com engine `Distributed` usando o analyzer. O índice era usado na tabela local e via `cluster()`/`remote()`, mas uma consulta por meio de uma tabela com engine `Distributed` o ignorava (e falhava com `INDEX_NOT_USED` com `force_data_skipping_indices`). [#109188](https://github.com/ClickHouse/ClickHouse/pull/109188) ([groeneai](https://github.com/groeneai)).
* Corrigida uma falha do servidor em `CREATE HYPOTHETICAL INDEX ... TYPE set` (e `ngrambf_v1`/`tokenbf_v1`) quando o argumento obrigatório do índice era omitido. Essas instruções agora são rejeitadas com uma mensagem de erro clara. [#109294](https://github.com/ClickHouse/ClickHouse/pull/109294) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos nas funções `has`, `mapContainsKey` e `mapContainsValue` com uma substring de busca vazia quando há um índice de texto presente. [#110246](https://github.com/ClickHouse/ClickHouse/pull/110246) ([rschu1ze](https://github.com/rschu1ze)).
* Corrigido o erro `ATTEMPT_TO_READ_AFTER_EOF` ao mesclar partes com um índice de texto quando uma das partes mescladas estava vazia, por exemplo, após uma mutação que excluiu todas as linhas da parte. [#112490](https://github.com/ClickHouse/ClickHouse/pull/112490) ([CurtizJ](https://github.com/CurtizJ)).
* Corrigido um travamento na otimização do plano de consulta quando uma cláusula `WHERE` contém uma constante de string grande com muitos pontos e a tabela possui um índice de salto `bloom_filter`, `tokenbf_v1`, `ngrambf_v1` ou `text`. A correspondência entre o nome de uma coluna de filtro e colunas de índice `JSONAllPaths(...)` enumerava cada divisão do nome por ponto, tornando quadrática, em relação ao comprimento da constante, a criação da condição do índice de salto. [#113289](https://github.com/ClickHouse/ClickHouse/pull/113289) ([groeneai](https://github.com/groeneai)).
* Corrigido o caso em que `ORDER BY ... LIMIT` retornava menos linhas do que o solicitado, possivelmente nenhuma, quando uma política de linhas era o único filtro da consulta e a coluna de ordenação tinha um índice de salto `minmax`. A otimização top-K restringia a leitura antes da aplicação da política de linhas. [#114073](https://github.com/ClickHouse/ClickHouse/pull/114073) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="data-lake-fixes">
  Correções no lago de dados
</h3>

* Corrige a exceção de erro lógico ao ler tabelas Iceberg cuja versão do formato foi atualizada por uma ferramenta externa (por exemplo, Spark). [#100407](https://github.com/ClickHouse/ClickHouse/pull/100407) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige uma exceção (`LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it'`) ao ler tabelas Iceberg que contêm arquivos de dados ORC com a otimização PREWHERE habilitada. [#101206](https://github.com/ClickHouse/ClickHouse/pull/101206) ([groeneai](https://github.com/groeneai)).
* Corrige exceções `LOGICAL_ERROR` ao ler tabelas de lago de dados `Iceberg` ou `DeltaLake` por caminhos que podem chegar ao pipeline de leitura sem um `datalake_table_state` fixado, como atualizações simultâneas de metadados do `Iceberg` ou leituras de `merge` em tabelas `DeltaLake`. [#102033](https://github.com/ClickHouse/ClickHouse/pull/102033) ([groeneai](https://github.com/groeneai)).
* Corrige o erro esporádico `Logical error: 'Database <name> not found'` gerado por `DataLakeConfiguration::getCatalog` quando uma tabela com engine `Iceberg` é carregada em um banco de dados comum durante o carregamento assíncrono de metadados. [#103775](https://github.com/ClickHouse/ClickHouse/pull/103775) ([groeneai](https://github.com/groeneai)).
* Corrige leituras excessivas de metadados do catálogo/S3 quando uma instrução INSERT ou DDL faz referência a uma tabela inexistente em um banco de dados de catálogo DataLake com `show_data_lake_catalogs_in_system_tables` habilitado. O mecanismo de sugestão para erros de digitação carregava metadados completos do Iceberg de cada tabela de todo o catálogo, o que poderia esgotar a memória em catálogos grandes. [#104124](https://github.com/ClickHouse/ClickHouse/pull/104124) ([il9ue](https://github.com/il9ue)).
* Corrige `read_bytes` inflado (e os bytes/s derivados exibidos em `system.query_log`, na barra de progresso etc.) ao ler arquivos Parquet. A implementação anterior informava o tamanho total comprimido do grupo de linhas em cada bloco, portanto a leitura de K de N colunas era superestimada por `N / K`. Agora, o valor é somado apenas para as colunas selecionadas. Também corrige o acompanhamento do progresso no nível do arquivo para tabelas Iceberg, que anteriormente nunca informava o tamanho do arquivo de dados. [#105413](https://github.com/ClickHouse/ClickHouse/pull/105413) ([groeneai](https://github.com/groeneai)).
* Corrige resultados incorretos ao ler uma tabela Iceberg com `iceberg_use_version_hint = 1` depois que outro gravador (como a função de tabela `icebergLocal`/`icebergS3`) sem essa configuração avança a tabela. Agora, `version-hint.text` é mantido sincronizado por todos os gravadores assim que o arquivo existe, para que leitores subsequentes que usam a indicação vejam o snapshot mais recente. [#105682](https://github.com/ClickHouse/ClickHouse/pull/105682) ([groeneai](https://github.com/groeneai)).
* As gravações no Iceberg agora preservam valores NULL em colunas de partição `Nullable(T)`. Anteriormente, um NULL gravado pelo ClickHouse aparecia como o valor padrão do tipo interno (`0` para `int`) quando lido novamente pelo Spark ou outros leitores Iceberg. [#105862](https://github.com/ClickHouse/ClickHouse/pull/105862) ([groeneai](https://github.com/groeneai)).
* Corrige exclusões posicionais merge-on-read do `Iceberg` v2 que retornavam linhas incorretas quando um único arquivo de exclusão fazia referência a vários arquivos de dados e diversos arquivos de exclusão se aplicavam ao mesmo arquivo de dados. As entradas de exclusão agora são filtradas pelo caminho do arquivo ao qual fazem referência. [#105888](https://github.com/ClickHouse/ClickHouse/pull/105888) ([groeneai](https://github.com/groeneai)).
* Corrige a engine de tabela `IcebergLocal`, que passava a ser somente leitura após um ciclo `DETACH` + `ATTACH` ou uma reinicialização do servidor, fazendo com que todos os `INSERT` subsequentes falhassem com `Local object storage Local is readonly. (READONLY)`. [#106016](https://github.com/ClickHouse/ClickHouse/pull/106016) ([groeneai](https://github.com/groeneai)).
* Corrige a desativação silenciosa do cache do sistema de arquivos para o Azure Blob Storage (por exemplo, tabelas Delta Lake no Azure), pois os metadados do objeto não incluíam o ETag do blob. [#106091](https://github.com/ClickHouse/ClickHouse/pull/106091) ([thewisenerd](https://github.com/thewisenerd)).
* Adicionada validação de caminho para tabelas Delta Lake a fim de impedir que os metadados acessem objetos fora do local de armazenamento configurado. [#106115](https://github.com/ClickHouse/ClickHouse/pull/106115) ([scanhex12](https://github.com/scanhex12)).
* A poda de partições do Iceberg agora lida corretamente com filtros `WHERE partition_col = (SELECT ... FROM ...)` nos quais o analisador encapsula o resultado da subconsulta escalar em um `_CAST(Const, 'TargetType')` interno com tipos de origem e destino correspondentes. Antes, esses filtros desativavam a poda de partições e acionavam uma varredura completa da tabela. [#106204](https://github.com/ClickHouse/ClickHouse/pull/106204) ([groeneai](https://github.com/groeneai)).
* Corrigido o problema em que catálogos REST `Iceberg` contendo tabelas eram incorretamente reportados como vazios. [#106301](https://github.com/ClickHouse/ClickHouse/pull/106301) ([LefterisXefteris](https://github.com/LefterisXefteris)).
* Corrigida uma exceção `NOT_FOUND_COLUMN_IN_BLOCK` ao consultar uma tabela Iceberg ou S3 com um `WHERE` composto contendo `IS NOT NULL` em uma coluna que não está na lista `SELECT`, usando o leitor nativo Parquet V3. [#106443](https://github.com/ClickHouse/ClickHouse/pull/106443) ([tiandiwonder](https://github.com/tiandiwonder)).
* Corrigido o relatório de progresso inflado ao ler tabelas Iceberg com filtros `_file` ou `_path`. Antes, o progresso de `total_bytes_to_read` incluía todos os arquivos do manifesto, independentemente da filtragem. [#106491](https://github.com/ClickHouse/ClickHouse/pull/106491) ([PedroTadim](https://github.com/PedroTadim)).
* Corrigida uma exceção do servidor (erro lógico `std::out_of_range`) ao inserir em uma tabela `Iceberg` cujos nomes de coluna do bloco de escrita não correspondem aos IDs de campo do esquema mais recente (por exemplo, depois que um gravador concorrente renomeia uma coluna dentro da janela `iceberg_metadata_staleness_ms`). A inserção agora falha com um erro de consulta claro, em vez de interromper o servidor. [#107279](https://github.com/ClickHouse/ClickHouse/pull/107279) ([groeneai](https://github.com/groeneai)).
* Corrigido um possível estouro de pilha do servidor (falha) ao ler um esquema ou valor profundamente aninhado nos formatos MsgPack, BSON, ORC, Parquet, JSON, DeltaLake, Iceberg e Paimon. Essas entradas profundamente aninhadas agora são rejeitadas com uma exceção. [#107341](https://github.com/ClickHouse/ClickHouse/pull/107341) ([Algunenano](https://github.com/Algunenano)).
* Corrigida uma falha (`LOGICAL_ERROR` em compilações de depuração) e um bug silencioso que produzia resultados incorretos (em compilações de lançamento) ao ler uma tabela Iceberg cujos metadados reassociam um `schema-id` existente a um esquema diferente entre versões de metadados. Esses metadados agora são rejeitados com `ICEBERG_SPECIFICATION_VIOLATION`. [#107370](https://github.com/ClickHouse/ClickHouse/pull/107370) ([groeneai](https://github.com/groeneai)).
* Corrigida a leitura de tabelas Iceberg v3 cujos arquivos de dados Parquet contêm colunas reservadas de linhagem de linha (como `_row_id`); o leitor nativo Parquet não gera mais `ICEBERG_SPECIFICATION_VIOLATION` para IDs de campo reservados que não fazem parte do esquema da tabela. [#107377](https://github.com/ClickHouse/ClickHouse/pull/107377) ([gregakinman](https://github.com/gregakinman)).
* Corrigida uma exceção espúria `filesystem error: in last_write_time: No such file or directory` ao listar um diretório de armazenamento de objetos em disco local (por exemplo, uma tabela Iceberg em um disco `local`) enquanto arquivos são substituídos simultaneamente. Uma entrada removida simultaneamente agora é omitida da listagem, em vez de interrompê-la. [#107432](https://github.com/ClickHouse/ClickHouse/pull/107432) ([groeneai](https://github.com/groeneai)).
* Corrigido o erro 'A conta deve ser especificada' ao ler uma tabela Delta Lake no Azure. [#107620](https://github.com/ClickHouse/ClickHouse/pull/107620) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* Corrige uma falha ao ler tabelas Iceberg com arquivos de exclusão por igualdade. Se uma coluna for anulável no arquivo de exclusão por igualdade, mas não anulável no esquema da tabela (ou vice-versa), os valores lidos do arquivo de exclusão eram inseridos, por meio de uma conversão não verificada, em uma coluna de tipo diferente (uma confusão de tipos de coluna), corrompendo a coluna e causando a falha do servidor. [#109551](https://github.com/ClickHouse/ClickHouse/pull/109551) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrige um falso erro `ICEBERG_SPECIFICATION_VIOLATION` ao ler uma tabela Iceberg cujo tipo decimal (ou outro tipo primitivo parametrizado) é serializado com espaços em branco diferentes em arquivos de metadados, por exemplo, `decimal(20,0)` nos metadados da tabela e `decimal(20, 0)` no manifesto. Essas strings de tipo equivalentes segundo a especificação agora são comparadas ignorando os espaços em branco. [#109676](https://github.com/ClickHouse/ClickHouse/pull/109676) ([groeneai](https://github.com/groeneai)).
* Corrige a leitura de tabelas Iceberg cuja ordenação padrão faz referência a uma coluna que requer delimitação (por exemplo, `@timestamp`). Essas tabelas não podiam ser lidas porque o `ORDER BY` de armazenamento sintetizado era construído a partir do nome bruto da coluna e não era analisado, resultando em `SYNTAX_ERROR`. [#110233](https://github.com/ClickHouse/ClickHouse/pull/110233) ([groeneai](https://github.com/groeneai)).
* Corrige a leitura de tabelas Paimon que contêm uma coluna `ARRAY` ou `MAP` anulável. Essas tabelas não podiam ser lidas porque o mapeador de esquema envolvia o tipo composto em `Nullable`, o que o ClickHouse não permite; assim, tanto `DESC` quanto `SELECT` falhavam com `Nested type Array(Nullable(Int32)) cannot be inside Nullable type`. Uma coluna composta anulável agora é mapeada para um tipo composto não `Nullable`, e um valor `NULL` é lido como vazio. [#113450](https://github.com/ClickHouse/ClickHouse/pull/113450) ([groeneai](https://github.com/groeneai)).
* Registra o espaço de nomes Iceberg no catálogo antes de gravar arquivos de tabela (necessário para o SeaweedFS) [#114285](https://github.com/ClickHouse/ClickHouse/pull/114285) ([azat](https://github.com/azat)).

<h3 id="s3-azure-object-storage-fixes">
  Correções de S3/Azure/armazenamento de objetos
</h3>

* Corrigida a exceção "Distributed task iterator is not initialized" ao usar as funções de tabela `url`, `s3` ou semelhantes em consultas com réplicas paralelas habilitadas. [#100146](https://github.com/ClickHouse/ClickHouse/pull/100146) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigido um possível segfault do servidor em funções de tabela de cluster (`s3Cluster`, `urlCluster`, `fileCluster`, ...) quando o planejador produz um `SELECT` com a flag `recursive_with` definida, mas sem uma expressão `WITH`. [#105433](https://github.com/ClickHouse/ClickHouse/pull/105433) ([groeneai](https://github.com/groeneai)).
* Corrigido o pushdown de filtro para `Parquet` e `ORC` em predicados `IN (subquery)`, permitindo a eliminação de grupos de linhas, páginas e filtros Bloom em leituras de `file`, `url`, `s3` e armazenamento de objetos. [#105863](https://github.com/ClickHouse/ClickHouse/pull/105863) ([arsenmuk](https://github.com/arsenmuk)).
* Corrigida a exceção `LOGICAL_ERROR` durante o pré-download para o cache quando um objeto S3 remoto é sobrescrito com conteúdo menor entre a listagem e a leitura. [#106375](https://github.com/ClickHouse/ClickHouse/pull/106375) ([fm4v](https://github.com/fm4v)).
* Corrigido o problema em que a função de tabela `s3` ignorava silenciosamente uma `partition_strategy` posicional em minúsculas (por exemplo, `hive`). [#107297](https://github.com/ClickHouse/ClickHouse/pull/107297) ([jkartseva](https://github.com/jkartseva)).
* Corrigida uma regressão em que definir `compatibility = '26.6'` (que habilita implicitamente a estratégia de partição `hive`) aceitava silenciosamente `{_partition_id}` em caminhos de tabela de `S3` e armazenamento de objetos, em vez de gerar `BAD_ARGUMENTS`. [#107437](https://github.com/ClickHouse/ClickHouse/pull/107437) ([LefterisXefteris](https://github.com/LefterisXefteris)).
* Corrigido o problema em que `s3` e outras funções de tabela de armazenamento de objetos geravam `LOGICAL_ERROR` em vez de `BAD_ARGUMENTS` quando um argumento de chave-valor era duplicado, por exemplo, `s3('http://...', format = 'CSV', format = 'TSV')`. [#107670](https://github.com/ClickHouse/ClickHouse/pull/107670) ([groeneai](https://github.com/groeneai)).
* Corrigida uma exceção do servidor (`Logical error: 'index >= result.start'`) ao formatar uma consulta malformada que mistura as formas posicional e nomeada do argumento Secret das funções de tabela `s3`/`gcs`, por exemplo, `s3('url', 'a', 'b', secret_access_key = 'c')`. [#107818](https://github.com/ClickHouse/ClickHouse/pull/107818) ([groeneai](https://github.com/groeneai)).
* Corrigida a prioridade das configurações do S3 para que um bloco de endpoint `<s3>` com escopo de URL tenha precedência sobre os padrões `<s3>` de nível superior. [#109251](https://github.com/ClickHouse/ClickHouse/pull/109251) ([bharatnc](https://github.com/bharatnc)).
* Corrigidos erros `411 Length Required` de serviços Azure: o transporte HTTP do Azure baseado em Poco agora define `Content-Length` com base no corpo da requisição para clientes SDK que não definem o cabeçalho por conta própria (por exemplo, Azure Key Vault). [#110299](https://github.com/ClickHouse/ClickHouse/pull/110299) ([thevar1able](https://github.com/thevar1able)).

<h3 id="s3queue-fixes">
  Correções no S3Queue
</h3>

* Corrige uma falha do servidor (acesso fora dos limites) em `S3Queue`/`AzureQueue` com `enable_hash_ring_filtering = 1` quando um lote continha um arquivo não processável e, ao mesmo tempo, falhava a solicitação ao Keeper para marcar o lote como em processamento. [#108977](https://github.com/ClickHouse/ClickHouse/pull/108977) ([groeneai](https://github.com/groeneai)).
* Corrige vazamentos de credenciais em `SHOW CREATE`, `system.query_log`, logs do servidor e na saída de `EXPLAIN`. Todas as formas de localizador `S3` agora mascaram `session_token`, secrets do Google ADC, valores de `extra_credentials`/`headers` em qualquer posição de argumento, chaves secret duplicadas ou em expressões, formas posicionais inválidas (falha segura) e credenciais incorporadas em URLs S3; isso abrange as funções de tabela `s3`/`s3Cluster` com URL explícita e coleção nomeada, os motores de tabela com suporte a S3 (`S3`, `GCS`, os motores de data lake, `S3Queue`), o motor de banco de dados `S3`, `BACKUP ... TO S3` e o motor de banco de dados `Backup`. Além disso, argumentos secretos de `encrypt`/`decrypt`/HMAC criados por uma expressão (inclusive os inseridos de uma UDF SQL) agora são ocultados em nomes de projeção, `EXPLAIN QUERY TREE` e `EXPLAIN actions`. [#109768](https://github.com/ClickHouse/ClickHouse/pull/109768) ([Algunenano](https://github.com/Algunenano)).
* Corrige o modo ordenado de `S3Queue`/`AzureQueue` com nós de processamento persistentes: os bloqueios do bucket agora são renovados durante o streaming, para que a limpeza por TTL (`persistent_processing_node_ttl_seconds`) não remova bloqueios do bucket de um processador ativo. Se, ainda assim, a propriedade do lock for perdida, isso será detectado e relatado (um erro lógico e o evento de perfil `ObjectStorageQueueBucketLockLostOwnership`), e o streaming será retomado com um novo iterador de arquivos. [#110292](https://github.com/ClickHouse/ClickHouse/pull/110292) ([kssenii](https://github.com/kssenii)).

<h3 id="security-and-access-control-fixes">
  Correções de segurança e controle de acesso
</h3>

* Corrigido um crash do servidor (SIGSEGV) que podia ser explorado por qualquer usuário com permissão para `CREATE TABLE` ao enviar `CREATE TABLE ... TO INNER UUID '...'` sem uma cláusula `ENGINE` por HTTP ou pelo protocolo nativo. O mesmo bug também causava o crash do cliente. O analisador agora informa corretamente o erro `BAD_ARGUMENTS`, em vez de desreferenciar um ponteiro nulo. [#105579](https://github.com/ClickHouse/ClickHouse/pull/105579) ([groeneai](https://github.com/groeneai)).
* Corrigido um crash do servidor ao consultar tabelas DeltaLake com `allow_experimental_delta_kernel_rs` ativado e uma credencial ou opção contendo bytes inválidos (a FFI do Rust entrava em pânico ao atravessar o limite `extern "C"`). [#106109](https://github.com/ClickHouse/ClickHouse/pull/106109) ([Algunenano](https://github.com/Algunenano)).
* Corrigidas várias leituras fora dos limites da heap no leitor do formato Arrow IPC (`ArrowColumnToCHColumn`). Um arquivo Arrow malformado podia declarar mais linhas do que seus buffers contêm, declarar comprimentos de filhos de lista/struct/map inconsistentes com os respectivos pais, fornecer offsets de lista não monotônicos ou truncar um bitmap de validade filho, causando leituras além do fim das alocações na heap. Esse problema podia ser explorado por qualquer usuário com o privilégio `SELECT` via `file()`, `format()`, funções de tabela ou entradas ArrowFlight. Todos os buffers de dados, offsets, view-struct e bitmap de validade agora são validados antes de qualquer acesso a ponteiro bruto, e as estruturas e offsets de lista/struct/map são verificados quanto à consistência. [#106395](https://github.com/ClickHouse/ClickHouse/pull/106395) ([Algunenano](https://github.com/Algunenano)).
* Corrigido um bug em que as colunas `used_privileges` e `missing_privileges` de `system.query_log` podiam conter strings de privilégios vazadas de consultas anteriores e não relacionadas de outro usuário, banco de dados ou sessão. [#106425](https://github.com/ClickHouse/ClickHouse/pull/106425) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigido um heap buffer overflow (crash do servidor) em `decodeHTMLComponent` ao decodificar strings que contêm as entidades HTML expansíveis `&nGt;` ou `&nLt;`, que podia ser explorado por qualquer usuário com um único `SELECT`. [#106741](https://github.com/ClickHouse/ClickHouse/pull/106741) ([Algunenano](https://github.com/Algunenano)).
* Corrigidos resultados incorretos de consultas causados pelo cache de condições de consulta quando mutações em tempo real (`apply_mutations_on_fly`) ou patch parts filtravam linhas antes de `PREWHERE`. Uma consulta lida com `apply_mutations_on_fly = 1` podia contaminar o cache, fazendo com que uma consulta posterior com `apply_mutations_on_fly = 0` e o mesmo predicado ignorasse marcas que deveria ler e retornasse menos linhas do que o esperado. A mesma correção também abrange políticas de segurança em nível de linha, que são adicionadas como filtro antes de `PREWHERE`: uma consulta executada sob uma política de linha restritiva podia contaminar o cache para uma consulta posterior que usasse o mesmo predicado sem essa política. [#107145](https://github.com/ClickHouse/ClickHouse/pull/107145) ([groeneai](https://github.com/groeneai)).
* Corrigido um heap buffer overflow (crash do servidor) em `windowFunnel` ao finalizar um estado de função agregada criado com um tipo de evento fora do intervalo, que podia ser explorado por qualquer usuário com um único `SELECT`. [#107412](https://github.com/ClickHouse/ClickHouse/pull/107412) ([uwezkhan](https://github.com/uwezkhan)).
* Corrigido o problema em que `currentUser()`, `user()`, `SESSION_USER` e `authenticatedUser()` eram avaliados como uma string vazia durante a gravação de inserts assíncronos (com `async_insert = 1`). Isso afetava expressões de coluna `DEFAULT`/`MATERIALIZED` e visões materializadas que fazem referência a essas funções, que armazenavam silenciosamente uma string vazia em vez do usuário que realizou o insert. [#107541](https://github.com/ClickHouse/ClickHouse/pull/107541) ([groeneai](https://github.com/groeneai)).
* Quando várias quotas são atribuídas ao mesmo usuário ou função, todas agora são aplicadas em conjunto (uma consulta é rejeitada se qualquer uma delas for excedida), em vez de apenas uma quota ser aplicada e escolhida de forma não determinística. `SHOW QUOTA` e `system.quota_usage` agora exibem todas as quotas aplicadas ao usuário atual. [#107664](https://github.com/ClickHouse/ClickHouse/pull/107664) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `SYSTEM RESET DDL WORKER` agora requer o novo privilégio `SYSTEM RESET DDL WORKER`. Antes, qualquer usuário autenticado (inclusive usuários `readonly`) podia executá-lo e redefinir repetidamente o estado do worker de DDL, bloqueando DDLs `ON CLUSTER`. [#108460](https://github.com/ClickHouse/ClickHouse/pull/108460) ([groeneai](https://github.com/groeneai)).
* Corrigida a identificação de usuários por `ssl_certificate` para que um único wildcard `*` corresponda exatamente a um componente do nome (RFC 6125 6.4.3). Antes, um wildcard em um assunto `CN` ou SAN `DNS:` (por exemplo, `*.corp.example.com`) também correspondia a nomes com vários rótulos, como `evil.deep.corp.example.com`, permitindo que o titular de um certificado de um subdomínio mais profundo se autenticasse como o usuário do wildcard. A correspondência de SANs `URI:` permanece inalterada. [#108472](https://github.com/ClickHouse/ClickHouse/pull/108472) ([groeneai](https://github.com/groeneai)).
* Os comandos do MySQL wire protocol `COM_FIELD_LIST` (`mysql_list_fields`) e `COM_INIT_DB` (`USE database`) agora aplicam o mesmo controle de acesso que seus equivalentes em SQL (`SHOW COLUMNS`/`DESCRIBE` e `USE`). Antes, eles podiam revelar nomes de colunas de tabelas para as quais o usuário tinha permissões parciais em colunas e alterar o banco de dados atual sem o privilégio `SHOW DATABASES`. [#108508](https://github.com/ClickHouse/ClickHouse/pull/108508) ([groeneai](https://github.com/groeneai)).
* Corrigida a correspondência de `http_forbid_headers` para não diferenciar maiúsculas de minúsculas. Os nomes de cabeçalhos HTTP não diferenciam maiúsculas de minúsculas, portanto proibir `Authorization` agora também bloqueia `authorization`, `AUTHORIZATION` e outras variações de maiúsculas e minúsculas. Os padrões `header_regexp` configurados agora são correspondidos sem diferenciar maiúsculas de minúsculas, sem exigir a flag explícita `(?i)`. [#108509](https://github.com/ClickHouse/ClickHouse/pull/108509) ([groeneai](https://github.com/groeneai)).
* Corrigida uma exposição de metadados em que `DESCRIBE loop('db', 'table')` e `DESCRIBE loop(<inner table function>)` contornavam a verificação de acesso à origem / `SHOW COLUMNS`, permitindo que um usuário sem privilégios lesse o esquema de colunas de uma tabela. [#108624](https://github.com/ClickHouse/ClickHouse/pull/108624) ([groeneai](https://github.com/groeneai)).
* Corrigida uma falha de inicialização em que um banco de dados `DataLakeCatalog` criado por uma versão anterior (25.12 ou anterior) com um `auth_header` malformado não podia ser anexado após a atualização para 26.2 ou posterior, impedindo a inicialização do servidor. O `auth_header` agora é validado apenas em `CREATE` e, em `ATTACH`, o catálogo é criado sob demanda no primeiro uso, em vez de durante a inicialização. Assim, um único banco de dados de catálogo mal configurado ou inacessível não bloqueia mais a inicialização do servidor. [#108674](https://github.com/ClickHouse/ClickHouse/pull/108674) ([groeneai](https://github.com/groeneai)).
* Reforçadas as conexões RabbitMQ contra frames AMQP excessivamente grandes e aplicadas de forma consistente as verificações de `remote_url_allow_hosts` a `rabbitmq_address`. [#112479](https://github.com/ClickHouse/ClickHouse/pull/112479) ([kssenii](https://github.com/kssenii)).
* Corrigido um caso em que `CREATE TABLE ... ENGINE = Distributed(...)` sem uma lista de colunas podia revelar a estrutura de uma tabela local que o usuário que a criava não tinha permissão para ver. Em um `CREATE` executado pelo próprio servidor local, a estrutura agora é inferida no contexto do usuário, portanto é necessário ter `SHOW COLUMNS` na tabela de destino, como já ocorre com o engine `Remote`. Um `CREATE` reproduzido da fila DDL (`ON CLUSTER` ou dentro de um banco de dados `Replicated`) não é abrangido. [#113220](https://github.com/ClickHouse/ClickHouse/pull/113220) ([groeneai](https://github.com/groeneai)).
* Corrigido um caso em que `CREATE TABLE ... ENGINE = Buffer(...)` sem lista de colunas poderia revelar a estrutura de uma tabela de destino que o usuário que a cria não tem permissão para ver. Em um `CREATE` executado localmente pelo próprio servidor, a estrutura agora é inferida no contexto do usuário, portanto é necessária a permissão `SHOW COLUMNS` na tabela de destino, como já ocorre com `Merge` e `Remote`. Um `CREATE` reproduzido da fila de DDL (`ON CLUSTER` ou dentro de um banco de dados `Replicated`) não é abrangido. [#113372](https://github.com/ClickHouse/ClickHouse/pull/113372) ([groeneai](https://github.com/groeneai)).
* Limitado o tamanho da mensagem de inicialização do protocolo wire do PostgreSQL, que é lida antes da autenticação. [#115708](https://github.com/ClickHouse/ClickHouse/pull/115708) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="backup-and-restore-fixes">
  Correções de backup e restauração
</h3>

* Corrigida uma interrupção do servidor durante o `RESTORE` de backups contendo tabelas com dependências cíclicas. [#103824](https://github.com/ClickHouse/ClickHouse/pull/103824) ([thevar1able](https://github.com/thevar1able)).
* Corrigido o problema de a classe de armazenamento do S3 (`s3_storage_class` / `s3_storage_class_name`) ser ignorada para objetos gravados por upload multipartes em discos `S3` e armazenamento de objetos, fazendo com que objetos grandes fossem criados com a classe padrão `STANDARD`. O nome da opção agora é aceito como `s3_storage_class` e `s3_storage_class_name` para discos, armazenamento de objetos e backups. [#106214](https://github.com/ClickHouse/ClickHouse/pull/106214) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigido o descarte, por `SYSTEM RELOAD CONFIG`, das configurações do Azure Blob Storage específicas de cada endpoint (como `use_native_copy`), o que fazia com que as configurações de um disco fossem ignoradas para `BACKUP`/`RESTORE` até a reinicialização do servidor. [#106357](https://github.com/ClickHouse/ClickHouse/pull/106357) ([jkartseva](https://github.com/jkartseva)).
* Corrigida a falha de backups com FILE\_DOESNT\_EXIST quando o destino REPLACE de uma view materializada atualizável é coletado em um banco de dados Replicated ou Shared cuja view materializada ainda não foi instanciada na réplica que iniciou o backup. [#106411](https://github.com/ClickHouse/ClickHouse/pull/106411) ([jkartseva](https://github.com/jkartseva)).
* Corrigido o Azure BACKUP/RESTORE que ignorava as configurações de endpoint para discos `azure_blob_storage` no formato legado. [#106784](https://github.com/ClickHouse/ClickHouse/pull/106784) ([jkartseva](https://github.com/jkartseva)).
* Corrigido o `BACKUP` para `AzureBlobStorage`: a cópia de um arquivo de dados dentro de um backup gravava o objeto de destino fora do diretório do backup. As verificações de existência de objetos de backup em destinos `S3` agora usam solicitações exatas de `HeadObject`, em vez de listagem por prefixo, evitando correspondências incorretas com chaves de prefixos semelhantes. [#107153](https://github.com/ClickHouse/ClickHouse/pull/107153) ([pamarcos](https://github.com/pamarcos)).
* Backups incrementais não armazenam mais credenciais S3 no localizador `<base_backup>` do arquivo de metadados `.backup`. Backups criados com `use_same_s3_credentials_for_base_backup = 1` ou com credenciais explícitas do backup base que correspondam a esse localizador armazenam um marcador não secreto e são restaurados sem configurações adicionais durante a restauração; para backups criados com credenciais explícitas diferentes para o backup base ou argumentos adicionais de autenticação do backup base, passe-os a `RESTORE` com a configuração `base_backup`. Backups criados por versões anteriores com credenciais incorporadas continuam podendo ser restaurados. [#107357](https://github.com/ClickHouse/ClickHouse/pull/107357) ([pamarcos](https://github.com/pamarcos)).
* Corrigido o `RESTORE` de tabelas `ReplicatedMergeTree` para preservar partes de um backup com conteúdo duplicado, em vez de deduplicá-las silenciosamente. [#107652](https://github.com/ClickHouse/ClickHouse/pull/107652) ([pamarcos](https://github.com/pamarcos)).
* Um placeholder `{_partition_id}` no caminho de um mecanismo semelhante a arquivo (`S3`, `AzureBlobStorage`, `URL` etc.) sem uma `partition_strategy` explícita volta a implicar a estratégia `wildcard`, independentemente de `file_like_engine_default_partition_strategy`. Isso restaura a compatibilidade retroativa para DDLs anteriores à versão 26.6 que passaram a falhar com `BAD_ARGUMENTS` ("A estratégia de partição hive não pode ser usada com um wildcard '\_partition\_id' no caminho"). [#111279](https://github.com/ClickHouse/ClickHouse/pull/111279) ([fm4v](https://github.com/fm4v)).

<h3 id="clickhouse-keeper-fixes">
  Correções do ClickHouse Keeper
</h3>

* Corrige a limpeza de snapshots do `Keeper` após falhas de gravação, garantindo que snapshots parciais sejam removidos com segurança e que as gravações possam ser repetidas sem avançar `latest_snapshot_meta`. [#105779](https://github.com/ClickHouse/ClickHouse/pull/105779) ([antonio2368](https://github.com/antonio2368)).
* Corrige falhas do `Keeper` durante a sincronização de um seguidor quando a fila de respostas do novo dispatcher de solicitações podia encher antes de a thread de resposta ser iniciada. [#106049](https://github.com/ClickHouse/ClickHouse/pull/106049) ([antonio2368](https://github.com/antonio2368)).
* Corrige casos em que o Keeper ficava travado na inicialização quando a configuração `nuraft_max_log_gap_in_stream` era definida como um valor diferente do padrão (o padrão é 0, ou seja, desativa o pipelining de solicitações `append_entries`). [#106220](https://github.com/ClickHouse/ClickHouse/pull/106220) ([al13n321](https://github.com/al13n321)).
* O TLS interno do Raft do Keeper agora respeita a configuração `openSSL.client.verificationMode`. Anteriormente, a verificação de certificados de pares ficava sempre habilitada para a comunicação Raft entre instâncias do Keeper, independentemente dessa configuração, portanto `none` era ignorado silenciosamente. Agora, `none` desativa explicitamente a verificação de certificados de pares do Raft, enquanto a ausência dessa configuração mantém o comportamento anterior, seguro por padrão. Configurações que definem explicitamente `none` deixarão de verificar certificados de pares do Raft após o upgrade, conforme a intenção da configuração. [#106726](https://github.com/ClickHouse/ClickHouse/pull/106726) ([antonio2368](https://github.com/antonio2368)).
* Corrige a recriação indevida de sessões do ZooKeeper ao recarregar a configuração. [#107096](https://github.com/ClickHouse/ClickHouse/pull/107096) ([azat](https://github.com/azat)).
* Corrige um bug no ClickHouse Keeper em que os metadados do snapshot informados por `last_snapshot` (e `zk_latest_snapshot_size` em `mntr`) podiam regredir após a instalação de um snapshot obsoleto ou duplicado. Isso também podia permitir que um snapshot local com o mesmo índice sobrescrevesse um arquivo de snapshot registrado enquanto ele ainda estava sendo transmitido a um par ou enviado ao S3. [#107321](https://github.com/ClickHouse/ClickHouse/pull/107321) ([antonio2368](https://github.com/antonio2368)).
* Corrige casos em que uma view materializada atualizável ficava travada se a conexão com o ZooKeeper fosse perdida no momento errado. [#108234](https://github.com/ClickHouse/ClickHouse/pull/108234) ([al13n321](https://github.com/al13n321)).
* Corrige mutações com um parâmetro de consulta como partição (`ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}`): o valor de partição substituído era serializado na entrada da mutação em um formato que não podia ser convertido novamente, interrompendo o carregamento da tabela (em todas as réplicas, no caso de tabelas replicadas). Agora, os comandos de mutação também são verificados para garantir que possam ser convertidos novamente antes de serem gravados no ZooKeeper ou no disco, de modo que uma incompatibilidade semelhante faça a consulta `ALTER` falhar em vez de interromper a tabela. [#111518](https://github.com/ClickHouse/ClickHouse/pull/111518) ([al13n321](https://github.com/al13n321)).
* Corrige overflow numérico durante a análise de dados para `system.zookeeper_info`. [#111629](https://github.com/ClickHouse/ClickHouse/pull/111629) ([kssenii](https://github.com/kssenii)).

<h3 id="crash-and-stability-fixes">
  Correções de falhas e de estabilidade
</h3>

* Corrige a exceção NOT\_FOUND\_COLUMN\_IN\_BLOCK ao usar LIMIT BY com colunas constantes em conjunto com DISTINCT e ORDER BY no novo analisador. [#93195](https://github.com/ClickHouse/ClickHouse/pull/93195) ([ashrithb](https://github.com/ashrithb)).
* Melhora a estabilidade da conexão com o HiveCatalog ao adicionar um mecanismo de novas tentativas automáticas e lógica de reconexão para lidar com erros TTransportException na comunicação com o Hive Metastore. [#98471](https://github.com/ClickHouse/ClickHouse/pull/98471) ([otselnik](https://github.com/otselnik)).
* Corrige a avaliação de constantes durante a análise em funções de curto-circuito (`if`, `multiIf`, `and`, `or` etc.), para que ramificações estaticamente inacessíveis não gerem mais exceções durante a análise. Por exemplo, `WITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n))` agora retorna corretamente `0`, em vez de falhar com um erro de divisão por zero. [#103157](https://github.com/ClickHouse/ClickHouse/pull/103157) ([fastio](https://github.com/fastio)).
* Corrige uma finalização inesperada do servidor quando `runningAccumulate` era chamado em uma função de agregação que retorna seu próprio estado. [#105085](https://github.com/ClickHouse/ClickHouse/pull/105085) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* Corrige `getServerSetting` para retornar o valor efetivo atual das configurações do servidor que podem ser alteradas em tempo de execução (como `max_server_memory_usage`, `mark_cache_size`, `max_concurrent_queries`, tamanhos de pools de threads etc.), em conformidade com o reportado por `system.server_settings`. [#105172](https://github.com/ClickHouse/ClickHouse/pull/105172) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige a exceção `NOT_FOUND_COLUMN_IN_BLOCK` ao combinar `ORDER BY ... WITH FILL INTERPOLATE` e `LIMIT N BY` com o analisador habilitado. [#105481](https://github.com/ClickHouse/ClickHouse/pull/105481) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Corrige uma exceção do servidor (erro lógico `Trying to execute PLACEHOLDER action`) quando uma CTE `MATERIALIZED` cujo corpo é uma subconsulta correlacionada é usada no lado direito de `IN`. Essa CTE agora é rejeitada durante a análise, de forma consistente com o tratamento já aplicado ao mesmo padrão quando a CTE é referenciada diretamente em `FROM`. [#105518](https://github.com/ClickHouse/ClickHouse/pull/105518) ([groeneai](https://github.com/groeneai)).
* Corrige o fato de `variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=false` não capturar exceções durante a execução de funções. [#105543](https://github.com/ClickHouse/ClickHouse/pull/105543) ([Avogar](https://github.com/Avogar)).
* Corrige a exceção NOT\_FOUND\_COLUMN\_IN\_BLOCK quando uma expressão TTL referencia uma subcoluna. [#105578](https://github.com/ClickHouse/ClickHouse/pull/105578) ([Avogar](https://github.com/Avogar)).
* Corrige uma falha do servidor que poderia ocorrer quando uma consulta que lê do PostgreSQL — por meio da função de tabela postgresql, do mecanismo de tabela PostgreSQL ou de um dicionário com uma fonte PostgreSQL — era cancelada (por exemplo, com KILL QUERY) e o cancelamento da consulta remota no PostgreSQL falhava. [#105949](https://github.com/ClickHouse/ClickHouse/pull/105949) ([rorylshanks](https://github.com/rorylshanks)).
* Corrige uma possível falha causada por um literal de string muito grande enviado na consulta. [#105996](https://github.com/ClickHouse/ClickHouse/pull/105996) ([nickitat](https://github.com/nickitat)).
* Corrige a exceção `INVALID_WITH_FILL_EXPRESSION` ao usar `INTERPOLATE ()` (vazio) com um prefixo de ordenação em `ORDER BY` e `use_with_fill_by_sorting_prefix` habilitado. As colunas do prefixo de ordenação agora são corretamente excluídas do conjunto de interpolação implícita, em conformidade com o comportamento de `INTERPOLATE (col)` quando nomeado explicitamente. [#106001](https://github.com/ClickHouse/ClickHouse/pull/106001) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Estados malformados de `AggregateFunction(uniqTheta, ...)` provenientes da entrada `RowBinary` ou de parâmetros de consulta agora são rejeitados com `CORRUPTED_DATA`, em vez de encerrar o servidor. [#106260](https://github.com/ClickHouse/ClickHouse/pull/106260) ([groeneai](https://github.com/groeneai)).
* Corrige uma falha e um possível erro `NOT_FOUND_COLUMN_IN_BLOCK` quando a otimização baseada em restrições (`optimize_using_constraints`) é usada com subconsultas correlacionadas. [#106349](https://github.com/ClickHouse/ClickHouse/pull/106349) ([Algunenano](https://github.com/Algunenano)).
* Corrige a exceção `NUMBER_OF_COLUMNS_DOESNT_MATCH` ao consultar uma tabela `Distributed` com duas ou mais colunas ALIAS expandidas para a mesma expressão (por exemplo, ambas definidas como `toString(x)`), ou quando a mesma expressão é usada tanto como referência a uma coluna ALIAS quanto diretamente na lista SELECT, com uma cláusula `ORDER BY`. [#106404](https://github.com/ClickHouse/ClickHouse/pull/106404) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Corrigido o `LOGICAL_ERROR` "Trying to get name of not a column: `ExpressionList`", gerado por consultas que passam um asterisco dentro de `multiIf` para um argumento de função de tabela, por exemplo, `numbers(multiIf(*, ...), 2)`. A consulta agora rejeita o padrão não resolvível com `UNSUPPORTED_METHOD`. [#106647](https://github.com/ClickHouse/ClickHouse/pull/106647) ([groeneai](https://github.com/groeneai)).
* Rejeita padrões glob de `file` problemáticos que causariam recursão ilimitada na listagem de diretórios. Agora é imposta uma profundidade máxima de recursão de 1000; consultas que a excedem geram `TOO_DEEP_RECURSION`, em vez de encerrar o servidor por estouro de pilha. [#106676](https://github.com/ClickHouse/ClickHouse/pull/106676) ([groeneai](https://github.com/groeneai)).
* Corrige a exceção `'Trying to read from input() twice.'` gerada quando a função de tabela `input` é encapsulada em uma CTE não MATERIALIZED referenciada em mais de um ponto da consulta. A consulta agora é rejeitada com um erro claro `INVALID_USAGE_OF_INPUT` durante o planejamento. `input` é um stream de cliente de uso único e só pode ser consumido por uma única fonte no plano de consulta. [#106682](https://github.com/ClickHouse/ClickHouse/pull/106682) ([groeneai](https://github.com/groeneai)).
* Corrige colunas inconsistentes (que posteriormente levam a LOGICAL\_ERROR) em caso de exceção (por exemplo, MEMORY\_LIMIT\_EXCEEDED) durante a análise. [#106802](https://github.com/ClickHouse/ClickHouse/pull/106802) ([azat](https://github.com/azat)).
* Corrige uma falha do servidor (SIGSEGV) ao ler dados Protobuf truncados com `input_format_allow_errors_num > 0`. [#106905](https://github.com/ClickHouse/ClickHouse/pull/106905) ([atsarevskiy](https://github.com/atsarevskiy)).
* Corrige uma falha do servidor (desreferenciamento de ponteiro nulo) ao executar `TRUNCATE` ou `DROP` em uma tabela `EmbeddedRocksDB` cujo identificador do RocksDB foi liberado, por exemplo, uma tabela `read_only` cujo diretório de dados foi esvaziado por um `TRUNCATE` anterior. [#106940](https://github.com/ClickHouse/ClickHouse/pull/106940) ([groeneai](https://github.com/groeneai)).
* Corrige uma exceção (`std::length_error` reportada como `LOGICAL_ERROR`) ao ler de uma função de tabela `*Cluster`, como `urlCluster`, com uma configuração `max_streams_for_files_processing_in_cluster_functions` muito alta. O número de streams agora é limitado a um valor razoável. [#106946](https://github.com/ClickHouse/ClickHouse/pull/106946) ([groeneai](https://github.com/groeneai)).
* Corrigido o encerramento do servidor quando uma consulta distribuída era cancelada imediatamente antes de ser enviada a um shard. [#106950](https://github.com/ClickHouse/ClickHouse/pull/106950) ([groeneai](https://github.com/groeneai)).
* Corrigida uma exceção do servidor (erro lógico `this->visited_views == right->visited_views`) em um `INSERT` quando duas visões materializadas na mesma tabela de origem gravam na mesma tabela de destino e uma visão dependente lê esse destino, com `materialized_views_squash_parallel_inserts` habilitado. [#107027](https://github.com/ClickHouse/ClickHouse/pull/107027) ([groeneai](https://github.com/groeneai)).
* Corrigida uma exceção `LOGICAL_ERROR` ao inserir em uma tabela DeltaLake com colunas que não correspondem ao esquema de gravação (por exemplo, uma coluna `Nested` que é achatada em subcolunas ou uma função de tabela com um subconjunto explícito de colunas). Esses inserts agora falham com um erro `INCOMPATIBLE_COLUMNS` exibido ao usuário. [#107058](https://github.com/ClickHouse/ClickHouse/pull/107058) ([groeneai](https://github.com/groeneai)).
* Corrigida uma `LOGICAL_ERROR` ("Table expression ... data must be initialized") gerada quando um seletor de asterisco qualificado (por exemplo, `x.*`) referenciava uma CTE recursiva pelo nome dentro de seu próprio termo recursivo. Esses seletores agora expandem as colunas da tabela recursiva, da mesma forma que uma coluna qualificada (`x.a`) ou um seletor não qualificado (`*`) já faz nessa posição. [#107144](https://github.com/ClickHouse/ClickHouse/pull/107144) ([groeneai](https://github.com/groeneai)).
* Corrigida uma `LOGICAL_ERROR` ("Unexpected exception in refresh scheduling") que poderia colocar o servidor em um ciclo de falhas após a reinicialização quando uma view materializada atualizável tem uma dependência `REFRESH ... DEPENDS ON <name>` cujo nome não qualificado corresponde ao de uma tabela temporária ou CTE. [#107156](https://github.com/ClickHouse/ClickHouse/pull/107156) ([groeneai](https://github.com/groeneai)).
* Corrigida uma `LOGICAL_ERROR` (`Variant N (T) has size X, but expected Y`) quando uma função como `toString` ou `concat` é aplicada a uma coluna `Variant` ou `Dynamic` que contém uma única variante não vazia junto com NULLs, e a função retorna a coluna de entrada sem alterações. [#107374](https://github.com/ClickHouse/ClickHouse/pull/107374) ([groeneai](https://github.com/groeneai)).
* Corrigida uma `LOGICAL_ERROR` (`block.rows() == getRows()`) gerada em um `INSERT` assíncrono em uma tabela `Alias` quando `use_strict_insert_block_limits` estava habilitado. [#107400](https://github.com/ClickHouse/ClickHouse/pull/107400) ([groeneai](https://github.com/groeneai)).
* Corrigida uma exceção do servidor (`Logical error: Not-ready Set is passed as the second argument for function 'in'`) quando uma expressão-chave (`ORDER BY`, `PRIMARY KEY`, `PARTITION BY` ou um `INDEX` de omissão) continha um operador `IN` com uma tabela no lado direito, por exemplo, `ORDER BY (x IN some_table)`. Essas expressões-chave agora são rejeitadas na criação da tabela. [#107424](https://github.com/ClickHouse/ClickHouse/pull/107424) ([groeneai](https://github.com/groeneai)).
* Corrigida uma falha rara do servidor no processamento de `DISTINCT` que poderia ocorrer quando uma alocação falhava (por exemplo, ao atingir o limite de memória) durante a inicialização do conjunto de chaves distintas. [#107467](https://github.com/ClickHouse/ClickHouse/pull/107467) ([groeneai](https://github.com/groeneai)).
* Corrigidas falhas em operações `DeltaLake` após a expiração de credenciais temporárias do S3, atualizando as credenciais em cache antes da próxima operação. As credenciais de assume-role do STS também são atualizadas após falhas de autenticação. [#107480](https://github.com/ClickHouse/ClickHouse/pull/107480) ([ahmadov](https://github.com/ahmadov)).
* Corrigido um `Not-ready Set is passed as the second argument for function 'in'` (`LOGICAL_ERROR`) ao consultar uma tabela com uma chave `PARTITION BY` e uma subconsulta `IN`/`NOT IN` envolvida em uma expressão maior, por exemplo, `WHERE (c0 IN (SELECT ...)) != 0`. [#107515](https://github.com/ClickHouse/ClickHouse/pull/107515) ([groeneai](https://github.com/groeneai)).
* Corrige uma falha (desreferenciamento de ponteiro nulo) que poderia ocorrer quando um plano de consulta distribuída era executado localmente (`make_distributed_plan` + `distributed_plan_execute_locally`) com `log_formatted_queries = 1`. [#107570](https://github.com/ClickHouse/ClickHouse/pull/107570) ([groeneai](https://github.com/groeneai)).
* Corrige uma falha do servidor ao ler uma visão materializada cujo destino é uma tabela `Distributed` enquanto a consulta é executada com `enable_analyzer = 0`. [#107653](https://github.com/ClickHouse/ClickHouse/pull/107653) ([groeneai](https://github.com/groeneai)).
* Corrige uma falha do servidor (SIGSEGV) ao ler dados Protobuf com `input_format_allow_errors_num > 0`, quando uma mensagem válida precede uma mensagem inválida (que pode ser ignorada) no mesmo bloco. [#107739](https://github.com/ClickHouse/ClickHouse/pull/107739) ([atsarevskiy](https://github.com/atsarevskiy)).
* Corrige o travamento por vários minutos das funções de tabela `odbc` e `jdbc` e o fato de ignorarem o cancelamento de consultas (`KILL QUERY`, `max_execution_time`) quando a ponte deixa de responder durante a inferência da estrutura da tabela remota. [#107809](https://github.com/ClickHouse/ClickHouse/pull/107809) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige uma possível falha (desreferenciamento de ponteiro nulo) quando a substituição de `database`/`db` de uma coleção nomeada passada para `remote()`/`remoteSecure()` não é um nome de banco de dados constante, por exemplo, `remote(nc, database = (SELECT 1))`. Agora, a consulta falha com um erro claro em vez de causar uma falha. [#108271](https://github.com/ClickHouse/ClickHouse/pull/108271) ([groeneai](https://github.com/groeneai)).
* Consultas de busca vetorial que fazem SELECT da coluna `_distance` agora retornam um erro apropriado em vez de falhar com `LOGICAL_ERROR`. [#108423](https://github.com/ClickHouse/ClickHouse/pull/108423) ([rschu1ze](https://github.com/rschu1ze)).
* Corrige uma possível falha (heap-buffer-overflow) quando uma coluna de estado de função de agregação da família `quantileTDigest` era usada como chave de `GROUP BY` e serializada simultaneamente por várias threads. [#110263](https://github.com/ClickHouse/ClickHouse/pull/110263) ([groeneai](https://github.com/groeneai)).
* Corrige a poda incorreta decorrente da análise do índice de chave primária em tabelas com uma chave de ordenação inversa (decrescente) (`ORDER BY (g, r DESC)`). Um grânulo que abrangia uma mudança em uma coluna-chave inicial, seguida por uma coluna-chave decrescente, poderia ser podado incorretamente, descartando linhas correspondentes. [#111059](https://github.com/ClickHouse/ClickHouse/pull/111059) ([nihalzp](https://github.com/nihalzp)).
* Corrige um erro lógico `block.rows() == getRows()` (uma leitura fora dos limites e desduplicação de inserções corrompida em builds de release) quando um `INSERT` passa por uma visão materializada dependente cujo destino é um `Alias` e cuja consulta interna altera o número de linhas, com uma tabela com desduplicação acessível após o redirecionamento pelo alias. [#111103](https://github.com/ClickHouse/ClickHouse/pull/111103) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige um segfault causado por acesso à memória fora dos limites ao desserializar um estado malformado de função de agregação que contém um valor `String`. Esses estados agora são validados e rejeitados em vez de causar segfaults. [#111606](https://github.com/ClickHouse/ClickHouse/pull/111606) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrige uma falha ao ler um arquivo Parquet com metadados inconsistentes de filtro de Bloom. Esses arquivos também poderiam retornar silenciosamente menos linhas do que deveriam. [#112498](https://github.com/ClickHouse/ClickHouse/pull/112498) ([tiandiwonder](https://github.com/tiandiwonder)).
* Corrige um segfault e corrupção silenciosa de dados quando um `INSERT` no mecanismo `File` ou na função de tabela `file` adiciona dados a um arquivo não vazio em um formato que não aceita acréscimos, como `Avro`. A gravação por um descritor de arquivo ou caminho particionado ignorava a verificação existente, suprimindo o prefixo do formato e gravando um segundo cabeçalho após os bytes existentes, o que deixava o arquivo ilegível. Esse `INSERT` agora é rejeitado com `CANNOT_APPEND_TO_FILE`, como já ocorre para um caminho simples. [#112839](https://github.com/ClickHouse/ClickHouse/pull/112839) ([groeneai](https://github.com/groeneai)).
* Corrige o travamento de `DROP TABLE` e `SYSTEM STOP VIEW` quando uma view materializada atualizável fica bloqueada durante o planejamento da consulta de atualização. [#113188](https://github.com/ClickHouse/ClickHouse/pull/113188) ([evillique](https://github.com/evillique)).
* Corrige uma rara interrupção do servidor quando entradas da fila de inserção assíncrona tinham deadlines idênticos. [#113363](https://github.com/ClickHouse/ClickHouse/pull/113363) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrige corrupção da memória heap ao ler Parquet por meio de um formato de entrada que possui seu próprio buffer de leitura, por exemplo, um Dicionário com `SOURCE(FILE(... format 'Parquet'))`. Tarefas de pré-busca e decodificação em segundo plano ainda podiam ler e gravar no buffer depois que o pipeline o liberava, o que poderia interromper o servidor. [#114668](https://github.com/ClickHouse/ClickHouse/pull/114668) ([groeneai](https://github.com/groeneai)).
* Corrige um travamento ao remover uma tabela `TimeSeries` cujo nome é ordenado lexicograficamente antes dos nomes de suas tabelas internas, por exemplo, uma tabela chamada `-ts`, ou ao remover uma visão materializada declarada com `ENGINE = TimeSeries`. A remoção causava um deadlock na própria proteção DDL e não podia ser cancelada com `KILL QUERY`. [#114953](https://github.com/ClickHouse/ClickHouse/pull/114953) ([groeneai](https://github.com/groeneai)).

<h3 id="other-bug-fixes">
  Outras correções de bugs
</h3>

* As funções `like`, `ilike`, `notLike`, `notILike` e `match` agora oferecem suporte a texto pesquisado constante com padrão não constante (por exemplo, `'foo' LIKE pattern_column`), o que antes gerava `ILLEGAL_COLUMN`. [#100479](https://github.com/ClickHouse/ClickHouse/pull/100479) ([Onyx2406](https://github.com/Onyx2406)).
* Corrigido o erro `NOT_FOUND_COLUMN_IN_BLOCK` ao selecionar dados de uma VIEW sobre uma tabela com uma projeção normal. [#101218](https://github.com/ClickHouse/ClickHouse/pull/101218) ([amosbird](https://github.com/amosbird)).
* Rejeitados valores Float64 negativos (por exemplo, `-100.5`) em configurações de workload, como `max_bytes_per_second` e `max_cpus`. Antes, apenas inteiros negativos eram validados, permitindo que floats negativos criassem silenciosamente nós de scheduler inválidos. [#101842](https://github.com/ClickHouse/ClickHouse/pull/101842) ([groeneai](https://github.com/groeneai)).
* Leituras do armazenamento de objetos agora respondem prontamente ao cancelamento de consultas. [#103016](https://github.com/ClickHouse/ClickHouse/pull/103016) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* Corrigido o problema em que `input_format_max_block_size_bytes` era silenciosamente ignorado durante a análise de `INSERT` quando `max_insert_block_size_bytes` é `0` (o padrão). A configuração agora limita corretamente o tamanho dos blocos produzidos por formatos de entrada baseados em linhas. [#103068](https://github.com/ClickHouse/ClickHouse/pull/103068) ([Fgrtue](https://github.com/Fgrtue)).
* Corrigido o problema em que o ClickHouse ocasionalmente produzia tokens GSSAPI inválidos devido à remoção incorreta de bytes nulos finais. [#103114](https://github.com/ClickHouse/ClickHouse/pull/103114) ([EmeraldShift](https://github.com/EmeraldShift)).
* EXPLAIN SYNTAX expande views parametrizadas. [#103263](https://github.com/ClickHouse/ClickHouse/pull/103263) ([jrdi](https://github.com/jrdi)).
* Corrigida a corrupção de dados ao gravar Parquet (e outros formatos com trailer, como ORC e Arrow) no HDFS via `INSERT INTO FUNCTION hdfs(...)`. Desde a versão 26.1, `WriteBufferFromHDFS` não esvaziava seu buffer de trabalho em `finalize()`, fazendo com que os últimos até `DBMS_DEFAULT_BUFFER_SIZE` bytes de cada arquivo fossem silenciosamente perdidos, incluindo o rodapé `PAR1` do Parquet. A leitura desses arquivos retornava `Not a Parquet file (wrong magic bytes at the end of file)`. [#103268](https://github.com/ClickHouse/ClickHouse/pull/103268) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos e um possível erro lógico em subconsultas correlacionadas quando um limite de tamanho de join (`max_rows_in_join` / `max_bytes_in_join`) é definido junto com `join_overflow_mode = 'break'`. O join criado internamente para avaliar uma subconsulta correlacionada agora ignora esses limites definidos pelo usuário, portanto não pode mais ser interrompido antecipadamente nem descartar linhas. [#103322](https://github.com/ClickHouse/ClickHouse/pull/103322) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos ou a não utilização de projeções quando uma projeção agregada contém vários agregados `sumIf` com diferentes condições `IN (...)`. [#104765](https://github.com/ClickHouse/ClickHouse/pull/104765) ([Ergus](https://github.com/Ergus)).
* Corrigido `deltaSumTimestamp` retornando resultados incorretos para tipos inteiros com sinal que cruzam o zero. [#104830](https://github.com/ClickHouse/ClickHouse/pull/104830) ([thevar1able](https://github.com/thevar1able)).
* Corrigido o erro `Logical error: 'Metadata is not initialized'` gerado por `DELETE FROM` em uma tabela `Iceberg`, `DeltaLake` ou `Hudi` recém-anexada cujo arquivo de metadados está corrompido ou não pode ser carregado. Agora, uma exceção comum voltada ao usuário é reportada, e o servidor continua em execução. [#104917](https://github.com/ClickHouse/ClickHouse/pull/104917) ([groeneai](https://github.com/groeneai)).
* Consultas `ATTACH TABLE name <clauses>;` que incluem cláusulas de armazenamento (`ORDER BY`, `PARTITION BY`, `PRIMARY KEY`, `SAMPLE BY`, `TTL`, `UNIQUE KEY` ou `SETTINGS` do engine) sem um `ENGINE` agora geram `BAD_ARGUMENTS`, em vez de reanexar silenciosamente a tabela com sua definição armazenada e descartar as cláusulas fornecidas pelo usuário. As `SETTINGS` de sessão no nível da consulta (como `log_comment`) continuam sendo aplicadas. Use `ATTACH TABLE t;` para reanexar com os metadados armazenados ou `ALTER TABLE t MODIFY SETTING ...` após `ATTACH` para alterar as configurações. [#105068](https://github.com/ClickHouse/ClickHouse/pull/105068) ([groeneai](https://github.com/groeneai)).
* Corrigido um estouro de buffer de heap ao ler arquivos Arrow ou ArrowStream com deslocamentos intermediários corrompidos em uma coluna binária ou de string, bem como uma desreferência de ponteiro nulo ao ler colunas Arrow com geotags. [#105449](https://github.com/ClickHouse/ClickHouse/pull/105449) ([Algunenano](https://github.com/Algunenano)).
* Corrigida uma interrupção do servidor ao ler subcolunas `Dynamic` de uma tabela `Memory` comprimida após `ALTER`. [#105464](https://github.com/ClickHouse/ClickHouse/pull/105464) ([Avogar](https://github.com/Avogar)).
* Incluído `skip_first_lines` na chave do cache de esquema para formatos `WithNames`. [#105469](https://github.com/ClickHouse/ClickHouse/pull/105469) ([Avogar](https://github.com/Avogar)).
* Corrigido o `histogram`, que produzia resultados incorretos para entradas pequenas não ordenadas. [#105548](https://github.com/ClickHouse/ClickHouse/pull/105548) ([Avogar](https://github.com/Avogar)).
* Corrigido o uso da tabela de inserção em funções de tabela quando `optimize_trivial_insert_select` está habilitado. [#105555](https://github.com/ClickHouse/ClickHouse/pull/105555) ([Avogar](https://github.com/Avogar)).
* Corrigida a função de janela `estimateCompressionRatio`, que perdia dados acumulados entre linhas. [#105581](https://github.com/ClickHouse/ClickHouse/pull/105581) ([Avogar](https://github.com/Avogar)).
* A extração de valores de partição Hive agora respeita a configuração `cast_string_to_date_time_mode` e, por padrão, aceita timestamps ISO 8601 com sufixos de fuso horário (por exemplo, `+0000`, `+00:00`, `Z`) em chaves de partição. [#105584](https://github.com/ClickHouse/ClickHouse/pull/105584) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigida a recuperação de erros do formato de entrada `Template` após linhas malformadas. [#105735](https://github.com/ClickHouse/ClickHouse/pull/105735) ([niyue](https://github.com/niyue)).
* Corrigida a formatação de `SYSTEM INSTRUMENT ADD` para que os argumentos do manipulador sejam separados por um único espaço, e rejeitadas listas inválidas de argumentos de instrumentação `SLEEP` com mais de dois valores ou um intervalo em que o mínimo é maior que o máximo. [#105984](https://github.com/ClickHouse/ClickHouse/pull/105984) ([pamarcos](https://github.com/pamarcos)).
* Corrigidas operações de partição em `ALTER TABLE` que falhavam silenciosamente para chaves de partição Bool. [#106004](https://github.com/ClickHouse/ClickHouse/pull/106004) ([Avogar](https://github.com/Avogar)).
* Corrigidos `JSONExtractRaw` e `JSONHas` para caminhos JSON tipados com valores default. [#106005](https://github.com/ClickHouse/ClickHouse/pull/106005) ([Avogar](https://github.com/Avogar)).
* Corrigido um prefixo `/` incorreto em caminhos base vazios nas configurações de lago de dados. [#106013](https://github.com/ClickHouse/ClickHouse/pull/106013) ([thewisenerd](https://github.com/thewisenerd)).
* Corrigido `system.dictionaries`, que retornava 0 linhas com a revogação parcial de `SHOW DICTIONARIES`. [#106105](https://github.com/ClickHouse/ClickHouse/pull/106105) ([Avogar](https://github.com/Avogar)).
* Corrigidos resultados incorretos em consultas a tabelas cujo `ORDER BY` contém uma função monotonicamente decrescente, como `(c0 / -42)` ou `intDiv(c0, -42)`. Predicados na coluna subjacente (por exemplo, `c0 < 0`) poderiam podar incorretamente grânulos que continham linhas correspondentes, resultando em resultados ausentes. [#106136](https://github.com/ClickHouse/ClickHouse/pull/106136) ([nihalzp](https://github.com/nihalzp)).
* Adicionada validação de estados agregados `DDSketch` malformados durante a inserção. [#106236](https://github.com/ClickHouse/ClickHouse/pull/106236) ([yariks5s](https://github.com/yariks5s)).
* Corrigida a consistência do cache do sistema de arquivos após downgrades de `SLRU` com falha, evitando que entradas permanecessem presas em estado de remoção. Também foram corrigidos o redimensionamento do cache dividido `System`/`Data` e a limpeza de espaço livre, para que os limites sejam atualizados atomicamente e o espaço possa ser recuperado de ambos os segmentos do cache. [#106286](https://github.com/ClickHouse/ClickHouse/pull/106286) ([kssenii](https://github.com/kssenii)).
* Corrigida uma conversão incorreta de valores `Float16` subnormais para `Float32` (por exemplo, ao lê-los de arquivos `.npy` do NumPy), causada por um deslocamento de mantissa com erro de uma posição. [#106343](https://github.com/ClickHouse/ClickHouse/pull/106343) ([jh0x](https://github.com/jh0x)).
* Corrigido `regexpExtract(haystack, pattern)` para que padrões sem grupo de captura retornem a correspondência completa, em vez de gerar `INDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE`. [#106374](https://github.com/ClickHouse/ClickHouse/pull/106374) ([groeneai](https://github.com/groeneai)).
* Corrigido um erro lógico ao criar um dicionário de polígonos a partir de dados de origem contendo coordenadas de pontos `NaN` ou infinitas. Essas coordenadas agora são rejeitadas com uma mensagem de erro clara. [#106423](https://github.com/ClickHouse/ClickHouse/pull/106423) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Dicionários HTTP agora podem especificar cabeçalhos de requisição por meio de coleções nomeadas. [#106459](https://github.com/ClickHouse/ClickHouse/pull/106459) ([ZelvaMan](https://github.com/ZelvaMan)).
* Valores de enumeração `Avro` malformados agora são validados e rejeitados com uma exceção, em vez de causarem acesso à memória fora dos limites e o encerramento do servidor. [#106476](https://github.com/ClickHouse/ClickHouse/pull/106476) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrigido o problema em que `LIMIT WITH TIES` e `LIMIT WITH TIES` fracionário não respeitavam a collation de `ORDER BY ... COLLATE` ao determinar empates. Linhas iguais de acordo com a collation (por exemplo, `'1'` e `'01'` com collation numérica) eram comparadas byte a byte, fazendo com que algumas linhas empatadas fossem incorretamente excluídas do resultado. [#106539](https://github.com/ClickHouse/ClickHouse/pull/106539) ([nihalzp](https://github.com/nihalzp)).
* Corrigidas as otimizações de `DISTINCT` em ordem e `LIMIT BY` em ordem (incluindo `LIMIT BY` negativo), que retornavam resultados incorretos quando a entrada era ordenada com uma collation (`ORDER BY ... COLLATE`). Linhas iguais de acordo com a collation (por exemplo, `'a'` e `'A'` com uma collation que não diferencia maiúsculas de minúsculas) são ordenadas pela chave de collation e não ficam adjacentes por valor; portanto, a otimização em ordem agora é ignorada quando uma collation é usada. [#106564](https://github.com/ClickHouse/ClickHouse/pull/106564) ([nihalzp](https://github.com/nihalzp)).
* Corrigida uma condição de corrida durante o encerramento de um consumidor NATS que poderia encerrar o servidor. [#106692](https://github.com/ClickHouse/ClickHouse/pull/106692) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrigidos diversos problemas de segurança de memória e esgotamento de recursos em leitores de formatos acessíveis por entradas não confiáveis: uma leitura de heap fora dos limites no tratamento do comprimento dos níveis de definição/repetição de `DataPageV2` no leitor nativo de Parquet, um estouro de pilha em arquivos Parquet com esquemas profundamente aninhados e alocações que ignoravam `max_memory_usage` ao analisar geometrias GeoParquet WKB/WKT e strings/bytes Avro. [#106739](https://github.com/ClickHouse/ClickHouse/pull/106739) ([Algunenano](https://github.com/Algunenano)).
* Corrigido o `keeper_server.http_control.secure_port`, que fornecia respostas HTTP em texto simples a clientes HTTPS. A porta segura agora fornece HTTPS corretamente. [#106822](https://github.com/ClickHouse/ClickHouse/pull/106822) ([linjiayu1025-collab](https://github.com/linjiayu1025-collab)).
* Corrigida a emissão de `restrictive`/`permissive` em minúsculas por `SHOW CREATE ROW POLICY`, em vez de maiúsculas, em inconsistência com outras palavras-chave. [#106865](https://github.com/ClickHouse/ClickHouse/pull/106865) ([valerypetrov](https://github.com/valerypetrov)).
* Corrigido o problema em que partes eram marcadas como corrompidas e desanexadas a cada recarregamento de parte (reinicialização do servidor, `DETACH` ou `ATTACH`) em tabelas com uma coluna `LowCardinality(Nullable(...))` na chave de partição. Desde a versão 26.5, o arquivo de índice minmax por parte não era gravado quando o mínimo e o máximo dessa coluna eram `NULL`, embora a verificação de consistência da parte ainda exigisse o arquivo. Partes gravadas por versões afetadas não têm o arquivo de índice minmax e ainda precisam ser reanexadas manualmente. [#106945](https://github.com/ClickHouse/ClickHouse/pull/106945) ([PedroTadim](https://github.com/PedroTadim)).
* Corrigido o problema em que `elapsed_us` era sempre zero e `read_rows`/`read_bytes` eram subcontados em `system.processors_profile_log` e `system.query_log` para consultas de flush de inserts assíncronos (`AsyncInsertFlush`). [#106982](https://github.com/ClickHouse/ClickHouse/pull/106982) ([cwurm](https://github.com/cwurm)).
* Corrigido um erro lógico `Block structure mismatch in UnionStep stream` (interrupção do servidor em compilações de depuração/sanitizer, `Code: 49` em compilações de release) que ocorria quando uma ramificação de `UNION`/`INTERSECT`/`EXCEPT` lia uma coluna serializada como `Sparse`, enquanto a ramificação irmã lia a mesma coluna por completo (por exemplo, ao inserir em uma visão materializada). [#107041](https://github.com/ClickHouse/ClickHouse/pull/107041) ([groeneai](https://github.com/groeneai)).
* Corrigida a ordem incorreta das linhas em consultas com `ORDER BY` sobre `UNION ALL` com `optimize_read_in_order` e `read_in_order_use_virtual_row` habilitados. [#107053](https://github.com/ClickHouse/ClickHouse/pull/107053) ([vdimir](https://github.com/vdimir)).
* Corrigido um erro de sintaxe quando uma cláusula `FORMAT`, `SETTINGS` ou `INTO OUTFILE` segue `SHOW ROW POLICIES` ou `SHOW MASKING POLICIES` (por exemplo, `SHOW ROW POLICIES FORMAT TabSeparated`). [#107061](https://github.com/ClickHouse/ClickHouse/pull/107061) ([groeneai](https://github.com/groeneai)).
* Corrigido o problema em que `trimLeft`, `trimRight` e `trimBoth` (e os aliases `ltrim`, `rtrim`, `trim`) lançavam `TOO_LARGE_STRING_SIZE` quando o conjunto personalizado de caracteres para trim tinha mais de 16 caracteres. Conjuntos de caracteres para trim de qualquer tamanho voltam a ser compatíveis. [#107071](https://github.com/ClickHouse/ClickHouse/pull/107071) ([fm4v](https://github.com/fm4v)).
* Corrigido um estouro de inteiro com sinal em `quantileExactExclusive`, `quantilesExactExclusive`, `quantileExactInclusive` e `quantilesExactInclusive` que podia produzir resultados incorretos para entradas `Int64` abrangendo um intervalo amplo. [#107154](https://github.com/ClickHouse/ClickHouse/pull/107154) ([groeneai](https://github.com/groeneai)).
* Recarregamentos de configuração não executam mais os scripts de inicialização novamente, evitando a repetição de ações de inicialização executadas uma única vez. [#107187](https://github.com/ClickHouse/ClickHouse/pull/107187) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrigida a ordem incorreta dos resultados de `ORDER BY` sobre `UNION ALL` com `optimize_read_in_order` habilitado quando o pipeline de união era reduzido devido às configurações de `max_streams_for_union_step`; a redução agora é ignorada quando o plano depende de streams de saída ordenados de `UNION`. [#107208](https://github.com/ClickHouse/ClickHouse/pull/107208) ([vdimir](https://github.com/vdimir)).
* Corrigida uma possível desreferenciação de ponteiro nulo ao resolver a configuração de proxy durante o desligamento final do servidor. [#107231](https://github.com/ClickHouse/ClickHouse/pull/107231) ([PedroTadim](https://github.com/PedroTadim)).
* Corrige a geração de linhas extras por `ORDER BY ... WITH FILL` quando uma coluna de ORDER BY anterior à coluna de preenchimento usa uma ordenação `COLLATE`. As linhas agora são agrupadas pelo prefixo de ordenação usando essa ordenação, em conformidade com a ordem de ordenação. [#107365](https://github.com/ClickHouse/ClickHouse/pull/107365) ([groeneai](https://github.com/groeneai)).
* Corrigido comportamento indefinido quando um valor de ponto flutuante não finito (como `nan` ou `inf`) é passado como argumento de timestamp/duração das funções de tabela `prometheusQuery` / `prometheusQueryRange`. Esse argumento agora gera `BAD_ARGUMENTS` em vez de produzir um timestamp inválido. [#107417](https://github.com/ClickHouse/ClickHouse/pull/107417) ([groeneai](https://github.com/groeneai)).
* Corrige resultados incorretos da otimização `optimize_rewrite_aggregate_function_with_if` para funções de agregação que preservam valores de payload `NULL` (a família `*_respect_nulls`: `anyRespectNulls`, `first_value_respect_nulls`, `anyLast_respect_nulls`, `last_value_respect_nulls`). A otimização não reescreve mais `f(if(cond, x, NULL))` para a forma `-If` dessas funções. [#107430](https://github.com/ClickHouse/ClickHouse/pull/107430) ([groeneai](https://github.com/groeneai)).
* Adicionada validação para limites inválidos na entrada ORC. [#107580](https://github.com/ClickHouse/ClickHouse/pull/107580) ([al13n321](https://github.com/al13n321)).
* Corrige uma vulnerabilidade de negação de serviço não autenticada por exaustão de memória na porta do protocolo MySQL. [#107599](https://github.com/ClickHouse/ClickHouse/pull/107599) ([tiandiwonder](https://github.com/tiandiwonder)).
* Corrigida a interface MySQL, que não podia ser usada com `MySQL Connector/J` 8.2.0 e versões mais recentes (incluindo 9.x). O campo `info` do pacote `OK` agora é codificado com comprimento, como no servidor MySQL, permitindo a conexão do driver JDBC. [#107693](https://github.com/ClickHouse/ClickHouse/pull/107693) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigido um erro lógico `Block structure mismatch in UnionStep stream` (interrupção do servidor em compilações de depuração/sanitizer, `Code: 49` em compilações de lançamento) que ocorria quando ramificações irmãs de um `UNION`/`INTERSECT`/`EXCEPT` diferiam apenas no predicado `WHERE` e o predicado de uma das ramificações era avaliado como constante para uma coluna `Const`. [#107719](https://github.com/ClickHouse/ClickHouse/pull/107719) ([groeneai](https://github.com/groeneai)).
* A leitura de dados `Arrow` e `ArrowStream` com colunas `String` ou `Binary` vazias produzidas pelo Apache Arrow Java anterior à versão 19.0.0 (incluindo Apache Spark) não gera mais `INCORRECT_DATA`. [#107764](https://github.com/ClickHouse/ClickHouse/pull/107764) ([Algunenano](https://github.com/Algunenano)).
* Blocos Native malformados cujo discriminador `Variant` referencia uma variante inexistente agora são rejeitados com segurança. [#107991](https://github.com/ClickHouse/ClickHouse/pull/107991) ([uwezkhan](https://github.com/uwezkhan)).
* Corrigida uma regressão de desempenho na leitura de colunas `Dynamic` com várias threads. [#107997](https://github.com/ClickHouse/ClickHouse/pull/107997) ([Avogar](https://github.com/Avogar)).
* A configuração obsoleta de lago de dados `storage_catalog_url` agora é corretamente rejeitada pela validação do catálogo (anteriormente, apenas `storage_catalog_type` e `storage_aws_access_key_id` eram verificadas), e a mensagem de erro lista todas as configurações obsoletas. [#108040](https://github.com/ClickHouse/ClickHouse/pull/108040) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigida a função de tabela/mecanismo `ArrowFlight`, que rejeitava uma coleção nomeada que omitia a chave opcional `dataset` com o erro `No such key 'dataset'`. [#108041](https://github.com/ClickHouse/ClickHouse/pull/108041) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Secrets e credenciais agora são mascarados em `system.query_views_log.view_query`, em vez de serem expostos no SQL da view registrado em log. [#108214](https://github.com/ClickHouse/ClickHouse/pull/108214) ([Fidelaggio](https://github.com/Fidelaggio)).
* Corrigido o problema em que `type_json_allow_duplicated_key_with_literal_and_nested_object` não funcionava com caminhos tipados em JSON. [#108218](https://github.com/ClickHouse/ClickHouse/pull/108218) ([Avogar](https://github.com/Avogar)).
* Corrigido comportamento indefinido (ponteiro nulo passado para `memcpy`) nas funções `detectCharset` e `detectLanguageUnknown` quando a string de entrada tem mais de 32768 bytes e nenhum conjunto de caracteres pode ser detectado. [#108250](https://github.com/ClickHouse/ClickHouse/pull/108250) ([groeneai](https://github.com/groeneai)).
* Corrigido o erro `NOT_FOUND_COLUMN_IN_BLOCK` em consultas que usam as colunas virtuais `_part_starting_offset/_part_offset` em WHERE junto com materialização tardia. [#108287](https://github.com/ClickHouse/ClickHouse/pull/108287) ([vdimir](https://github.com/vdimir)).
* Ocultados argumentos secretos de funções como `encrypt`, `decrypt` e `HMAC` na saída de `EXPLAIN actions`, `EXPLAIN header` e `EXPLAIN PIPELINE` quando `format_display_secrets_in_show_and_select` está desabilitado (o padrão). [#108386](https://github.com/ClickHouse/ClickHouse/pull/108386) ([Algunenano](https://github.com/Algunenano)).
* `CREATE OR REPLACE` agora é executado com êxito para uma view materializada atualizável quando seu destino `TO` já pertence a essa mesma view. Destinos pertencentes a outra view continuam sendo rejeitados. [#108392](https://github.com/ClickHouse/ClickHouse/pull/108392) ([evillique](https://github.com/evillique)).
* Restrito o caminho do modelo de `catboostEvaluate` ao diretório `user_files`, assim como em `file()` e nas fontes de dicionário. Anteriormente, a função aceitava qualquer caminho do sistema de arquivos sem verificar se ele estava contido em `user_files`, o que permitia verificar a existência de arquivos e acionar leituras fora de `user_files`. Agora, os modelos devem estar localizados em `user_files`. [#108463](https://github.com/ClickHouse/ClickHouse/pull/108463) ([groeneai](https://github.com/groeneai)).
* Corrigido `CREATE OR REPLACE MATERIALIZED VIEW ... POPULATE`, que deixava a nova view sem inscrição em sua tabela de origem, descartando silenciosamente todas as linhas inseridas após a substituição. [#108728](https://github.com/ClickHouse/ClickHouse/pull/108728) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrigida uma falha de segmentação ao mesclar estados de agregação `uniqExact` com `GROUPING SETS`, `ROLLUP` ou `CUBE` e `max_threads > 1`. [#108928](https://github.com/ClickHouse/ClickHouse/pull/108928) ([Algunenano](https://github.com/Algunenano)).
* Corrigido possível erro lógico "Subfluxo inesperado ... para a coluna ..." durante a atualização da configuração de compatibilidade. [#109496](https://github.com/ClickHouse/ClickHouse/pull/109496) ([Avogar](https://github.com/Avogar)).
* A função `getClientHTTPHeader` agora trata nomes de cabeçalhos como não sensíveis a maiúsculas e minúsculas, de acordo com a [RFC 9110](https://www.rfc-editor.org/info/rfc9110/#section-5.1); em particular, o cabeçalho `authorization` agora é filtrado independentemente da capitalização. [#109791](https://github.com/ClickHouse/ClickHouse/pull/109791) ([Felixoid](https://github.com/Felixoid)).
* Corrigida perda silenciosa de dados com inserts assíncronos e desduplicação (`async_insert=1`, `async_insert_deduplicate=1`). Quando várias entradas de insert assíncrono com valores distintos de `insert_deduplication_token` eram combinadas em um único flush que gravava em partições distintas, cada token era registrado no log de desduplicação de todas as partições afetadas pelo flush, e não apenas na partição em que suas próprias linhas foram inseridas. Um insert posterior que reutilizasse um desses tokens em uma partição na qual ele nunca havia gravado era então silenciosamente desduplicado. Agora, os tokens são registrados apenas na partição em que suas linhas realmente foram inseridas. [#111049](https://github.com/ClickHouse/ClickHouse/pull/111049) ([groeneai](https://github.com/groeneai)).
* Corrigidas inserções assíncronas no formato Native para que uma entrada em buffer que se torne incompatível após `ALTER ... MODIFY COLUMN` não faça mais o lote inteiro falhar. [#111108](https://github.com/ClickHouse/ClickHouse/pull/111108) ([Felixoid](https://github.com/Felixoid)).
* Corrigido o `CREATE OR REPLACE` de um dicionário por um objeto de outro tipo: a operação falhava com `CANNOT_DETACH_DICTIONARY_AS_TABLE` após a substituição já ter sido confirmada, deixando uma tabela `_tmp_replace_*` órfã. [#111142](https://github.com/ClickHouse/ClickHouse/pull/111142) ([evillique](https://github.com/evillique)).
* Corrigido um vazamento de memória de certificados de pares durante handshakes TLS com a verificação de certificados habilitada. [#111425](https://github.com/ClickHouse/ClickHouse/pull/111425) ([thevar1able](https://github.com/thevar1able)).
* Corrigido um erro lógico `Block structure mismatch in IntersectOrExceptStep stream: different number of columns` que podia ocorrer quando a otimização de divisão de filtro (`query_plan_split_filter`) era executada em uma cláusula `WHERE` cujo nome da coluna de filtro também era o nome de uma coluna de entrada. A otimização deixava uma coluna interna `__split_filter` no cabeçalho de saída do ramo, que então divergia do ramo irmão de uma operação de conjunto, como `INTERSECT` ou `UNION`. [#111930](https://github.com/ClickHouse/ClickHouse/pull/111930) ([groeneai](https://github.com/groeneai)).
* Corrigidos resultados incorretos para filtros ou expressões `ORDER BY` que usam `toString` com valores `Time`, `Time64` ou `DateTime` em fusos horários com horário de verão. Também foi restaurada a otimização de leitura em ordem para `ORDER BY` em um prefixo da chave de ordenação da tabela e para conversões de `String` em `Nullable(String)`. [#113291](https://github.com/ClickHouse/ClickHouse/pull/113291) ([vdimir](https://github.com/vdimir)).
* Corrigido o `ATTACH` de uma tabela `Kafka` quando `kafka_num_consumers` excede o limite derivado do número de núcleos de CPU. [#113390](https://github.com/ClickHouse/ClickHouse/pull/113390) ([evillique](https://github.com/evillique)).
* Desabilitada a análise de índice distribuída ao usar projeções para evitar resultados de consulta incorretos. [#115132](https://github.com/ClickHouse/ClickHouse/pull/115132) ([azat](https://github.com/azat)).
* Corrigido um bug na função `formatRowNoNewline` que podia produzir resultados incorretos ou um erro lógico quando uma linha era formatada como resultado vazio. [#115669](https://github.com/ClickHouse/ClickHouse/pull/115669) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Evitado o retorno de memória não inicializada no resultado de um literal de string binária cujo comprimento não é múltiplo de oito, bem como pelo descompressor LZ4 quando um bloco comprimido não tem corpo. [#115704](https://github.com/ClickHouse/ClickHouse/pull/115704) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Incluídos caminhos de objetos nos hashes de desduplicação para impedir que valores de objetos distintos sejam desduplicados incorretamente. [#115866](https://github.com/ClickHouse/ClickHouse/pull/115866) ([Felixoid](https://github.com/Felixoid)).
