FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
13 messages Options
Reply | Threaded
Open this post in threaded view
|

FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Keith Medcalf

If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS you will see in pragma.c (or in sqlite3.c) the following code:

#ifdef SQLITE_INTROSPECTION_PRAGMAS
  case PragTyp_FUNCTION_LIST: {
    int i;
    HashElem *j;
    FuncDef *p;
    pParse->nMem = 2;
    for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
      for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
        sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
        sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
      }
    }
    for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
      p = (FuncDef*)sqliteHashData(j);
      sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
    }
  }
  break;

#ifndef SQLITE_OMIT_VIRTUALTABLE
  case PragTyp_MODULE_LIST: {
    HashElem *j;
    pParse->nMem = 1;
    for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
      Module *pMod = (Module*)sqliteHashData(j);
      sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
    }
  }
  break;
#endif /* SQLITE_OMIT_VIRTUALTABLE */

  case PragTyp_PRAGMA_LIST: {
    int i;
    for(i=0; i<ArraySize(aPragmaName); i++){
      sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
    }
  }
  break;
#endif /* SQLITE_INTROSPECTION_PRAGMAS */

In each, the sqlite3VdbeAddOp2 should be removed.  sqlite3VdbeMultiLoad, as well as adding the data to the vdbe program also generates an OP_ResultRow instruction ...

---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot about anticipated traffic volume.


>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>[hidden email]] On Behalf Of Bart Smissaert
>Sent: Thursday, 24 August, 2017 14:53
>To: General Discussion of SQLite Database
>Subject: [sqlite] Duplicate output with pragma_list, function_list,
>module_list
>
>The pragma names and function names are duplicated with these
>pragma's.
>Is this a bug?
>
>RBS
>_______________________________________________
>sqlite-users mailing list
>[hidden email]
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Bart Smissaert
I removed (commented out) all the lines with sqlite3VdbeAddOp2 in that
mentioned code block, so that is 4 code lines.
Still I get the duplicate output.
I am using the the 3.20.0 amalgation.

RBS













On Fri, Aug 25, 2017 at 12:41 AM, Keith Medcalf <[hidden email]> wrote:

>
> If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS you will see
> in pragma.c (or in sqlite3.c) the following code:
>
> #ifdef SQLITE_INTROSPECTION_PRAGMAS
>   case PragTyp_FUNCTION_LIST: {
>     int i;
>     HashElem *j;
>     FuncDef *p;
>     pParse->nMem = 2;
>     for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
>       for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
>         sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
>         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
>       }
>     }
>     for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
>       p = (FuncDef*)sqliteHashData(j);
>       sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
>       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
>     }
>   }
>   break;
>
> #ifndef SQLITE_OMIT_VIRTUALTABLE
>   case PragTyp_MODULE_LIST: {
>     HashElem *j;
>     pParse->nMem = 1;
>     for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
>       Module *pMod = (Module*)sqliteHashData(j);
>       sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
>       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
>     }
>   }
>   break;
> #endif /* SQLITE_OMIT_VIRTUALTABLE */
>
>   case PragTyp_PRAGMA_LIST: {
>     int i;
>     for(i=0; i<ArraySize(aPragmaName); i++){
>       sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
>       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
>     }
>   }
>   break;
> #endif /* SQLITE_INTROSPECTION_PRAGMAS */
>
> In each, the sqlite3VdbeAddOp2 should be removed.  sqlite3VdbeMultiLoad,
> as well as adding the data to the vdbe program also generates an
> OP_ResultRow instruction ...
>
> ---
> The fact that there's a Highway to Hell but only a Stairway to Heaven says
> a lot about anticipated traffic volume.
>
>
> >-----Original Message-----
> >From: sqlite-users [mailto:sqlite-users-
> >[hidden email]] On Behalf Of Bart Smissaert
> >Sent: Thursday, 24 August, 2017 14:53
> >To: General Discussion of SQLite Database
> >Subject: [sqlite] Duplicate output with pragma_list, function_list,
> >module_list
> >
> >The pragma names and function names are duplicated with these
> >pragma's.
> >Is this a bug?
> >
> >RBS
> >_______________________________________________
> >sqlite-users mailing list
> >[hidden email]
> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Dan Kennedy-4
In reply to this post by Keith Medcalf
On 08/25/2017 06:41 AM, Keith Medcalf wrote:
> If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS you will see in pragma.c (or in sqlite3.c) the following code:

Thanks for looking into this. Now fixed here:

   http://www.sqlite.org/src/info/b79cc8dc88c8ae03

Dan.


_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Bart Smissaert
I applied this fix, but still get the duplicate output.

RBS

On Fri, Aug 25, 2017 at 10:45 AM, Dan Kennedy <[hidden email]> wrote:

> On 08/25/2017 06:41 AM, Keith Medcalf wrote:
>
>> If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS you will
>> see in pragma.c (or in sqlite3.c) the following code:
>>
>
> Thanks for looking into this. Now fixed here:
>
>   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
>
> Dan.
>
>
>
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Keith Medcalf
In reply to this post by Dan Kennedy-4

Thanks Dan.  That works for me ...

---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot about anticipated traffic volume.


>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>[hidden email]] On Behalf Of Dan Kennedy
>Sent: Friday, 25 August, 2017 03:45
>To: [hidden email]
>Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
>function_list, module_list
>
>On 08/25/2017 06:41 AM, Keith Medcalf wrote:
>> If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS you
>will see in pragma.c (or in sqlite3.c) the following code:
>
>Thanks for looking into this. Now fixed here:
>
>   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
>
>Dan.
>
>
>_______________________________________________
>sqlite-users mailing list
>[hidden email]
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Bart Smissaert
I copied the exact code block as in
http://www.sqlite.org/src/info/b79cc8dc88c8ae03
compiled in MSVS, no errors and dll works fine, but still duplicate output.
This is in Windows 8.
I compiled the edited amalgation. I checked in Notepad that sqlite3.c had
indeed the needed changes
and it had, so no idea why I still get the duplicates. Must be some silly
mistake I am making, but no idea what.

RBS


On Fri, Aug 25, 2017 at 8:28 PM, Keith Medcalf <[hidden email]> wrote:

>
> Thanks Dan.  That works for me ...
>
> ---
> The fact that there's a Highway to Hell but only a Stairway to Heaven says
> a lot about anticipated traffic volume.
>
>
> >-----Original Message-----
> >From: sqlite-users [mailto:sqlite-users-
> >[hidden email]] On Behalf Of Dan Kennedy
> >Sent: Friday, 25 August, 2017 03:45
> >To: [hidden email]
> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
> >function_list, module_list
> >
> >On 08/25/2017 06:41 AM, Keith Medcalf wrote:
> >> If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS you
> >will see in pragma.c (or in sqlite3.c) the following code:
> >
> >Thanks for looking into this. Now fixed here:
> >
> >   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
> >
> >Dan.
> >
> >
> >_______________________________________________
> >sqlite-users mailing list
> >[hidden email]
> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Keith Medcalf

Which amalgamation?



---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot about anticipated traffic volume.


>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>[hidden email]] On Behalf Of Bart Smissaert
>Sent: Friday, 25 August, 2017 14:13
>To: SQLite mailing list
>Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
>function_list, module_list
>
>I copied the exact code block as in
>http://www.sqlite.org/src/info/b79cc8dc88c8ae03
>compiled in MSVS, no errors and dll works fine, but still duplicate
>output.
>This is in Windows 8.
>I compiled the edited amalgation. I checked in Notepad that sqlite3.c
>had
>indeed the needed changes
>and it had, so no idea why I still get the duplicates. Must be some
>silly
>mistake I am making, but no idea what.
>
>RBS
>
>
>On Fri, Aug 25, 2017 at 8:28 PM, Keith Medcalf <[hidden email]>
>wrote:
>
>>
>> Thanks Dan.  That works for me ...
>>
>> ---
>> The fact that there's a Highway to Hell but only a Stairway to
>Heaven says
>> a lot about anticipated traffic volume.
>>
>>
>> >-----Original Message-----
>> >From: sqlite-users [mailto:sqlite-users-
>> >[hidden email]] On Behalf Of Dan Kennedy
>> >Sent: Friday, 25 August, 2017 03:45
>> >To: [hidden email]
>> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
>> >function_list, module_list
>> >
>> >On 08/25/2017 06:41 AM, Keith Medcalf wrote:
>> >> If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS
>you
>> >will see in pragma.c (or in sqlite3.c) the following code:
>> >
>> >Thanks for looking into this. Now fixed here:
>> >
>> >   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
>> >
>> >Dan.
>> >
>> >
>> >_______________________________________________
>> >sqlite-users mailing list
>> >[hidden email]
>> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>users
>>
>>
>>
>> _______________________________________________
>> sqlite-users mailing list
>> [hidden email]
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>users
>>
>_______________________________________________
>sqlite-users mailing list
>[hidden email]
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Bart Smissaert
The standard 3.20.0, second down on this page:
https://www.sqlite.org/download.html

Noticed though there is a new version and will try that one.

RBS

On Fri, Aug 25, 2017 at 9:48 PM, Keith Medcalf <[hidden email]> wrote:

