Boost logo

Boost :

From: Arkadiy Vertleyb (vertleyb_at_[hidden])
Date: 2004-04-12 21:53:55


Hi all,

I just uploaded an enhanced version of RTL (the relational template
library).

First addition is a simple indexed set-based table implementation (I am
using the old name, and our code is based on the reviewed version of the
library. Once Joaquin comes up with the post-review version, we'll modify
and upload our code). So far this implementation does not fully utilize all
the indexed set capabilities that RTL can benefit from, but we will continue
working on this subject.

To use the indexed set implementation BY DEFAULT one can define the
BOOST_RTL_USE_SET macro. Or the implementation type can be supplied
explicitly, as a 4th parameter to the table_info class template, like:

#define BOOST_RTL_USE_SET

table<table_info<
    mpl::vector<id, name>,
    mpl::vector<id> > > t1; // indexed set based table

table<table_info<
    mpl::vector<id, name>,
    mpl::vector<id>,
    mpl::vector<mpl::vector<id> >,
    sorted_strategy> > t2; // sorted vector based table

The other additions are mainly based on our discussions with Pavel
Vozenilek, and include:

Fully redesigned/reimplemented join.
------------------------------------

We decided to get rid of our generic join, and replaced it with a simpler,
range join, operator which can be used to join each outer tuple with a range
in the inner relation, something like this:

equal_join<mpl::vector<c1> >(t1, t2);
range_join(t1, t2, lower_bound<mpl::vector<c1> >(), end());

Lambda enabled for the selection operator.
-------------------------------------------

Something like this can be specified:

selection(t, _1[c1()]==5 && _1[c2()] >=20);// SELECT * FROM t1 WHERE c1=5
AND c2>=20

A couple of things were renamed:

BOOST_RTL_COLUMN(name, type);
became
BOOST_RTL_DEFINE_COLUMN(type, name); // looks more like C++

and

rel::tuple became rel::row to avoid collisions with the Boost.Tuple library,
that showed up once we started using the indexed set :(
(now I am even more against the idea of putting stuff under the boost
namespace)

The other enhancements to the library and to the documentation to follow.
These will include better assertions, serialization, performance estimates,
etc.

Here is the link:

http://groups.yahoo.com/group/boost/files/tables.zip

As always, any feedback is most welcome.

Best regards,
Arkadiy


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk