UNPKG

alasql

Version:

AlaSQL.js - JavaScript SQL database library for relational and graph data manipulation with support of localStorage, IndexedDB, and Excel

88 lines (70 loc) 2.39 kB
/* // // UPDATE for Alasql.js // Date: 03.11.2014 // (c) 2014, Andrey Gershun // */ yy.Update = function (params) { return yy.extend(this, params); } yy.Update.prototype.toString = function() { var s = 'UPDATE '+this.table.toString(); if(this.columns) s += ' SET '+this.columns.toString(); if(this.where) s += ' WHERE '+this.where.toString(); return s; } yy.SetColumn = function (params) { return yy.extend(this, params); } yy.SetColumn.prototype.toString = function() { return this.column.toString() + '='+this.expression.toString(); } yy.Update.prototype.compile = function (databaseid) { // console.log(this); databaseid = this.table.databaseid || databaseid; var tableid = this.table.tableid; if(this.where) { var wherefn = new Function('r,params,alasql','return '+this.where.toJavaScript('r','')); }; // Construct update function var s = ''; this.columns.forEach(function(col){ s += 'r[\''+col.column.columnid+'\']='+col.expression.toJavaScript('r','')+';'; }); // console.log('updatefn',s); var assignfn = new Function('r,params,alasql',s); var statement = function(params, cb) { var db = alasql.databases[databaseid]; // console.log(db.engineid); // console.log(db.engineid && alasql.engines[db.engineid].updateTable); if(db.engineid && alasql.engines[db.engineid].updateTable) { // console.log('updateTable'); return alasql.engines[db.engineid].updateTable(databaseid, tableid, assignfn, wherefn, params, cb); } if(alasql.options.autocommit && db.engineid) { alasql.engines[db.engineid].loadTableData(databaseid,tableid); } var table = db.tables[tableid]; if(!table) { throw new Error("Table '"+tableid+"' not exists") } // table.dirty = true; var numrows = 0; for(var i=0, ilen=table.data.length; i<ilen; i++) { if(!wherefn || wherefn(table.data[i], params,alasql) ) { if(table.update) { table.update(assignfn, i, params); } else { assignfn(table.data[i], params,alasql); } numrows++; } }; if(alasql.options.autocommit && db.engineid) { alasql.engines[db.engineid].saveTableData(databaseid,tableid); } if(cb) cb(numrows); return numrows; }; return statement; }; yy.Update.prototype.execute = function (databaseid, params, cb) { return this.compile(databaseid)(params,cb); }