A lot of effort has been made to make the implementation as simple as possible without sacrificing performance. This required a very careful design. The language chosen for the implementation was C++ enhanced with automatic garbage collection (GC), even though a functional language, such as SML, would have been a better choice. The only part of Shore used in this implementation was SDL (the Shore Data Language) exclusively, because we believe it is more resilient to changes than the Shore Storage Manager and is easier to use. An alternative would have been to write our own value-added server on top of the storage manager. Unfortunately, the SDL code is currently integrated into the lambda-DB code, which makes it difficult to switch to a different back-end.
The following is a tour over the lambda-DB source code. The *.gen files contain OPTL code, which is processed by OPTGEN (an OPTimizer GENerator). OPTGEN is a tool for writing query optimizers for both object-relational and object-oriented databases. It is based on a highly declarative language, OPTL, in which you can specify query transformation rules as rules in an attribute grammar. You can find more information in the following manuals:
The optimizer consists of the following stages:
The physical plans generated by the query optimizer are translated into C++ code (last stage of the optimizer). The C++ code consists of calls to a library of evaluation functions. Since the physical plan operators are higher-order in nature, most evaluation functions are higher-order too (ie. they are C++ functions that take functions as parameters). The query evaluation is done in a pipelined fashion (i.e. streams are materialized in the secondary storage only when necessary). Components:
This part is very sketchy. Eventually, we will use the standard ODMG meta classes. Components:
Last modified: 7/25/99 by Leonidas Fegaras