Use IndexablePresence for hasFileAttachments and hasVisualMediaAttachments

Reduces index size, makes it easier to debug using IndexedDB inspector, and
hopefully improves lookup performance.
This commit is contained in:
Daniel Gasienica
2018-04-25 14:15:06 -04:00
parent 3a33d862c0
commit f36f206a01
9 changed files with 32 additions and 24 deletions

View File

@@ -3,15 +3,21 @@
*/
// IndexedDB doesnt support boolean indexes so we map `true` to 1 and `false`
// to `0`.
// to `0`, i.e. `IndexableBoolean`.
// N.B. Using `undefined` allows excluding an entry from an index. Useful
// when index size is a consideration or one only needs to query for `true`.
// when index size is a consideration or one only needs to query for `true`,
// i.e. `IndexablePresence`.
export type IndexableBoolean = IndexableFalse | IndexableTrue;
type IndexableTrue = 1;
export type IndexablePresence = undefined | IndexableTrue;
type IndexableFalse = 0;
type IndexableTrue = 1;
export const INDEXABLE_FALSE: IndexableFalse = 0;
export const INDEXABLE_TRUE: IndexableTrue = 1;
export const toIndexableBoolean = (value: boolean): IndexableBoolean =>
value ? INDEXABLE_TRUE : INDEXABLE_FALSE;
export const toIndexablePresence = (value: boolean): IndexablePresence =>
value ? INDEXABLE_TRUE : undefined;