Bug 153800

Summary: Modern IDB: storage/indexeddb/cursor-primary-key-order.html fails with SQLite backend
Product: WebKit Reporter: Brady Eidson <beidson>
Component: WebCore Misc.Assignee: Brady Eidson <beidson>
Status: RESOLVED FIXED    
Severity: Normal CC: achristensen, alecflett, commit-queue, jsbell
Priority: P2    
Version: Safari 9   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 149117, 153021    
Attachments:
Description Flags
Patch v1 none

Description Brady Eidson 2016-02-02 13:40:10 PST
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.
Comment 1 Brady Eidson 2016-02-02 13:44:33 PST
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.
Comment 2 Brady Eidson 2016-02-02 14:45:09 PST
Created attachment 270520 [details]
Patch v1
Comment 3 WebKit Commit Bot 2016-02-02 16:12:30 PST
Comment on attachment 270520 [details]
Patch v1

Clearing flags on attachment: 270520

Committed r196038: <http://trac.webkit.org/changeset/196038>
Comment 4 WebKit Commit Bot 2016-02-02 16:12:33 PST
All reviewed patches have been landed.  Closing bug.