SBQL for the AS0 Store Model -
Query Result Stack (QRES)
by Kazimierz Subieta (February 2006)
Back to Description of SBA and SBQL.
The query result stack (QRES) is necessary to accumulate temporary and
final query results. As in the case of ENVS, the stack is a client-side main
memory data structure. In contrast to ENVS, QRES is not a component of the State, because the
result of query evaluation does not depend on the state of this stack. QRES is
purely abstract data type, that is, it can be managed by four abstract
operations:
·
void: push(
newSection: queryResultType ) - push a new section above the top,
·
void: pop(
) - remove the top,
·
queryResultType: top( ) - read the top section,
·
boolean: isEmpty(
) - check if the stack is empty.
Each QRES section contains a query
result, as defined in a previous page. Thus QRES is a straightforward
generalization of an arithmetic stack
known from implementation of programming languages and construction of computer
hardware. Fig.22 presents subsequent states of the arithmetic stack during
calculation of a simple expression. At the beginning the stack is empty. The
final state contains the result of the expression.

Fig.22. States of the arithmetic stack during calculation
In
implementation QRES can be also used for other purposes, for instance, to keep
counters of iteration loops during processing collections.
QRES is not a necessary concept of a
programming or query languages’ semantics. In some formulations, e.g. in
the denotational semantics or expressing the semantics by recursive procedures,
it disappears. However, in the operational semantics it is a very useful
concept, as it allows one to explain precisely what is actually done within the
abstract implementation machine. The advantages of the explicit QRES stack
concept are the following:
·
It
makes the definition of semantics highly intuitive. Our experience with
explaining the denotational semantics for average developers and programmers is
extremely negative. We didn’t discover any essential advantage of this
specification style (except it is excellent to write a next paper to a next
theoretical conference).
·
The
stack concept makes it possible to reduce the distance between abstract
specification and concrete implementation. It is a useful element of the abstract implementation paradigm that we
follow in our presentation of SBA.
·
The
stack is associated with its static counterpart (S_QRES - it will be introduced
much later) that is managed during query compilation. The static result stack
is an inevitable feature of strong static type checking and query optimization
methods.
Operations on QRES affect only its top, other
stack sections are invisible. A section becomes visible after popping a proper
number of top sections. Fig.23 presents an example state of the stack in SBA.

Fig.23. Example of a QRES state
After evaluation of a query the top of QRES
contains the final query result. This result is consumed by some agent within the
application software, e.g. by a print
command, by a graphical user interface, by an updating or deleting clause, etc.
Providing the application is free of inconsistencies, the beginning state of
QRES is empty and the final state of QRES is empty too (all results of queries
are consumed by the application software).
Last modified: December 31, 2007