InterSystems Oficial
· Mar. 7

Alerta: Consultas SQL Retornando Resultados Errados

19 de Fevereiro de 2025 – Alerta: Consultas SQL Retornando Resultados Errados

A InterSystems corrigiu dois problemas que podem fazer com que um pequeno número de consultas SQL retornem resultados incorretos. Além disso, a InterSystems corrigiu uma inconsistência no tratamento de tipo de dados de data/hora que pode levar a resultados diferentes e inesperados — mas corretos — para aplicativos existentes que dependem do comportamento inconsistente anterior.

DP-436825: Consultas SQL com Junção Lateral Podem Retornar Resultados Errados

O primeiro problema (DP-436825) afeta apenas consultas SQL que usam uma junção lateral, implícita ou explicitamente, em uma instância configurada com limite de memória por processo não padrão (parâmetro “bbsiz” no arquivo .cpf). Uma instalação limpa do InterSystems IRIS tem um bbsiz padrão de -1 (portanto, não há limite de memória), enquanto uma atualização de uma versão mais antiga preservaria a configuração anterior. Quando tal consulta usa execução paralelizada em tempo de execução, incluindo casos em que o sistema usa execução paralelizada, a consulta pode retornar resultados incorretos. Esse problema afeta as versões 2023.3, 2024.1.0, 2024.1.1, 2024.1.2, 2024.2 e 2024.3 dos seguintes produtos:

  • InterSystems IRIS® data platform
  • InterSystems IRIS® for Health
  • HealthShare® Health Connect

O problema também afeta outros produtos InterSystems baseados nos produtos acima, incluindo o HealthShare® Unified Care Record and Suite: Versão 2024.2. Embora o Unified Care Record and Suite não faça uso de consultas SQL que usam uma junção lateral no código do produto, os clientes do HealthShare que atualizarem para o HealthShare 2024.2 com um limite de memória por processo não padrão que também escrevem suas próprias consultas SQL que usam uma junção lateral podem ser afetados.

Para evitar o problema, use uma das três opções a seguir:

  • Remova o limite de memória por processo definindo o parâmetro bbsiz como -1.
  • Use a palavra-chave %NOPARALLEL em consultas que incluem uma junção lateral.
  • Desabilite temporariamente o Modo Adaptativo para a instância, o que evita o processamento paralelo automático de consultas elegíveis.

Tudo isso garante que a consulta retorne resultados corretos. A correção para esse defeito é identificada como DP-436825 e será incluída em todas as versões futuras do produto, começando com 2024.1.3 e 2025.1.0. Também está disponível por meio de distribuição ad hoc.

DP-436998: Consultas SQL com classificação reversa por %ID entrando em loop infinito

O segundo problema (DP-436998) afeta consultas SQL que ordenam por ID de linha decrescente e nas quais a ID de linha é um inteiro positivo (compatível com bitmap) e, em particular, circunstâncias específicas de dados. Sob essas condições, a consulta pode entrar em um loop infinito e continuar retornando o mesmo conjunto de resultados até ser abortada. Esse problema afeta as versões 2022.2, 2022.3, 2023.x e 2024.x dos seguintes produtos:

  • InterSystems IRIS® data platform
  • InterSystems IRIS® for Health
  • HealthShare® Health Connect

Ele também afeta outros produtos InterSystems baseados nos produtos acima, incluindo HealthShare® Unified Care Record and Suite: Versão 2024.1 e versão 2024.2. Embora o Unified Care Record and suite não faça uso de consultas SQL com classificação reversa por %ID no código do produto, os clientes do HealthShare 2024.1 e HealthShare 2024.2 que escrevem suas próprias consultas SQL com classificação reversa por %ID podem ser afetados. A correção para esse defeito é identificada como DP-436998. Ele será incluído em todas as versões futuras do produto a partir de 2023.1.6, 2024.1.3 e 2025.1.0. Ele também está disponível por meio de distribuição ad hoc.

DP-436633: Consultas SQL Comparando valores de DATA e TIMESTAMP

A InterSystems corrigiu recentemente uma inconsistência em como os valores DATE e TIMESTAMP são comparados usando os operadores <=, > e BETWEEN. Essa correção altera os resultados de comparações específicas de data e hora. O comportamento atualizado foi introduzido na versão 2023.3 de:

  • InterSystems IRIS® data platform
  • InterSystems IRIS® for Health
  • HealthShare® Health Connect

Ele também afeta outros produtos InterSystems baseados nos produtos acima, incluindo HealthShare® Unified Care Record and Suite: Versão 2024.2.

Ele se aplica a todas as versões subsequentes.

Com o comportamento atualizado, os valores DATE são forçados para um valor TIMESTAMP antes da comparação. Isso está em conformidade com o padrão SQL de forçar o tipo de dados menos preciso para o tipo de dados mais preciso.

Por exemplo, com o novo comportamento (que é compatível com o padrão), um predicado de consulta "MyTimeStamp > MyDate" é avaliado como FALSE quando os valores para esses campos correspondem à mesma data do calendário, exceto quando MyTimestamp corresponde exatamente à meia-noite. Anteriormente, o comportamento era totalmente compatível com o padrão apenas quando o campo MyTimeStamp era definido com o formato %PosixTime e retornava resultados não compatíveis em certos casos ao usar %Timestamp ou certas combinações de funções e variáveis ​​especiais.

Para garantir comparações previsíveis, a InterSystems recomenda usar funções CAST explícitas, especialmente ao usar instruções CASE ou funções SQL como GETDATE(), NVL() e IFNULL(), onde o tipo resultante pode não ser óbvio.

Para ajudar a avaliar quais instruções são afetadas pela mudança de comportamento, a InterSystems introduziu um aviso no plano de consulta e um sinalizador de sistema opcional para fazer com que tais instruções gerem um erro no tempo de execução. Habilitar o sinalizador pode ser útil durante o teste de regressão do código do aplicativo e pode oferecer uma rede de segurança adicional para consultas do usuário no tempo de execução. Este recurso informativo é identificado como DP-436633 e será incluído em todas as versões futuras do produto a partir de 2024.1.4 e 2025.1.0.

Mais Informações

Se você sentir o impacto desse defeito, entre em contato com o Worldwide Response Center (WRC) para obter assistência.

Discussão (0)1
Entre ou crie uma conta para continuar