blob: ed0c08b306b52fa8ced9840ec1da6ee297e49289 [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) 2011 IBM Corporation
*/
requireClass ../common/Weinre
requireClass ../common/Native
requireClass ../common/IDGenerator
requireClass ./SqlStepper
//-----------------------------------------------------------------------------
class WiDatabaseImpl
if (!window.openDatabase) return
window.openDatabase = wrappedOpenDatabase
//-----------------------------------------------------------------------------
function logSqlError(sqlError)
console.log("SQL Error " + sqlError.code + ": " + sqlError.message)
//-----------------------------------------------------------------------------
function getTableNames_step_1()
this.executeSql("SELECT name FROM sqlite_master WHERE type='table'");
//-----------------------------------------------------------------------------
function getTableNames_step_2(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)
}
Weinre.WeinreTargetCommands.sendClientCallback(this.callback, [result])
//-----------------------------------------------------------------------------
method getDatabaseTableNames( databaseId, callback)
var db = dbById(databaseId)
if (!db) return
var stepper = SqlStepper([
getTableNames_step_1,
getTableNames_step_2
])
stepper.callback = callback
stepper.run(db, logSqlError)
//-----------------------------------------------------------------------------
method executeSQL(/*int*/ databaseId, /*string*/ query, callback)
var db = dbById(databaseId)
if (!db) return
// callback: function(/*boolean*/ success, /*int*/ transactionId)
Weinre.notImplemented(arguments.callee.signature)
//-----------------------------------------------------------------------------
function wrappedOpenDatabase(name, version, displayName, estimatedSize, creationCallback)
var db = Native.openDatabase(name, version, displayName, estimatedSize, creationCallback)
dbAdd(db, name, version)
return db
//-----------------------------------------------------------------------------
init
var id2db = {}
var name2db = {}
//-----------------------------------------------------------------------------
function dbById(id)
var record = id2db[id]
if (!record) return null
return record.db
//-----------------------------------------------------------------------------
function dbRecordById(id)
return id2db[id]
//-----------------------------------------------------------------------------
function dbRecordByName(name)
return name2db[name]
//-----------------------------------------------------------------------------
function dbAdd(db, name, version)
var record = dbRecordByName(name)
if (record) return record
record = {}
record.db = db
record.name = name
record.version = version
record.id = IDGenerator.next()
id2db[record.id] = record
name2db[name] = record
var payload = {}
payload.id = record.id
payload.domain = "???"
payload.name = name
payload.version = version
Weinre.wi.DatabaseNotify.addDatabase(payload)
//-----------------------------------------------------------------------------
function dbGetAll()
var result = []
for (var id in id2db) {
result.push(id2db[id])
}
return result