Re: IndexedDB: Syntax for specifying persistent/temporary storage

Thanks for sending this!

On Fri, Dec 6, 2013 at 7:19 AM, Jan Varga <> wrote:

> IndexedDB implementation in Firefox 26 (the current beta) supports a new storage type called temporary storage.
> In short, it's a storage with LRU eviction policy, so the least recently used data is automatically deleted when
> a limit is reached. Chrome supports something similar [1].
> Obviously, the IndexedDB spec needs to be updated to allow specifying different storage types.
> Since the spec isn't one of those new-fangled Living Standards, this would
be in a different spec. "Indexed DB Level 2" or something. There hasn't
been a discussion about that yet.

FYI we've been tracking specific items/proposals as RESOLVED/LATER bugs
[1]; there's a Wiki page that desperately needs updating [2] and I had a
doc capturing some discussion notes as well [3].  We should file a tracking
bug for this issue.

We might need to add other parameters in future so we propose creating
a dictionary with a "version" and
> "storage" property for now.
> Sounds reasonable, since name is always required, keeping it out of the
dict makes sense to me vs. what I captured in [3]. I like how this looks,

> Here is the current interface:
> interface IDBFactory {    IDBOpenDBRequest open (DOMString name, [EnforceRange] optional unsigned long long version);    IDBOpenDBRequest <> deleteDatabase (DOMString name);    short            cmp (any first, any second);
> };
> and the interface with the dictionary:
> interface IDBFactory {
>     IDBOpenDBRequest open (DOMString name, [EnforceRange] unsigned long long version);
>     IDBOpenDBRequest open (DOMString name, optional IDBOpenDBOptions options);
>     IDBOpenDBRequest deleteDatabase (DOMString name, optional IDBOpenDBOptions options);
>     short cmp (any first, any second);
> };
> Issue: How can script detect that this updated API is available?

It seems like this could be done:

var r;
try {
  r ="db", {version: 1, storage: "temporary"});
  // Throws TypeError on older implementations since Dictionary won't
coerce to Number (?)
} catch (e) {
  // Fall back to default storage type
  r ="db", 1);

... which could be shimmed.

I don't think overloading has many proponents at the moment, though. The
other options are a different method name, or passing |undefined| as the
version, neither of which are great. Allowing null/undefined/0/falsy to
mean "current version" wouldn't be too terrible, though, and isn't a compat
concern since it explicitly throws today.

> enum StorageType { "persistent", "temporary" };
> dictionary IDBOpenDBOptions
> {
>     [EnforceRange] unsigned long long version;
>     StorageType storage;
> };


Received on Friday, 6 December 2013 18:29:37 UTC