How can it be that adding a WHERE clause to a successful query causes ‘database 
disk image is malformed’?

My database has one table named `itemTable`.  This table has two columns, `key` 
which is type text and `value` which is type blob.  There are two rows of data. 
 Their `value` blobs are actually strings encoded as UTF16 little endian.

The issue is demonstrated in the following transcript, using the sqlite command 
line tool in Mac OS X.

Air2: jk$ sqlite3 Test.sql 
SQLite version 3.7.13 2012-07-17 17:46:21
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT key from itemTable ;
profileName
extoreName
sqlite> SELECT key FROM `itemTable` WHERE `key` = 'profileName' ;
Error: database disk image is malformed
sqlite> SELECT * FROM `itemTable` WHERE `key` = 'nonexistent' ;
Error: database disk image is malformed

// Same succeed,fail result if I change query to "SELECT *" instead of "SELECT 
key".

sqlite> SELECT * FROM `itemTable` ;
profileName|Fooobar
extoreName|Baaaaaahhhhh
sqlite> SELECT * FROM `itemTable` WHERE `key` = 'profileName' ;
Error: database disk image is malformed

One thing I find rather surprising is that sqlite seems to know that the 
14-byte and 24-byte blobs are UTF16-LE encoded strings, and prints them as 
“Fooobar” and “Baaaaaahhhhh”.

Is my database OK or malformed?

The same thing happens when I execute the failing query with the sqlite3 C 
Library, using years-old tested code.

Thank you!

Jerry Krinock

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to