On Oct 15, 2007, at 8:37 PM, Ian Hickson wrote:
* CORRUPT, insofar as the Database API lets you delete databases
(it
doesn't currently, but we've thought of adding that to Gears).
You may be correct that authors shouldn't be dealing with this.
Guaranteeing the integrity of the database at open is prohibitive
(you
may have to scan the entire database), and no guarantee in
practice, so
it's possible that you can detect corruption at any arbitrary
statement.
Sure, but that problem occurs everywhere. I mean, there's no JS
exception
for "your CPU core just overheated", but we don't guarentee that won't
happen either. Database corruption will occur either for hardware
reasons
or due to software bugs. Hardware failures could cause all kinds of
random
stuff, including software bugs (through corruption of executables).
Having
an API to handle software bugs seems silly, since if we could assume
that
that API was bug free, why not assume the rest of the API is too. This
just seems like a case we shouldn't worry about.
I agree with your principals here, but think databases are a different
story. In some embedded (and client-server) database implementations
- including SQLite - continuing to operate on a database that is known
to be corrupt can lead to the process crashing. Unlike the "CPU core
just overheated" case, it is a dangerous state software can help avoid.
How the user agent handles the problem long term (ask the user what to
do, silently delete and recreate it, let the database continue to be
corrupt, etc) may not need to be specified, but perhaps it would be
prudent to change the spec to at least suggest that if a database
becomes "known to be corrupt," operations on all open handles to that
database should start throwing INVALID_STATE_ERR exceptions.
Thanks,
~Brady