Hello,

I've encountered an error running 3.7.8 and 3.7.7.1 that seems rather strange.  
It's reproducible so far as I know.

CREATE VIRTUAL TABLE fts USING fts3( tags TEXT);
INSERT INTO fts (tags) VALUES ('tag1');
SELECT * FROM fts WHERE tags MATCH 'tag1';

You can run an UPDATE to change the value in the tags field and rerun that 
SELECT statement without error.  Do not create a second row, as this error 
seems to appear only when there is a single row in the virtual table.  Now 
close the database and reopen it, then try the following statements.

                UPDATE fts SET tags = 'tag1' WHERE rowid = 1;
                SELECT * FROM fts WHERE tags MATCH 'tag1';

That SELECT returns "Error: database disk image is malformed".  Taking a dump 
before and after the UPDATE shows that a segdir entry is being assigned a 
different value despite the tags entry remaining exactly the same.  Changing 
the value further does not rectify the situation, nor does using a different 
string.  Running a "PRAGMA integrity_check" returns "ok", so the underlying 
database is fine (and you can use other tables and any rows you insert after 
just fine).  Inserting a new row and then changing the value rectifies the 
problem.  Tests seem to indicate that it doesn't matter what the rowid is (or 
the  sequence of inserts and deletes have been run on the virtual table 
beforehand), the problem appears when changing the only row in the virtual 
table.

I've reproduced this using a CLI compiled from the autoconf source amalgamation 
on RHEL 5.5 (in a VM) and the precompiled Windows CLI.

Is anyone able to help?  (I haven't accidentally posted this to the wrong list 
have I?)

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

Reply via email to