W3C home > Mailing lists > Public > whatwg@whatwg.org > February 2008

[whatwg] Some comments/questions on database storage

From: Ralf Stoltze <ralf.stoltze@2meter3.de>
Date: Tue, 26 Feb 2008 00:12:29 +0100
Message-ID: <004301c87803$e4daf910$c8c3128b@2m3mobil>
On  Monday, February 25, 2008 10:56 PM, Brady Eidson wrote:

> Placeholders are the mechanism the spec mandates to prevent SQL  
> injections et al.  *How* seems to be an implementation detail.
> SQLite, for example, has the ? + argument structure in place already.

So step 3 "Replace each ? placeholder" can be skipped if the underlying
DB architecture already has a similar mechanism.


> > Based on 4.11.6, step 6.7, I assume the following snippet to always
> > execute in order 1, 2, 3?
> >
> > db.transaction(function(tx) {
> >  tx.executeSql('query 1', null, function(tx, rs) {
> >    tx.executeSql('query 2', null, function(tx, rs) {
> >    });
> >  });
> >  tx.executeSql('query 3', null, function(tx, rs) {
> >  });
> > });
> 
> 4.11.3 step 6 states that if an executeSql call passed steps 
> 1-5, the  
> statement is queued up in the transaction.
> 4.11.6 step 6.7 says "move on to the next statement, if any"
> I trust this means "the next statement in the transaction's 
> statement  
> queue" and that the queue pops statements in the order they 
> were queued.
> 
> This means that query 1 would be queued, query 3 would be 
> queued, then  
> in the callback for query 1, query 2 would be queued.
> Execution order 1, 3, 2

Hmm. I'm confused. 

A statement can only be queued when executeSql() is invoked.

It's not clear to me when the top-level executeSql() methods are invoked
with respect to the overall processing model from 4.11.6.

4.11.2:
"The transaction() method takes one or two arguments. When called, the
method must immediately return and then asynchronously run the
transaction steps"

That doesn't necessarily mean to me that any executeSql() is ever
invoked before the transaction steps are run. Thus, the transaction
queue would be empty (what makes no sense). 

Is it meant that all top-level executeSql() methods are executed before
the transaction steps are run? In this case, I also see execution order
1,3,2.

/ralf
Received on Monday, 25 February 2008 15:12:29 UTC

This archive was generated by hypermail 2.3.1 : Monday, 13 April 2015 23:08:39 UTC