On Nov 19, 2009, at 2:12 PM, João Eiras wrote:
Hi everyone.
Neither the web database specification, nor the IDL, specify the
fine grained handling that implementation must do of the several
possible values that can be passed in the 2nd argument to
executeSql, considering that those ecmascript values need to be
handled by the SQL engine, and therefore converted into a database
compatible value.
The only reference to the arguments is the paragraph that tell that
the arguments should be replaced, but I've already asked that
paragraph language to be reviewed in
http://lists.w3.org/Archives/Public/public-webapps/2009JulSep/
1329.html
Handling of ecmascript to database types could be done the following
way:
- numerical values would be converted to REAL
- strings would be converted to TEXT, including the empty string
- booleans would be converted to lowercase TEXT "false" or "true"
- null and undefined would be handled as NULL
- functions would be converted to TEXT
Objects, which do not fit the primitive types about, can be handled
in two ways.
1) The quick cheap way, which was already hinted, would be to
convert them to string.
However, that's not very helpful, if the object is a native type
wrapper like:
new String("aa");
new Number(1);
new Boolean(true)
2) We can define, in the Web IDL, how an object can be converted to
a primitive type.
Specifically, in an ecmascript binding we can do the following
(note: returns means to stop the steps):
- if object is null, return null
- if object has a member function called valueOf, invoke valueOf in
the context of object
- if the returned value is a primitive type, return the value,
- if object has a member function called toString, invoke toString
in the context of object
- if the returned value is a primitive type, return the value,
- return Object.prototype.toString.call(object), so we get "[object
Class]"
ECMAScript defines a ToPrimitive conversion (Section 9.1 of ECMA-262
5th edition). I think the right thing to do would be for some spec to
point to those steps. Probably it has to be Web Database, because in
many cases where a Web IDL method takes an "any" type, it's not
appropriate to do ToPrimitive conversion.
Regards,
Maciej