This paper presents a test-case generator for SQL queries. Starting with a set of related SQL views that can include existential subqueries in the conditions, the technique finds a database instance that can be used as a test-case for the target view. The proposal reduces the problem of generating the test-cases to a Constraint Satisfaction Problem using finite domain constraints. In particular, we present a new approach for existential conditions that makes possible to find test-cases for a wider set of queries. The soundness and correctness of the technique with respect to a simple operational semantics for SQL queries without aggregates is proven. The theoretical ideas have been implemented in an available prototype.
Autores: Rafael Caballero / José Luzón-Martín / Antonio Tenorio /
Palabras Clave: constraints - finite domains - SQL - Test-cases
We present a proposal for introducing SQL tuples into the modeling programming language MINIZINC. The domain of the new decision variables is defined by arbitrary relational database tables indicated by the user. The new setting increases the expressiveness of MINIZINC, allowing the modeler to mix the usual finite domains already existing in the language with string constraints typical from SQL such as concat, substr, or like. In order to obtain the solutions of these combined models, we first replace the atomic constraints involving strings by boolean variables. The result is a standard MINIZINC model, which can be solved by any off-the-shelf solver. Then, each individual solution is applied to the remainder string constraints, which are then solved using an SQL query. We discuss how both languages, MINIZINC and SQL, benefit from this combination.
Autores: Rafael Caballero / Carlo Ieva /
Declarative debuggers are semi-automatic debugging tools that abstract the execution details to focuson the program semantics. This paper presents a tool implementing this approach for the sequentialsubset of Erlang, a functional language with dynamic typing and strict evaluation. Given an erro-neous computation, it first detects an erroneous function (either a «named» function or a lambda-abstraction), and then continues the process to identify the fragment of the function responsible forthe error. Among its features it includes support for exceptions, predefined and built-in functions,higher-order functions, and trusting and undo commands.
Autores: Rafael Caballero / Enrique Martin-Martin / Adrián Riesco /