alasql
Version:
AlaSQL.js - JavaScript SQL database library for relational and graph data manipulation with support of localStorage, IndexedDB, and Excel
64 lines (57 loc) • 1.61 kB
JavaScript
/*
//
// CREATE TABLE for Alasql.js
// Date: 03.11.2014
// (c) 2014, Andrey Gershun
//
*/
yy.CreateIndex = function (params) { return yy.extend(this, params); }
yy.CreateIndex.prototype.toString = function() {
var s = 'CREATE';
if(this.unique) s+=' UNIQUE';
s += ' INDEX ' + this.indexid + " ON "+this.table.toString();
s += "("+this.columns.toString()+")";
return s;
}
// CREATE TABLE
yy.CreateIndex.prototype.execute = function (databaseid,params,cb) {
// var self = this;
var db = alasql.databases[databaseid];
var tableid = this.table.tableid;
var table = db.tables[tableid];
var indexid = this.indexid;
if(this.unique) {
var rightfns = this.columns.map(function(colid){return "r[\'"+colid+"\']"}).join("+'`'+");
table.uniqdefs[indexid] = {
rightfns: rightfns
};
var ux = table.uniqs[indexid] = {};
if(table.data.length > 0) {
for(var i=0, ilen=table.data.length; i<ilen;i++) {
var addr = rightfns(table.data[i]);
if(!ux[addr]) {
ux[addr] = {num:0};
};
ux[addr].num++;
}
}
} else {
var rightfns = this.columns.map(function(colid){return "r[\'"+colid+"\']"}).join("+'`'+");
var hh = hash(rightfns);
table.inddefs[indexid] = {rightfns:rightfns, hh:hh};
table.indices[hh] = {};
var ix = table.indices[hh] = {};
if(table.data.length > 0) {
for(var i=0, ilen=table.data.length; i<ilen;i++) {
var addr = rightfns(table.data[i]);
if(!ix[addr]) {
ix[addr] = [];
};
ix[addr].push(table.data[i]);
}
}
};
var res = 1;
if(cb) res = cb(res);
return res;
};