>
> Which amalgamation?
>
>
>
> ---
> The fact that there's a Highway to Hell but only a Stairway to Heaven says
> a lot about anticipated traffic volume.
>
>
> >-----Original Message-----
> >From: sqlite-users [mailto:sqlite-users-
> >[hidden email]] On Behalf Of Bart Smissaert
> >Sent: Friday, 25 August, 2017 14:13
> >To: SQLite mailing list
> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
> >function_list, module_list
> >
> >I copied the exact code block as in
> >http://www.sqlite.org/src/info/b79cc8dc88c8ae03
> >compiled in MSVS, no errors and dll works fine, but still duplicate
> >output.
> >This is in Windows 8.
> >I compiled the edited amalgation. I checked in Notepad that sqlite3.c
> >had
> >indeed the needed changes
> >and it had, so no idea why I still get the duplicates. Must be some
> >silly
> >mistake I am making, but no idea what.
> >
> >RBS
> >
> >
> >On Fri, Aug 25, 2017 at 8:28 PM, Keith Medcalf <[hidden email]>
> >wrote:
> >
> >>
> >> Thanks Dan.  That works for me ...
> >>
> >> ---
> >> The fact that there's a Highway to Hell but only a Stairway to
> >Heaven says
> >> a lot about anticipated traffic volume.
> >>
> >>
> >> >-----Original Message-----
> >> >From: sqlite-users [mailto:sqlite-users-
> >> >[hidden email]] On Behalf Of Dan Kennedy
> >> >Sent: Friday, 25 August, 2017 03:45
> >> >To: [hidden email]
> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
> >> >function_list, module_list
> >> >
> >> >On 08/25/2017 06:41 AM, Keith Medcalf wrote:
> >> >> If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS
> >you
> >> >will see in pragma.c (or in sqlite3.c) the following code:
> >> >
> >> >Thanks for looking into this. Now fixed here:
> >> >
> >> >   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
> >> >
> >> >Dan.
> >> >
> >> >
> >> >_______________________________________________
> >> >sqlite-users mailing list
> >> >[hidden email]
> >> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >users
> >>
> >>
> >>
> >> _______________________________________________
> >> sqlite-users mailing list
> >> [hidden email]
> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >users
> >>
> >_______________________________________________
> >sqlite-users mailing list
> >[hidden email]
> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Keith Medcalf

Doesn't help a lot.  Works for me though with the standard 3.20.0 release though ...

SQLite version 3.20.0 2017-08-01 13:24:15
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .eqp full
sqlite> select sqlite_source_id();
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     6     0                    00  Start at 6
1     Noop           0     0     0                    00  Begin WHERE-core
2     Copy           2     1     0                    00  r[1]=r[2]
3     ResultRow      1     1     0                    00  output=r[1]
4     Noop           0     0     0                    00  End WHERE-core
5     Halt           0     0     0                    00
6     Function0      0     0     2     sqlite_source_id(0)  00  r[2]=func(r[0])
7     Goto           0     1     0                    00
2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8
sqlite> pragma module_list;
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     1     0                    00  Start at 1
1     String8        0     1     0     sqlite_stmt    00  r[1]='sqlite_stmt'
2     ResultRow      1     1     0                    00  output=r[1]
3     String8        0     1     0     json_tree      00  r[1]='json_tree'
4     ResultRow      1     1     0                    00  output=r[1]
5     String8        0     1     0     rtree_i32      00  r[1]='rtree_i32'
6     ResultRow      1     1     0                    00  output=r[1]
7     String8        0     1     0     fts3tokenize   00  r[1]='fts3tokenize'
8     ResultRow      1     1     0                    00  output=r[1]
9     String8        0     1     0     fts3           00  r[1]='fts3'
10    ResultRow      1     1     0                    00  output=r[1]
11    String8        0     1     0     fts4aux        00  r[1]='fts4aux'
12    ResultRow      1     1     0                    00  output=r[1]
13    String8        0     1     0     interpolate    00  r[1]='interpolate'
14    ResultRow      1     1     0                    00  output=r[1]
15    String8        0     1     0     vfsstat        00  r[1]='vfsstat'
16    ResultRow      1     1     0                    00  output=r[1]
17    String8        0     1     0     dbstat         00  r[1]='dbstat'
18    ResultRow      1     1     0                    00  output=r[1]
19    String8        0     1     0     rtree          00  r[1]='rtree'
20    ResultRow      1     1     0                    00  output=r[1]
21    String8        0     1     0     carray         00  r[1]='carray'
22    ResultRow      1     1     0                    00  output=r[1]
23    String8        0     1     0     fts5           00  r[1]='fts5'
24    ResultRow      1     1     0                    00  output=r[1]
25    String8        0     1     0     json_each      00  r[1]='json_each'
26    ResultRow      1     1     0                    00  output=r[1]
27    String8        0     1     0     approximate_match  00  r[1]='approximate_match'
28    ResultRow      1     1     0                    00  output=r[1]
29    String8        0     1     0     fts4           00  r[1]='fts4'
30    ResultRow      1     1     0                    00  output=r[1]
31    String8        0     1     0     transitive_closure  00  r[1]='transitive_closure'
32    ResultRow      1     1     0                    00  output=r[1]
33    String8        0     1     0     completion     00  r[1]='completion'
34    ResultRow      1     1     0                    00  output=r[1]
35    String8        0     1     0     fuzzer         00  r[1]='fuzzer'
36    ResultRow      1     1     0                    00  output=r[1]
37    String8        0     1     0     spellfix1      00  r[1]='spellfix1'
38    ResultRow      1     1     0                    00  output=r[1]
39    String8        0     1     0     wholenumber    00  r[1]='wholenumber'
40    ResultRow      1     1     0                    00  output=r[1]
41    String8        0     1     0     fts5vocab      00  r[1]='fts5vocab'
42    ResultRow      1     1     0                    00  output=r[1]
43    String8        0     1     0     generate_series  00  r[1]='generate_series'
44    ResultRow      1     1     0                    00  output=r[1]
45    String8        0     1     0     csv            00  r[1]='csv'
46    ResultRow      1     1     0                    00  output=r[1]
47    Halt           0     0     0                    00
sqlite_stmt
json_tree
rtree_i32
fts3tokenize
fts3
fts4aux
interpolate
vfsstat
dbstat
rtree
carray
fts5
json_each
approximate_match
fts4
transitive_closure
completion
fuzzer
spellfix1
wholenumber
fts5vocab
generate_series
csv
sqlite>

sqlite3.c

#ifdef SQLITE_INTROSPECTION_PRAGMAS
  case PragTyp_FUNCTION_LIST: {
    int i;
    HashElem *j;
    FuncDef *p;
    pParse->nMem = 2;
    for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
      for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
        sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
//        sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
      }
    }
    for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
      p = (FuncDef*)sqliteHashData(j);
      sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
//      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
    }
  }
  break;

#ifndef SQLITE_OMIT_VIRTUALTABLE
  case PragTyp_MODULE_LIST: {
    HashElem *j;
    pParse->nMem = 1;
    for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
      Module *pMod = (Module*)sqliteHashData(j);
      sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
//      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
    }
  }
  break;
#endif /* SQLITE_OMIT_VIRTUALTABLE */

  case PragTyp_PRAGMA_LIST: {
    int i;
    for(i=0; i<ArraySize(aPragmaName); i++){
      sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
//      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
    }
  }
  break;
#endif /* SQLITE_INTROSPECTION_PRAGMAS */


---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot about anticipated traffic volume.


>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>[hidden email]] On Behalf Of Bart Smissaert
>Sent: Friday, 25 August, 2017 14:57
>To: SQLite mailing list
>Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
>function_list, module_list
>
>The standard 3.20.0, second down on this page:
>https://www.sqlite.org/download.html
>
>Noticed though there is a new version and will try that one.
>
>RBS
>
>On Fri, Aug 25, 2017 at 9:48 PM, Keith Medcalf <[hidden email]>
>wrote:
>
>>
>> Which amalgamation?
>>
>>
>>
>> ---
>> The fact that there's a Highway to Hell but only a Stairway to
>Heaven says
>> a lot about anticipated traffic volume.
>>
>>
>> >-----Original Message-----
>> >From: sqlite-users [mailto:sqlite-users-
>> >[hidden email]] On Behalf Of Bart Smissaert
>> >Sent: Friday, 25 August, 2017 14:13
>> >To: SQLite mailing list
>> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
>> >function_list, module_list
>> >
>> >I copied the exact code block as in
>> >http://www.sqlite.org/src/info/b79cc8dc88c8ae03
>> >compiled in MSVS, no errors and dll works fine, but still
>duplicate
>> >output.
>> >This is in Windows 8.
>> >I compiled the edited amalgation. I checked in Notepad that
>sqlite3.c
>> >had
>> >indeed the needed changes
>> >and it had, so no idea why I still get the duplicates. Must be
>some
>> >silly
>> >mistake I am making, but no idea what.
>> >
>> >RBS
>> >
>> >
>> >On Fri, Aug 25, 2017 at 8:28 PM, Keith Medcalf
><[hidden email]>
>> >wrote:
>> >
>> >>
>> >> Thanks Dan.  That works for me ...
>> >>
>> >> ---
>> >> The fact that there's a Highway to Hell but only a Stairway to
>> >Heaven says
>> >> a lot about anticipated traffic volume.
>> >>
>> >>
>> >> >-----Original Message-----
>> >> >From: sqlite-users [mailto:sqlite-users-
>> >> >[hidden email]] On Behalf Of Dan Kennedy
>> >> >Sent: Friday, 25 August, 2017 03:45
>> >> >To: [hidden email]
>> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with
>pragma_list,
>> >> >function_list, module_list
>> >> >
>> >> >On 08/25/2017 06:41 AM, Keith Medcalf wrote:
>> >> >> If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS
>> >you
>> >> >will see in pragma.c (or in sqlite3.c) the following code:
>> >> >
>> >> >Thanks for looking into this. Now fixed here:
>> >> >
>> >> >   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
>> >> >
>> >> >Dan.
>> >> >
>> >> >
>> >> >_______________________________________________
>> >> >sqlite-users mailing list
>> >> >[hidden email]
>> >> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>> >users
>> >>
>> >>
>> >>
>> >> _______________________________________________
>> >> sqlite-users mailing list
>> >> [hidden email]
>> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>> >users
>> >>
>> >_______________________________________________
>> >sqlite-users mailing list
>> >[hidden email]
>> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>users
>>
>>
>>
>> _______________________________________________
>> sqlite-users mailing list
>> [hidden email]
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>users
>>
>_______________________________________________
>sqlite-users mailing list
>[hidden email]
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Bart Smissaert
Tried with the latest 3.20.1, but same result.
My explain output is like this:

