Index messages with attachments using a boolean
When indexing message attachment metadata using numeric indexes such as: ```javascript { conversationId: '+12223334455', received_at: 123, attachments: […], numAttachments: 2, }, { conversationId: '+12223334455', received_at: 456, attachments: [], numAttachments: 0, } { conversationId: '+12223334455', received_at: 789, attachments: [], numAttachments: 1, } ``` It creates an index as follows: ``` [conversationId, received_at, numAttachments] ['+12223334455', 123, 2] ['+12223334455', 456, 0] ['+12223334455', 789, 1] ``` This means a query such as… ``` lowerBound: ['+12223334455', 0, 1 ] upperBound: ['+12223334455', Number.MAX_VALUE, Number.MAX_VALUE] ``` …will return all three original entries because they span the `received_at` from `0` through `Number.MAX_VALUE`. One workaround is to index booleans using `1 | undefined` where `1` is included in the index and `undefined` is not, but that way we lose the ability to query for the `false` value. Instead, we flip adjust the index to `[conversationId, hasAttachments, received_at]` and can then query messages with attachments using ``` [conversationId, 1 /* hasAttachments */, 0 /* received_at */] [conversationId, 1 /* hasAttachments */, Number.MAX_VALUE /* received_at */] ```
This commit is contained in:
parent
c46e1a1519
commit
9d84b2f420
7 changed files with 42 additions and 26 deletions
|
@ -2,14 +2,14 @@ exports.run = (transaction) => {
|
|||
const messagesStore = transaction.objectStore('messages');
|
||||
|
||||
[
|
||||
'numAttachments',
|
||||
'numVisualMediaAttachments',
|
||||
'numFileAttachments',
|
||||
'hasAttachments',
|
||||
'hasVisualMediaAttachments',
|
||||
'hasFileAttachments',
|
||||
].forEach((name) => {
|
||||
console.log(`Create message attachment metadata index: '${name}'`);
|
||||
messagesStore.createIndex(
|
||||
name,
|
||||
['conversationId', 'received_at', name],
|
||||
['conversationId', name, 'received_at'],
|
||||
{ unique: false }
|
||||
);
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue