Changes

Jump to navigation Jump to search
m
no edit summary
Line 3: Line 3:  
console.log('Indb loading');
 
console.log('Indb loading');
   −
function idxdbContainer( ww ) {
+
function IndexedDBContainer( ww ) {
 +
 
 +
// suppress console.log, switch to true for debug
 
var Debug_switch = false;
 
var Debug_switch = false;
 +
 +
// deterministic hash generator for creating user id#s from usernames, should be replaced by something more functional (guaranteed to be transitively different)
 
hashCode = function(s) {
 
hashCode = function(s) {
 
if ( s == undefined) {
 
if ( s == undefined) {
Line 15: Line 19:  
return h;
 
return h;
 
};
 
};
+
 
 +
 
if ( ww.user != undefined ) {
 
if ( ww.user != undefined ) {
 +
// if user exists in object passed to constructor, get username
 
var self = ww.user.getName();
 
var self = ww.user.getName();
+
// create userid by hashing username
 
var idgen = hashCode(self);
 
var idgen = hashCode(self);
 +
debuglog(idgen);
   −
debuglog(idgen);
+
// Take username for standard databasename format:
// Take username for standard databasename format
+
// Our current convention for personal databasename (separate dbname for each user)
 
var PersonalDataDataBaseName = "PD.IO" + idgen + "Database";
 
var PersonalDataDataBaseName = "PD.IO" + idgen + "Database";
 
// Use username in user to get up to date version of self
 
// Use username in user to get up to date version of self
 +
// Blank object for personal data Record with id and username included
 
this.CurrentPerson = {id: idgen, name: {user: self}, age: 0};
 
this.CurrentPerson = {id: idgen, name: {user: self}, age: 0};
   
debuglog(PersonalDataDataBaseName);
 
debuglog(PersonalDataDataBaseName);
 
debuglog(this.CurrentPerson);
 
debuglog(this.CurrentPerson);
Line 34: Line 41:     
// EnqueuePDIO a PDIOLocalDatabase:User database access function with modes
 
// EnqueuePDIO a PDIOLocalDatabase:User database access function with modes
// External accessible wrapper for Enquire
+
// Externally accessible wrapper for Enquire with current user / db preloaded
+
 
 
this.EnqueuePDIO = async function( sw, c1, c2, c3 ) {
 
this.EnqueuePDIO = async function( sw, c1, c2, c3 ) {
 
var k = await Enquire( PersonalDataDataBaseName, this.CurrentPerson, sw, c1, c2, c3 );
 
var k = await Enquire( PersonalDataDataBaseName, this.CurrentPerson, sw, c1, c2, c3 );
Line 70: Line 77:  
var pddb = window.indexedDB.open(pddbname, 3);
 
var pddb = window.indexedDB.open(pddbname, 3);
 
var inp_obj;
 
var inp_obj;
 +
 +
// indexeddb internal mechanism for version tracking of schema
 
pddb.onupgradeneeded = function() {
 
pddb.onupgradeneeded = function() {
 +
console.log('upgrading database');
 
var db = pddb.result;
 
var db = pddb.result;
 
var store = db.createObjectStore(pddbname, {keyPath: "id"});
 
var store = db.createObjectStore(pddbname, {keyPath: "id"});
Line 78: Line 88:  
var index = store.createIndex("NameIndex", ["id"]);
 
var index = store.createIndex("NameIndex", ["id"]);
 
};
 
};
 +
// Database successfully opened function.
 
pddb.onsuccess = function() {
 
pddb.onsuccess = function() {
 
var db = pddb.result;
 
var db = pddb.result;
Line 93: Line 104:  
// Essential recordAdd
 
// Essential recordAdd
 
if ( sqitch === "aggressive push" ) {
 
if ( sqitch === "aggressive push" ) {
 +
// Mode 'aggressive push':
 +
// parameter record is pushed to database, overwriting whatever is there
 
inp_obj = record;
 
inp_obj = record;
 
store.put( inp_obj );
 
store.put( inp_obj );
 
return inp_obj;
 
return inp_obj;
 
} else if ( sqitch === "checkin" ) {
 
} else if ( sqitch === "checkin" ) {
+
// Mode 'checkin':
 +
// record is retrieved from database, parameter record is pushed if not found
 
if ( getRecord.result != undefined ) {
 
if ( getRecord.result != undefined ) {
 
debuglog("getting from store");
 
debuglog("getting from store");
Line 108: Line 122:     
} else {
 
} else {
 +
// Methods manipulationg the actual record come here
 +
// Update & Remove from
 +
// If we got the record from store, use that version to be manipulated
 
if ( getRecord.result != undefined ) {
 
if ( getRecord.result != undefined ) {
 
inp_obj = getRecord.result;
 
inp_obj = getRecord.result;
 +
 
if ( sqitch === "get record" ) {
 
if ( sqitch === "get record" ) {
// if found, let's use that from now on
+
 
debuglog("Getting record");
 
debuglog("Getting record");
// let's return it so that our addrecord can be used as a getter as well
+
// we will return later
return inp_obj;
+
 
}  
 
}  
//
+
 
 
// endof onsuccess
 
// endof onsuccess
 
} else {
 
} else {
debuglog("record not found");
+
 
 +
debuglog("Record not found");
 +
 
 
if ( sqitch === "update record" ) {
 
if ( sqitch === "update record" ) {
 +
// Update record will use supplied copy to update it
 
inp_obj = record;
 
inp_obj = record;
 
} else {
 
} else {
 +
// Remove from record will quit as record was not even found
 
return undefined;
 
return undefined;
 
}
 
}
 
}
 
}
// endof resultdefined
   
}  
 
}  
// endofELSE
+
 
 
if ( sqitch === "update record" ) { // Record Update
 
if ( sqitch === "update record" ) { // Record Update
 
if ( control_1 != undefined ) {
 
if ( control_1 != undefined ) {
 
if ( control_2 != undefined ) {
 
if ( control_2 != undefined ) {
 
if ( control_3 != undefined ) {
 
if ( control_3 != undefined ) {
 +
 +
// Mode 'update record' field1 field2 field3
 +
// retrieve record, make record.field1.field2 = field3, push back
 +
 
if ( inp_obj[ control_1 ] == undefined ) { inp_obj[ control_1 ] = (isNaN( control_2 )) ? {} : [] };
 
if ( inp_obj[ control_1 ] == undefined ) { inp_obj[ control_1 ] = (isNaN( control_2 )) ? {} : [] };
 
inp_obj[ control_1 ][ control_2 ] = control_3; // => "Bob"
 
inp_obj[ control_1 ][ control_2 ] = control_3; // => "Bob"
 
store.put(inp_obj);
 
store.put(inp_obj);
 
} else {
 
} else {
 +
 +
// Mode 'update record' field1 field2
 +
// retrieve record, make record.field1 = field2, push back
 +
 
inp_obj[ control_1 ] = inp_obj[ control_1 ] || {};
 
inp_obj[ control_1 ] = inp_obj[ control_1 ] || {};
 
if ( Array.isArray( inp_obj[ control_1 ] ) ) {
 
if ( Array.isArray( inp_obj[ control_1 ] ) ) {
Line 146: Line 175:     
}
 
}
// +3
   
} else {
 
} else {
store.put(inp_obj);
+
// Only one control defined. We will return that part of the record, and change nothing
debuglog("mark N");
  −
debuglog(inp_obj);
  −
debuglog(inp_obj[ control_1 ]);
  −
debuglog("mark NN")
   
inp_obj = inp_obj[ control_1 ];
 
inp_obj = inp_obj[ control_1 ];
 
}
 
}
// +2
   
} else {
 
} else {
   −
//return inp_obj;
+
// There's not even control_1, we will just return the record itself
    
}
 
}
Line 169: Line 192:  
if ( control_1 != undefined ) {
 
if ( control_1 != undefined ) {
 
if ( control_2 != undefined ) {
 
if ( control_2 != undefined ) {
 +
 +
// Mode 'remove from record' field1 field2
 +
// retrieve record, splice/delete record.field1.field2, push back
 +
 
if ( Array.isArray( inp_obj[ control_1 ] ) && !isNaN( control_2 ) ) {
 
if ( Array.isArray( inp_obj[ control_1 ] ) && !isNaN( control_2 ) ) {
 
inp_obj[ control_1 ].splice( control_2, 1 );
 
inp_obj[ control_1 ].splice( control_2, 1 );
Line 174: Line 201:  
delete inp_obj[ control_1 ][ control_2 ];
 
delete inp_obj[ control_1 ][ control_2 ];
 
}
 
}
 +
 
} else {
 
} else {
 +
 +
// Mode 'remove from record' field1
 +
// retrieve record, splice/delete record.field1, push back
 +
 
delete inp_obj[ control_1 ];
 
delete inp_obj[ control_1 ];
 
}
 
}
Line 181: Line 213:  
}
 
}
   −
debuglog("return 2")
+
// We are past all methodic code, Async return
 +
 
resolve( inp_obj );
 
resolve( inp_obj );
    
};
 
};
 
+
 +
// Indexeddb internal mechanism, close db
 +
 
tx.oncomplete = function() {
 
tx.oncomplete = function() {
 
debuglog("return 1")
 
debuglog("return 1")
Line 193: Line 228:  
debuglog("return 0")
 
debuglog("return 0")
    +
// End of promise
 +
 
}).then( function(result) {
 
}).then( function(result) {
 
debuglog("Mark 3");
 
debuglog("Mark 3");
530

edits

Navigation menu