When you do add scripts, put them on pastebin or something of the sort as
this mailing list doesn't always allow attachments.  (I've seen one or two
slip through the cracks)

On Fri, Sep 19, 2014 at 1:20 AM, Prakash Premkumar <prakash.p...@gmail.com>
wrote:

> Thanks a lot Richard for your help. I apologize for not including the
> script. I will make it a point to add the scripts from hereon.
>
> On Fri, Sep 19, 2014 at 10:30 AM, Richard Hipp <d...@sqlite.org> wrote:
>
> > You start by presenting us with a stand-alone script that we can run to
> see
> > your question.  See you are getting free help, you really should be
> > striving to make it easy for people to help you.  We don't have a script
> > from you, so I made one up.  I'm using:
> >
> > CREATE TABLE employee(eid INTEGER PRIMARY KEY, name TEXT);
> > CREATE TABLE location(lid INTEGER PRIMARY KEY, name TEXT);
> > CREATE TABLE company(cid INTEGER PRIMARY KEY, name TEXT);
> > .explain
> > EXPLAIN
> > SELECT *
> >   FROM employee, company, location
> >  WHERE location.name=company.name
> >    AND location.name=employee.name;
> >
> > Be sure to indent your code clearly so that people and understand it more
> > easily.
> >
> > For the trunk of SQLite, the first few instructions are:
> >
> > addr  opcode         p1    p2    p3    p4             p5  comment
> > ----  -------------  ----  ----  ----  -------------  --  -------------
> > 0     Init           0     44    0                    00  Start at 44
> > 1     OpenRead       0     2     0     2              00  root=2 iDb=0;
> > employee
> > 2     OpenRead       2     3     0     2              00  root=3 iDb=0;
> > location
> > 3     OpenRead       1     4     0     2              00  root=4 iDb=0;
> > company
> > 4     Explain        0     0     0     SCAN TABLE employee
> > 00
> > 5     Rewind         0     42    0                    00
> > 6       Once           0     14    0                    00
> > 7       OpenAutoindex  3     2     0     k(2,nil,nil)   00  nColumn=2;
> for
> > location
> > 8       Rewind         2     14    0                    00
> > 9         Column         2     1     2                    00  r[2]=
> > location.name
> > 10        Rowid          2     3     0                    00  r[3]=rowid
> > 11        MakeRecord     2     2     1                    00
> > r[1]=mkrec(r[2..3])
> > 12        IdxInsert      3     1     0                    10  key=r[1]
> > 13      Next           2     9     0                    03
> >
> > I think you are interested in knowing where the P3 operand (the output
> > register number) for instruction 9 comes from.  (Note that the program
> > shown above might be slightly different in whatever version of SQLite you
> > are running.)
> >
> > The way you find this out is to first compile sqlite3 using
> > -DSQLITE_DEBUG.  Then add the statement:
> >
> >      PRAGMA vdbe_addoptrace=ON;
> >
> > Right before the "EXPLAIN" in the script.  That pragma (only available
> when
> > SQLite is compiled with -DSQLITE_DEBUG) causes SQLite to print a message
> on
> > the screen every time it generates a new opcode.  Next, run sqlite3 in a
> > debugger and set a breakpoint on the "test_addop_breakpoint" procedure.
> > (This is a dummy procedure created specifically to give you a place to
> set
> > a breakpoint.)  Then run your script.  Continue past the first few
> > breakpoints until the "Column" instruction is emitted.  Now you can
> examine
> > the call stack to figure out exactly how that opcode was generated.
> >
> > It appears that the output register 2 comes from here:
> >
> >     http://www.sqlite.org/src/artifact/fae81cc2eb14b?ln=812-813
> >
> > Specifically the last parameter.  regBase+j.  You can continue to follow
> > the stack to figure out where regBase was computed.  There are comments
> on
> > each function that try to explain what that particular function is doing.
> >
> >
> >
> >
> >
> >
> > --
> > D. Richard Hipp
> > d...@sqlite.org
> > _______________________________________________
> > 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

Reply via email to