The schema is as follows :

create table employee (name text,age int);
create table location (name text,addr text);
create table company (name text,cname text);

Thanks

On Fri, Sep 19, 2014 at 10:13 AM, Richard Hipp <d...@sqlite.org> wrote:

> On Fri, Sep 19, 2014 at 12:35 AM, Prakash Premkumar <
> prakash.p...@gmail.com>
> wrote:
>
> > Let's take this example
> >
> > explain select * from employee,company,location where location.name=
> > company.name and location.name=employee.name;
> >
>
> Also please include the schema for your database.
>
>
>
> >
> > addr  opcode         p1    p2    p3    p4             p5  comment
> >
> > ----  -------------  ----  ----  ----  -------------  --  -------------
> >
> > 0     Init           0     46    0                    00  Start at 46
> >
> > 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     44    0                    00
> >
> > 6       Once           0     15    0                    00
> >
> > 7       OpenAutoindex  3     3     0     k(3,nil,nil,nil)  00  nColumn=3;
> > for location
> >
> > 8       Rewind         2     15    0                    00
> >
> > 9         Column         2     0     2                    00  r[2]=
> > location.name
> >
> > 10        Column         2     1     3                    00
> > r[3]=location.addr
> >
> > 11        Rowid          2     4     0                    00  r[4]=rowid
> >
> > 12        MakeRecord     2     3     1                    00
> > r[1]=mkrec(r[2..4])
> >
> > 13        IdxInsert      3     1     0                    10  key=r[1]
> >
> > 14      Next           2     9     0                    03
> >
> > 15      Explain        0     1     2     SEARCH TABLE location USING
> > AUTOMATIC COVERING INDEX (name=?)  00
> >
> > 16      Column         0     0     5                    00  r[5]=
> > employee.name
> >
> > 17      IsNull         5     43    0                    00  if r[5]==NULL
> > goto 43
> >
> > 18      SeekGE         3     43    5     1              00  key=r[5]
> >
> > 19        IdxGT          3     43    5     1              00  key=r[5]
> >
> > 20        Once           1     29    0                    00
> >
> > 21        OpenAutoindex  4     3     0     k(3,nil,nil,nil)  00
> nColumn=3;
> > for company
> >
> > 22        Rewind         1     29    0                    00
> >
> > 23          Column         1     0     2                    00  r[2]=
> > company.name
> >
> > 24          Column         1     1     3                    00
> > r[3]=company.cname
> >
> > 25          Rowid          1     4     0                    00
> r[4]=rowid
> >
> >
> > 26          MakeRecord     2     3     1                    00
> > r[1]=mkrec(r[2..4])
> >
> > 27          IdxInsert      4     1     0                    10  key=r[1]
> >
> >
> > 28        Next           1     23    0                    03
> >
> > 29        Explain        0     2     1     SEARCH TABLE company USING
> > AUTOMATIC COVERING INDEX (name=?)  00
> >
> > 30        Column         3     0     6                    00  r[6]=
> > location.name
> >
> > 31        IsNull         6     42    0                    00  if
> r[6]==NULL
> > goto 42
> >
> > 32        SeekGE         4     42    6     1              00  key=r[6]
> >
> > 33          IdxGT          4     42    6     1              00  key=r[6]
> >
> >
> > 34          Copy           5     7     0                    00  r[7]=r[5]
> >
> >
> > 35          Column         0     1     8                    00
> > r[8]=employee.age
> >
> > 36          Column         4     0     9                    00  r[9]=
> > company.name
> >
> > 37          Column         4     1     10                   00
> > r[10]=company.cname
> >
> > 38          Copy           6     11    0                    00
> r[11]=r[6]
> >
> >
> > 39          Column         3     1     12                   00
> > r[12]=location.addr
> >
> > 40          ResultRow      7     6     0                    00
> > output=r[7..12]
> >
> > 41        Next           4     33    0                    00
> >
> > 42      Next           3     19    0                    00
> >
> > 43    Next           0     6     0                    01
> >
> > 44    Close          0     0     0                    00
> >
> > 45    Halt           0     0     0                    00
> >
> > 46    Transaction    0     0     3     0              01
> >
> > 47    TableLock      0     2     0     employee       00  iDb=0 root=2
> > write=0
> >
> > 48    TableLock      0     3     0     location       00  iDb=0 root=3
> > write=0
> >
> > 49    TableLock      0     4     0     company        00  iDb=0 root=4
> > write=0
> >
> > 50    Goto           0     1     0                    00
> >
> >
> > How's the register for the highlighted opcode allocated and how does the
> > virtual machine remember this allocation ?
> >
> > Thanks for your help
> >
> > On Fri, Sep 19, 2014 at 9:46 AM, Richard Hipp <d...@sqlite.org> wrote:
> >
> > > On Fri, Sep 19, 2014 at 12:10 AM, Prakash Premkumar <
> > > prakash.p...@gmail.com>
> > > wrote:
> > >
> > > > Thanks for your reply. I would like to know how the register
> allocation
> > > > decision is made and the part of the code which does it . can you
> > please
> > > > help me find that? Thanks
> > > >
> > >
> > > Which register.
> > >
> > > Show me a specific VDBE program and a specific instruction in that
> > program
> > > and a specific operand on that instruction, and I can point you to the
> > > place in the code where that register is allocated.
> > >
> > >
> > > --
> > > 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
> >
>
>
>
> --
> 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

Reply via email to