InterSystems Official
· 5 hr atrás

Alerta: Consultas SQL que están devolviendo resultados incorrectos

19 de febrero de 2025 – Alerta: Consultas SQL que están devolviendo resultados incorrectos

InterSystems ha corregido dos problemas que pueden hacer que un pequeño número de consultas SQL devuelvan resultados incorrectos. Además, ha solucionado una inconsistencia en el manejo de los tipos de datos de fecha y hora, lo que podría provocar que algunas aplicaciones existentes que dependían del comportamiento anterior e inconsistente obtengan resultados diferentes e inesperados, aunque correctos.

DP-436825: Algunas consultas SQL con Lateral Join pueden devolver resultados incorrectos

El primer problema (DP-436825) solo afecta a las consultas SQL que utilizan un lateral join, ya sea de manera implícita o explícita, en una instancia configurada con un límite de memoria por proceso distinto del valor predeterminado (parámetro "bbsiz" en el archivo .cpf). Una instalación limpia de InterSystems IRIS tiene un bbsiz predeterminado de -1 (es decir, sin límite de memoria), mientras que una actualización desde una versión anterior conservaría la configuración previa. Cuando una consulta de este tipo utiliza ejecución en paralelo en tiempo de ejecución, incluyendo los casos en los que el sistema aplica esta ejecución paralela, la consulta puede devolver resultados incorrectos. Este problema afecta a las versiones 2023.3, 2024.1.0, 2024.1.1, 2024.1.2, 2024.2 y 2024.3 de los siguientes productos:

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

También afecta a otros productos de InterSystems basados en los anteriores, incluidos HealthShare® Unified Care Record y Suite: Versión 2024.1 y versión 2024.2.  Aunque Unified Care Record and Suite no hace uso de consultas SQL con ordenación inversa por %ID en el código del producto, los clientes de HealthShare 2024.1 y HealthShare 2024.2 que escriban sus propias consultas SQL con ordenación inversa por %ID pueden verse afectados.  

  • Eliminad el límite de memoria por proceso estableciendo el parámetro bbsiz en -1.
  • Utilizad la palabra clave %NOPARALLEL en consultas que incluyan una unión lateral.
  • Desactivad temporalmente el Modo Adaptativo para la instancia, que evita el procesamiento paralelo automático de consultas elegibles.

Todo ello garantiza que la consulta devuelva resultados correctos. La corrección de este defecto se identifica como DP-436825 y se incluirá en todas las futuras versiones del producto a partir de 2024.1.3 y 2025.1.0.  También está disponible mediante distribución ad hoc.

DP-436998: Algunas consultas SQL con ordenación inversa por %ID entran en un bucle sin fin

El segundo problema (DP-436998) afecta a las consultas SQL que ordenan por ID de fila descendente, y en las que el ID de fila es un entero positivo (compatible con mapa de bits) y en circunstancias particulares, específicas de los datos. En estas condiciones, la consulta puede entrar en un bucle sin fin y seguir devolviendo el mismo conjunto de resultados hasta que se aborte. Este problema afecta a las versiones 2022.2, 2022.3, 2023.x y 2024.x de los siguientes productos:

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

También afecta a otros productos de InterSystems basados en los anteriores, incluidos HealthShare® Unified Care Record y Suite: Versión 2024.1 y versión 2024.2.  Aunque Unified Care Record and Suite no hace uso de consultas SQL con ordenación inversa por %ID en el código del producto, los clientes de HealthShare 2024.1 y HealthShare 2024.2 que escriban sus propias consultas SQL con ordenación inversa por %ID pueden verse afectados.   La corrección de este defecto se identifica como DP-436998. Se incluirá en todas las futuras versiones del producto a partir de 2023.1.6, 2024.1.3 y 2025.1.0.  También está disponible mediante distribución ad hoc.

DP-436633: Consultas SQL que comparan valores DATE y TIMESTAMP

InterSystems ha corregido recientemente una incoherencia en el modo en que se comparan los valores DATE y TIMESTAMP utilizando los operadores <=, > y BETWEEN. Esta corrección modifica los resultados de determinadas comparaciones de fecha y hora. El comportamiento actualizado se introdujo en la versión 2023.3 de:

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

También afecta a otros productos de InterSystems basados en los anteriores, incluidos HealthShare® Unified Care Record y Suite: Versión 2024.2.   

Se aplica a todas las versiones posteriores.

Con el comportamiento actualizado, los valores DATE se convierten en un valor TIMESTAMP antes de la comparación. Esto se ajusta al estándar SQL de forzar el tipo de datos menos preciso al tipo de datos más preciso. 

Por ejemplo, con el nuevo comportamiento (que cumple la norma), un predicado de consulta «MiFechaTiempo > MiFecha» se evalúa como FALSE cuando los valores de estos campos corresponden a la misma fecha de calendario, excepto cuando MiFechaTiempo corresponde exactamente a medianoche. Anteriormente, el comportamiento sólo era totalmente conforme a la norma cuando el campo MyTimeStamp se definía con el formato %PosixTime, y devolvía resultados no conformes en determinados casos cuando se utilizaba %Timestamp o determinadas combinaciones de funciones y variables especiales.

Para garantizar comparaciones predecibles, InterSystems recomienda utilizar funciones CAST explícitas, especialmente cuando se utilicen sentencias CASE o funciones SQL como GETDATE(), NVL() e IFNULL(), en las que el tipo resultante puede no ser obvio.

Para ayudar a determinar qué sentencias se ven afectadas por el cambio de comportamiento, InterSystems ha introducido una advertencia en el plan de consulta y un indicador de sistema opcional para que dichas sentencias produzcan un error en tiempo de ejecución. La activación de este indicador puede resultar útil durante las pruebas de regresión del código de la aplicación y ofrecer una red de seguridad adicional para las consultas de los usuarios en tiempo de ejecución. Esta función informativa se identifica como DP-436633 y se incluirá en todas las futuras versiones del producto a partir de 2024.1.4 y 2025.1.0.

Más información

Si experimenta el impacto de este defecto, póngase en contacto con el Centro de Soporte Worldwide Response Center (WRC) para obtener ayuda.

Comentarios (0)1
Inicie sesión o regístrese para continuar