It does sound like that, like an Object Relational Mapping. And maybe someone has already done this. Googling "ORM sqlite c++" Yields a lot of existing ORM projects that support sqlite, so maybe Prakash doesn't need to work so hard on implementing that part of his project himself.
-dave > -----Original Message----- > From: sqlite-users-boun...@sqlite.org > [mailto:sqlite-users-boun...@sqlite.org] On Behalf Of Keith Medcalf > Sent: Wednesday, September 24, 2014 8:27 AM > To: General Discussion of SQLite Database > Subject: Re: [sqlite] Results of Joins in sqlite > > > > Sounds like you want to "hack up" where the resultrow is > returned for each table row visited as the query is > processed, but only once for each table row satisfying the > query. You can certainly do this -- the source code is > freely available. > > I am sure you could "hack that up" if you want, but then you > would not be having a relational database anymore. Are you > trying to turn a relational database into an object > datastore, or something else perchance? > > Also, how would you intend to deal with such things as > computed results (which have no underlying table), grouped > results (which have a multitude of underlying records), > distinct sub-constraints (which may cover multiple underlying > table records), correlated or non-correlated subquery > conditions (may include all the preceding). > > Iterating through the result set, as you put it, or more > correctly "retrieving the projection set" is the > implementation of precisely the algebraic basis for what is > called the "Relational" database model. SQLite is a > "Relational" database and processes data in accordance with > the principles of relational (set) algebra tempered by the > necessity of being implementable on inherently serial > processing systems. > > The changes you are suggesting would turn SQLite into > something other than a "Relational" database. What is the > thing you want? Perhaps you should be looking for a database > using that underlying mathematical model (whatever it is) > rather than a "relational" model. To me, it sounds like you > want a Hierarchical Network Extended Database model, not a > Relational Model. > > >-----Original Message----- > > > >Thanks a lot , Simon and Hick, > > > >What I am looking for is , instead of iterating through the > result which > >sqlite provides and then form the respective objects and setting > >pointers, > >is it possible to hack sqlite to fill in the objects this way. > >I would like to prevent the extra iteration through the result set. > > > >When the result row is formed in OP_ResultRow, we should be > able to form > >the structs and their links. Any pointers in this direction? > > > >Thanks > >Prakash > > > >On Wed, Sep 24, 2014 at 5:36 PM, Hick Gunter > <h...@scigames.at> wrote: > > > >> How about writing something that uses the SQLite Api as > intended and > >works > >> first? > >> > >> -----Ursprüngliche Nachricht----- > >> Von: Prakash Premkumar [mailto:prakash.p...@gmail.com] > >> Gesendet: Mittwoch, 24. September 2014 12:54 > >> An: General Discussion of SQLite Database > >> Betreff: Re: [sqlite] Results of Joins in sqlite > >> > >> Thanks a lot Hick,for your approach. > >> With the approach you suggested, we are creating extra > queries and if > >the > >> join is on n tables there will be n+1 queries , and each query will > >have to > >> go through a query planning stage. > >> Is there an alternative idea ? > >> > >> Thanks a lot > >> Prakash > >> > >> On Wed, Sep 24, 2014 at 3:34 PM, Hick Gunter > <h...@scigames.at> wrote: > >> > >> > You are free to build your own result conversion routine > on top of > >the > >> > SQLite Api. > >> > > >> > > >> > May I suggest selecting the rowids of the tables too i.e. > >> > > >> > SELECT t1.rowid, t2.rowid, t3.rowid, <.. more fields ...> FROM > >> > <...your join...>; > >> > > >> > When you first come across a new rowid you can create your memory > >> > object and populate it from the required fields. > >> > The disadvantage ist hat SQLite will still retrieve all requested > >> > fields for each result row. > >> > > >> > > >> > Or maybe you might like to > >> > > >> > SELECT t1.rowid, t2.rowid, t3.rowid FROM <...your join...>; > >> > > >> > and then populate your structure by binding the rowid > received and > >> > executing the appropriate > >> > > >> > SELECT <...t1 fields> FROM t1 where t1.rowid=?; SELECT > <...t2 fields> > >> > FROM t2 where t2.rowid=?; SELECT <...t3 fields> FROM t3 where > >> > t3.rowid=?; > >> > > >> > > >> > > >> > -----Ursprüngliche Nachricht----- > >> > Von: Prakash Premkumar [mailto:prakash.p...@gmail.com] > >> > Gesendet: Mittwoch, 24. September 2014 09:32 > >> > An: General Discussion of SQLite Database > >> > Betreff: Re: [sqlite] Results of Joins in sqlite > >> > > >> > Thanks for the reply Clemens. Yes.I'm sorry. It will not have 8 > >columns. > >> > > >> > When one result row comes in , I want to create an > object for each > >> > table (My application map one struct to one table) and put the > >columns > >> > of respective tables in their individual structs. i,e I > would set > >> > column 0 and column 1 in result row to the struct of T1 > and column 2 > >> > and 3 to that of T2 and so on. > >> > > >> > and I set pointers between T1 and T2 , T2 and T3. > >> > When a new row comes in and if the object for that row is already > >> created. > >> > i.e if r11 again comes as output, I will not create a new > >> > object,instead I would use the old object and set > pointers between > >the > >> > old T1 and object and the T2 object (if r21 is new,else > do not set > >> > pointers and do not create > >> > objects) > >> > > >> > similarly for T3. Thus,for the above case (the example > we discussed), > >> > there will be one pointer from T1 row to T2 row and 3 > pointers from > >T2 > >> > row to the > >> > 3 T3 rows(one pointer per row). > >> > > >> > The end data structure will look like a graph. > >> > > >> > I want the API to return this graph./ is there an alternative ? > >> > API call : graph* sqlite3_join(select_stmt*) > >> > > >> > Thanks > >> > Prakash > >> > > >> > > >> > > >> > > >> > On Wed, Sep 24, 2014 at 12:45 PM, Clemens Ladisch > ><clem...@ladisch.de> > >> > wrote: > >> > > >> > > Prakash Premkumar wrote: > >> > > > Let's say I have tables T1,T2 and T3 with 2 columns > each and I am > >> > > joining them. > >> > > > The result rows will have 8 columns each. > >> > > > >> > > No. The result will have between 4 and 6 columns, > depending on how > >> > > you do the joins. > >> > > > >> > > Example: > >> > > > >> > > CREATE TABLE T1(ID1, Name); > >> > > INSERT INTO "T1" VALUES('r11',NULL); CREATE TABLE T2(ID2, ID1); > >> > > INSERT INTO "T2" VALUES('r21','r11'); CREATE TABLE > T3(ID3, ID2); > >> > > INSERT INTO "T3" VALUES('r31','r21'); INSERT INTO "T3" > >> > > VALUES('r32','r21'); INSERT INTO "T3" VALUES('r33','r21'); > >> > > > >> > > SELECT * FROM T1 NATURAL JOIN T2 NATURAL JOIN T3; > >> > > > >> > > ID1 Name ID2 ID3 > >> > > ---------- ---------- ---------- ---------- > >> > > r11 r21 r31 > >> > > r11 r21 r32 > >> > > r11 r21 r33 > >> > > > >> > > > sqlite produces 3 result rows , but I would like to > produce one > >> > > > result > >> > > row > >> > > > where the results are linked and the rows r11 and r21 are not > >> > > repeated.(It > >> > > > is similar to an adjacency list representation) > >> > > > >> > > The output of an SQLite query always has a fixed > number of columns, > >> > > and for specific data, a fixed number of rows. > >> > > > >> > > Please specify exactly how the output for this example > data should > >> > > look like. > >> > > > >> > > > The efficiency I gain with the 2nd approach, is the > reduction is > >> > > > in the number of copies .i.e each row is copied only once. > >> > > > >> > > Your program has to read either the value of ID1, to compare it > >with > >> > > the last one, or some other indication that there is a > new T1 row. > >> > > What's the difference? Or how exactly should the API > look like? > >> > > > >> > > > >> > > Regards, > >> > > Clemens > >> > > _______________________________________________ > >> > > sqlite-users mailing list > >> > > sqlite-users@sqlite.org > >> > > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > >> > > > >> > _______________________________________________ > >> > sqlite-users mailing list > >> > sqlite-users@sqlite.org > >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > >> > > >> > > >> > ___________________________________________ > >> > Gunter Hick > >> > Software Engineer > >> > Scientific Games International GmbH > >> > FN 157284 a, HG Wien > >> > Klitschgasse 2-4, A-1130 Vienna, Austria > >> > Tel: +43 1 80100 0 > >> > E-Mail: h...@scigames.at > >> > > >> > This communication (including any attachments) is > intended for the > >use > >> > of the intended recipient(s) only and may contain > information that is > >> > confidential, privileged or legally protected. Any > unauthorized use > >or > >> > dissemination of this communication is strictly > prohibited. If you > >> > have received this communication in error, please > immediately notify > >> > the sender by return e-mail message and delete all copies of the > >> > original communication. Thank you for your cooperation. > >> > > >> > > >> > _______________________________________________ > >> > sqlite-users mailing list > >> > sqlite-users@sqlite.org > >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > >> > > >> _______________________________________________ > >> sqlite-users mailing list > >> sqlite-users@sqlite.org > >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > >> > >> > >> ___________________________________________ > >> Gunter Hick > >> Software Engineer > >> Scientific Games International GmbH > >> FN 157284 a, HG Wien > >> Klitschgasse 2-4, A-1130 Vienna, Austria > >> Tel: +43 1 80100 0 > >> E-Mail: h...@scigames.at > >> > >> This communication (including any attachments) is intended > for the use > >of > >> the intended recipient(s) only and may contain information that is > >> confidential, privileged or legally protected. Any > unauthorized use or > >> dissemination of this communication is strictly > prohibited. If you have > >> received this communication in error, please immediately notify the > >sender > >> by return e-mail message and delete all copies of the original > >> communication. Thank you for your cooperation. > >> > >> > >> _______________________________________________ > >> sqlite-users mailing list > >> sqlite-users@sqlite.org > >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > >> > >_______________________________________________ > >sqlite-users mailing list > >sqlite-users@sqlite.org > >http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > > > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users