A query engine formulates a data source query to obtain data from one or
more data sources. The query engine uses a metadata model containing model
objects that represent the data sources. The metadata model has a data
access layer, business layer and package layer. The model objects of the
business layer are constructed based on the model objects contained in the
data access layer. The query engine interacts to the metadata model at the
business layer, and formulates a data source query based on a query
specification provided by a client application. Thus, the query engine
allows use of different type of client applications to obtain reports from
one or more data sources.