Req #53466 [Opn->Csd]: sqlite3 columnType() returns SQLITE3_NULL when not in fetch loop
| From: | scottmac@php.net | Date: | Thu, 06 Jan 2011 00:11:13 +0000 |
| Subject: | Req #53466 [Opn->Csd]: sqlite3 columnType() returns SQLITE3_NULL when not in fetch loop | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-157633@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=53466&edit=1
ID: 53466
Updated by: scottmac@php.net
Reported by: danielc at analysisandsolutions dot com
Summary: sqlite3 columnType() returns SQLITE3_NULL when not
in fetch loop
-Status: Open
+Status: Closed
Type: Feature/Change Request
Package: SQLite related
Operating System: linux
PHP Version: 5.3SVN-2010-12-03 (SVN)
-Assigned To:
+Assigned To: scottmac
Block user comment: N
Private report: N
New Comment:
This bug has been fixed in SVN.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2011-01-06 01:09:01] scottmac@php.net
Automatic comment from SVN on behalf of scottmac
Revision: http://svn.php.net/viewvc/?view=revision&revision=307143
Log: Implemented FR #53466 (SQLite3Result::columnType() should return
false after all of the rows have been fetched).
------------------------------------------------------------------------
[2010-12-03 18:28:15] danielc at analysisandsolutions dot com
Description:
------------
The SQLite3Result::columnType() method returns SQLITE3_NULL (5) if not
looping over results. This is done because the data type is unknown.
But this leads to confusion, because SQLITE3_NULL is a legitimate answer
in some cases when inside the loop. It would be clearer if PHP returned
NULL or FALSE instead.
Test script:
---------------
$db = new SQLite3(':memory:');
$db->exec('CREATE TABLE test (whatever INTEGER)');
$db->exec('INSERT INTO test (whatever) VALUES (1)');
$result = $db->query('SELECT * FROM test');
while ($row = $result->fetchArray(SQLITE3_NUM)) {
var_dump($result->columnType(0)); // int(1) [SQLITE3_INTEGER]
}
// Seems returning null or false is more appropriate.
var_dump($result->columnType(0)); // int(5) [SQLITE3_NULL]
$result->finalize();
$db->close();
echo "Done\n";
Expected result:
----------------
int(1)
bool(false)
Done
Actual result:
--------------
int(1)
int(5)
Done
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53466&edit=1