Yes, it looks indeed explain doesn't help me out there, thanks.
Best probably to compare to the pragma list and check the SQL length.

RBS

On Wed, Aug 1, 2018 at 4:06 PM, David Raymond <david.raym...@tomtom.com>
wrote:

> Looking like the generalized answer is no, as you can still get that with
> some valid pragma statements, especially ones that don't return a value.
>
> D:\>sqlite3
> SQLite version 3.24.0 2018-06-04 19:24:41
> Enter ".help" for usage hints.
> Connected to a transient in-memory database.
> Use ".open FILENAME" to reopen on a persistent database.
>
> sqlite> explain pragma index_list;
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     Halt           0     0     0                    00
>
> sqlite> explain pragma index_list();--with parenthesis but no table name
> Error: near ")": syntax error
>
> sqlite> explain pragma index_list(missingTable);
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     Halt           0     0     0                    00
>
> sqlite> create table noIndexes (a int);
>
> sqlite> explain pragma index_list(noIndexes);
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     2     0                    00  Start at 2
> 1     Halt           0     0     0                    00
> 2     Transaction    0     0     1     0              01  usesStmtJournal=0
> 3     Goto           0     1     0                    00
>
> sqlite> create table withIndexes (a text primary key, b unique);
>
> sqlite> explain pragma index_list(withIndexes);
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     14    0                    00  Start at 14
> 1     Integer        0     1     0                    00  r[1]=0
> 2     String8        0     2     0     sqlite_autoindex_withIndexes_2  00
> r[2]='sqlite_autoindex_withIndexes_2'
> 3     Integer        1     3     0                    00  r[3]=1
> 4     String8        0     4     0     u              00  r[4]='u'
> 5     Integer        0     5     0                    00  r[5]=0
> 6     ResultRow      1     5     0                    00  output=r[1..5]
> 7     Integer        1     1     0                    00  r[1]=1
> 8     String8        0     2     0     sqlite_autoindex_withIndexes_1  00
> r[2]='sqlite_autoindex_withIndexes_1'
> 9     Integer        1     3     0                    00  r[3]=1
> 10    String8        0     4     0     pk             00  r[4]='pk'
> 11    Integer        0     5     0                    00  r[5]=0
> 12    ResultRow      1     5     0                    00  output=r[1..5]
> 13    Halt           0     0     0                    00
> 14    Transaction    0     0     2     0              01  usesStmtJournal=0
> 15    Goto           0     1     0                    00
>
> sqlite> explain pragma thisIsABadPragmaName;
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     Halt           0     0     0                    00
>
> sqlite> explain pragma foreign_keys;
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     Int64          0     1     0     1              00  r[1]=1
> 2     ResultRow      1     1     0                    00  output=r[1]
> 3     Halt           0     0     0                    00
>
> sqlite> explain pragma cache_spill;
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     Int64          0     1     0     15857          00  r[1]=15857
> 2     ResultRow      1     1     0                    00  output=r[1]
> 3     Halt           0     0     0                    00
>
> sqlite> explain pragma case_sensitive_like;
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     Halt           0     0     0                    00
>
> sqlite> explain pragma case_sesitive_like = 1;--typo
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     Halt           0     0     0                    00
>
> sqlite> explain pragma case_sensitive_like = 1;
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     Halt           0     0     0                    00
>
> sqlite> pragma case_sensitive_like = 1;
>
> sqlite> select 'a' like 'A';
> 'a' like 'A'
> 0
>
> sqlite> explain pragma case_sensitive_like = 0;
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Init           0     1     0                    00  Start at 1
> 1     Halt           0     0     0                    00
>
> sqlite> pragma case_sensitive_like = 0;
>
> sqlite> select 'a' like 'A';
> 'a' like 'A'
> 1
>
> sqlite>
>
>
>
> -----Original Message-----
> From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org]
> On Behalf Of Bart Smissaert
> Sent: Wednesday, August 01, 2018 10:50 AM
> To: SQLite mailing list
> Subject: Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied
> table name valid SQL?
>
> I think you might be right there, but for my practical purpose I need the
> result to be invalid.
> I just wonder if a Halt at row 2 and no further rows produced is good way
> to determine this.
>
> RBS
>
> On Wed, Aug 1, 2018 at 3:39 PM, Hick Gunter <h...@scigames.at> wrote:
>
> > Judging from the following output, I would say it is data producing, but
> > returns no rows for no table or a table that has no indexes. Just
> because a
> > given select statement returns no matching rows does not make it invalid
> >
> > asql> create temp table test (i integer, t text);
> > asql> create index test_i on test(i);
> > asql> pragma index_list(test);
> > seq   name           uniq
> > ----  -------------  ----
> > 0     test_i         0
> > asql> explain pragma index_list(test);
> > addr  opcode         p1    p2    p3    p4             p5  comment
> > ----  -------------  ----  ----  ----  -------------  --  -------------
> > 0     Integer        0     1     0                    00  NULL
> > 1     String8        0     2     0     test_i         00  NULL
> > 2     Integer        0     3     0                    00  NULL
> > 3     ResultRow      1     3     0                    00  NULL
> > 4     Halt           0     0     0                    00  NULL
> >
> > -----Ursprüngliche Nachricht-----
> > Von: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org]
> > Im Auftrag von David Raymond
> > Gesendet: Mittwoch, 01. August 2018 16:31
> > An: SQLite mailing list <sqlite-users@mailinglists.sqlite.org>
> > Betreff: [EXTERNAL] Re: [sqlite] Is pragma index_list without supplied
> > table name valid SQL?
> >
> > Don't forget this point about pragmas:
> >
> > https://www.sqlite.org/pragma.html
> > "No error messages are generated if an unknown pragma is issued. Unknown
> > pragmas are simply ignored. This means if there is a typo in a pragma
> > statement the library does not inform the user of the fact."
> >
> > That way if there's a typo, or if you try a new pragma in an old version
> > then it won't complain, it just won't do anything.
> >
> > -----Original Message-----
> > From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org]
> > On Behalf Of Bart Smissaert
> > Sent: Wednesday, August 01, 2018 10:13 AM
> > To: General Discussion of SQLite Database
> > Subject: [sqlite] Is pragma index_list without supplied table name valid
> > SQL?
> >
> > Using SQLite 3.22.0
> >
> > In my app I have code to determine if a given SQL string is
> > data-producing, non-data producing or invalid. It uses these 3 SQLite
> > functions:
> >
> > sqlite3_prepare_v3
> > sqlite3_stmt_readonly
> > sqlite3_column_count
> >
> > Have been using this code for a few years and sofar never failed, but now
> > come across:
> > pragma index_list
> > so, without a supplied table name.
> > This gives me data-producing and I think it should give me invalid.
> >
> > Firstly is this SQL indeed invalid?
> >
> > Secondly, if it is I need to add some code to pick this up and was
> > thinking about using explain for that. Explain pragma index_list gives
> me:
> >
> > addr opcode p1 p2 p3 p4 p5 comment
> > ---------------------------------------------------
> > 0 Init 0 1 0  00 Start at 1
> > 1 Halt 0 0 0  00
> >
> > And that to me looks it is indeed an invalid SQL as it gives a Halt
> > already in the second row and produces no further rows.
> >
> > Am I right here and would this be a good way to pick up invalid SQL?
> >
> >
> > RBS
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@mailinglists.sqlite.org
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@mailinglists.sqlite.org
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> >
> >
> > ___________________________________________
> >  Gunter Hick | Software Engineer | Scientific Games International GmbH |
> > Klitschgasse 2-4, A-1130 Vienna | FN 157284 a, HG Wien, DVR: 0430013 |
> (O)
> > +43 1 80100 - 0
> >
> > May be privileged. May be confidential. Please delete if not the
> addressee.
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@mailinglists.sqlite.org
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> >
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to