- From: Ben Meadowcroft <ben@benmeadowcroft.com>
- Date: Mon, 12 May 2008 23:12:01 +0100
- To: <public-html@w3.org>
> -----Original Message-----
> From: public-html-request@w3.org
> [mailto:public-html-request@w3.org] On Behalf Of Ben Meadowcroft
> Sent: 01 March 2008 10:24
> To: public-html@w3.org
> Subject: Comments on Section 4.11.2 Databases and 4.11.3
> Executing SQL statements
>
> I've got a couple of comments on section "4.11.2 Databases"
> and "4.11.3 Executing SQL statements".
>
> Comment on "4.11.2 Databases"
> This section states "The transaction() method takes one or
> two arguments." yet the interface defined above this
> statement shows that 3 arguments can be provided.
>
> Comment on "4.11.3 Executing SQL statements"
> I would like to suggest adding support for named parameters
> when executing SQL (in addition to the current array
> mechanism). My proposal is that we allow named placeholders
> in the SQL statement and then allow an object to be passed as
> a parameter, replacing the placeholder with the value of the
> matching named object property.
>
> A specific example would be:
> transaction.executeSql(
> "SELECT * from employee WHERE employee.firstname =
> :firstname AND employee.salary < :salary;",
> {"firstname" : "Ben", "salary" : 999.99},
> callback
> );
>
> I've used the Java Persistence API and Hibernate style of
> named parameters, along with a more common JavaScript idiom
> of using an object as an associative array.
>
> I think the introduction of named parameters would help
> reduce the programming errors that occur when dealing with
> arrays and the implicit parameter ordering that this
> requires. Another advantage is that applications could reuse
> objects in use as query parameters rather than mapping them
> to an array (in the right order!). For example:
>
> transaction.executeSql(
> "SELECT * from departent WHERE department.name = ? AND
> department.location = ?;",
> [employee.department, employee.location],
> callback
> );
>
> Would be:
>
> transaction.executeSql(
> "SELECT * from departent WHERE department.name =
> :department AND department.location = :location;",
> employee,
> callback
> );
>
> The mapping would be fairly simple and could be mapped onto
> the existing array specification if required, e.g.: 1. take
> the SQL string and extracting any named parameters into an
> array, replacing them with the '?' placeholder 2. iterate
> over the array, take then name of the parameter and look up
> its property value on the object passed in, replace the
> parameter name in the array with the retrieved value. 3.
> continue processing with the modified SQL string (with ?
> placeholders) and an array of parameters.
>
> What are peoples thoughts on these suggestions?
A further suggestion is allowing a form node to be passed as a parameter to
the executeSql function and binding the named parameters to the values of
form controls with the same name that are associated with the passed in form
node.
--
Ben Meadowcroft
http://www.benmeadowcroft.com/
Received on Monday, 12 May 2008 22:12:52 UTC