W3C home > Mailing lists > Public > public-webapps@w3.org > April to June 2009

Re: Web Storage & SQL

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Thu, 09 Apr 2009 13:52:40 -0400
Message-ID: <49DE35E8.30004@mit.edu>
To: Giovanni Campagna <scampa.giovanni@gmail.com>
CC: public-webapps@w3c.org
Giovanni Campagna wrote:
> Yes. With extensions I mean writing "start transaction" instead of
> "begin", using the backquotes instead of double quotes for
> identifires, using INET and spatial data types, using table options...

OK.

>>  This is
>> not the case.  A query written based on that ISO standard has different
>> behavior in different databases, in many cases.
> 
> This is obviously an implementation bug, and should be corrected in
> the DBMS, not in the browser or in the web page.

Note that this is certainly the behavior of SQLite.  In particular, it 
does not enforce strong typing on columns.  This is not considered a bug 
by the database author, nor are there plans to change this behavior.[1]

Whether this is a bug per the ISO standard I can't say; I'm not quite 
willing to pay several hundred dollars for an answer to this question.

Note that it's not just a matter of enforcing types.  Comparing the web 
page I cite above to the page that describes comparison operators for 
MySQL, say, [2] we see that for SQLite:

   When two TEXT values are compared, the C library function memcmp() is
   usually used to determine the result. However this can be overridden,
   as described under 'User-defined collation Sequences' below.

whereas for MySQL:

    By default, string comparisons are not case sensitive and use the
    current character set. The default is latin1 (cp1252 West European),
    which also works well for English.

So comparing the string "a" to the string "A" using the obvious "a" == 
"A" syntax will give different results in the two databases.  Which one 
(if either) is correct or incorrect per the ISO standard in question?

> We have tutorials and guides for that

Writing a tutorial that describes "what queries are safe to use" would 
basically be equivalent to defining a subset of SQL.  Either this 
tutorial describes a smaller subset than what's actually safe (in which 
case, why not just restrict to this subset?) or it defines the full set 
of things in the ISO spec (and then is pretty clearly a copyright 
violation if published).

>> You could also require UAs to implement queries exactly per this standard.
>>  Vladimir mentioned as a possible option in his original post.  This is
>> definitely the way forward (with either this SQL definition or some subset
>> thereof)
> 
> But some extensions are useful (like spatial data types or
> non-transactional database engines): I don't see why we should not
> allow them, in a vendor (browser or dbms) specific form.

Because that leads to non-interoperable behavior and pages being tested 
in one browser breaking in another one.  Unless you propose that the 
extensions be very clearly vendor-specific (e.g. the way CSS works). 
I'm not sure how one would make the == operator vendor-specific, which 
is clearly needed per the above.

>> Use of the existing standard by authors doesn't give interoperability.
> 
> Again, this is an implementation bug, not something that should affect authors

Can you please cite the relevant part of the ISO specification that 
forbids the SQLite typing behavior?

> Unfortunately, these are the problems of ISO standards. We cannot change that.

While true, we could refuse to use such a standard as the basis for an 
open platform.  I'm not saying we _should_ refuse to do so, mind you, 
just that this is an important factor to keep in mind when deciding 
whether to use it.

-Boris

[1] http://www.sqlite.org/datatype3.html
[2] http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
Received on Thursday, 9 April 2009 17:55:39 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:49:31 GMT