BookinglyTech News
Software

LibreDB Studio corrige pérdida de precisión en IDs mayores a 2^53

La versión 0.16.1 del IDE corrige un error que hacía que filas con claves de 64 bits se actualizaran en la fila equivocada por redondeo de JavaScript.

2 min de lecturar/selfhosted0 vistas

LibreDB Studio, el IDE SQL autohospedado bajo licencia MIT, lanzó la versión 0.16.1 para corregir un fallo crítico que podía pasar desapercibido. El editor en línea identifica la fila a actualizar solicitando al motor una coincidencia exacta del valor de la clave primaria. Tres controladores – MySQL y los dos de SQLite – devuelven los IDs como números nativos de JavaScript, que solo conservan 53 bits de precisión. Cuando una tabla supera el umbral de 2^53 (aproximadamente 9 000 000 000 000 000), dos IDs que difieren en los dígitos menos significativos se redondean al mismo número.

El editor, al recibir un ID redondeado, consulta al motor y obtiene una de las dos filas posibles. El UPDATE se envía a la fila que responde, que no tiene por qué ser la que el usuario editó, provocando una corrupción silenciosa de datos. En SQLite, la librería node:sqlite lanzó ERR_OUT_OF_RANGE en lugar de redondear, lo que expuso el problema con mayor claridad.

La solución consiste en que el driver de MySQL active la opción supportBigNumbers, forzando a que los valores que superen la precisión disponible se devuelvan como cadenas de texto. Los controladores de SQLite y libSQL convierten de forma similar en el límite del proveedor: si el valor cabe en un número, se devuelve como tal; si no, como su representación decimal exacta. En ningún caso se envía un BigInt fuera del proveedor, evitando redondeos en la ruta de escritura.

Este parche forma parte de un pull request que también incluye ocho correcciones adicionales, entre ellas una pérdida de instantáneas en el panel de diferencias de esquemas y varios mensajes de error que describían condiciones incorrectas. Todas las correcciones fueron validadas contra motores en vivo y se añadieron pruebas que fallan si el arreglo se elimina.

Pull request en GitHub contiene la descripción completa y el código del arreglo. Las notas de la versión describen brevemente el cambio y otras mejoras introducidas en la 0.16.1.

Esta corrección es relevante para cualquier entorno que use LibreDB Studio o herramientas similares con IDs de 64 bits, ya que el problema puede permanecer invisible hasta que se produzca una actualización errónea. Los usuarios deben actualizar a la versión 0.16.1 y verificar que sus flujos de datos no dependan de la representación numérica de JavaScript para claves largas.

Queda pendiente observar si otros IDEs o bibliotecas de acceso a bases de datos replican este comportamiento y si adoptan estrategias similares de devolución de strings o BigInt para evitar pérdidas de precisión.