SQLite API deficiency

php.internals

Stanislav Malyshev

22 years ago
I have discovered that SQLite function sqlite_query runs sqlite_exec function if it's return value is used and sqlite_compile/sqlite_step combo if return value is used. I think this is a problem - if I want to run some pack of queries (like, create whole DB schema in one call), I can do it with sqlite_query - but only if I don't check the return value - and thus don't know if it succeeded or not! If I check the return value, it runs sqlite_compile/sqlite_step, which can not run multiple SQL statements. I think this should be fixed. In order not to break BC, I propose to add new function to SQLite API - sqlite_exec, which - surprise! - would always call sqlite_exec and would return only true/false. Though, the even better solution would be to kill that return_value_used check altogether and use two separate functions always, depending on the task. Any thoughts about this?
-- Stanislav Malyshev, Zend Products Engineer stas@zend.com http://www.zend.com/ +972-3-6139665 ext.115

Wez Furlong

22 years ago
I've been bitten by this too, but didn't get time to delve into it. Can the compile/step definitely not handle multiple queries? That's a shame :/ I'm currently in DB API mode (working on PDO), so I'll refresh my memory and do some sqlite stuff over the next few days; if there is no way to get the compile/step executing multiple queries, then we will need a new function as you suggest. --Wez.

Stanislav Malyshev

22 years ago
WF>>Can the compile/step definitely not handle multiple queries? WF>>That's a shame :/ Manual says: The sqlite_compile "compiles" a single SQL statement (specified by the second parameter) and generates a virtual machine that is able to execute that statement. /.../ If the 2nd parameter actually contains two or more statements of SQL, only the first statement is compiled. (This is different from the behavior of sqlite_exec which executes all SQL statements in its input string.) WF>>I'm currently in DB API mode (working on PDO), so I'll refresh my memory WF>>and do some sqlite stuff over the next few days; if there is no way to WF>>get the compile/step executing multiple queries, then we will need a new WF>>function as you suggest. Well, then I guess I'll add it if I don't hear anyone protesting here.
-- Stanislav Malyshev, Zend Products Engineer stas@zend.com http://www.zend.com/ +972-3-6139665 ext.115

Ilia A.

22 years ago
On May 13, 2004 09:25 am, Stanislav Malyshev wrote:
> I have discovered that SQLite function sqlite_query runs sqlite_exec > function if it's return value is used and sqlite_compile/sqlite_step combo > if return value is used. I think this is a problem - if I want to run some > pack of queries (like, create whole DB schema in one call), I can do it > with sqlite_query - but only if I don't check the return value - and thus > don't know if it succeeded or not! If I check the return value, it runs > sqlite_compile/sqlite_step, which can not run multiple SQL statements.
You could always check the status of the query by running the sqlite_last_error().
> I think this should be fixed. In order not to break BC, I propose to add > new function to SQLite API - sqlite_exec, which - surprise! - would always > call sqlite_exec and would return only true/false.
Good idea.
> Though, the even better > solution would be to kill that return_value_used check altogether and use > two separate functions always, depending on the task.
I'd prefer to have sqlite_exec() like you propose and leave sqlite_query() as is. Ilia