alasql
Version:
AlaSQL.js - JavaScript SQL database library for relational and graph data manipulation with support of localStorage, IndexedDB, and Excel
103 lines (85 loc) • 2.84 kB
JavaScript
/*
//
// DELETE for Alasql.js
// Date: 03.11.2014
// (c) 2014, Andrey Gershun
//
*/
yy.Delete = function (params) { return yy.extend(this, params); }
yy.Delete.prototype.toString = function() {
var s = 'DELETE FROM '+this.table.toString();
if(this.where) s += ' WHERE '+this.where.toString();
return s;
}
yy.Delete.prototype.compile = function (databaseid) {
// console.log(11,this);
databaseid = this.table.databaseid || databaseid;
var tableid = this.table.tableid;
var statement;
var db = alasql.databases[databaseid];
if(this.where) {
// try {
// console.log(this, 22, this.where.toJavaScript('r',''));
// } catch(err){console.log(444,err)};
// var query = {};
wherefn = new Function('r,params,alasql','return ('+this.where.toJavaScript('r','')+')');
// console.log(wherefn);
statement = (function (params, cb) {
if(db.engineid && alasql.engines[db.engineid].deleteFromTable) {
return alasql.engines[db.engineid].deleteFromTable(databaseid, tableid, wherefn, params, cb);
}
if(alasql.options.autocommit && db.engineid && db.engineid == 'LOCALSTORAGE') {
alasql.engines[db.engineid].loadTableData(databaseid,tableid);
}
var table = db.tables[tableid];
// table.dirty = true;
var orignum = table.data.length;
var newtable = [];
for(var i=0, ilen=table.data.length;i<ilen;i++) {
if(wherefn(table.data[i],params,alasql)) {
// Check for transaction - if it is not possible then return all back
if(table.delete) {
table.delete(i,params,alasql);
} else {
// SImply do not push
}
} else newtable.push(table.data[i]);
}
// table.data = table.data.filter(function(r){return !;});
table.data = newtable;
var res = orignum - table.data.length;
if(alasql.options.autocommit && db.engineid && db.engineid == 'LOCALSTORAGE') {
alasql.engines[db.engineid].saveTableData(databaseid,tableid);
}
// console.log('deletefn',table.data.length);
if(cb) cb(res);
return res;
});
// .bind(query);
// if(!this.queries) return;
// query.queriesfn = this.queries.map(function(q) {
// return q.compile(alasql.useid);
// });
} else {
statement = function (params, cb) {
if(alasql.options.autocommit && db.engineid) {
alasql.engines[db.engineid].loadTableData(databaseid,tableid);
}
var table = db.tables[tableid];
table.dirty = true;
var orignum = db.tables[tableid].data.length;
//table.deleteall();
// Delete all records from the array
db.tables[tableid].data.length = 0;
if(alasql.options.autocommit && db.engineid) {
alasql.engines[db.engineid].saveTableData(databaseid,tableid);
}
if(cb) cb(orignum);
return orignum;
};
};
return statement;
};
yy.Delete.prototype.execute = function (databaseid, params, cb) {
return this.compile(databaseid)(params,cb);
}