addr opcode p1 p2 p3 p4 p5 comment
0 Init 0 1 0  00 Start at 1
1 String8 0 1 0 application_id 00 r[1]='application_id'
2 ResultRow 1 1 0  00 output=r[1]
3 ResultRow 1 1 0  00 output=r[1]
4 String8 0 1 0 auto_vacuum 00 r[1]='auto_vacuum'
5 ResultRow 1 1 0  00 output=r[1]
6 ResultRow 1 1 0  00 output=r[1]
7 String8 0 1 0 automatic_index 00 r[1]='automatic_index'
8 ResultRow 1 1 0  00 output=r[1]
9 ResultRow 1 1 0  00 output=r[1]

I did comment out those same 4 lines.

I suppose it has to be something in my application code.

pragma database_list works fine though with this explain output:

addr opcode p1 p2 p3 p4 p5 comment
0 Init 0 1 0  00 Start at 1
1 Integer 0 1 0  00 r[1]=0
2 String8 0 2 0 main 00 r[2]='main'
3 String8 0 3 0 C:\Test\Test.db3 00 r[3]='C:\Test\Test.db3'
4 ResultRow 1 3 0  00 output=r[1..3]
5 Halt 0 0 0  00

No idea what is going on.


RBS

On Fri, Aug 25, 2017 at 10:08 PM, Keith Medcalf <[hidden email]> wrote:

>
> Doesn't help a lot.  Works for me though with the standard 3.20.0 release
> though ...
>
> SQLite version 3.20.0 2017-08-01 13:24:15
> Enter ".help" for usage hints.
> Connected to a transient in-memory database.
> Use ".open FILENAME" to reopen on a persistent database.
> sqlite> .eqp full
> sqlite> select sqlite_source_id();
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     6     0                    00  Start at 6
> 1     Noop           0     0     0                    00  Begin WHERE-core
> 2     Copy           2     1     0                    00  r[1]=r[2]
> 3     ResultRow      1     1     0                    00  output=r[1]
> 4     Noop           0     0     0                    00  End WHERE-core
> 5     Halt           0     0     0                    00
> 6     Function0      0     0     2     sqlite_source_id(0)  00
> r[2]=func(r[0])
> 7     Goto           0     1     0                    00
> 2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b
> 514d7c2e0cad73b2a496c0bc4b680900a8
> sqlite> pragma module_list;
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     String8        0     1     0     sqlite_stmt    00
> r[1]='sqlite_stmt'
> 2     ResultRow      1     1     0                    00  output=r[1]
> 3     String8        0     1     0     json_tree      00  r[1]='json_tree'
> 4     ResultRow      1     1     0                    00  output=r[1]
> 5     String8        0     1     0     rtree_i32      00  r[1]='rtree_i32'
> 6     ResultRow      1     1     0                    00  output=r[1]
> 7     String8        0     1     0     fts3tokenize   00
> r[1]='fts3tokenize'
> 8     ResultRow      1     1     0                    00  output=r[1]
> 9     String8        0     1     0     fts3           00  r[1]='fts3'
> 10    ResultRow      1     1     0                    00  output=r[1]
> 11    String8        0     1     0     fts4aux        00  r[1]='fts4aux'
> 12    ResultRow      1     1     0                    00  output=r[1]
> 13    String8        0     1     0     interpolate    00
> r[1]='interpolate'
> 14    ResultRow      1     1     0                    00  output=r[1]
> 15    String8        0     1     0     vfsstat        00  r[1]='vfsstat'
> 16    ResultRow      1     1     0                    00  output=r[1]
> 17    String8        0     1     0     dbstat         00  r[1]='dbstat'
> 18    ResultRow      1     1     0                    00  output=r[1]
> 19    String8        0     1     0     rtree          00  r[1]='rtree'
> 20    ResultRow      1     1     0                    00  output=r[1]
> 21    String8        0     1     0     carray         00  r[1]='carray'
> 22    ResultRow      1     1     0                    00  output=r[1]
> 23    String8        0     1     0     fts5           00  r[1]='fts5'
> 24    ResultRow      1     1     0                    00  output=r[1]
> 25    String8        0     1     0     json_each      00  r[1]='json_each'
> 26    ResultRow      1     1     0                    00  output=r[1]
> 27    String8        0     1     0     approximate_match  00
> r[1]='approximate_match'
> 28    ResultRow      1     1     0                    00  output=r[1]
> 29    String8        0     1     0     fts4           00  r[1]='fts4'
> 30    ResultRow      1     1     0                    00  output=r[1]
> 31    String8        0     1     0     transitive_closure  00
> r[1]='transitive_closure'
> 32    ResultRow      1     1     0                    00  output=r[1]
> 33    String8        0     1     0     completion     00  r[1]='completion'
> 34    ResultRow      1     1     0                    00  output=r[1]
> 35    String8        0     1     0     fuzzer         00  r[1]='fuzzer'
> 36    ResultRow      1     1     0                    00  output=r[1]
> 37    String8        0     1     0     spellfix1      00  r[1]='spellfix1'
> 38    ResultRow      1     1     0                    00  output=r[1]
> 39    String8        0     1     0     wholenumber    00
> r[1]='wholenumber'
> 40    ResultRow      1     1     0                    00  output=r[1]
> 41    String8        0     1     0     fts5vocab      00  r[1]='fts5vocab'
> 42    ResultRow      1     1     0                    00  output=r[1]
> 43    String8        0     1     0     generate_series  00
> r[1]='generate_series'
> 44    ResultRow      1     1     0                    00  output=r[1]
> 45    String8        0     1     0     csv            00  r[1]='csv'
> 46    ResultRow      1     1     0                    00  output=r[1]
> 47    Halt           0     0     0                    00
> sqlite_stmt
> json_tree
> rtree_i32
> fts3tokenize
> fts3
> fts4aux
> interpolate
> vfsstat
> dbstat
> rtree
> carray
> fts5
> json_each
> approximate_match
> fts4
> transitive_closure
> completion
> fuzzer
> spellfix1
> wholenumber
> fts5vocab
> generate_series
> csv
> sqlite>
>
> sqlite3.c
>
> #ifdef SQLITE_INTROSPECTION_PRAGMAS
>   case PragTyp_FUNCTION_LIST: {
>     int i;
>     HashElem *j;
>     FuncDef *p;
>     pParse->nMem = 2;
>     for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
>       for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
>         sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
> //        sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
>       }
>     }
>     for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
>       p = (FuncDef*)sqliteHashData(j);
>       sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
>     }
>   }
>   break;
>
> #ifndef SQLITE_OMIT_VIRTUALTABLE
>   case PragTyp_MODULE_LIST: {
>     HashElem *j;
>     pParse->nMem = 1;
>     for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
>       Module *pMod = (Module*)sqliteHashData(j);
>       sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
>     }
>   }
>   break;
> #endif /* SQLITE_OMIT_VIRTUALTABLE */
>
>   case PragTyp_PRAGMA_LIST: {
>     int i;
>     for(i=0; i<ArraySize(aPragmaName); i++){
>       sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
>     }
>   }
>   break;
> #endif /* SQLITE_INTROSPECTION_PRAGMAS */
>
>
> ---
> The fact that there's a Highway to Hell but only a Stairway to Heaven says
> a lot about anticipated traffic volume.
>
>
> >-----Original Message-----
> >From: sqlite-users [mailto:sqlite-users-
> >[hidden email]] On Behalf Of Bart Smissaert
> >Sent: Friday, 25 August, 2017 14:57
> >To: SQLite mailing list
> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
> >function_list, module_list
> >
> >The standard 3.20.0, second down on this page:
> >https://www.sqlite.org/download.html
> >
> >Noticed though there is a new version and will try that one.
> >
> >RBS
> >
> >On Fri, Aug 25, 2017 at 9:48 PM, Keith Medcalf <[hidden email]>
> >wrote:
> >
> >>
> >> Which amalgamation?
> >>
> >>
> >>
> >> ---
> >> The fact that there's a Highway to Hell but only a Stairway to
> >Heaven says
> >> a lot about anticipated traffic volume.
> >>
> >>
> >> >-----Original Message-----
> >> >From: sqlite-users [mailto:sqlite-users-
> >> >[hidden email]] On Behalf Of Bart Smissaert
> >> >Sent: Friday, 25 August, 2017 14:13
> >> >To: SQLite mailing list
> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
> >> >function_list, module_list
> >> >
> >> >I copied the exact code block as in
> >> >http://www.sqlite.org/src/info/b79cc8dc88c8ae03
> >> >compiled in MSVS, no errors and dll works fine, but still
> >duplicate
> >> >output.
> >> >This is in Windows 8.
> >> >I compiled the edited amalgation. I checked in Notepad that
> >sqlite3.c
> >> >had
> >> >indeed the needed changes
> >> >and it had, so no idea why I still get the duplicates. Must be
> >some
> >> >silly
> >> >mistake I am making, but no idea what.
> >> >
> >> >RBS
> >> >
> >> >
> >> >On Fri, Aug 25, 2017 at 8:28 PM, Keith Medcalf
> ><[hidden email]>
> >> >wrote:
> >> >
> >> >>
> >> >> Thanks Dan.  That works for me ...
> >> >>
> >> >> ---
> >> >> The fact that there's a Highway to Hell but only a Stairway to
> >> >Heaven says
> >> >> a lot about anticipated traffic volume.
> >> >>
> >> >>
> >> >> >-----Original Message-----
> >> >> >From: sqlite-users [mailto:sqlite-users-
> >> >> >[hidden email]] On Behalf Of Dan Kennedy
> >> >> >Sent: Friday, 25 August, 2017 03:45
> >> >> >To: [hidden email]
> >> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with
> >pragma_list,
> >> >> >function_list, module_list
> >> >> >
> >> >> >On 08/25/2017 06:41 AM, Keith Medcalf wrote:
> >> >> >> If you search sqlite3.c for the SQLITE3_INTROSPECTION_PRAGMAS
> >> >you
> >> >> >will see in pragma.c (or in sqlite3.c) the following code:
> >> >> >
> >> >> >Thanks for looking into this. Now fixed here:
> >> >> >
> >> >> >   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
> >> >> >
> >> >> >Dan.
> >> >> >
> >> >> >
> >> >> >_______________________________________________
> >> >> >sqlite-users mailing list
> >> >> >[hidden email]
> >> >> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >> >users
> >> >>
> >> >>
> >> >>
> >> >> _______________________________________________
> >> >> sqlite-users mailing list
> >> >> [hidden email]
> >> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >> >users
> >> >>
> >> >_______________________________________________
> >> >sqlite-users mailing list
> >> >[hidden email]
> >> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >users
> >>
> >>
> >>
> >> _______________________________________________
> >> sqlite-users mailing list
> >> [hidden email]
> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >users
> >>
> >_______________________________________________
> >sqlite-users mailing list
> >[hidden email]
> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Keith Medcalf

