diff --git a/cordova-sqlite-storage/cordova-sqlite-storage-tests.ts b/cordova-sqlite-storage/cordova-sqlite-storage-tests.ts new file mode 100644 index 0000000000..31c334afca --- /dev/null +++ b/cordova-sqlite-storage/cordova-sqlite-storage-tests.ts @@ -0,0 +1,217 @@ +/// + +// examples taken from https://github.com/litehelpers/Cordova-sqlite-storage +function echoTestFunction() { + function successCallback(value: string) { + + } + function errorCallback() { + + } + window.sqlitePlugin.echoTest(successCallback, errorCallback); +} +function selfTestFunction() { + function successCallback() { + + } + function errorCallback() { + + } + window.sqlitePlugin.selfTest(successCallback, errorCallback); +} + +function openingDatabase() { + function successcb(db: SQLitePlugin.Database) { + + } + function errorcb(err: Error) { + + } + + var db = window.sqlitePlugin.openDatabase({name: 'my.db', location: 'default'}, successcb, errorcb); + var db = window.sqlitePlugin.openDatabase({name: 'my.db', iosDatabaseLocation: 'Library'}, successcb, errorcb); +} + +function openingDatabase2() { + window.sqlitePlugin.openDatabase({name: 'my.db', location: 'default'}, function(db) { + db.transaction(function(tx) { + // ... + }, function(err) { + console.log('Open database ERROR: ' + JSON.stringify(err)); + }); + }); +} + +function singleStatementTransactions(db: SQLitePlugin.Database) { + db.executeSql('INSERT INTO MyTable VALUES (?)', ['test-value'], function (resultSet) { + console.log('resultSet.insertId: ' + resultSet.insertId); + console.log('resultSet.rowsAffected: ' + resultSet.rowsAffected); + }, function(error) { + console.log('SELECT error: ' + error.message); + }); + + db.executeSql("SELECT LENGTH('tenletters') AS stringlength", [], function (resultSet) { + console.log('got stringlength: ' + resultSet.rows.item(0).stringlength); + }, function(error) { + console.log('SELECT error: ' + error.message); + }); +} + +function sqlBatchTransactions(db: SQLitePlugin.Database) { + db.sqlBatch([ + 'DROP TABLE IF EXISTS MyTable', + 'CREATE TABLE MyTable (SampleColumn)', + [ 'INSERT INTO MyTable VALUES (?)', ['test-value'] ], + ], function() { + db.executeSql('SELECT * FROM MyTable', [], function (resultSet) { + console.log('Sample column value: ' + resultSet.rows.item(0).SampleColumn); + }); + }, function(error) { + console.log('Populate table error: ' + error.message); + }); +} + +function asynchronousTransaction(db: SQLitePlugin.Database) { + db.transaction(function(tx) { + tx.executeSql('DROP TABLE IF EXISTS MyTable'); + tx.executeSql('CREATE TABLE MyTable (SampleColumn)'); + tx.executeSql('INSERT INTO MyTable VALUES (?)', ['test-value'], function(tx, resultSet) { + console.log('resultSet.insertId: ' + resultSet.insertId); + console.log('resultSet.rowsAffected: ' + resultSet.rowsAffected); + }, function(tx, error) { + console.log('INSERT error: ' + error.message); + }); + }, function(error) { + console.log('transaction error: ' + error.message); + }, function() { + console.log('transaction ok'); + }); + + db.readTransaction(function(tx) { + tx.executeSql("SELECT UPPER('Some US-ASCII text') AS uppertext", [], function(tx, resultSet) { + console.log("resultSet.rows.item(0).uppertext: " + resultSet.rows.item(0).uppertext); + }, function(tx, error) { + console.log('SELECT error: ' + error.message); + }); + }, function(error) { + console.log('transaction error: ' + error.message); + }, function() { + console.log('transaction ok'); + }); +} + +function sampleWithPRAGMA() { + // Wait for Cordova to load + document.addEventListener('deviceready', onDeviceReady, false); + + // Cordova is ready + function onDeviceReady() { + var db = window.sqlitePlugin.openDatabase({name: 'my.db', location: 'default'}); + + db.transaction(function(tx) { + tx.executeSql('DROP TABLE IF EXISTS test_table'); + tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)'); + + // demonstrate PRAGMA: + db.executeSql("pragma table_info (test_table);", [], function(res) { + console.log("PRAGMA res: " + JSON.stringify(res)); + }); + + tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function(tx, res) { + console.log("insertId: " + res.insertId + " -- probably 1"); + console.log("rowsAffected: " + res.rowsAffected + " -- should be 1"); + + db.transaction(function(tx) { + tx.executeSql("select count(id) as cnt from test_table;", [], function(tx, res) { + console.log("res.rows.length: " + res.rows.length + " -- should be 1"); + console.log("res.rows.item(0).cnt: " + res.rows.item(0).cnt + " -- should be 1"); + }); + }); + +// }, function(e) { // probably example in https://github.com/litehelpers/Cordova-sqlite-storage is broken + }, function(_tx, e) { + console.log("ERROR: " + e.message); + }); + }); + } +} + + +function sampleWithTransactionLevelNesting() { + // Wait for Cordova to load + document.addEventListener('deviceready', onDeviceReady, false); + + // Cordova is ready + function onDeviceReady() { + var db = window.sqlitePlugin.openDatabase({name: 'my.db', location: 'default'}); + + db.transaction(function(tx) { + tx.executeSql('DROP TABLE IF EXISTS test_table'); + tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)'); + + tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function(tx, res) { + console.log("insertId: " + res.insertId + " -- probably 1"); + console.log("rowsAffected: " + res.rowsAffected + " -- should be 1"); + + tx.executeSql("select count(id) as cnt from test_table;", [], function(tx, res) { + console.log("res.rows.length: " + res.rows.length + " -- should be 1"); + console.log("res.rows.item(0).cnt: " + res.rows.item(0).cnt + " -- should be 1"); + }); + + }, function(tx, e) { + console.log("ERROR: " + e.message); + }); + }); + } +} + + +function dbClose(db: SQLitePlugin.Database) { + function successcb() { + + } + function errorcb(err: Error) { + + } + + db.close(successcb, errorcb); + + + db.transaction(function (tx) { + tx.executeSql("SELECT LENGTH('tenletters') AS stringlength", [], function (tx, res) { + console.log('got stringlength: ' + res.rows.item(0).stringlength); + }); + }, function (error) { + // OK to close here: + console.log('transaction error: ' + error.message); + db.close(); + }, function () { + // OK to close here: + console.log('transaction ok'); + db.close(function () { + console.log('database is closed ok'); + }); + }); +} + +function deleteDatabase() { + function successcb() { + + } + function errorcb(err: Error) { + + } + + window.sqlitePlugin.deleteDatabase({name: 'my.db', location: 'default'}, successcb, errorcb); +} + + +function quickInstallationTest() { + window.sqlitePlugin.openDatabase({ name: 'hello-world.db', location: 'default' }, function (db) { + db.executeSql("select length('tenletters') as stringlength", [], function (res) { + var stringlength = res.rows.item(0).stringlength; + console.log('got stringlength: ' + stringlength); + //document.getElementById('deviceready').querySelector('.received').innerHTML = 'stringlength: ' + stringlength; + }); + }); +} diff --git a/cordova-sqlite-storage/index.d.ts b/cordova-sqlite-storage/index.d.ts new file mode 100644 index 0000000000..7759ab5ad2 --- /dev/null +++ b/cordova-sqlite-storage/index.d.ts @@ -0,0 +1,68 @@ +// Type definitions for cordova-sqlite-storage 1.5 +// Project: https://github.com/litehelpers/Cordova-sqlite-storage +// Definitions by: rafw87 +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +interface Window { + sqlitePlugin: SQLitePlugin.SQLite; +} + +declare var sqlitePlugin: SQLitePlugin.SQLite; + +declare namespace SQLitePlugin { + type TransactionFunction = (tx: Transaction) => void; + + type SuccessCallback = () => void; + type DatabaseSuccessCallback = (db: Database) => void; + type StatementSuccessCallback = (results: Results) => void; + type TransactionStatementSuccessCallback = (tx: Transaction, results: Results) => void; + + type ErrorCallback = (err: Error) => void; + type TransactionStatementErrorCallback = (tx: Transaction, err: Error) => boolean|void; + + interface OpenArgs { + name: string; + location?: string; + iosDatabaseLocation?: string; + androidDatabaseImplementation?: number; + androidLockWorkaround?: number; + createFromLocation?: number; + [key: string]: any; + } + interface DeleteArgs { + name: string; + location?: string; + iosDatabaseLocation?: string; + } + + interface Results { + rowsAffected: number; + insertId?: number; + rows: { + length: number; + item(i: number): any; + }; + } + + interface Transaction { + executeSql(statement: string, params?: any[], success?: TransactionStatementSuccessCallback, error?: TransactionStatementErrorCallback): void; + } + + interface Database { + transaction(fn: TransactionFunction, error?: ErrorCallback, success?: SuccessCallback): void; + readTransaction(fn: TransactionFunction, error?: ErrorCallback, success?: SuccessCallback): void; + + executeSql(statement: string, params?: any[], success?: StatementSuccessCallback, error?: ErrorCallback): void; + sqlBatch (sqlStatements: Array, success?: SuccessCallback, error?: ErrorCallback): void; + + close(success?: SuccessCallback, error?: ErrorCallback): void; + } + + interface SQLite { + openDatabase(args: OpenArgs, success?: DatabaseSuccessCallback, error?: ErrorCallback): Database; + deleteDatabase(args: DeleteArgs, success?: SuccessCallback, error?: ErrorCallback): void; + selfTest(success?: SuccessCallback, error?: ErrorCallback): void; + echoTest(ok?: (value: string) => void, error?: (msg: string) => void): void; + } +} + diff --git a/cordova-sqlite-storage/tsconfig.json b/cordova-sqlite-storage/tsconfig.json new file mode 100644 index 0000000000..5659bf7626 --- /dev/null +++ b/cordova-sqlite-storage/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "noImplicitAny": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "cordova-sqlite-storage-tests.ts" + ] +} diff --git a/cordova-sqlite-storage/tslint.json b/cordova-sqlite-storage/tslint.json new file mode 100644 index 0000000000..377cc837d4 --- /dev/null +++ b/cordova-sqlite-storage/tslint.json @@ -0,0 +1 @@ +{ "extends": "../tslint.json" }