Transparent persistence promises to integrate programming languages and databases by allowing procedural programs to access persistent data with the same ease as non-persistent data. When the data is stored in a relational database, however, transparent persistence does not naturally leverage the performance benefits of relational query optimization. We present a program analysis that combines the benefits of both approaches by extracting database queries from programs with transparent access to persistent data. The anals a sound abstract interpretation of the original program to approximate the data traversal paths in the program, and the conditions under which the paths are used. The resulting paths are then converted into a query, and the program is simplified by removing redundant tests. We study an imperative kernel language with readonly access to persistent data, and identify the conditions under which the transformations can be applied. This analysis approach promises to combi...
Ben Wiedermann, William R. Cook