Interesting.  That would indicate that the code where you commented out the extra ResultRow OP is still being executed.  Which it cannot be if you re-compiled the code and generated a new executable/dll/so with those instructions commented out.

So I think somehow your compiler is not actually updating what you are running, or that you are not running what you think you are compiling ...

---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot about anticipated traffic volume.


>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>[hidden email]] On Behalf Of Bart Smissaert
>Sent: Friday, 25 August, 2017 15:25
>To: SQLite mailing list
>Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
>function_list, module_list
>
>Tried with the latest 3.20.1, but same result.
>My explain output is like this:
>
>addr opcode p1 p2 p3 p4 p5 comment
>0 Init 0 1 0  00 Start at 1
>1 String8 0 1 0 application_id 00 r[1]='application_id'
>2 ResultRow 1 1 0  00 output=r[1]
>3 ResultRow 1 1 0  00 output=r[1]
>4 String8 0 1 0 auto_vacuum 00 r[1]='auto_vacuum'
>5 ResultRow 1 1 0  00 output=r[1]
>6 ResultRow 1 1 0  00 output=r[1]
>7 String8 0 1 0 automatic_index 00 r[1]='automatic_index'
>8 ResultRow 1 1 0  00 output=r[1]
>9 ResultRow 1 1 0  00 output=r[1]
>
>I did comment out those same 4 lines.
>
>I suppose it has to be something in my application code.
>
>pragma database_list works fine though with this explain output:
>
>addr opcode p1 p2 p3 p4 p5 comment
>0 Init 0 1 0  00 Start at 1
>1 Integer 0 1 0  00 r[1]=0
>2 String8 0 2 0 main 00 r[2]='main'
>3 String8 0 3 0 C:\Test\Test.db3 00 r[3]='C:\Test\Test.db3'
>4 ResultRow 1 3 0  00 output=r[1..3]
>5 Halt 0 0 0  00
>
>No idea what is going on.
>
>
>RBS
>
>On Fri, Aug 25, 2017 at 10:08 PM, Keith Medcalf <[hidden email]>
>wrote:
>
>>
>> Doesn't help a lot.  Works for me though with the standard 3.20.0
>release
>> though ...
>>
>> SQLite version 3.20.0 2017-08-01 13:24:15
>> Enter ".help" for usage hints.
>> Connected to a transient in-memory database.
>> Use ".open FILENAME" to reopen on a persistent database.
>> sqlite> .eqp full
>> sqlite> select sqlite_source_id();
>> addr  opcode         p1    p2    p3    p4             p5  comment
>> ----  -------------  ----  ----  ----  -------------  --  ---------
>----
>> 0     Init           0     6     0                    00  Start at
>6
>> 1     Noop           0     0     0                    00  Begin
>WHERE-core
>> 2     Copy           2     1     0                    00  r[1]=r[2]
>> 3     ResultRow      1     1     0                    00
>output=r[1]
>> 4     Noop           0     0     0                    00  End
>WHERE-core
>> 5     Halt           0     0     0                    00
>> 6     Function0      0     0     2     sqlite_source_id(0)  00
>> r[2]=func(r[0])
>> 7     Goto           0     1     0                    00
>> 2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b
>> 514d7c2e0cad73b2a496c0bc4b680900a8
>> sqlite> pragma module_list;
>> addr  opcode         p1    p2    p3    p4             p5  comment
>> ----  -------------  ----  ----  ----  -------------  --  ---------
>----
>> 0     Init           0     1     0                    00  Start at
>1
>> 1     String8        0     1     0     sqlite_stmt    00
>> r[1]='sqlite_stmt'
>> 2     ResultRow      1     1     0                    00
>output=r[1]
>> 3     String8        0     1     0     json_tree      00
>r[1]='json_tree'
>> 4     ResultRow      1     1     0                    00
>output=r[1]
>> 5     String8        0     1     0     rtree_i32      00
>r[1]='rtree_i32'
>> 6     ResultRow      1     1     0                    00
>output=r[1]
>> 7     String8        0     1     0     fts3tokenize   00
>> r[1]='fts3tokenize'
>> 8     ResultRow      1     1     0                    00
>output=r[1]
>> 9     String8        0     1     0     fts3           00
>r[1]='fts3'
>> 10    ResultRow      1     1     0                    00
>output=r[1]
>> 11    String8        0     1     0     fts4aux        00
>r[1]='fts4aux'
>> 12    ResultRow      1     1     0                    00
>output=r[1]
>> 13    String8        0     1     0     interpolate    00
>> r[1]='interpolate'
>> 14    ResultRow      1     1     0                    00
>output=r[1]
>> 15    String8        0     1     0     vfsstat        00
>r[1]='vfsstat'
>> 16    ResultRow      1     1     0                    00
>output=r[1]
>> 17    String8        0     1     0     dbstat         00
>r[1]='dbstat'
>> 18    ResultRow      1     1     0                    00
>output=r[1]
>> 19    String8        0     1     0     rtree          00
>r[1]='rtree'
>> 20    ResultRow      1     1     0                    00
>output=r[1]
>> 21    String8        0     1     0     carray         00
>r[1]='carray'
>> 22    ResultRow      1     1     0                    00
>output=r[1]
>> 23    String8        0     1     0     fts5           00
>r[1]='fts5'
>> 24    ResultRow      1     1     0                    00
>output=r[1]
>> 25    String8        0     1     0     json_each      00
>r[1]='json_each'
>> 26    ResultRow      1     1     0                    00
>output=r[1]
>> 27    String8        0     1     0     approximate_match  00
>> r[1]='approximate_match'
>> 28    ResultRow      1     1     0                    00
>output=r[1]
>> 29    String8        0     1     0     fts4           00
>r[1]='fts4'
>> 30    ResultRow      1     1     0                    00
>output=r[1]
>> 31    String8        0     1     0     transitive_closure  00
>> r[1]='transitive_closure'
>> 32    ResultRow      1     1     0                    00
>output=r[1]
>> 33    String8        0     1     0     completion     00
>r[1]='completion'
>> 34    ResultRow      1     1     0                    00
>output=r[1]
>> 35    String8        0     1     0     fuzzer         00
>r[1]='fuzzer'
>> 36    ResultRow      1     1     0                    00
>output=r[1]
>> 37    String8        0     1     0     spellfix1      00
>r[1]='spellfix1'
>> 38    ResultRow      1     1     0                    00
>output=r[1]
>> 39    String8        0     1     0     wholenumber    00
>> r[1]='wholenumber'
>> 40    ResultRow      1     1     0                    00
>output=r[1]
>> 41    String8        0     1     0     fts5vocab      00
>r[1]='fts5vocab'
>> 42    ResultRow      1     1     0                    00
>output=r[1]
>> 43    String8        0     1     0     generate_series  00
>> r[1]='generate_series'
>> 44    ResultRow      1     1     0                    00
>output=r[1]
>> 45    String8        0     1     0     csv            00
>r[1]='csv'
>> 46    ResultRow      1     1     0                    00
>output=r[1]
>> 47    Halt           0     0     0                    00
>> sqlite_stmt
>> json_tree
>> rtree_i32
>> fts3tokenize
>> fts3
>> fts4aux
>> interpolate
>> vfsstat
>> dbstat
>> rtree
>> carray
>> fts5
>> json_each
>> approximate_match
>> fts4
>> transitive_closure
>> completion
>> fuzzer
>> spellfix1
>> wholenumber
>> fts5vocab
>> generate_series
>> csv
>> sqlite>
>>
>> sqlite3.c
>>
>> #ifdef SQLITE_INTROSPECTION_PRAGMAS
>>   case PragTyp_FUNCTION_LIST: {
>>     int i;
>>     HashElem *j;
>>     FuncDef *p;
>>     pParse->nMem = 2;
>>     for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
>>       for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
>>         sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
>> //        sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
>>       }
>>     }
>>     for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
>>       p = (FuncDef*)sqliteHashData(j);
>>       sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
>> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
>>     }
>>   }
>>   break;
>>
>> #ifndef SQLITE_OMIT_VIRTUALTABLE
>>   case PragTyp_MODULE_LIST: {
>>     HashElem *j;
>>     pParse->nMem = 1;
>>     for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
>>       Module *pMod = (Module*)sqliteHashData(j);
>>       sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
>> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
>>     }
>>   }
>>   break;
>> #endif /* SQLITE_OMIT_VIRTUALTABLE */
>>
>>   case PragTyp_PRAGMA_LIST: {
>>     int i;
>>     for(i=0; i<ArraySize(aPragmaName); i++){
>>       sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
>> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
>>     }
>>   }
>>   break;
>> #endif /* SQLITE_INTROSPECTION_PRAGMAS */
>>
>>
>> ---
>> The fact that there's a Highway to Hell but only a Stairway to
>Heaven says
>> a lot about anticipated traffic volume.
>>
>>
>> >-----Original Message-----
>> >From: sqlite-users [mailto:sqlite-users-
>> >[hidden email]] On Behalf Of Bart Smissaert
>> >Sent: Friday, 25 August, 2017 14:57
>> >To: SQLite mailing list
>> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
>> >function_list, module_list
>> >
>> >The standard 3.20.0, second down on this page:
>> >https://www.sqlite.org/download.html
>> >
>> >Noticed though there is a new version and will try that one.
>> >
>> >RBS
>> >
>> >On Fri, Aug 25, 2017 at 9:48 PM, Keith Medcalf
><[hidden email]>
>> >wrote:
>> >
>> >>
>> >> Which amalgamation?
>> >>
>> >>
>> >>
>> >> ---
>> >> The fact that there's a Highway to Hell but only a Stairway to
>> >Heaven says
>> >> a lot about anticipated traffic volume.
>> >>
>> >>
>> >> >-----Original Message-----
>> >> >From: sqlite-users [mailto:sqlite-users-
>> >> >[hidden email]] On Behalf Of Bart Smissaert
>> >> >Sent: Friday, 25 August, 2017 14:13
>> >> >To: SQLite mailing list
>> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with
>pragma_list,
>> >> >function_list, module_list
>> >> >
>> >> >I copied the exact code block as in
>> >> >http://www.sqlite.org/src/info/b79cc8dc88c8ae03
>> >> >compiled in MSVS, no errors and dll works fine, but still
>> >duplicate
>> >> >output.
>> >> >This is in Windows 8.
>> >> >I compiled the edited amalgation. I checked in Notepad that
>> >sqlite3.c
>> >> >had
>> >> >indeed the needed changes
>> >> >and it had, so no idea why I still get the duplicates. Must be
>> >some
>> >> >silly
>> >> >mistake I am making, but no idea what.
>> >> >
>> >> >RBS
>> >> >
>> >> >
>> >> >On Fri, Aug 25, 2017 at 8:28 PM, Keith Medcalf
>> ><[hidden email]>
>> >> >wrote:
>> >> >
>> >> >>
>> >> >> Thanks Dan.  That works for me ...
>> >> >>
>> >> >> ---
>> >> >> The fact that there's a Highway to Hell but only a Stairway
>to
>> >> >Heaven says
>> >> >> a lot about anticipated traffic volume.
>> >> >>
>> >> >>
>> >> >> >-----Original Message-----
>> >> >> >From: sqlite-users [mailto:sqlite-users-
>> >> >> >[hidden email]] On Behalf Of Dan Kennedy
>> >> >> >Sent: Friday, 25 August, 2017 03:45
>> >> >> >To: [hidden email]
>> >> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with
>> >pragma_list,
>> >> >> >function_list, module_list
>> >> >> >
>> >> >> >On 08/25/2017 06:41 AM, Keith Medcalf wrote:
>> >> >> >> If you search sqlite3.c for the
>SQLITE3_INTROSPECTION_PRAGMAS
>> >> >you
>> >> >> >will see in pragma.c (or in sqlite3.c) the following code:
>> >> >> >
>> >> >> >Thanks for looking into this. Now fixed here:
>> >> >> >
>> >> >> >   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
>> >> >> >
>> >> >> >Dan.
>> >> >> >
>> >> >> >
>> >> >> >_______________________________________________
>> >> >> >sqlite-users mailing list
>> >> >> >[hidden email]
>> >> >> >http://mailinglists.sqlite.org/cgi-
>bin/mailman/listinfo/sqlite-
>> >> >users
>> >> >>
>> >> >>
>> >> >>
>> >> >> _______________________________________________
>> >> >> sqlite-users mailing list
>> >> >> [hidden email]
>> >> >> http://mailinglists.sqlite.org/cgi-
>bin/mailman/listinfo/sqlite-
>> >> >users
>> >> >>
>> >> >_______________________________________________
>> >> >sqlite-users mailing list
>> >> >[hidden email]
>> >> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>> >users
>> >>
>> >>
>> >>
>> >> _______________________________________________
>> >> sqlite-users mailing list
>> >> [hidden email]
>> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>> >users
>> >>
>> >_______________________________________________
>> >sqlite-users mailing list
>> >[hidden email]
>> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>users
>>
>>
>>
>> _______________________________________________
>> sqlite-users mailing list
>> [hidden email]
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>users
>>
>_______________________________________________
>sqlite-users mailing list
>[hidden email]
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Bart Smissaert
> So I think somehow your compiler is not actually updating what you are
running, or that you are not running what you think you are compiling ...

