Re: [w3c/IndexedDB] Allow expressions in addition to keyPaths when creating indexes (#33)

[Worklets](https://drafts.css-houdini.org/worklets/) might be the way to go for this. They do require developers to be consistent, but that seems like an acceptable constraint.

Very rough sketch: I haven't thought this through in detail, but something like:

* IDBDatabase gets a `worklet` property; code can be loaded in via `db.worklet.import(...)`
* IDBWorklet exposes a `registerIndexExpression(name, func)` global function
* When creating an index, you can specify `name()` as the keyPath

Developers need to remember to call `db.worklet.import(...)` on every connection to the DB that might alter an index (create or add/update values). This import is also _async_, so maybe a new step in the open() phase. So the boilerplate would look like:

```js
var open = indexedDB.open('stuff');
open.onregisterworklet = function() {
  var db = open.result;
  db.worklet.import('my_worklet_code.js'); // returns Promise
};
open.onupgradeneeded = function() {
  var db = open.result;
  var store = db.createObjectStore('records');
  store.createIndex('freeText', 'words()');
  store.createIndex('area', 'area()');
};
open.onsuccess = function() {
  var db = open.result;
  ...
};
```

And `my_worklet_code.js` would look like:

```js
registerIndexExpression('area', r => r.width * r.height);
registerIndexExpression('words', r => r.body.split(/\s+/));
```


---
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/IndexedDB/issues/33#issuecomment-210686933

Received on Friday, 15 April 2016 23:47:36 UTC