| |
| /* |
| * 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 |
| |