Yes, that seems the case, but can't see it. Will just double check
everything.

RBS

On Fri, Aug 25, 2017 at 10:31 PM, Keith Medcalf <[hidden email]> wrote:

>
> Interesting.  That would indicate that the code where you commented out
> the extra ResultRow OP is still being executed.  Which it cannot be if you
> re-compiled the code and generated a new executable/dll/so with those
> instructions commented out.
>
> So I think somehow your compiler is not actually updating what you are
> running, or that you are not running what you think you are compiling ...
>
> ---
> The fact that there's a Highway to Hell but only a Stairway to Heaven says
> a lot about anticipated traffic volume.
>
>
> >-----Original Message-----
> >From: sqlite-users [mailto:sqlite-users-
> >[hidden email]] On Behalf Of Bart Smissaert
> >Sent: Friday, 25 August, 2017 15:25
> >To: SQLite mailing list
> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
> >function_list, module_list
> >
> >Tried with the latest 3.20.1, but same result.
> >My explain output is like this:
> >
> >addr opcode p1 p2 p3 p4 p5 comment
> >0 Init 0 1 0  00 Start at 1
> >1 String8 0 1 0 application_id 00 r[1]='application_id'
> >2 ResultRow 1 1 0  00 output=r[1]
> >3 ResultRow 1 1 0  00 output=r[1]
> >4 String8 0 1 0 auto_vacuum 00 r[1]='auto_vacuum'
> >5 ResultRow 1 1 0  00 output=r[1]
> >6 ResultRow 1 1 0  00 output=r[1]
> >7 String8 0 1 0 automatic_index 00 r[1]='automatic_index'
> >8 ResultRow 1 1 0  00 output=r[1]
> >9 ResultRow 1 1 0  00 output=r[1]
> >
> >I did comment out those same 4 lines.
> >
> >I suppose it has to be something in my application code.
> >
> >pragma database_list works fine though with this explain output:
> >
> >addr opcode p1 p2 p3 p4 p5 comment
> >0 Init 0 1 0  00 Start at 1
> >1 Integer 0 1 0  00 r[1]=0
> >2 String8 0 2 0 main 00 r[2]='main'
> >3 String8 0 3 0 C:\Test\Test.db3 00 r[3]='C:\Test\Test.db3'
> >4 ResultRow 1 3 0  00 output=r[1..3]
> >5 Halt 0 0 0  00
> >
> >No idea what is going on.
> >
> >
> >RBS
> >
> >On Fri, Aug 25, 2017 at 10:08 PM, Keith Medcalf <[hidden email]>
> >wrote:
> >
> >>
> >> Doesn't help a lot.  Works for me though with the standard 3.20.0
> >release
> >> though ...
> >>
> >> SQLite version 3.20.0 2017-08-01 13:24:15
> >> Enter ".help" for usage hints.
> >> Connected to a transient in-memory database.
> >> Use ".open FILENAME" to reopen on a persistent database.
> >> sqlite> .eqp full
> >> sqlite> select sqlite_source_id();
> >> addr  opcode         p1    p2    p3    p4             p5  comment
> >> ----  -------------  ----  ----  ----  -------------  --  ---------
> >----
> >> 0     Init           0     6     0                    00  Start at
> >6
> >> 1     Noop           0     0     0                    00  Begin
> >WHERE-core
> >> 2     Copy           2     1     0                    00  r[1]=r[2]
> >> 3     ResultRow      1     1     0                    00
> >output=r[1]
> >> 4     Noop           0     0     0                    00  End
> >WHERE-core
> >> 5     Halt           0     0     0                    00
> >> 6     Function0      0     0     2     sqlite_source_id(0)  00
> >> r[2]=func(r[0])
> >> 7     Goto           0     1     0                    00
> >> 2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b
> >> 514d7c2e0cad73b2a496c0bc4b680900a8
> >> sqlite> pragma module_list;
> >> addr  opcode         p1    p2    p3    p4             p5  comment
> >> ----  -------------  ----  ----  ----  -------------  --  ---------
> >----
> >> 0     Init           0     1     0                    00  Start at
> >1
> >> 1     String8        0     1     0     sqlite_stmt    00
> >> r[1]='sqlite_stmt'
> >> 2     ResultRow      1     1     0                    00
> >output=r[1]
> >> 3     String8        0     1     0     json_tree      00
> >r[1]='json_tree'
> >> 4     ResultRow      1     1     0                    00
> >output=r[1]
> >> 5     String8        0     1     0     rtree_i32      00
> >r[1]='rtree_i32'
> >> 6     ResultRow      1     1     0                    00
> >output=r[1]
> >> 7     String8        0     1     0     fts3tokenize   00
> >> r[1]='fts3tokenize'
> >> 8     ResultRow      1     1     0                    00
> >output=r[1]
> >> 9     String8        0     1     0     fts3           00
> >r[1]='fts3'
> >> 10    ResultRow      1     1     0                    00
> >output=r[1]
> >> 11    String8        0     1     0     fts4aux        00
> >r[1]='fts4aux'
> >> 12    ResultRow      1     1     0                    00
> >output=r[1]
> >> 13    String8        0     1     0     interpolate    00
> >> r[1]='interpolate'
> >> 14    ResultRow      1     1     0                    00
> >output=r[1]
> >> 15    String8        0     1     0     vfsstat        00
> >r[1]='vfsstat'
> >> 16    ResultRow      1     1     0                    00
> >output=r[1]
> >> 17    String8        0     1     0     dbstat         00
> >r[1]='dbstat'
> >> 18    ResultRow      1     1     0                    00
> >output=r[1]
> >> 19    String8        0     1     0     rtree          00
> >r[1]='rtree'
> >> 20    ResultRow      1     1     0                    00
> >output=r[1]
> >> 21    String8        0     1     0     carray         00
> >r[1]='carray'
> >> 22    ResultRow      1     1     0                    00
> >output=r[1]
> >> 23    String8        0     1     0     fts5           00
> >r[1]='fts5'
> >> 24    ResultRow      1     1     0                    00
> >output=r[1]
> >> 25    String8        0     1     0     json_each      00
> >r[1]='json_each'
> >> 26    ResultRow      1     1     0                    00
> >output=r[1]
> >> 27    String8        0     1     0     approximate_match  00
> >> r[1]='approximate_match'
> >> 28    ResultRow      1     1     0                    00
> >output=r[1]
> >> 29    String8        0     1     0     fts4           00
> >r[1]='fts4'
> >> 30    ResultRow      1     1     0                    00
> >output=r[1]
> >> 31    String8        0     1     0     transitive_closure  00
> >> r[1]='transitive_closure'
> >> 32    ResultRow      1     1     0                    00
> >output=r[1]
> >> 33    String8        0     1     0     completion     00
> >r[1]='completion'
> >> 34    ResultRow      1     1     0                    00
> >output=r[1]
> >> 35    String8        0     1     0     fuzzer         00
> >r[1]='fuzzer'
> >> 36    ResultRow      1     1     0                    00
> >output=r[1]
> >> 37    String8        0     1     0     spellfix1      00
> >r[1]='spellfix1'
> >> 38    ResultRow      1     1     0                    00
> >output=r[1]
> >> 39    String8        0     1     0     wholenumber    00
> >> r[1]='wholenumber'
> >> 40    ResultRow      1     1     0                    00
> >output=r[1]
> >> 41    String8        0     1     0     fts5vocab      00
> >r[1]='fts5vocab'
> >> 42    ResultRow      1     1     0                    00
> >output=r[1]
> >> 43    String8        0     1     0     generate_series  00
> >> r[1]='generate_series'
> >> 44    ResultRow      1     1     0                    00
> >output=r[1]
> >> 45    String8        0     1     0     csv            00
> >r[1]='csv'
> >> 46    ResultRow      1     1     0                    00
> >output=r[1]
> >> 47    Halt           0     0     0                    00
> >> sqlite_stmt
> >> json_tree
> >> rtree_i32
> >> fts3tokenize
> >> fts3
> >> fts4aux
> >> interpolate
> >> vfsstat
> >> dbstat
> >> rtree
> >> carray
> >> fts5
> >> json_each
> >> approximate_match
> >> fts4
> >> transitive_closure
> >> completion
> >> fuzzer
> >> spellfix1
> >> wholenumber
> >> fts5vocab
> >> generate_series
> >> csv
> >> sqlite>
> >>
> >> sqlite3.c
> >>
> >> #ifdef SQLITE_INTROSPECTION_PRAGMAS
> >>   case PragTyp_FUNCTION_LIST: {
> >>     int i;
> >>     HashElem *j;
> >>     FuncDef *p;
> >>     pParse->nMem = 2;
> >>     for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
> >>       for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
> >>         sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
> >> //        sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
> >>       }
> >>     }
> >>     for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
> >>       p = (FuncDef*)sqliteHashData(j);
> >>       sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
> >> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
> >>     }
> >>   }
> >>   break;
> >>
> >> #ifndef SQLITE_OMIT_VIRTUALTABLE
> >>   case PragTyp_MODULE_LIST: {
> >>     HashElem *j;
> >>     pParse->nMem = 1;
> >>     for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
> >>       Module *pMod = (Module*)sqliteHashData(j);
> >>       sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
> >> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
> >>     }
> >>   }
> >>   break;
> >> #endif /* SQLITE_OMIT_VIRTUALTABLE */
> >>
> >>   case PragTyp_PRAGMA_LIST: {
> >>     int i;
> >>     for(i=0; i<ArraySize(aPragmaName); i++){
> >>       sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
> >> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
> >>     }
> >>   }
> >>   break;
> >> #endif /* SQLITE_INTROSPECTION_PRAGMAS */
> >>
> >>
> >> ---
> >> The fact that there's a Highway to Hell but only a Stairway to
> >Heaven says
> >> a lot about anticipated traffic volume.
> >>
> >>
> >> >-----Original Message-----
> >> >From: sqlite-users [mailto:sqlite-users-
> >> >[hidden email]] On Behalf Of Bart Smissaert
> >> >Sent: Friday, 25 August, 2017 14:57
> >> >To: SQLite mailing list
> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
> >> >function_list, module_list
> >> >
> >> >The standard 3.20.0, second down on this page:
> >> >https://www.sqlite.org/download.html
> >> >
> >> >Noticed though there is a new version and will try that one.
> >> >
> >> >RBS
> >> >
> >> >On Fri, Aug 25, 2017 at 9:48 PM, Keith Medcalf
> ><[hidden email]>
> >> >wrote:
> >> >
> >> >>
> >> >> Which amalgamation?
> >> >>
> >> >>
> >> >>
> >> >> ---
> >> >> The fact that there's a Highway to Hell but only a Stairway to
> >> >Heaven says
> >> >> a lot about anticipated traffic volume.
> >> >>
> >> >>
> >> >> >-----Original Message-----
> >> >> >From: sqlite-users [mailto:sqlite-users-
> >> >> >[hidden email]] On Behalf Of Bart Smissaert
> >> >> >Sent: Friday, 25 August, 2017 14:13
> >> >> >To: SQLite mailing list
> >> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with
> >pragma_list,
> >> >> >function_list, module_list
> >> >> >
> >> >> >I copied the exact code block as in
> >> >> >http://www.sqlite.org/src/info/b79cc8dc88c8ae03
> >> >> >compiled in MSVS, no errors and dll works fine, but still
> >> >duplicate
> >> >> >output.
> >> >> >This is in Windows 8.
> >> >> >I compiled the edited amalgation. I checked in Notepad that
> >> >sqlite3.c
> >> >> >had
> >> >> >indeed the needed changes
> >> >> >and it had, so no idea why I still get the duplicates. Must be
> >> >some
> >> >> >silly
> >> >> >mistake I am making, but no idea what.
> >> >> >
> >> >> >RBS
> >> >> >
> >> >> >
> >> >> >On Fri, Aug 25, 2017 at 8:28 PM, Keith Medcalf
> >> ><[hidden email]>
> >> >> >wrote:
> >> >> >
> >> >> >>
> >> >> >> Thanks Dan.  That works for me ...
> >> >> >>
> >> >> >> ---
> >> >> >> The fact that there's a Highway to Hell but only a Stairway
> >to
> >> >> >Heaven says
> >> >> >> a lot about anticipated traffic volume.
> >> >> >>
> >> >> >>
> >> >> >> >-----Original Message-----
> >> >> >> >From: sqlite-users [mailto:sqlite-users-
> >> >> >> >[hidden email]] On Behalf Of Dan Kennedy
> >> >> >> >Sent: Friday, 25 August, 2017 03:45
> >> >> >> >To: [hidden email]
> >> >> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with
> >> >pragma_list,
> >> >> >> >function_list, module_list
> >> >> >> >
> >> >> >> >On 08/25/2017 06:41 AM, Keith Medcalf wrote:
> >> >> >> >> If you search sqlite3.c for the
> >SQLITE3_INTROSPECTION_PRAGMAS
> >> >> >you
> >> >> >> >will see in pragma.c (or in sqlite3.c) the following code:
> >> >> >> >
> >> >> >> >Thanks for looking into this. Now fixed here:
> >> >> >> >
> >> >> >> >   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
> >> >> >> >
> >> >> >> >Dan.
> >> >> >> >
> >> >> >> >
> >> >> >> >_______________________________________________
> >> >> >> >sqlite-users mailing list
> >> >> >> >[hidden email]
> >> >> >> >http://mailinglists.sqlite.org/cgi-
> >bin/mailman/listinfo/sqlite-
> >> >> >users
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >> _______________________________________________
> >> >> >> sqlite-users mailing list
> >> >> >> [hidden email]
> >> >> >> http://mailinglists.sqlite.org/cgi-
> >bin/mailman/listinfo/sqlite-
> >> >> >users
> >> >> >>
> >> >> >_______________________________________________
> >> >> >sqlite-users mailing list
> >> >> >[hidden email]
> >> >> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >> >users
> >> >>
> >> >>
> >> >>
> >> >> _______________________________________________
> >> >> sqlite-users mailing list
> >> >> [hidden email]
> >> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >> >users
> >> >>
> >> >_______________________________________________
> >> >sqlite-users mailing list
> >> >[hidden email]
> >> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >users
> >>
> >>
> >>
> >> _______________________________________________
> >> sqlite-users mailing list
> >> [hidden email]
> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >users
> >>
> >_______________________________________________
> >sqlite-users mailing list
> >[hidden email]
> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: FIX FOR:: Duplicate output with pragma_list, function_list, module_list

