UNPKG

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
/* // // 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); }