- From: Ian Hickson via cvs-syncmail <cvsmail@w3.org>
- Date: Thu, 02 Apr 2009 21:32:12 +0000
- To: public-html-commits@w3.org
Update of /sources/public/html5/webstorage
In directory hutz:/tmp/cvs-serv1727
Modified Files:
Overview.html
Log Message:
Set the stage for a synchronous Database API. (whatwg r2957)
Index: Overview.html
===================================================================
RCS file: /sources/public/html5/webstorage/Overview.html,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- Overview.html 2 Apr 2009 00:49:12 -0000 1.17
+++ Overview.html 2 Apr 2009 21:32:10 -0000 1.18
@@ -232,10 +232,14 @@
<ol>
<li><a href=#introduction-0><span class=secno>4.1 </span>Introduction</a></li>
<li><a href=#databases><span class=secno>4.2 </span>Databases</a></li>
- <li><a href=#executing-sql-statements><span class=secno>4.3 </span>Executing SQL statements</a></li>
- <li><a href=#database-query-results><span class=secno>4.4 </span>Database query results</a></li>
- <li><a href=#errors><span class=secno>4.5 </span>Errors</a></li>
- <li><a href=#processing-model><span class=secno>4.6 </span>Processing model</a></ol></li>
+ <li><a href=#parsing-and-processing-sql-statements><span class=secno>4.3 </span>Parsing and processing SQL statements</a></li>
+ <li><a href=#asynchronous-database-api><span class=secno>4.4 </span>Asynchronous database API</a>
+ <ol>
+ <li><a href=#executing-sql-statements><span class=secno>4.4.1 </span>Executing SQL statements</a></li>
+ <li><a href=#processing-model><span class=secno>4.4.2 </span>Processing model</a></ol></li>
+ <li><a href=#synchronous-database-api><span class=secno>4.5 </span>Synchronous database API</a></li>
+ <li><a href=#database-query-results><span class=secno>4.6 </span>Database query results</a></li>
+ <li><a href=#errors><span class=secno>4.7 </span>Errors</a></ol></li>
<li><a href=#disk-space><span class=secno>5 </span>Disk space</a></li>
<li><a href=#privacy><span class=secno>6 </span>Privacy</a>
<ol>
@@ -586,37 +590,89 @@
allow authors to manage schema changes incrementally and
non-destructively, and without running the risk of old code (e.g. in
another browser window) trying to write to a database with incorrect
- assumptions.<p>The <dfn id=dom-opendatabase title=dom-opendatabase><code>openDatabase()</code></dfn> method
- returns a <code><a href=#database>Database</a></code> object. The method takes four
- arguments: a database name, a database version, a display name, and
- an estimated size, in bytes, of the data that will be stored in the
- database.<p>The <code title=dom-opendatabase><a href=#dom-opendatabase>openDatabase()</a></code> method
- must use and create databases from the <span>origin</span> of the
- <code>Document</code> of the <code>Window</code> object on which the
- method was invoked.<p>If the database version provided is not the empty string, and the
+ assumptions.<p>The <dfn id=dom-opendatabase title=dom-opendatabase><code>openDatabase()</code></dfn> method on
+ the <code>Window</code> and <code>WorkerUtils</code> interfaces must
+ return a newly constructed <code><a href=#database>Database</a></code> object that
+ represents the database requested.<p>The <dfn id=dom-opendatabase-sync title=dom-opendatabase-sync><code>openDatabaseSync()</code></dfn>
+ method on the <code>WorkerUtils</code> interfaces must return a
+ newly constructed <code><a href=#databasesync>DatabaseSync</a></code> object that represents
+ the database requested.<p>These methods take four arguments: a database name, a database
+ version, a display name, and an estimated size, in bytes, of the
+ data that will be stored in the database.<p>The database requested is the one with the given database
+ name from the appropriate <span>origin</span>.<p>The <code title=dom-opendatabase><a href=#dom-opendatabase>openDatabase()</a></code> method
+ on the <code>Window</code> object must use and create databases from
+ the <span>origin</span> of the <span>active document</span> of the
+ <span>browsing context</span> of the <code>Window</code> object on
+ which the method was invoked.<p>The <code title=dom-opendatabase><a href=#dom-opendatabase>openDatabase()</a></code> and
+ <code title=dom-opendatabase-sync><a href=#dom-opendatabase-sync>openDatabaseSync()</a></code>
+ methods on the <code>WorkerUtils</code> object must use and create
+ databases from the <span>origin</span> of the scripts in the
+ worker.<p>All strings including the empty string are valid database
+ names. Database names must be compared in a
+ <span>case-sensitive</span> manner.<p class=note>Implementations can support this even in
+ environments that only support a subset of all strings as database
+ names by mapping database names (e.g. using a hashing algorithm) to
+ the supported set of names.<p>If the database version provided is not the empty string, and the
database already exists but has a different version, or no version,
then the method must raise an <code>INVALID_STATE_ERR</code>
- exception.<p>Otherwise, if the database version provided is the empty string,
+ exception.<p>The version that the database was opened with is the <dfn id=concept-database-expected-version title=concept-database-expected-version>expected version</dfn> of
+ this <code><a href=#database>Database</a></code> object. It can be the empty string, in
+ which case there is no expected version — any version is
+ fine.<p>Otherwise, if the database version provided is the empty string,
or if the database doesn't yet exist, or if the database exists and
- the version provided to the <code title=dom-opendatabase><a href=#dom-opendatabase>openDatabase()</a></code> method is the same as
- the current version associated with the database, then the method
- must return a <code><a href=#database>Database</a></code> object representing the database
- that has the name that was given. If no such database exists, it
- must be created first.<p>All strings including the empty string are valid database
- names. Database names must be compared in a
- <span>case-sensitive</span> manner.<p>The user agent may raise a <code>SECURITY_ERR</code> exception
+ the version requested is the same as the current version associated
+ with the database, then the method must return an object
+ representing the database that has the name that was given. If no
+ such database exists, it must be created first.<p>The user agent may raise a <code>SECURITY_ERR</code> exception
instead of returning a <code><a href=#database>Database</a></code> object if the request
violates a policy decision (e.g. if the user agent is configured to
- not allow the page to open databases).<p class=note>Implementations can support this even in
- environments that only support a subset of all strings as database
- names by mapping database names (e.g. using a hashing algorithm) to
- the supported set of names.<p>User agents are expected to use the display name and the
+ not allow the page to open databases).<p>User agents are expected to use the display name and the
estimated database size to optimize the user experience. For
example, a user agent could use the estimated size to suggest an
initial quota to the user. This allows a site that is aware that it
will try to use hundreds of megabytes to declare this upfront,
instead of the user agent prompting the user for permission to
- increase the quota every five megabytes.<pre class=idl>interface <dfn id=database>Database</dfn> {
+ increase the quota every five megabytes.<h3 id=parsing-and-processing-sql-statements><span class=secno>4.3 </span>Parsing and processing SQL statements</h3><p>When the user agent is to <dfn id=preprocess-the-sql-statement title="preprocess the SQL
+ statement">preprocess a SQL statement</dfn> <var title="">sqlStatement</var> with an array of arguments <var title="">arguments</var>, it must run the following steps:<ol><li><p>Parse <var title="">sqlStatement</var> as a SQL statement,
+ with the exception that U+003F QUESTION MARK (?) characters can be
+ used in place of SQL literals in the statement. <a href=#refsSQL>[SQL]</a></li>
+
+ <li>
+
+ <p>Replace each <code title="">?</code> placeholder with the value
+ of the argument in the <var title="">arguments</var> array with
+ the same position. (So the first <code title="">?</code>
+ placeholder gets replaced by the first value in the <var title="">arguments</var> array, and generally the <var title="">n</var>th <code title="">?</code> placeholder gets
+ replaced by the <var title="">n</var>th value in the <var title="">arguments</var> array.)</p>
+
+ <p class=note>Substitutions for <code title="">?</code>
+ placeholders are done at the literal level, not as string
+ concatenations, so this provides a way to dynamically insert
+ parameters into a statement without risk of a SQL injection
+ attack.</p>
+
+ <p>The result is <var title="">the statement</var>.</p>
+
+ <p class=XXX>Implementation feedback is requested on what
+ to do with arguments that are of types that are not supported by
+ the underlying SQL backend. For example, SQLite doesn't support
+ booleans, so what should the UA do if passed a boolean? The Gears
+ team suggests failing, not silently converting types.</p>
+
+ </li>
+
+ <li><p>If the syntax of <var title="">sqlStatement</var> is not
+ valid (except for the use of <code title="">?</code> characters in
+ the place of literals), or the statement uses features that are not
+ supported (e.g. due to security reasons), or the number of items in
+ the <var title="">arguments</var> array is not equal to the number
+ of <code title="">?</code> placeholders in the statement, or the
+ statement cannot be parsed for some other reason, then mark <var title="">the
+ statement</var> as bogus.</li>
+
+ <li><p>Return <var title="">the statement</var>.</li>
+
+ </ol><h3 id=asynchronous-database-api><span class=secno>4.4 </span>Asynchronous database API</h3><pre class=idl>interface <dfn id=database title=Database>Database</dfn> {
void <a href=#dom-database-transaction title=dom-database-transaction>transaction</a>(in <a href=#sqltransactioncallback>SQLTransactionCallback</a> callback, [Optional] in <a href=#sqltransactionerrorcallback>SQLTransactionErrorCallback</a> errorCallback, [Optional] in <a href=#sqlvoidcallback>SQLVoidCallback</a> successCallback);
void <a href=#dom-database-readtransaction title=dom-database-readTransaction>readTransaction</a>(in <a href=#sqltransactioncallback>SQLTransactionCallback</a> callback, [Optional] in <a href=#sqltransactionerrorcallback>SQLTransactionErrorCallback</a> errorCallback, [Optional] in <a href=#sqlvoidcallback>SQLVoidCallback</a> successCallback);
@@ -647,10 +703,7 @@
and with no <i>preflight operation</i> or <i>postflight
operation</i>.<p>For the <code title=dom-database-transaction><a href=#dom-database-transaction>transaction()</a></code> method, the
<i>mode</i> must be read/write. For the <code title=dom-database-readTransaction><a href=#dom-database-readtransaction>readTransaction()</a></code>
- method, the <i>mode</i> must be read-only.<p>The version that the database was opened with is the <dfn id=concept-database-expected-version title=concept-database-expected-version>expected version</dfn> of
- this <code><a href=#database>Database</a></code> object. It can be the empty string, in
- which case there is no expected version — any version is
- fine.<p>On getting, the <dfn id=dom-database-version title=dom-database-version><code>version</code></dfn> attribute
+ method, the <i>mode</i> must be read-only.<p>On getting, the <dfn id=dom-database-version title=dom-database-version><code>version</code></dfn> attribute
must return the current version of the database (as opposed to the
<a href=#concept-database-expected-version title=concept-database-expected-version>expected
version</a> of the <code><a href=#database>Database</a></code> object).<p>The <dfn id=dom-database-changeversion title=dom-database-changeVersion><code>changeVersion()</code></dfn>
@@ -673,7 +726,7 @@
the value of the second argument to the <code title=dom-database-changeVersion><a href=#dom-database-changeversion>changeVersion()</a></code>
method.</li>
- </ol><p>...and the <i>mode</i> being read/write.<h3 id=executing-sql-statements><span class=secno>4.3 </span>Executing SQL statements</h3><p>The <code title=dom-database-transaction><a href=#dom-database-transaction>transaction()</a></code>
+ </ol><p>...and the <i>mode</i> being read/write.<h4 id=executing-sql-statements><span class=secno>4.4.1 </span>Executing SQL statements</h4><p>The <code title=dom-database-transaction><a href=#dom-database-transaction>transaction()</a></code>
and <code title=dom-database-changeVersion><a href=#dom-database-changeversion>changeVersion()</a></code>
methods invoke callbacks with <code><a href=#sqltransaction>SQLTransaction</a></code>
objects.<pre class=idl>typedef sequence<any> <dfn id=objectarray>ObjectArray</dfn>;
@@ -704,53 +757,28 @@
only called once a transaction has failed, and no SQL statements
can be added to a failed transaction.)</li>
- <li><p>Parse the first argument to the method (<var title="">sqlStatement</var>) as a SQL statement, with the exception
- that U+003F QUESTION MARK (?) characters can be used in place of
- SQL literals in the statement. <a href=#refsSQL>[SQL]</a></li>
-
<li>
- <p>Replace each <code title="">?</code> placeholder with the value
- of the argument in the <var title="">arguments</var> array with
- the same position. (So the first <code title="">?</code>
- placeholder gets replaced by the first value in the <var title="">arguments</var> array, and generally the <var title="">n</var>th <code title="">?</code> placeholder gets
- replaced by the <var title="">n</var>th value in the <var title="">arguments</var> array.)</p>
-
- <p class=note>Substitutions for <code title="">?</code>
- placeholders are done at the literal level, not as string
- concatenations, so this provides a way to dynamically insert
- parameters into a statement without risk of a SQL injection
- attack.</p>
+ <p><a href=#preprocess-the-sql-statement>Preprocess the SQL statement</a> given as the first
+ argument to the method (<var title="">sqlStatement</var>), using
+ the second argument to the method as the <var title="">arguments</var> array, to obtain <var title="">the
+ statement</var>.</p>
<p>If the second argument is omitted or null, then treat the <var title="">arguments</var> array as empty.</p>
- <p>The result is <i>the statement</i>.</p>
-
- <p class=XXX>Implementation feedback is requested on what
- to do with arguments that are of types that are not supported by
- the underlying SQL backend. For example, SQLite doesn't support
- booleans, so what should the UA do if passed a boolean? The Gears
- team suggests failing, not silently converting types.</p>
-
</li>
- <li><p>If the syntax of <var title="">sqlStatement</var> is not
- valid (except for the use of <code title="">?</code> characters in
- the place of literals), or the statement uses features that are not
- supported (e.g. due to security reasons), or the number of items in
- the <var title="">arguments</var> array is not equal to the number
- of <code title="">?</code> placeholders in the statement, or the
- statement cannot be parsed for some other reason, then mark <i>the
- statement</i> as bogus.</li>
-
<li><p>If the <code><a href=#database>Database</a></code> object that the
<code><a href=#sqltransaction>SQLTransaction</a></code> object was created from has an <a href=#concept-database-expected-version title=concept-database-expected-version>expected version</a>
that is neither the empty string nor the actual version of the
- database, then mark <i>the statement</i> as bogus. (<a href=#dom-sqlerror-code-2 title=dom-sqlerror-code-2>Error code 2</a>.)</li>
+ database, then mark <var title="">the statement</var> as
+ bogus. (<a href=#dom-sqlerror-code-2 title=dom-sqlerror-code-2>Error code
+ 2</a>.)</li>
- <li><p>Queue up <i>the statement</i> in the transaction, along with
- the third argument (if any) as the statement's result set callback
- and the fourth argument (if any) as the error callback.</li>
+ <li><p>Queue up <var title="">the statement</var> in the
+ transaction, along with the third argument (if any) as the
+ statement's result set callback and the fourth argument (if any) as
+ the error callback.</li>
</ol><p>The user agent must act as if the database was hosted in an
otherwise completely empty environment with no resources. For
@@ -764,95 +792,7 @@
will mark them as bogus), so as to not let these statements
interfere with the explicit transactions managed by the database API
itself.<p class=note>A future version of this specification will probably
- define the exact SQL subset required in more detail.<h3 id=database-query-results><span class=secno>4.4 </span>Database query results</h3><p>The <code title=dom-transaction-executeSql>executeSql()</code>
- method invokes its callback with a <code><a href=#sqlresultset>SQLResultSet</a></code> object
- as an argument.<pre class=idl>interface <dfn id=sqlresultset>SQLResultSet</dfn> {
- readonly attribute long <a href=#dom-sqlresultset-insertid title=dom-SQLResultSet-insertId>insertId</a>;
- readonly attribute long <a href=#dom-sqlresultset-rowsaffected title=dom-SQLResultSet-rowsAffected>rowsAffected</a>;
- readonly attribute <a href=#sqlresultsetrowlist>SQLResultSetRowList</a> <a href=#dom-sqlresultset-rows title=dom-SQLResultSet-rows>rows</a>;
-};</pre><p>The <dfn id=dom-sqlresultset-insertid title=dom-SQLResultSet-insertId><code>insertId</code></dfn>
- attribute must return the row ID of the row that the
- <code><a href=#sqlresultset>SQLResultSet</a></code> object's SQL statement inserted into the
- database, if the statement inserted a row. If the statement inserted
- multiple rows, the ID of the last row must be the one returned. If
- the statement did not insert a row, then the attribute must instead
- raise an <code>INVALID_ACCESS_ERR</code> exception.<p>The <dfn id=dom-sqlresultset-rowsaffected title=dom-SQLResultSet-rowsAffected><code>rowsAffected</code></dfn>
- attribute must return the number of rows that were affected by the
- SQL statement. If the statement did not affected any rows, then the
- attribute must return zero. For "SELECT" statements, this returns
- zero (querying the database doesn't affect any rows).<p>The <dfn id=dom-sqlresultset-rows title=dom-SQLResultSet-rows><code>rows</code></dfn>
- attribute must return a <code><a href=#sqlresultsetrowlist>SQLResultSetRowList</a></code>
- representing the rows returned, in the order returned by the
- database. If no rows were returned, then the object will be empty
- (its <code title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></code> will
- be zero).<pre class=idl>interface <dfn id=sqlresultsetrowlist>SQLResultSetRowList</dfn> {
- readonly attribute unsigned long <a href=#dom-sqlresultsetrowlist-length title=dom-SQLResultSetRowList-length>length</a>;
- [IndexGetter] <span>any</span> <a href=#dom-sqlresultsetrowlist-item title=dom-SQLResultSetRowList-item>item</a>(in unsigned long index);
-};</pre><p><code><a href=#sqlresultsetrowlist>SQLResultSetRowList</a></code> objects have a <dfn id=dom-sqlresultsetrowlist-length title=dom-SQLResultSetRowList-length><code>length</code></dfn>
- attribute that must return the number of rows it represents (the
- number of rows returned by the database). This is the <var title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></var>.<p>The object's <span>indices of the supported indexed
- properties</span> are the numbers in the range zero to <span title=""><var title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></var>-1</span>, unless
- the <var title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></var> is
- zero, in which case there are no <span>supported indexed
- properties</span>.<p>The <dfn id=dom-sqlresultsetrowlist-item title=dom-SQLResultSetRowList-item><code>item(<var title="">index</var>)</code></dfn> attribute must return the row
- with the given index <var title="">index</var>. If there is no such
- row, then the method must raise an <code>INDEX_SIZE_ERR</code>
- exception.<p>Each row must be represented by a native ordered dictionary data
- type. In the JavaScript binding, this must be <code>Object</code>.
- Each row object must have one property (or dictionary entry) per
- column, with those properties enumerating in the order that these
- columns were returned by the database. Each property must have the
- name of the column and the value of the cell, as they were returned
- by the database.<h3 id=errors><span class=secno>4.5 </span>Errors</h3><p>Errors in the database API are reported using callbacks that have
- a <code><a href=#sqlerror>SQLError</a></code> object as one of their arguments.<pre class=idl>interface <dfn id=sqlerror>SQLError</dfn> {
- readonly attribute unsigned long <a href=#dom-sqlerror-code title=dom-SQLError-code>code</a>;
- readonly attribute DOMString <a href=#dom-sqlerror-message title=dom-SQLError-message>message</a>;
-};</pre><p>The <dfn id=dom-sqlerror-code title=dom-SQLError-code><code>code</code></dfn> DOM
- attribute must return the most appropriate code from the following
- table:<table><thead><tr><th>Code
- <th>Situation
- <tbody><tr><td><dfn id=dom-sqlerror-code-0 title=dom-sqlerror-code-0>0</dfn>
- <td>The transaction failed for reasons unrelated to the database
- itself and not covered by any other error code.
-
- <tr><td><dfn id=dom-sqlerror-code-1 title=dom-sqlerror-code-1>1</dfn>
- <td>The statement failed for database reasons not covered by any
- other error code.
-
- <tr><td><dfn id=dom-sqlerror-code-2 title=dom-sqlerror-code-2>2</dfn>
- <td>The statement failed because the <a href=#concept-database-expected-version title=concept-database-expected-version>expected version</a>
- of the database didn't match the actual database version.
-
- <tr><td><dfn id=dom-sqlerror-code-3 title=dom-sqlerror-code-3>3</dfn>
- <td>The statement failed because the data returned from the
- database was too large. The SQL "LIMIT" modifier might be useful
- to reduce the size of the result set.
-
- <tr><td><dfn id=dom-sqlerror-code-4 title=dom-sqlerror-code-4>4</dfn>
- <td>The statement failed because there was not enough remaining
- storage space, or the storage quota was reached and the user
- declined to give more space to the database.
-
- <tr><td><dfn id=dom-sqlerror-code-5 title=dom-sqlerror-code-5>5</dfn>
- <td>The statement failed because the transaction's first
- statement was a read-only statement, and a subsequent statement
- in the same transaction tried to modify the database, but the
- transaction failed to obtain a write lock before another
- transaction obtained a write lock and changed a part of the
- database that the former transaction was depending upon.
-
- <tr><td><dfn id=dom-sqlerror-code-6 title=dom-sqlerror-code-6>6</dfn>
- <td>An <code title="">INSERT</code>, <code title="">UPDATE</code>, or <code title="">REPLACE</code>
- statement failed due to a constraint failure. For example,
- because a row was being inserted and the value given for the
- primary key column duplicated the value of an existing row.
-
- </table><p class=XXX>We should define a more thorough list of
- codes. Implementation feedback is requested to determine what codes
- are needed.<p>The <dfn id=dom-sqlerror-message title=dom-SQLError-message><code>message</code></dfn>
- DOM attribute must return an error message describing the error
- encountered. The message should be localized to the user's
- language.<h3 id=processing-model><span class=secno>4.6 </span>Processing model</h3><p>The <dfn id=transaction-steps>transaction steps</dfn> are as follows. These steps must
+ define the exact SQL subset required in more detail.<h4 id=processing-model><span class=secno>4.4.2 </span>Processing model</h4><p>The <dfn id=transaction-steps>transaction steps</dfn> are as follows. These steps must
be run asynchronously. These steps are invoked with a <i>transaction
callback</i>, optionally an <i>error callback</i>, optionally a
<i>success callback</i>, optionally a <i>preflight operation</i>,
@@ -976,7 +916,95 @@
transaction. Rollback the transaction. Any still-pending statements
in the transaction are discarded.</li>
- </ol><h2 id=disk-space><span class=secno>5 </span>Disk space</h2><p>User agents should limit the total amount of space allowed for
+ </ol><h3 id=synchronous-database-api><span class=secno>4.5 </span>Synchronous database API</h3><p class=XXX>...<dfn id=databasesync>DatabaseSync</dfn><h3 id=database-query-results><span class=secno>4.6 </span>Database query results</h3><p>The <code title=dom-transaction-executeSql>executeSql()</code>
+ method invokes its callback with a <code><a href=#sqlresultset>SQLResultSet</a></code> object
+ as an argument.<pre class=idl>interface <dfn id=sqlresultset>SQLResultSet</dfn> {
+ readonly attribute long <a href=#dom-sqlresultset-insertid title=dom-SQLResultSet-insertId>insertId</a>;
+ readonly attribute long <a href=#dom-sqlresultset-rowsaffected title=dom-SQLResultSet-rowsAffected>rowsAffected</a>;
+ readonly attribute <a href=#sqlresultsetrowlist>SQLResultSetRowList</a> <a href=#dom-sqlresultset-rows title=dom-SQLResultSet-rows>rows</a>;
+};</pre><p>The <dfn id=dom-sqlresultset-insertid title=dom-SQLResultSet-insertId><code>insertId</code></dfn>
+ attribute must return the row ID of the row that the
+ <code><a href=#sqlresultset>SQLResultSet</a></code> object's SQL statement inserted into the
+ database, if the statement inserted a row. If the statement inserted
+ multiple rows, the ID of the last row must be the one returned. If
+ the statement did not insert a row, then the attribute must instead
+ raise an <code>INVALID_ACCESS_ERR</code> exception.<p>The <dfn id=dom-sqlresultset-rowsaffected title=dom-SQLResultSet-rowsAffected><code>rowsAffected</code></dfn>
+ attribute must return the number of rows that were affected by the
+ SQL statement. If the statement did not affected any rows, then the
+ attribute must return zero. For "SELECT" statements, this returns
+ zero (querying the database doesn't affect any rows).<p>The <dfn id=dom-sqlresultset-rows title=dom-SQLResultSet-rows><code>rows</code></dfn>
+ attribute must return a <code><a href=#sqlresultsetrowlist>SQLResultSetRowList</a></code>
+ representing the rows returned, in the order returned by the
+ database. If no rows were returned, then the object will be empty
+ (its <code title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></code> will
+ be zero).<pre class=idl>interface <dfn id=sqlresultsetrowlist>SQLResultSetRowList</dfn> {
+ readonly attribute unsigned long <a href=#dom-sqlresultsetrowlist-length title=dom-SQLResultSetRowList-length>length</a>;
+ [IndexGetter] <span>any</span> <a href=#dom-sqlresultsetrowlist-item title=dom-SQLResultSetRowList-item>item</a>(in unsigned long index);
+};</pre><p><code><a href=#sqlresultsetrowlist>SQLResultSetRowList</a></code> objects have a <dfn id=dom-sqlresultsetrowlist-length title=dom-SQLResultSetRowList-length><code>length</code></dfn>
+ attribute that must return the number of rows it represents (the
+ number of rows returned by the database). This is the <var title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></var>.<p>The object's <span>indices of the supported indexed
+ properties</span> are the numbers in the range zero to <span title=""><var title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></var>-1</span>, unless
+ the <var title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></var> is
+ zero, in which case there are no <span>supported indexed
+ properties</span>.<p>The <dfn id=dom-sqlresultsetrowlist-item title=dom-SQLResultSetRowList-item><code>item(<var title="">index</var>)</code></dfn> attribute must return the row
+ with the given index <var title="">index</var>. If there is no such
+ row, then the method must raise an <code>INDEX_SIZE_ERR</code>
+ exception.<p>Each row must be represented by a native ordered dictionary data
+ type. In the JavaScript binding, this must be <code>Object</code>.
+ Each row object must have one property (or dictionary entry) per
+ column, with those properties enumerating in the order that these
+ columns were returned by the database. Each property must have the
+ name of the column and the value of the cell, as they were returned
+ by the database.<h3 id=errors><span class=secno>4.7 </span>Errors</h3><p>Errors in the database API are reported using callbacks that have
+ a <code><a href=#sqlerror>SQLError</a></code> object as one of their arguments.<pre class=idl>interface <dfn id=sqlerror>SQLError</dfn> {
+ readonly attribute unsigned long <a href=#dom-sqlerror-code title=dom-SQLError-code>code</a>;
+ readonly attribute DOMString <a href=#dom-sqlerror-message title=dom-SQLError-message>message</a>;
+};</pre><p>The <dfn id=dom-sqlerror-code title=dom-SQLError-code><code>code</code></dfn> DOM
+ attribute must return the most appropriate code from the following
+ table:<table><thead><tr><th>Code
+ <th>Situation
+ <tbody><tr><td><dfn id=dom-sqlerror-code-0 title=dom-sqlerror-code-0>0</dfn>
+ <td>The transaction failed for reasons unrelated to the database
+ itself and not covered by any other error code.
+
+ <tr><td><dfn id=dom-sqlerror-code-1 title=dom-sqlerror-code-1>1</dfn>
+ <td>The statement failed for database reasons not covered by any
+ other error code.
+
+ <tr><td><dfn id=dom-sqlerror-code-2 title=dom-sqlerror-code-2>2</dfn>
+ <td>The statement failed because the <a href=#concept-database-expected-version title=concept-database-expected-version>expected version</a>
+ of the database didn't match the actual database version.
+
+ <tr><td><dfn id=dom-sqlerror-code-3 title=dom-sqlerror-code-3>3</dfn>
+ <td>The statement failed because the data returned from the
+ database was too large. The SQL "LIMIT" modifier might be useful
+ to reduce the size of the result set.
+
+ <tr><td><dfn id=dom-sqlerror-code-4 title=dom-sqlerror-code-4>4</dfn>
+ <td>The statement failed because there was not enough remaining
+ storage space, or the storage quota was reached and the user
+ declined to give more space to the database.
+
+ <tr><td><dfn id=dom-sqlerror-code-5 title=dom-sqlerror-code-5>5</dfn>
+ <td>The statement failed because the transaction's first
+ statement was a read-only statement, and a subsequent statement
+ in the same transaction tried to modify the database, but the
+ transaction failed to obtain a write lock before another
+ transaction obtained a write lock and changed a part of the
+ database that the former transaction was depending upon.
+
+ <tr><td><dfn id=dom-sqlerror-code-6 title=dom-sqlerror-code-6>6</dfn>
+ <td>An <code title="">INSERT</code>, <code title="">UPDATE</code>, or <code title="">REPLACE</code>
+ statement failed due to a constraint failure. For example,
+ because a row was being inserted and the value given for the
+ primary key column duplicated the value of an existing row.
+
+ </table><p class=XXX>We should define a more thorough list of
+ codes. Implementation feedback is requested to determine what codes
+ are needed.<p>The <dfn id=dom-sqlerror-message title=dom-SQLError-message><code>message</code></dfn>
+ DOM attribute must return an error message describing the error
+ encountered. The message should be localized to the user's
+ language.<h2 id=disk-space><span class=secno>5 </span>Disk space</h2><p>User agents should limit the total amount of space allowed for
storage areas and databases.<p>User agents should guard against sites storing data in the
storage areas or databases of subdomains, e.g. storing up to the
limit in a1.example.com, a2.example.com, a3.example.com, etc,
Received on Thursday, 2 April 2009 21:32:23 UTC