Modern IDB: storage/indexeddb/cursor-primary-key-order.html fails with SQLite backend An Index cursor gets integers out of order. It should go: -Inf, -2, -1, 0, 1, 2, Inf ...But instead it goes: 0, 1, 2, Inf, -1, -2, -Inf I've hard coded some debugging into SQLiteIDBCursor and found that, indeed, just stepping the cursor statement over and over does, in fact, give the out of order results. This is either a bug in our key comparator, a bug in some SQL queries, or a bug in SQLite.
It's the statement creating the index record table. It's currently: CREATE TABLE IndexRecords (indexID INTEGER NOT NULL ON CONFLICT FAIL, objectStoreID INTEGER NOT NULL ON CONFLICT FAIL, key TEXT COLLATE IDBKEY NOT NULL ON CONFLICT FAIL, value NOT NULL ON CONFLICT FAIL); It needs to be: CREATE TABLE IndexRecords (indexID INTEGER NOT NULL ON CONFLICT FAIL, objectStoreID INTEGER NOT NULL ON CONFLICT FAIL, key TEXT COLLATE IDBKEY NOT NULL ON CONFLICT FAIL, value TEXT COLLATE IDBKEY NOT NULL ON CONFLICT FAIL); Note the value (which is an IDBKey into the object store) needs IDBKey collation for sorting upon insertion.
Created attachment 270520 [details] Patch v1
Comment on attachment 270520 [details] Patch v1 Clearing flags on attachment: 270520 Committed r196038: <http://trac.webkit.org/changeset/196038>
All reviewed patches have been landed. Closing bug.