  Database applications are typically written using a mixture of imperative
languages and declarative frameworks for data processing. Application logic
gets distributed across the declarative and imperative parts of a program.
Often, there is more than one way to implement the same program, whose
efficiency may depend on a number of parameters. In this paper, we propose a
framework that automatically generates all equivalent alternatives of a given
program using a given set of program transformations, and chooses the least
cost alternative. We use the concept of program regions as an algebraic
abstraction of a program and extend the Volcano/Cascades framework for
optimization of algebraic expressions, to optimize programs. We illustrate the
use of our framework for optimizing database applications. We show through
experimental results, that our framework has wide applicability in real world
applications and provides significant performance benefits.
