From: Brian Braatz (brianb_at_[hidden])
Date: 2005-08-01 20:04:47
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
(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<
> ordered_unique<identity<element> >,
> > static_mic_t;
> template<typename Index>
> void reverse_dump(const Index& i)
> std::ostream_iterator<typename Index::value_type>(std::cout));
> int main()
> static_mic_t s_mic;
> What would the equivalent be for the dynamic case?
> typedef dynamic_multi_index_container<
> > 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:]
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
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.
> 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 :)
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk