Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-02 Thread Bart Smissaert
I didn't say I knew how you to do it in SQLitespeed, I said you your
use-case was very likely the same as mine.
I did notice the new keyword API and will move to 3.24 so I can use that.
Will look further into using explain to solve this problem, but guess the
output of explain may change in future versions,
so maybe can't rely on that.

RBS


On Wed, Aug 1, 2018 at 8:27 PM, R Smith  wrote:

> On 2018/08/01 5:56 PM, Bart Smissaert wrote:
>
>> May I ask about your use-case and what specifically is needed?
>>>
>> Probably exactly the same as you are using in your SQLitespeed app.
>> There is a SQL text box and the user can type anything in there he/she
>> wants.
>> App then needs to determine how to handle that string:
>> Produce data to show, run a non-data producing SQL, or reject it because
>> it
>> is invalid.
>>
>
> Ah, well, since you already know SQLitespeed does it, I'll confess how
> it's done. Firstly the API is really helpful in both determining if a
> Keyword is valid, and in counting the valid Keywords - making parsing easy.
> You can see here: https://sqlite.org/c3ref/keyword_check.html
>
> Secondly, I confess, we actually maintain a list of pragmas inside the
> code to verify against, and we update this list on every major update.
>
> To confess more - We actually keep an entire list of all sqlite keywords
> and for all the major SQL phrases/pragmas/etc. direct help links to the
> sqlite online documentation and of course the code hinting and highlighting
> needs it. (It's a little harder to maintain than a simple "check_keyword()"
> api, but so much more friendly and the tool isn't as sensitive to
> code-bloat as the sqlite engine).
>
> Last confession, every table-data-producing pragma has a
> table-valued-function alternative in the form "pragma_xxx" where a pragma
> that can be called like this:
> PRAGMA table_info(MyTable);
>
> can also be called like this via said t.v.f:
>
> SELECT * FROM pragma_table_info('MyTable');
>
> And THAT will error out if it doesn't exist, or is misused, right upon
> prepare - no guessing.
>
> You'll have to still keep a list to know which pragmas are data-producing
> and which not, some can be used both ways, so a 2-list approach works
> better. Of course, once you maintain a list of valid Pragmas, the quest for
> a way to know which are valid, becomes somewhat moot.
>
>
> PS: SQLitespeed hasn't seen an update for a while, but the final
> adjustments and testing is ongoing now for the newest release due later
> this Month. The SQLitespeed community has been alpha testing and pencils
> down for beta starting in about a week. If anyone not on the list would
> like to join testing, please mail me off-list, otherwise we'll share
> release details later in August.
>
> Most notable new addition: Schema-testing to warn about misspelled type
> names, unintentional errors, using Integer FK on a Text parent column, and
> all kinds of similar mishaps we know of thanks to people posting to this
> list - so thank you all for that.
>
>
>
>
> ___
> 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


Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-01 Thread R Smith

On 2018/08/01 5:56 PM, Bart Smissaert wrote:

May I ask about your use-case and what specifically is needed?

Probably exactly the same as you are using in your SQLitespeed app.
There is a SQL text box and the user can type anything in there he/she
wants.
App then needs to determine how to handle that string:
Produce data to show, run a non-data producing SQL, or reject it because it
is invalid.


Ah, well, since you already know SQLitespeed does it, I'll confess how 
it's done. Firstly the API is really helpful in both determining if a 
Keyword is valid, and in counting the valid Keywords - making parsing 
easy. You can see here: https://sqlite.org/c3ref/keyword_check.html


Secondly, I confess, we actually maintain a list of pragmas inside the 
code to verify against, and we update this list on every major update.


To confess more - We actually keep an entire list of all sqlite keywords 
and for all the major SQL phrases/pragmas/etc. direct help links to the 
sqlite online documentation and of course the code hinting and 
highlighting needs it. (It's a little harder to maintain than a simple 
"check_keyword()" api, but so much more friendly and the tool isn't as 
sensitive to code-bloat as the sqlite engine).


Last confession, every table-data-producing pragma has a 
table-valued-function alternative in the form "pragma_xxx" where a 
pragma that can be called like this:

PRAGMA table_info(MyTable);

can also be called like this via said t.v.f:

SELECT * FROM pragma_table_info('MyTable');

And THAT will error out if it doesn't exist, or is misused, right upon 
prepare - no guessing.


You'll have to still keep a list to know which pragmas are 
data-producing and which not, some can be used both ways, so a 2-list 
approach works better. Of course, once you maintain a list of valid 
Pragmas, the quest for a way to know which are valid, becomes somewhat moot.



PS: SQLitespeed hasn't seen an update for a while, but the final 
adjustments and testing is ongoing now for the newest release due later 
this Month. The SQLitespeed community has been alpha testing and pencils 
down for beta starting in about a week. If anyone not on the list would 
like to join testing, please mail me off-list, otherwise we'll share 
release details later in August.


Most notable new addition: Schema-testing to warn about misspelled type 
names, unintentional errors, using Integer FK on a Text parent column, 
and all kinds of similar mishaps we know of thanks to people posting to 
this list - so thank you all for that.




___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-01 Thread Bart Smissaert
Yes, good idea.
I would be interested how other users handle this problem, that is
determining if a statement is (potentially) data producing, non-data
producing
or just invalid.

RBS



On Wed, Aug 1, 2018 at 5:23 PM, David Raymond 
wrote:

> Use the CLI code as an example and see how they do it?
>
>
>
> -Original Message-
> From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org]
> On Behalf Of Bart Smissaert
> Sent: Wednesday, August 01, 2018 11:56 AM
> To: SQLite mailing list
> Subject: Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied
> table name valid SQL?
>
> > May I ask about your use-case and what specifically is needed?
>
> Probably exactly the same as you are using in your SQLitespeed app.
> There is a SQL text box and the user can type anything in there he/she
> wants.
> App then needs to determine how to handle that string:
> Produce data to show, run a non-data producing SQL, or reject it because it
> is invalid.
>
> > The "let's feed it to the engine and see if it cries" method of error
> detection is dangerous to my mind
>
> Not sure what you mean with that.
> The user decides what he wants to do, app needs to determine how it should
> be handled.
>
> RBS
>
>
>
>
> On Wed, Aug 1, 2018 at 4:39 PM, R Smith  wrote:
>
> > On 2018/08/01 4:50 PM, Bart Smissaert wrote:
> >
> >> 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.
> >>
> >
> > Such a hard question to answer. It's like asking if a Robo-suitcase is a
> > good idea for your fishing tackle... It /might/ be, but since none of us
> > use it that way, it's hard to answer definitively.
> >
> > That said, David Raymond already did a good job of checking some of the
> > pragmas for you and at least proved that false positives exist for the
> > simple rule you expressed.
> >
> > May I ask about your use-case and what specifically is needed? Perhaps a
> > simpler way exists to get to it. The "let's feed it to the engine and see
> > if it cries" method of error detection is dangerous to my mind,
> especially
> > for pragmas that alter the DB, but it might be perfectly o.k. in your
> > use-case.
> >
> >
> > Cheers,
> > Ryan
> >
> >
> > ___
> > 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


Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-01 Thread David Raymond
Use the CLI code as an example and see how they do it?



-Original Message-
From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] On 
Behalf Of Bart Smissaert
Sent: Wednesday, August 01, 2018 11:56 AM
To: SQLite mailing list
Subject: Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied 
table name valid SQL?

> May I ask about your use-case and what specifically is needed?

Probably exactly the same as you are using in your SQLitespeed app.
There is a SQL text box and the user can type anything in there he/she
wants.
App then needs to determine how to handle that string:
Produce data to show, run a non-data producing SQL, or reject it because it
is invalid.

> The "let's feed it to the engine and see if it cries" method of error
detection is dangerous to my mind

Not sure what you mean with that.
The user decides what he wants to do, app needs to determine how it should
be handled.

RBS




On Wed, Aug 1, 2018 at 4:39 PM, R Smith  wrote:

> On 2018/08/01 4:50 PM, Bart Smissaert wrote:
>
>> 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.
>>
>
> Such a hard question to answer. It's like asking if a Robo-suitcase is a
> good idea for your fishing tackle... It /might/ be, but since none of us
> use it that way, it's hard to answer definitively.
>
> That said, David Raymond already did a good job of checking some of the
> pragmas for you and at least proved that false positives exist for the
> simple rule you expressed.
>
> May I ask about your use-case and what specifically is needed? Perhaps a
> simpler way exists to get to it. The "let's feed it to the engine and see
> if it cries" method of error detection is dangerous to my mind, especially
> for pragmas that alter the DB, but it might be perfectly o.k. in your
> use-case.
>
>
> Cheers,
> Ryan
>
>
> ___
> 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


Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-01 Thread Bart Smissaert
> May I ask about your use-case and what specifically is needed?

Probably exactly the same as you are using in your SQLitespeed app.
There is a SQL text box and the user can type anything in there he/she
wants.
App then needs to determine how to handle that string:
Produce data to show, run a non-data producing SQL, or reject it because it
is invalid.

> The "let's feed it to the engine and see if it cries" method of error
detection is dangerous to my mind

Not sure what you mean with that.
The user decides what he wants to do, app needs to determine how it should
be handled.

RBS




On Wed, Aug 1, 2018 at 4:39 PM, R Smith  wrote:

> On 2018/08/01 4:50 PM, Bart Smissaert wrote:
>
>> 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.
>>
>
> Such a hard question to answer. It's like asking if a Robo-suitcase is a
> good idea for your fishing tackle... It /might/ be, but since none of us
> use it that way, it's hard to answer definitively.
>
> That said, David Raymond already did a good job of checking some of the
> pragmas for you and at least proved that false positives exist for the
> simple rule you expressed.
>
> May I ask about your use-case and what specifically is needed? Perhaps a
> simpler way exists to get to it. The "let's feed it to the engine and see
> if it cries" method of error detection is dangerous to my mind, especially
> for pragmas that alter the DB, but it might be perfectly o.k. in your
> use-case.
>
>
> Cheers,
> Ryan
>
>
> ___
> 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


Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-01 Thread R Smith

On 2018/08/01 4:50 PM, Bart Smissaert wrote:

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.


Such a hard question to answer. It's like asking if a Robo-suitcase is a 
good idea for your fishing tackle... It /might/ be, but since none of us 
use it that way, it's hard to answer definitively.


That said, David Raymond already did a good job of checking some of the 
pragmas for you and at least proved that false positives exist for the 
simple rule you expressed.


May I ask about your use-case and what specifically is needed? Perhaps a 
simpler way exists to get to it. The "let's feed it to the engine and 
see if it cries" method of error detection is dangerous to my mind, 
especially for pragmas that alter the DB, but it might be perfectly o.k. 
in your use-case.



Cheers,
Ryan

___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-01 Thread Bart Smissaert
 0 1 000  Start at 1
> 1 Halt   0 0 000
>
> sqlite> explain pragma case_sesitive_like = 1;--typo
> addr  opcode p1p2p3p4 p5  comment
>   -        -  --  -
> 0 Init   0 1 000  Start at 1
> 1 Halt   0 0 000
>
> sqlite> explain pragma case_sensitive_like = 1;
> addr  opcode p1p2p3p4 p5  comment
>   -        -  --  -
> 0 Init   0 1 000  Start at 1
> 1 Halt   0 0 000
>
> sqlite> pragma case_sensitive_like = 1;
>
> sqlite> select 'a' like 'A';
> 'a' like 'A'
> 0
>
> sqlite> explain pragma case_sensitive_like = 0;
> addr  opcode p1p2p3p4 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  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 p1p2p3p4 p5  comment
> >   -        -  --  -------------
> > 0     Integer    0 1     0        00  NULL
> > 1 String80 2 0 test_i 00  NULL
> > 2 Integer0 3 000  NULL
> > 3 ResultRow  1 3 000  NULL
> > 4 Halt   0 0 000  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 
> > 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 m

Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-01 Thread David Raymond
---  -  --  -
0 Init   0 1 000  Start at 1
1 Halt   0 0 000

sqlite> pragma case_sensitive_like = 1;

sqlite> select 'a' like 'A';
'a' like 'A'
0

sqlite> explain pragma case_sensitive_like = 0;
addr  opcode p1p2p3p4 p5  comment
  -        -  --  -
0 Init   0 1 000  Start at 1
1 Halt   0 0 000

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  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 p1p2p3p4 p5  comment
>   -        -  --  -
> 0 Integer0 1 000  NULL
> 1 String80 2 0 test_i 00  NULL
> 2 Integer0 3 000  NULL
> 3 ResultRow  1 3 000  NULL
> 4 Halt   0 0 000  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 
> 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 I

Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-01 Thread Bart Smissaert
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  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 p1p2p3p4 p5  comment
>   -        -  --  -
> 0 Integer0 1 000  NULL
> 1 String80 2 0 test_i 00  NULL
> 2 Integer0 3 000  NULL
> 3 ResultRow  1 3 000  NULL
> 4 Halt   0 0 000  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 
> 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


Re: [sqlite] [EXTERNAL] Re: Is pragma index_list without supplied table name valid SQL?

2018-08-01 Thread Hick Gunter
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 p1p2p3p4 p5  comment
  -        -  --  -
0 Integer0 1 000  NULL
1 String80 2 0 test_i 00  NULL
2 Integer0 3 000  NULL
3 ResultRow  1 3 000  NULL
4 Halt   0 0 000  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 
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