mozilla

Compare Revisions

User talk:sdwilsh

Change Revisions

Revision 165407:

Revision 165407 by sdwilsh on

Revision 165408:

Revision 165408 by Ancestor on

Title:
User talk:sdwilsh
User talk:sdwilsh
Slug:
User_talk:sdwilsh
User_talk:sdwilsh
Content:

Revision 165407
Revision 165408
tt213    <p>
214      I think we should make async API as similar to the synchron
 >ous one as possible. What's the rationale behind basing the it on
 > HTML5 SQL? It will create a huge inconsistency, unless we also p
 >lan to overhaul the rest of mozStorage to match HTML5:
215    </p>
216    <ul>
217      <li>AsyncTransaction is a completely different animal than 
 >a traditional transaction.
218      </li>
219      <li>mozStorage APIs revolve around statement objects. There
 >'s no explicit statement here.
220      </li>
221      <li>Parameters are bound in a different way
222      </li>
223      <li>Results are read in a different way
224      </li>
225      <li>
226        <code>AsyncTransaction.execute()</code> reads as if it wa
 >s the transaction, that's is being executed. C.f. <code>mozIStora
 >geStatement.execute()</code>.
227      </li>
228    </ul>
229    <p>
230      Another concern is the callback. Let's make it a single fun
 >ction. With an object, you've got to implement QI and the code th
 >at handles the statement is more scattered. And if you use many a
 >sync statements, you make a <code>switch</code> and forward the c
 >allbacks to separate dedicated functions, anyway.
231    </p>
232    <p>
233      Here's my idea of the API, the example should be self-expla
 >natory. Please note that I have no knowledge of the internals of 
 >sqlite and mozStorage, so I don't know how feasible this is.
234    </p>
235    <pre>
236// conn is a mozIStorageConnection
237let sql = "SELECT * FROM moz_downloads WHERE state = ?1";
238let stmt = conn.createStatement(sql);
239stmt.bindInt32Parameter(0, Ci.nsIDownloadManager.DOWNLOAD_FINISHE
 >D);
240stmt.executeAsync(callback);
241 
242function callback(aStatement, aResult, aError) {
243    if (aError)
244        // update UI accordingly
245        
246    for (let row in aResult) {
247        // process data
248        // should be able to access data in a row by name or argu
 >ment number
249    }
250}
251</pre>
252    <p>
253      <a href="User:Ancestor">Ancestor</a> 15:48, 9 May 2008 (PDT
 >)
254    </p>

Back to History