#29476 [Com]: sqlite_fetch_column_types locks the database forever

From: Date: Fri, 18 Nov 2005 15:07:24 +0000
Subject: #29476 [Com]: sqlite_fetch_column_types locks the database forever
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-88477@lists.php.net to get a copy of this message
 ID:               29476
 Comment by:       jwellis at carlalbert dot edu
 Reported By:      hugo_pl at users dot sourceforge dot net
 Status:           No Feedback
 Bug Type:         SQLite related
 Operating System: GNU/Linux, WindowsXP
 PHP Version:      5.0.0
 New Comment:

This is still a problem in PHP 5.1.0RC5-dev.

here is my reproduction code:

----------------------------
$database_path = "sqlite_db1";
$db = new SQLiteDatabase($database_path);
//  sqlite_db1 has a table called t1 with the colums id (int) and stuff
(text)  //

$db->query("INSERT INTO t1 (stuff) VALUES ('something');", SQLITE_NUM,
$db_error);
print $db->changes() ." rows affected<br>\n";

//-----//  This is the part that breaks it  //-----//
$table_cols = $db->fetchColumnTypes("t1", SQLITE_ASSOC); 
foreach($table_cols as $col => $type) {
	print"\t$col: $type<br>\n";
}
//-------------------------------------------------//

$db->query("INSERT INTO t1 (stuff) VALUES ('something');", SQLITE_NUM,
$db_error);
print $db->changes() ." rows affected<br>\n";


Previous Comments:
------------------------------------------------------------------------

[2005-09-30 17:51:07] madcoder at debian dot org

bug is still present in PHP 5.0.5/Debian

------------------------------------------------------------------------

[2005-03-14 01:00:22] php-bugs at lists dot php dot net

No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".

------------------------------------------------------------------------

[2005-03-06 22:09:42] sniper@php.net

Please try using this CVS snapshot:

  http://snaps.php.net/php5-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5-win32-latest.zip



------------------------------------------------------------------------

[2004-08-25 06:56:48] hugo_pl at users dot sourceforge dot net

Hi 
 
I think that this is a PHP bug, I made a better exemple to 
show this bug: 
 
<pre> 
<?php 
 
try { 
	$db = new SQLiteDatabase('./test.db'); 
	$db->busyTimeout(1000); 
	 
	// table exists? 
	$exists = $db->singleQuery('SELECT count(*) FROM 
sqlite_master WHERE tbl_name=\'bugtest\''); 
	if (!$exists) 
		$db->query('CREATE TABLE bugtest (a, b, c, 
d);'); 
	 
	// Without this line all runs Ok. 
	$db->fetchColumnTypes('bugtest'); 
 
	$db->query('INSERT INTO bugtest VALUES (1, 2, 3, 
4)'); 
	 
	 
	echo 'Res: <br>'; 
	print_r( $db->arrayQuery('SELECT * FROM bugtest', 
SQLITE_ASSOC) ); 
} 
catch (Exception $e) 
{ 
	echo 'Exception: ', $e->getMessage(); 
} 
 
 
?> 
 
The first time you run this script all appear to be Ok... 
the insert query is executed, etc... but the second time 
is displayed a message:  
 
Warning:  SQLiteDatabase::query() [function.query]: 
database is locked in /home/hugo/public_html/phpbug.php on 
line 16 
 
Nothing is wrong with the script, if this message appear 
something is wrong with PHP.... on windows the same bug 
occur, then it is not a problem from SQLite or Apache 
compiled by me under linux.

------------------------------------------------------------------------

[2004-08-01 00:50:38] hugo_pl at users dot sourceforge dot net

Description:
------------
When I call the function:
sqlite_fetch_column_types(...);

or the method:

fetchColumnTypes(...);

of the SQLiteDatabase Object, the entire database is locked forever...
and I cant modify the database until Apache is restarted.

I tested this with Apache2 SAPI module, and SQLite version 2.8.14 on
win32 and 2.8.13 and 2.8.14 on Linux.

In all plataforms, the database is unlocked only when I restart Apache,
if I never call sqlite_fetch_column_types or the method
fetchColumnTypes, all runs Ok.

P.S.: English is not my natural language.

Reproduce code:
---------------
<?php
// Open a database file...
$db = sqlite_open('test.db');
sqlite_busy_timeout($db, 1000);

//! Uncomment this line to see the bug!!
//sqlite_fetch_column_types($db, 'papers');

sqlite_query($db, 'select * from papers limit 10');

// Any Update query and kabbom... =/
sqlite_query($db, 'update papers set papel="Hi" where id=1');
sqlite_close($db);

?>

Expected result:
----------------
No warnings about a locked database when I send the update query

Actual result:
--------------
Warning:  sqlite_query() [function.sqlite-query]: database is locked...


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=29476&edit=1


Thread (16 messages)

« previous php.bugs (#88477) next »