Guia | Coguia | ||
---|---|---|---|
Áreas | Ciencia e Ingeniería de datos, Lenguajes de programación | ||
Sub Áreas | Bases de datos, Diseño e implementación de lenguajes | ||
Estado | Disponible |
Existe un trabajo reciente que muestra que la misma consulta SQL, en distintos sistemas de gestión de bases de datos (SGBD), como PostgreSQL, SQLite, MySQL, MSSQL y Oracle, puede producir comportamientos y resultados distintos: desde un error hasta un resultado completamente diferente.
Para entender de mejor manera estas diferencias y poder lograr un algoritmo de conversión de consultas entre SGBD, el artículo formalizó un núcleo pequeño del álgebra relacional genérica, que se puede instanciar para los distintos SGBD. Sin embargo, al momento de evaluar el modelo, se evidenciaron diferencias en términos de errores, producto de las múltiples optimizaciones que realizan estos SGBD. Por ejemplo, una consulta como la siguiente:
SELECT * FROM R WHERE True OR CAST('hola' as INT);
Debería fallar si se evalúan ambos operandos del OR, pero si se aplica la optimización short-circuit, es decir, si el primer operando es True entonces no es necesario evaluar el segundo operando, la consulta termina con éxito.
Este es un pequeño ejemplo que ilustra cómo las optimizaciones rompen la semántica de errores de un programa. En la práctica, esto es mucho peor, ya que cada SGBD realiza múltiples optimizaciones, muchas veces basadas en heurísticas y otras propietarias que se desconocen.
Este trabajo busca (1) estudiar algunas de estas optimizaciones y cómo afectan la semántica de errores, (2) explorar la transformación de consultas a una forma canónica que sea más robusta o estable frente a optimizaciones, y (3) crear un conjunto de reglas de transformación de consultas entre SGBD que preserve la semántica de ellas.