blob: 3789812bbe7122e93618dc02eddbf10db5b43387 [file] [log] [blame]
/*
* weinre is available under *either* the terms of the modified BSD license *or* the
* MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
*
* Copyright (c) 2010, 2011 IBM Corporation
*/
requireClass ../common/Binding
//-----------------------------------------------------------------------------
class SqlStepper(steps)
if (!(this instanceof SqlStepper)) return new SqlStepper(steps)
this.__context = {}
var context = this.__context
context.steps = steps
//-----------------------------------------------------------------------------
method run(db, errorCallback)
var context = this.__context
if (context.hasBeenRun)
throw new Ex(arguments, "stepper has already been run")
context.hasBeenRun = true
context.db = db
context.errorCallback = errorCallback
context.nextStep = 0
context.ourErrorCallback = new Binding(this, ourErrorCallback)
context.runStep = new Binding(this, runStep)
this.executeSql = new Binding(this, executeSql)
db.transaction(context.runStep)
//-----------------------------------------------------------------------------
function executeSql(statement, data)
var context = this.__context
context.tx.executeSql(statement, data, context.runStep, context.ourErrorCallback)
//-----------------------------------------------------------------------------
function ourErrorCallback(tx, sqlError)
var context = this.__context
context.errorCallback.call(this, sqlError)
//-----------------------------------------------------------------------------
function runStep(tx, resultSet)
var context = this.__context
if (context.nextStep >= context.steps.length) return
context.tx = tx
context.currentStep = context.nextStep
context.nextStep++
var step = context.steps[context.currentStep]
step.call(this, resultSet)
//-----------------------------------------------------------------------------
static method example(db, id)
function step1() {
this.executeSql("SELECT name FROM sqlite_master WHERE type='table'")
}
function step2(resultSet) {
var rows = resultSet.rows
var result = []
for (var i=0; i<rows.length; i++) {
var name = rows.item(i).name
if (name == "__WebKitDatabaseInfoTable__") continue
result.push(name)
}
console.log("[" + this.id + "] table names: " + result.join(", "))
}
function errorCb(sqlError) {
console.log("[" + this.id + "] sql error:" + sqlError.code + ": " + sqlError.message)
}
var stepper = new SqlStepper([step1, step2])
stepper.id = id
stepper.run(db, errorCb)