econocart/src/providers/SQLjsDriver/SQLjs.service.ts

131 lines
3.4 KiB
TypeScript

import { SQLiteObject, SQLite, SQLiteDatabaseConfig } from "@ionic-native/sqlite";
import { Injectable } from '@angular/core';
declare var require:any;
declare var SQL:any;
//SQL = require("../../assets/SQL.js");
@Injectable()
export class SQLjs extends SQLite {
create(config: SQLiteDatabaseConfig): Promise<SQLiteObject>{
return;
}
echoTest(): Promise<any>{
return super.echoTest();
}
deleteDatabase(config: SQLiteDatabaseConfig): Promise<any>{
return;
}
}
@Injectable()
export class SQLjsObject extends SQLiteObject {
static _mockstatus = false;
static makeMock(){
SQLjsObject._mockstatus = true;
}
static isMock(){
return SQLjsObject._mockstatus;
}
_objectInstance: any;
databaseFeatures: any;
constructor(){
super(undefined);
if(typeof(SQL)!=='undefined'){
this._objectInstance = new SQL.Database();
}
}
addTransaction(transaction: any): void{
return;
}
transaction(fn: any): Promise<any>{
return;
}
readTransaction(fn: any): Promise<any>{
return;
}
startNextTransaction(): void{
return;
}
close(): Promise<any>{
return;
}
start(): void{
return;
}
executeSql(statement: string, params: any): Promise<any>{
return new Promise<any>((resolve, reject) => {
if(!SQLjsObject.isMock()){
//not in test environment
let stmt = this._objectInstance.prepare(statement, params);
let lines = new Array();
while(stmt.step()){
let columnNames: Array<string> = stmt.getColumnNames()
let linePlain = stmt.get()
let lineAssoc: {[id: string]:object;} = {}
for(let columnNumber = 0; columnNumber < columnNames.length; columnNumber++){
lineAssoc[columnNames[columnNumber]] = linePlain[columnNumber]
}
lines.push(lineAssoc);
}
resolve({
rows: new SQLjsRows(lines),
});
}else{
//testing; then should act as mock
resolve({
rows: new SQLjsRows([]),
});
}
});
}
addStatement(sql: any, values: any): Promise<any>{
return;
}
sqlBatch(sqlStatements: any): Promise<any>{
return;
}
abortallPendingTransactions(): void{
return;
}
handleStatementSuccess(handler: any, response: any): void{
return;
}
handleStatementFailure(handler: any, response: any): void{
return;
}
run(): void{
return;
}
abort(txFailure: any): void{
return;
}
finish(): void{
return;
}
abortFromQ(sqlerror: any): void{
return;
}
}
export class SQLjsRows {
private _lines:Array<object>;
constructor(lines:Array<object>){
this._lines = lines;
}
public get length():number{
return this._lines.length;
}
item(ndx: number):object{
if(ndx>=0 && ndx<this._lines.length){
return this._lines[ndx];
}else{
throw new RangeError("Index is out of the range of the list.");
}
}
public get array():Array<object>{
return this._lines;
}
}