Bart Smissaert
In reply to this post by Keith Medcalf
Fixed this now. Problem was that in the same folder as the MSVS .vcxproj
file there was an old amalgation file.
Somehow this must have been used although in MSVS the right sqlite3.c file
(3.20.1) was loaded and this new file seemed to be part of the project.
Fixed it by putting that 3.20.1 sqlite3.c file in the same folder as the
.vcxproj file.
Confusing thing that MSVS!

RBS

On Fri, Aug 25, 2017 at 10:31 PM, Keith Medcalf <[hidden email]> wrote:

>
> Interesting.  That would indicate that the code where you commented out
> the extra ResultRow OP is still being executed.  Which it cannot be if you
> re-compiled the code and generated a new executable/dll/so with those
> instructions commented out.
>
> So I think somehow your compiler is not actually updating what you are
> running, or that you are not running what you think you are compiling ...
>
> ---
> The fact that there's a Highway to Hell but only a Stairway to Heaven says
> a lot about anticipated traffic volume.
>
>
> >-----Original Message-----
> >From: sqlite-users [mailto:sqlite-users-
> >[hidden email]] On Behalf Of Bart Smissaert
> >Sent: Friday, 25 August, 2017 15:25
> >To: SQLite mailing list
> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
> >function_list, module_list
> >
> >Tried with the latest 3.20.1, but same result.
> >My explain output is like this:
> >
> >addr opcode p1 p2 p3 p4 p5 comment
> >0 Init 0 1 0  00 Start at 1
> >1 String8 0 1 0 application_id 00 r[1]='application_id'
> >2 ResultRow 1 1 0  00 output=r[1]
> >3 ResultRow 1 1 0  00 output=r[1]
> >4 String8 0 1 0 auto_vacuum 00 r[1]='auto_vacuum'
> >5 ResultRow 1 1 0  00 output=r[1]
> >6 ResultRow 1 1 0  00 output=r[1]
> >7 String8 0 1 0 automatic_index 00 r[1]='automatic_index'
> >8 ResultRow 1 1 0  00 output=r[1]
> >9 ResultRow 1 1 0  00 output=r[1]
> >
> >I did comment out those same 4 lines.
> >
> >I suppose it has to be something in my application code.
> >
> >pragma database_list works fine though with this explain output:
> >
> >addr opcode p1 p2 p3 p4 p5 comment
> >0 Init 0 1 0  00 Start at 1
> >1 Integer 0 1 0  00 r[1]=0
> >2 String8 0 2 0 main 00 r[2]='main'
> >3 String8 0 3 0 C:\Test\Test.db3 00 r[3]='C:\Test\Test.db3'
> >4 ResultRow 1 3 0  00 output=r[1..3]
> >5 Halt 0 0 0  00
> >
> >No idea what is going on.
> >
> >
> >RBS
> >
> >On Fri, Aug 25, 2017 at 10:08 PM, Keith Medcalf <[hidden email]>
> >wrote:
> >
> >>
> >> Doesn't help a lot.  Works for me though with the standard 3.20.0
> >release
> >> though ...
> >>
> >> SQLite version 3.20.0 2017-08-01 13:24:15
> >> Enter ".help" for usage hints.
> >> Connected to a transient in-memory database.
> >> Use ".open FILENAME" to reopen on a persistent database.
> >> sqlite> .eqp full
> >> sqlite> select sqlite_source_id();
> >> addr  opcode         p1    p2    p3    p4             p5  comment
> >> ----  -------------  ----  ----  ----  -------------  --  ---------
> >----
> >> 0     Init           0     6     0                    00  Start at
> >6
> >> 1     Noop           0     0     0                    00  Begin
> >WHERE-core
> >> 2     Copy           2     1     0                    00  r[1]=r[2]
> >> 3     ResultRow      1     1     0                    00
> >output=r[1]
> >> 4     Noop           0     0     0                    00  End
> >WHERE-core
> >> 5     Halt           0     0     0                    00
> >> 6     Function0      0     0     2     sqlite_source_id(0)  00
> >> r[2]=func(r[0])
> >> 7     Goto           0     1     0                    00
> >> 2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b
> >> 514d7c2e0cad73b2a496c0bc4b680900a8
> >> sqlite> pragma module_list;
> >> addr  opcode         p1    p2    p3    p4             p5  comment
> >> ----  -------------  ----  ----  ----  -------------  --  ---------
> >----
> >> 0     Init           0     1     0                    00  Start at
> >1
> >> 1     String8        0     1     0     sqlite_stmt    00
> >> r[1]='sqlite_stmt'
> >> 2     ResultRow      1     1     0                    00
> >output=r[1]
> >> 3     String8        0     1     0     json_tree      00
> >r[1]='json_tree'
> >> 4     ResultRow      1     1     0                    00
> >output=r[1]
> >> 5     String8        0     1     0     rtree_i32      00
> >r[1]='rtree_i32'
> >> 6     ResultRow      1     1     0                    00
> >output=r[1]
> >> 7     String8        0     1     0     fts3tokenize   00
> >> r[1]='fts3tokenize'
> >> 8     ResultRow      1     1     0                    00
> >output=r[1]
> >> 9     String8        0     1     0     fts3           00
> >r[1]='fts3'
> >> 10    ResultRow      1     1     0                    00
> >output=r[1]
> >> 11    String8        0     1     0     fts4aux        00
> >r[1]='fts4aux'
> >> 12    ResultRow      1     1     0                    00
> >output=r[1]
> >> 13    String8        0     1     0     interpolate    00
> >> r[1]='interpolate'
> >> 14    ResultRow      1     1     0                    00
> >output=r[1]
> >> 15    String8        0     1     0     vfsstat        00
> >r[1]='vfsstat'
> >> 16    ResultRow      1     1     0                    00
> >output=r[1]
> >> 17    String8        0     1     0     dbstat         00
> >r[1]='dbstat'
> >> 18    ResultRow      1     1     0                    00
> >output=r[1]
> >> 19    String8        0     1     0     rtree          00
> >r[1]='rtree'
> >> 20    ResultRow      1     1     0                    00
> >output=r[1]
> >> 21    String8        0     1     0     carray         00
> >r[1]='carray'
> >> 22    ResultRow      1     1     0                    00
> >output=r[1]
> >> 23    String8        0     1     0     fts5           00
> >r[1]='fts5'
> >> 24    ResultRow      1     1     0                    00
> >output=r[1]
> >> 25    String8        0     1     0     json_each      00
> >r[1]='json_each'
> >> 26    ResultRow      1     1     0                    00
> >output=r[1]
> >> 27    String8        0     1     0     approximate_match  00
> >> r[1]='approximate_match'
> >> 28    ResultRow      1     1     0                    00
> >output=r[1]
> >> 29    String8        0     1     0     fts4           00
> >r[1]='fts4'
> >> 30    ResultRow      1     1     0                    00
> >output=r[1]
> >> 31    String8        0     1     0     transitive_closure  00
> >> r[1]='transitive_closure'
> >> 32    ResultRow      1     1     0                    00
> >output=r[1]
> >> 33    String8        0     1     0     completion     00
> >r[1]='completion'
> >> 34    ResultRow      1     1     0                    00
> >output=r[1]
> >> 35    String8        0     1     0     fuzzer         00
> >r[1]='fuzzer'
> >> 36    ResultRow      1     1     0                    00
> >output=r[1]
> >> 37    String8        0     1     0     spellfix1      00
> >r[1]='spellfix1'
> >> 38    ResultRow      1     1     0                    00
> >output=r[1]
> >> 39    String8        0     1     0     wholenumber    00
> >> r[1]='wholenumber'
> >> 40    ResultRow      1     1     0                    00
> >output=r[1]
> >> 41    String8        0     1     0     fts5vocab      00
> >r[1]='fts5vocab'
> >> 42    ResultRow      1     1     0                    00
> >output=r[1]
> >> 43    String8        0     1     0     generate_series  00
> >> r[1]='generate_series'
> >> 44    ResultRow      1     1     0                    00
> >output=r[1]
> >> 45    String8        0     1     0     csv            00
> >r[1]='csv'
> >> 46    ResultRow      1     1     0                    00
> >output=r[1]
> >> 47    Halt           0     0     0                    00
> >> sqlite_stmt
> >> json_tree
> >> rtree_i32
> >> fts3tokenize
> >> fts3
> >> fts4aux
> >> interpolate
> >> vfsstat
> >> dbstat
> >> rtree
> >> carray
> >> fts5
> >> json_each
> >> approximate_match
> >> fts4
> >> transitive_closure
> >> completion
> >> fuzzer
> >> spellfix1
> >> wholenumber
> >> fts5vocab
> >> generate_series
> >> csv
> >> sqlite>
> >>
> >> sqlite3.c
> >>
> >> #ifdef SQLITE_INTROSPECTION_PRAGMAS
> >>   case PragTyp_FUNCTION_LIST: {
> >>     int i;
> >>     HashElem *j;
> >>     FuncDef *p;
> >>     pParse->nMem = 2;
> >>     for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
> >>       for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
> >>         sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
> >> //        sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
> >>       }
> >>     }
> >>     for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
> >>       p = (FuncDef*)sqliteHashData(j);
> >>       sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
> >> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
> >>     }
> >>   }
> >>   break;
> >>
> >> #ifndef SQLITE_OMIT_VIRTUALTABLE
> >>   case PragTyp_MODULE_LIST: {
> >>     HashElem *j;
> >>     pParse->nMem = 1;
> >>     for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
> >>       Module *pMod = (Module*)sqliteHashData(j);
> >>       sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
> >> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
> >>     }
> >>   }
> >>   break;
> >> #endif /* SQLITE_OMIT_VIRTUALTABLE */
> >>
> >>   case PragTyp_PRAGMA_LIST: {
> >>     int i;
> >>     for(i=0; i<ArraySize(aPragmaName); i++){
> >>       sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
> >> //      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
> >>     }
> >>   }
> >>   break;
> >> #endif /* SQLITE_INTROSPECTION_PRAGMAS */
> >>
> >>
> >> ---
> >> The fact that there's a Highway to Hell but only a Stairway to
> >Heaven says
> >> a lot about anticipated traffic volume.
> >>
> >>
> >> >-----Original Message-----
> >> >From: sqlite-users [mailto:sqlite-users-
> >> >[hidden email]] On Behalf Of Bart Smissaert
> >> >Sent: Friday, 25 August, 2017 14:57
> >> >To: SQLite mailing list
> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with pragma_list,
> >> >function_list, module_list
> >> >
> >> >The standard 3.20.0, second down on this page:
> >> >https://www.sqlite.org/download.html
> >> >
> >> >Noticed though there is a new version and will try that one.
> >> >
> >> >RBS
> >> >
> >> >On Fri, Aug 25, 2017 at 9:48 PM, Keith Medcalf
> ><[hidden email]>
> >> >wrote:
> >> >
> >> >>
> >> >> Which amalgamation?
> >> >>
> >> >>
> >> >>
> >> >> ---
> >> >> The fact that there's a Highway to Hell but only a Stairway to
> >> >Heaven says
> >> >> a lot about anticipated traffic volume.
> >> >>
> >> >>
> >> >> >-----Original Message-----
> >> >> >From: sqlite-users [mailto:sqlite-users-
> >> >> >[hidden email]] On Behalf Of Bart Smissaert
> >> >> >Sent: Friday, 25 August, 2017 14:13
> >> >> >To: SQLite mailing list
> >> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with
> >pragma_list,
> >> >> >function_list, module_list
> >> >> >
> >> >> >I copied the exact code block as in
> >> >> >http://www.sqlite.org/src/info/b79cc8dc88c8ae03
> >> >> >compiled in MSVS, no errors and dll works fine, but still
> >> >duplicate
> >> >> >output.
> >> >> >This is in Windows 8.
> >> >> >I compiled the edited amalgation. I checked in Notepad that
> >> >sqlite3.c
> >> >> >had
> >> >> >indeed the needed changes
> >> >> >and it had, so no idea why I still get the duplicates. Must be
> >> >some
> >> >> >silly
> >> >> >mistake I am making, but no idea what.
> >> >> >
> >> >> >RBS
> >> >> >
> >> >> >
> >> >> >On Fri, Aug 25, 2017 at 8:28 PM, Keith Medcalf
> >> ><[hidden email]>
> >> >> >wrote:
> >> >> >
> >> >> >>
> >> >> >> Thanks Dan.  That works for me ...
> >> >> >>
> >> >> >> ---
> >> >> >> The fact that there's a Highway to Hell but only a Stairway
> >to
> >> >> >Heaven says
> >> >> >> a lot about anticipated traffic volume.
> >> >> >>
> >> >> >>
> >> >> >> >-----Original Message-----
> >> >> >> >From: sqlite-users [mailto:sqlite-users-
> >> >> >> >[hidden email]] On Behalf Of Dan Kennedy
> >> >> >> >Sent: Friday, 25 August, 2017 03:45
> >> >> >> >To: [hidden email]
> >> >> >> >Subject: Re: [sqlite] FIX FOR:: Duplicate output with
> >> >pragma_list,
> >> >> >> >function_list, module_list
> >> >> >> >
> >> >> >> >On 08/25/2017 06:41 AM, Keith Medcalf wrote:
> >> >> >> >> If you search sqlite3.c for the
> >SQLITE3_INTROSPECTION_PRAGMAS
> >> >> >you
> >> >> >> >will see in pragma.c (or in sqlite3.c) the following code:
> >> >> >> >
> >> >> >> >Thanks for looking into this. Now fixed here:
> >> >> >> >
> >> >> >> >   http://www.sqlite.org/src/info/b79cc8dc88c8ae03
> >> >> >> >
> >> >> >> >Dan.
> >> >> >> >
> >> >> >> >
> >> >> >> >_______________________________________________
> >> >> >> >sqlite-users mailing list
> >> >> >> >[hidden email]
> >> >> >> >http://mailinglists.sqlite.org/cgi-
> >bin/mailman/listinfo/sqlite-
> >> >> >users
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >> _______________________________________________
> >> >> >> sqlite-users mailing list
> >> >> >> [hidden email]
> >> >> >> http://mailinglists.sqlite.org/cgi-
> >bin/mailman/listinfo/sqlite-
> >> >> >users
> >> >> >>
> >> >> >_______________________________________________
> >> >> >sqlite-users mailing list
> >> >> >[hidden email]
> >> >> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >> >users
> >> >>
> >> >>
> >> >>
> >> >> _______________________________________________
> >> >> sqlite-users mailing list
> >> >> [hidden email]
> >> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >> >users
> >> >>
> >> >_______________________________________________
> >> >sqlite-users mailing list
> >> >[hidden email]
> >> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >users
> >>
> >>
> >>
> >> _______________________________________________
> >> sqlite-users mailing list
> >> [hidden email]
> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
> >users
> >>
> >_______________________________________________
> >sqlite-users mailing list
> >[hidden email]
> >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users