Boost logo

Boost :

From: Brian Braatz (brianb_at_[hidden])
Date: 2005-08-01 20:04:47


Joaquin,

sorry for the few days response here- I had a "surprise" business trip I had to take which kept me out of town and away from mail for a few days

Thoughts below

(note- I have left a good chunk of the original mail intact for context)
 

> -----Original Message-----
> On Behalf Of Joaquin M Lopez Munoz
>
> Brian Braatz <brianb <at> rmtg.com> writes:
> > If you would please elaborate. (some of us are "slower" than others :)
> > ).
> >
> > is the problem getting to the index objects themselves via
> > inherit_linearly?
> >
> > if you have dynamic data, then I am thinking you also have dynamically
> > applied indices?
> >
> > Maybe I can elaborate-
> >
> > consider the following pseudo code:
> >
> > connection con = db.connect("myserver,root,password,mydatabase");
> >
> > dynamic_table dt;
> >
> > // the select "*" means bring me back all the fields from that table
> > // even though I don't know what the fields ARE yet
> > dt = query("select * from person");
> >
> > // ok so now dt has an UNKNOWN number of columns
> >
> > dt.add_index( index("first_name"));
> >
> > // or something along those lines.
> >
> > in this case, the index is applied dynamically.
> >
> > so how does that connect with the things you said ?
> >
>

[Joaquin M Lopez Munoz Writes:]
> Let me formulate the problem in the terminology
> of Boost.MultiIndex --hopefully, the implications
> for a DB framework scenario will be clear after this.
>
> Consider the following perfectly normal code dealing
> with a static multi_index_container:
>
> typedef multi_index_container<
> element,
> indexed_by<
> ordered_unique<identity<element> >,
> sequenced<>
> >
> > static_mic_t;
>
> template<typename Index>
> void reverse_dump(const Index& i)
> {
> std::copy(
> i.rbegin(),i.rend(),
> std::ostream_iterator<typename Index::value_type>(std::cout));
> }
>
> int main()
> {
> static_mic_t s_mic;
> ...
> reverse_dump(s_mic.get<0>());
> reverse_dump(s_mic.get<1>());
> }
>
> What would the equivalent be for the dynamic case?
>
> typedef dynamic_multi_index_container<
> element
> > dynamic_mic_t; // no indices specified at compile time
>
> int main()
> {
> dynamic_mic_t d_mic;
>
> // add indices at run time
> d_mic.add_index<ordered_unique<identity<element> > >();
> d_mic.add_index<sequenced<> >();
> ...
>
> reverse_dump(d_mic.get(0)); // note index number is no longer
> reverse_dump(d_mic.get(1)); // a template parameter
> }
>
> Now, how are we supposed to define reverse_dump? Clearly
> it cannot be the same template as in the static case,
> since the types of the indices are only known at
> run time.
[Brian Braatz Writes:]
ideas-
        
        have the container accept a list of possible index types
        then use inherit_linearly<> to make those types- (only as pointers)
        then when the index gets runtime added- you store it in the generated objects

        Additionally-
                one could also force the user to make a struct to use as a tag to reference the index (instead of the number)
                using this "type tag", you can lookup the runtime object(s) which were dynamically added.
        
        What I am suggesting is a similar design to what I recently got working on something else (almost ready for sharing with the world).

        I have yet another plan trip tomorrow (ALL DAY tomorrow). I will code a small sample of what I am suggesting. (code is easier to talk about than concepts sometimes :) )

Joaquín M López Muñoz writes:

> If I wasn't clear enough please tell me so and
> I'll try to elaborate. I'll be more than happy to
> discuss and refine these ideas. IMHO the concepts
> around a potential multi_index_container sketched
> here can serve as the basis for a DB run-time data
> structure, much like for instance IndexedDBView in the
> DTL does.
>
> Best,
>
> Joaquín M López Muñoz
> Telefónica, Investigación y Desarrollo

I am not as familiar with multi-index, but I am going to re-re-rereview that lib tomorrow along with the mail you wrote.

Pleasure "talking" with you :)

Brian


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