Hi all,

Sorry to be slow in responding to all the feedback on Indexed DB. As you know, this is now my unpaid work and I am trying my best to respond to comments before the weekend is up.

But this is good. Please keep the feedback and early implementation experience coming.

On Jan 30, 2010, at 5:38 PM, Jeremy Orlow wrote:

I've started work on implementing the IndexedDB bindings in WebKit as a way to sanity check the API. I figure it's easiest to trickle feedback to this list rather than save it all up for a big thread, but I'm happy to do that if it's preferred.

I prefer to get incremental comments unless there is a major hole in the spec and you need time to digest it and prepare a comprehensive proposal


Interfaces I've looked at so far:
IDBEnvironment
IndexedDatabaseRequest
IDBRequest
IDBDatabaseError
IDBDatabaseException


First of all, I just wanted to say that I found the event based nature of IndexedDatabaseRequest/IDBRequest fairly cumbersome. Why not just have open take in a onsuccess and onerror callbacks and return an object which has the ready state, an abort method, and maybe an error code? It seems as though the event based API is actually more confusing and artificially limiting (only one open request in flight at a time) than is necessary.

Every approach has its pros and cons. More than with other APIs, a database API that is all three - low-level, easy to program, and asynchronous - is not easy to get. I don't know for sure that we can satisfy all three. I am going to take one more crack at this and have this item on my to-do list.


I assume that the limitation is only one database _opening_ in flight at once, and not a limitation that you can only have one database open ever?

Correct. Only one _in-flight_ request on an object. If we had a DataCache-style API, every synchronous call would return a result, and an asynchronous call would return a "promise". It would be more flexible, but no easier to deal with.


What is IDBRequest.error when there is no error? null? When would it be reset? The next time you call open?

I have clarified this. Any time request is in INITIAL or LOADING state, error is null. It would be reset whenever the request transitions from DONE back to LOADING state.


What happens when you call abort and there is no pending open? Is it a no-op?

No-op is the correct behavior.


Is it really necessary to have a separate IDBDatabaseException and IDBDatabaseError? I know one is technically an exception and one is technically an interface, but it seems a bit silly. Also, it seems as though they both share the same codes, but the codes are only defined in IDBDatabaseException? If so, I'm not sure it's clear enough in the spec.

Do you have a Web IDL proposal for this? I would love to be correct and satisfy you. However, I am not an expert in the business of WebIDL.


But really, does IndexedDB really need its own error and exception classes? At very least, I know the WebSQLDB spec has a very similar error class. And I suspect there are others, though I didn't immediately find anything looking through the HTML5 spec.

XHR defines codes, but no new exceptions. File API has both and a style similar to Indexed Database

Maybe these types of interfaces should be specified in parent specs and not duplicated in those that depend on them?

I am willing to go with whatever works for everyone.


In 3.4.5 probably means to say "events" rather than "callbacks" in the first sentence.

Yes


In 3.4.2, queue is mispelled as "aueue".

Gotcha



That's all I have for now. I've skimmed over the whole spec but only read carefully these sections, so please excuse me if any of my questions can be answered from text elsewhere in the spec. (Though maybe it would be a sign that the relevant sections should be more clear?)

Thanks!
J


Reply via email to