UNPKG

alasql

Version:

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

185 lines (167 loc) 5.4 kB
/* // // UPDATE for Alasql.js // Date: 03.11.2014 // Modified: 16.11.2014 // (c) 2014, Andrey Gershun // */ // CREATE DATABASE databaseid yy.CreateDatabase = function (params) { return yy.extend(this, params); }; yy.CreateDatabase.prototype.toString = function() { var s = K('CREATE'); if(this.engineid) s+=' '+L(this.engineid); s += ' '+K('DATABASE'); if(this.ifnotexists) s += ' '+K('IF')+' '+K('NOT')+' '+K('EXISTS'); s += ' '+L(this.databaseid); if(this.args && this.args.length > 0) { s += '('+this.args.map(function(arg){ return arg.toString()}).join(', ')+')'; } if(this.as) s += ' '+K('AS')+' '+L(this.as); return s; } //yy.CreateDatabase.prototype.compile = returnUndefined; yy.CreateDatabase.prototype.execute = function (databaseid, params, cb) { // console.log(alasql.useid, databaseid, this.databaseid); // console.trace(); var args; if(this.args && this.args.length > 0) { args = this.args.map(function(arg){ return new Function('params','return '+arg.toJavaScript())(params); }); }; if(this.engineid) { var res = alasql.engines[this.engineid].createDatabase(this.databaseid, this.args, this.ifnotexists, this.as, cb); return res; } else { var dbid = this.databaseid; if(alasql.databases[dbid]) { throw new Error("Database '"+dbid+"' already exists") }; var a = new alasql.Database(dbid); var res = 1; if(cb) return cb(res); return res; } }; // CREATE DATABASE databaseid yy.AttachDatabase = function (params) { return yy.extend(this, params); }; yy.AttachDatabase.prototype.toString = function() { var s = K('ATTACH'); if(this.engineid) s += ' '+L(this.engineid); s += ' '+K('DATABASE')+' '+L(this.databaseid); // TODO add params if(args) { s += '('; if(args.length>0) { s += args.map(function(arg){ return arg.toString(); }).join(', '); } s += ')'; } if(this.as) s+= ' '+K('AS')+' '+L(this.as); return s; } //yy.CreateDatabase.prototype.compile = returnUndefined; yy.AttachDatabase.prototype.execute = function (databaseid, params, cb) { // console.log(alasql.useid, databaseid, this.databaseid); // console.trace(); if(!alasql.engines[this.engineid]) { throw new Error('Engine "'+this.engineid+'" is not defined.'); }; var res = alasql.engines[this.engineid].attachDatabase(this.databaseid, this.as, this.args, params, cb); return res; }; // CREATE DATABASE databaseid yy.DetachDatabase = function (params) { return yy.extend(this, params); }; yy.DetachDatabase.prototype.toString = function() { var s = K('DETACH'); s += ' '+K('DATABASE')+' '+L(this.databaseid); return s; } //yy.CreateDatabase.prototype.compile = returnUndefined; yy.DetachDatabase.prototype.execute = function (databaseid, params, cb) { // console.log(alasql.useid, databaseid, this.databaseid); // console.trace(); if(!alasql.databases[this.databaseid].engineid) { throw new Error('Cannot detach database "'+this.engineid+'", because it was not attached.'); }; var res; var dbid = this.databaseid; if(dbid == alasql.DEFAULTDATABASEID) { throw new Error("Drop of default database is prohibited"); } // console.log(dbid); if(!alasql.databases[dbid]) { if(!this.ifexists) { throw new Error("Database '"+dbid+"' does not exist"); } else { res = 0; } } else { delete alasql.databases[dbid]; if(dbid == alasql.useid) { alasql.use(); } res = 1; } if(cb) cb(res); return res; // var res = alasql.engines[this.engineid].attachDatabase(this.databaseid, this.as, cb); // return res; }; // USE DATABSE databaseid // USE databaseid yy.UseDatabase = function (params) { return yy.extend(this, params); }; yy.UseDatabase.prototype.toString = function() { return K('USE') +' '+K('DATABASE')+' '+L(this.databaseid); } //yy.UseDatabase.prototype.compile = returnUndefined; yy.UseDatabase.prototype.execute = function (databaseid, params, cb) { var dbid = this.databaseid; if(!alasql.databases[dbid]) { throw new Error("Database '"+dbid+"' does not exist") }; alasql.use(dbid); var res = 1; if(cb) cb(res); return res; }; // DROP DATABASE databaseid yy.DropDatabase = function (params) { return yy.extend(this, params); } yy.DropDatabase.prototype.toString = function() { var s = K('DROP'); if(this.ifexists) s += ' '+K('IF')+' '+K('EXISTS'); s += ' '+K('DATABASE')+' '+L(this.databaseid); return s; } //yy.DropDatabase.prototype.compile = returnUndefined; yy.DropDatabase.prototype.execute = function (databaseid, params, cb) { if(this.engineid) { // console.log(this,this.databaseid, this.ifexists); return alasql.engines[this.engineid].dropDatabase(this.databaseid, this.ifexists, cb); } var res; var dbid = this.databaseid; if(dbid == alasql.DEFAULTDATABASEID) { throw new Error("Drop of default database is prohibited"); } // console.log(dbid); if(!alasql.databases[dbid]) { if(!this.ifexists) { throw new Error("Database '"+dbid+"' does not exist"); } else { res = 0; } } else { if(alasql.databases[dbid].engineid) { throw new Error("Cannot drop database '"+dbid+"', because it is attached. Detach it."); } delete alasql.databases[dbid]; if(dbid == alasql.useid) { alasql.use(); } res = 1; } if(cb) cb(res); return res; };