Created
April 5, 2013 16:21
-
-
Save YannickGagnon/5320593 to your computer and use it in GitHub Desktop.
HTML5 WebSql Database Migration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var migrationManager = (function() { | |
/** | |
* Our db instance | |
* @type {Database} | |
*/ | |
var db = null; | |
/** | |
* Our versions, add a version when needed | |
* @type {Array} | |
*/ | |
var versions = ['1.0', '1.1']; | |
return { | |
/** | |
* Establish a db connection | |
* @param {string} name of the database | |
* @param {string} version number, you must use '' or null to work | |
* @param {string} displayName self-describing right? ;) | |
* @param {integer} size set to null, 0 or else | |
*/ | |
connect: function(name, version, displayName, size) { | |
db = window.openDatabase(name, version || '', displayName, size || 0); | |
}, | |
/** | |
* Check if our db version is up2date | |
*/ | |
checkDb: function() { | |
var fromVersionIndex = null; | |
var currentVersion = db.version; | |
var latestVersion = versions[versions.length - 1]; | |
// If we already have the lastest version, | |
// bail out immediately | |
if (currentVersion !== latestVersion) { | |
// Check for empty version, meaning empty db | |
if (currentVersion === '') { | |
fromVersionIndex = 0; | |
} else if (currentVersion !== '') { | |
fromVersionIndex = versions.indexOf(currentVersion); | |
if (fromVersionIndex === -1) { | |
console.log("migrationManager Error: Can't locate version: " + currentVersion + " in versions stack: [" + versions.join(', ') + "]"); | |
return; | |
} | |
fromVersionIndex += 1; | |
} | |
// Change version from current to latest and run all the upgrades | |
db.changeVersion(currentVersion, lastestVersion, function(transaction) { | |
for (var i = fromVersionIndex; i < versions.length; i++) { | |
this.upgradeDbToVersion(transaction, versions[i]); | |
} | |
}.bind(this)); | |
} | |
}, | |
/** | |
* Execute some SQL queries depending on requested version | |
* @param {SQLTransaction} transaction object used to run queries | |
* @param {string} version current upgrade version request | |
*/ | |
upgradeDbToVersion: function(transaction, version) { | |