Merge pull request #7158 from Hozuki/master

Added type definitions for sql.js
This commit is contained in:
Masahiro Wakame
2015-12-15 22:49:52 +09:00
2 changed files with 148 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
/// <reference path="../node/node.d.ts" />
/// <reference path="sql.js.d.ts" />
import fs = require("fs");
import SQL = require("sql.js");
var DB_PATH = "data.db";
function createFile(path: string): void {
var fd = fs.openSync(path, "a");
fs.closeSync(fd);
}
// Open the database file. If it does not exist, create a blank database in memory.
var databaseData: Buffer;
databaseData = fs.existsSync(DB_PATH) ? fs.readFileSync(DB_PATH) : null;
var db = new SQL.Database(databaseData);
// Create a new table 'test_table' in the database in memory.
var createTableStatement =
"DROP TABLE IF EXISTS test_table;" +
"CREATE TABLE test_table (id INTEGER PRIMARY KEY, content TEXT);";
db.run(createTableStatement);
// Insert 2 records for testing.
var insertRecordStatement =
"INSERT INTO test_table (id, content) VALUES (@id, @content);";
db.run(insertRecordStatement, {
"@id": 1,
"@content": "Content 1"
});
db.run(insertRecordStatement, {
"@id": 2,
"@content": "Content 2"
});
try {
// This query will throw exception: primary key constraint failed.
db.run(insertRecordStatement, {
"@id": 1,
"@content": "Content 3"
});
} catch (ex) {
console.warn(ex);
}
// A simple SELECT query.
var selectRecordStatement =
"SELECT * FROM test_table WHERE id = @id;"
var selectStatementObject = db.prepare(selectRecordStatement);
var results = selectStatementObject.get({
"@id": 1
});
console.log(results);
selectStatementObject.free();
// Access the results one by one, asynchronously.
var selectRecordsStatement =
"SELECT * FROM test_table;";
db.each(
selectRecordsStatement,
(obj: { [columnName: string]: number | string | Uint8Array }): void => {
console.log(obj);
},
(): void => {
console.info("Iteration done.");
dbAccessDone();
});
function dbAccessDone(): void {
// Save the database into SQLite version 3 format.
if (!fs.existsSync(DB_PATH)) {
createFile(DB_PATH);
}
var exportedData = db.export();
fs.writeFileSync(DB_PATH, exportedData);
// Finally, close the database connection and release the resources in memory.
db.close();
}
+67
View File
@@ -0,0 +1,67 @@
// Type definitions for sql.js
// Project: https://github.com/kripken/sql.js
// Definitions by: George Wu <https://github.com/Hozuki/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../node/node.d.ts" />
declare module "sql.js" {
class Database {
constructor(data: Buffer);
constructor(data: Uint8Array);
constructor(data: number[]);
run(sql: string): Database;
run(sql: string, params: { [key: string]: number | string | Uint8Array }): Database;
run(sql: string, params: (number | string | Uint8Array)[]): Database;
exec(sql: string): QueryResults[];
each(sql: string, callback: (obj: { [columnName: string]: number | string | Uint8Array }) => void, done: () => void): void;
each(sql: string, params: { [key: string]: number | string | Uint8Array }, callback: (obj: { [columnName: string]: number | string | Uint8Array }) => void, done: () => void): void;
each(sql: string, params: (number | string | Uint8Array)[], callback: (obj: { [columnName: string]: number | string | Uint8Array }) => void, done: () => void): void;
prepare(sql: string): Statement;
prepare(sql: string, params: { [key: string]: number | string | Uint8Array }): Statement;
prepare(sql: string, params: (number | string | Uint8Array)[]): Statement;
export(): Uint8Array;
close(): void;
}
class Statement {
bind(): boolean;
bind(values: { [key: string]: number | string | Uint8Array }): boolean;
bind(values: (number | string | Uint8Array)[]): boolean;
step(): boolean;
get(): (number | string | Uint8Array)[];
get(params: { [key: string]: number | string | Uint8Array }): (number | string | Uint8Array)[];
get(params: (number | string | Uint8Array)[]): (number | string | Uint8Array)[];
getColumnNames(): string[];
getAsObject(): { [columnName: string]: number | string | Uint8Array };
getAsObject(params: { [key: string]: number | string | Uint8Array }): { [columnName: string]: number | string | Uint8Array };
getAsObject(params: (number | string | Uint8Array)[]): { [columnName: string]: number | string | Uint8Array };
run(): void;
run(values: { [key: string]: number | string | Uint8Array }): void;
run(values: (number | string | Uint8Array)[]): void;
reset(): void;
freemem(): void;
free(): boolean;
}
interface QueryResults {
columns: string[];
values: (number | string | Uint8Array)[][];
}
}