New BCL approach & BuildTasks

This commit is contained in:
atanasovg
2014-03-12 18:26:58 +02:00
commit 39b505384a
42 changed files with 2907 additions and 0 deletions

28
Database/Readme.md Normal file
View File

@@ -0,0 +1,28 @@
Sample code:
```
// TODO: Update with the module architecture (require)
var folder = TK.IO.KnownFolders.Documents();
var path = folder.path + "/MyDB.db";
var db = TK.Data.Database.openDatabase(path);
db.executeSql('DROP TABLE IF EXISTS DEMO;');
db.executeSql('CREATE TABLE DEMO (id unique, data);');
db.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
db.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
db.query("SELECT * FROM DEMO", function(result){
Log("result count:" + result.count);
for(var item in result.items)
{
for(var name in item)
{
Log(name + ":" + item[name]);
}
}
}, function(e){ Log("Error:" + e.message ); }
);
```

View File

@@ -0,0 +1,92 @@
import query_module = require("Database/database_query_result");
export module tk {
export module data {
/**
* Android specific Database implementation.
*/
export class Database {
public android: android.database.sqlite.SQLiteDatabase;
public static openDatabase(path: string): Database {
return new Database(path);
}
/**
* Open or creates SQLiteDatabase using the specified path.
*/
constructor(path: string) {
this.android = android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(path, null);
}
/**
* Executes non-select SQL statements using execSQL method of android.database.sqlite.SQLiteDatabase.
*/
public executeSql(sqlStatement: string, successCallback?: Function, errorCallback?: (e: Error) => void) {
try {
if (sqlStatement.toLowerCase().indexOf("select") > -1) {
throw new Error("Please use 'query' method for select SQL statements!");
}
this.android.execSQL(sqlStatement);
if (successCallback) {
successCallback();
}
} catch (ex) {
if (errorCallback) {
errorCallback(ex);
}
}
}
/**
* Executes select SQL statements using rawQuery method of android.database.sqlite.SQLiteDatabase and returns QueryResult.
*/
public query(sqlSelectStatement: string, successCallback: (results: query_module.tk.data.QueryResult) => void, errorCallback?: (e: Error) => void) {
try {
if (sqlSelectStatement.toLowerCase().indexOf("select") == -1) {
throw new Error("Please use 'executeSql' method for non-select SQL statements!");
}
if (successCallback) {
var cursor = this.android.rawQuery(sqlSelectStatement, null);
var qr = new query_module.tk.data.QueryResult();
qr.items = [];
qr.count = cursor.getCount();
if (qr.count > 0) {
cursor.moveToFirst();
var names = cursor.getColumnNames();
do {
var item = {};
for (var name in names) {
item[name] = cursor.getString(cursor.getColumnIndex(name));
}
qr.items.push(item);
} while (cursor.moveToNext());
cursor.close();
}
successCallback(qr);
}
} catch (ex) {
if (errorCallback) {
errorCallback(ex);
}
}
}
}
}
}

16
Database/database.d.ts vendored Normal file
View File

@@ -0,0 +1,16 @@
import qr = require("Database/database_query_result");
/**
* Data (Database) module.
*/
export declare module tk {
export module data {
/**
* The Database interface.
*/
export class Database {
executeSql(sqlStatement: string, successCallback?: Function, errorCallback?: (e: Error) => void)
query(sqlSelectStatement: string, successCallback: (results: qr.tk.data.QueryResult) => void, errorCallback?: (e: Error) => void)
}
}
}

53
Database/database.ios.ts Normal file
View File

@@ -0,0 +1,53 @@
import query_module = require("Database/database_query_result");
export module tk {
export module data {
export class Database {
public static openDatabase(path: string): Database {
return new Database(path);
}
constructor(path: string) {
}
public executeSql(sqlStatement: string, successCallback?: Function, errorCallback?: (e: Error) => void) {
try {
// native code goes here
if (successCallback) {
successCallback();
}
} catch (ex) {
if (errorCallback) {
errorCallback(ex);
}
}
}
public query(sqlSelectStatement: string, successCallback: (results: query_module.tk.data.QueryResult) => void, errorCallback?: (e: Error) => void) {
try {
// native code goes here
if (successCallback) {
var qr = new query_module.tk.data.QueryResult();
successCallback(qr);
}
} catch (ex) {
if (errorCallback) {
errorCallback(ex);
}
}
}
}
}
}

View File

@@ -0,0 +1,21 @@
export module tk {
export module data {
export class QueryResult {
constructor() {
}
/**
* Total number of query result items.
*/
get count(): number {
return 0;
}
/**
* The query result items.
*/
public items: Array<any>;
}
}
}