- From: Mihai Sucan <mihai.sucan@gmail.com>
- Date: Tue, 18 Sep 2007 13:06:55 +0300
- To: public-html <public-html@w3.org>
Hello! I have reviewed section 4.12. "Client-side database storage" [1]. Here are my comments: 1. In section 4.12.2. "Executing SQL statements" [2]: "Big Issue: There are two major missing features here: One: [...]. Two: there's no session-specific API, so if you have two windows open at once, you can't interact with the site doing two separate sessions unless the site goes out of its way to track sessions itself, detecting when new tabs are opened, etc. sessionStorage[] handles it, why doesn't this? [...]" Given there's sessionStorage, it wouldn't really be a big deal for a web application to "go out of its way to track sessions itself" - since sessionStorage allows this quite nicely and easily. Having a database per session would be, IMO, quite an over-kill. However, I was thinking: maybe UAs could allow the CREATE TEMPORARY TABLE syntax (see the MySQL documentation [3]). The temporary tables would be removed when the user terminates the session. This should be good enough for session-related SQL needs. 2. The section 4.12.2 needs further clarification and details. Based on the following questions: How are the "?" chars supposed to be replaced with the given arguments? What kind of escaping is supposed to be expected? executeSql("INSERT INTO `flowers` (`name`, `color`) VALUES (?, ?)", "lily", "white"); executeSql("INSERT INTO `flowers` (`name`, `color`) VALUES ('?', '?')", "lily", "white"); ... both cases could be expected in the wild. What to expect from each example? I suppose the first example works as intended (a new row with the given arguments is added). The second example will simply add a new row with the '?' value for both fields. If this is the supposed behavior, then the UA has "context-awareness": I cannot do things like: executeSql("INSERT INTO `flowers` (`?`, `?`) VALUES ('?', '?')", "name", "lily", "color", "white"); I cannot treat executeSql in a similar fashion to the sprintf() function [4] - albeit this would be a much more simpler function. Can binary data be stored in the database? Is the UA supposed to do proper "escaping" for binary data arguments? Also, regarding the SQL standard: I cannot ask for specifically requiring the implementation of the SQL standard X, Y, nor Z. However, I would suggest that the HTML5 spec *recommends* one SQL standard - like it recommends Ogg support for the <video> element. 3. The ResultSet object [5] has the length attribute [6] which is now defined to tell the number of columns in the current row. This attribute name is quite confusing. I initially expected it tells the number of rows in the ResultSet object. I would recommend that the "length" attribute be renamed to numCols or numFields. 4. I was surprised to see there's no attribute (or method) to easily and quickly check the number of rows in the ResultSet object. For now, one either has to use COUNT() in a SELECT query, or must iterate over all the rows to count them. I would recommend defining a new readonly attribute "numRows" which tells the number of rows in the ResultSet object. Having some experience with PHP+mySQL I quite often use the mysql_num_rows($result) function [7]. 5. In section 4.12.3. "Database query results" [8], in the paragraph which defines the validRow attribute [9] of the ResultSet object [5], first phrase: "The validRow attribute must *return return* true if the ResultSet object's cursor is at a row with data. " Correction: return. Eliminate the duplication. That's about all for now. Thanks. [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/section-sql.html#sql [2] http://www.whatwg.org/specs/web-apps/current-work/multipage/section-sql.html#executing [3] http://dev.mysql.com/doc/refman/5.1/en/create-table.html [4] http://www.php.net/manual/en/function.sprintf.php [5] http://www.whatwg.org/specs/web-apps/current-work/multipage/section-sql.html#resultset [6] http://www.whatwg.org/specs/web-apps/current-work/multipage/section-sql.html#length8 [7] http://www.php.net/manual/en/function.mysql-num-rows.php [8] http://www.whatwg.org/specs/web-apps/current-work/multipage/section-sql.html#database [9] http://www.whatwg.org/specs/web-apps/current-work/multipage/section-sql.html#validrow -- http://www.robodesign.ro
Received on Tuesday, 18 September 2007 10:07:06 UTC