From 3b581ef492cb7e7bb9a22945f156703854244637 Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Wed, 9 Dec 2015 00:57:31 +0000 Subject: [PATCH] slice (copy) columns before popping (deleting) --- lib/dbwrap.js | 84 ++++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/lib/dbwrap.js b/lib/dbwrap.js index 487cd82..0de66f3 100644 --- a/lib/dbwrap.js +++ b/lib/dbwrap.js @@ -7,6 +7,7 @@ function wrap(db, dir) { var promises = []; var earr = []; var dbsMap = {}; + var debug = false; db.escape = function (str) { return (str||'').replace(/'/g, "''"); @@ -53,8 +54,10 @@ function wrap(db, dir) { return; } - console.log('sqlite3 rows 0'); - console.log(result); + if (debug) { + console.log('sqlite3 rows 0'); + console.log(result); + } function alterTable() { var column = columns.pop(); @@ -77,8 +80,11 @@ function wrap(db, dir) { + db.escape(column.name) + " " + db.escape(column.type) + " DEFAULT null" ; - console.log('sqlite3 1'); - console.log(sql); + + if (debug) { + console.log('sqlite3 1'); + console.log(sql); + } db.all(sql, earr, function (err, results) { if (err) { @@ -88,12 +94,16 @@ function wrap(db, dir) { return; } - console.log('sqlite3 rows 1'); - console.log(results); + if (debug) { + console.log('sqlite3 rows 1'); + console.log(results); + } alterTable(); }); } + + columns = columns.slice(0); alterTable(); }); } @@ -113,29 +123,33 @@ function wrap(db, dir) { return col; } - function createTable(opts) { - if (!opts.modelname && !opts.tablename) { - throw new Error('Please specify opts.modelname'); + function createTable(dir) { + if (!dir.modelname && !dir.tablename) { + throw new Error('Please specify dir.modelname'); } - if (!opts.tablename) { - opts.tablename = snakeCase(opts.modelname); + if (!dir.tablename) { + dir.tablename = snakeCase(dir.modelname); } - if (!opts.indices) { - opts.indices = []; + if (!dir.modelname) { + dir.modelname = upperCamelCase(dir.tablename); + } + + if (!dir.indices) { + dir.indices = []; } var DB = {}; - var tablename = db.escape(snakeCase(opts.tablename) || 'data'); - var idname = db.escape(snakeCase(opts.idname || 'id')); - var idnameCased = (camelCase(opts.idname || 'id')); + var tablename = (db.escape(dir.tablename || 'data')); + var idname = (db.escape(dir.idname || 'id')); + var idnameCased = (camelCase(dir.idname || 'id')); - opts.indices.forEach(normalizeColumn); + dir.indices.forEach(normalizeColumn); db = PromiseA.promisifyAll(db); - if (opts && opts.verbose || db.verbose) { + if (dir && dir.verbose || db.verbose) { console.log('Getting Verbose up in here'); db.on('trace', function (str) { console.log('SQL:', str); @@ -204,26 +218,26 @@ function wrap(db, dir) { }); }; - DB.find = function (opts, params) { + DB.find = function (obj, params) { var sql = 'SELECT * FROM \'' + tablename + '\' '; - var keys = opts && Object.keys(opts); + var keys = obj && Object.keys(obj); - if (opts && keys.length) { + if (obj && keys.length) { sql += 'WHERE '; keys.forEach(function (key, i) { if (i !== 0) { sql += 'AND '; } - if (null === opts[key]) { - sql += db.escape(snakeCase(key)) + " IS '" + db.escape(opts[key]) + "'"; + if (null === obj[key]) { + sql += db.escape(snakeCase(key)) + " IS '" + db.escape(obj[key]) + "'"; } else { - sql += db.escape(snakeCase(key)) + " = '" + db.escape(opts[key]) + "'"; + sql += db.escape(snakeCase(key)) + " = '" + db.escape(obj[key]) + "'"; } }); } - else if (null !== opts || (params && !params.limit)) { + else if (null !== obj || (params && !params.limit)) { return PromiseA.reject(new Error("to find all you must explicitly specify find(null, { limit: <> })")); } @@ -356,7 +370,7 @@ function wrap(db, dir) { var vals = []; ['hasOne', 'hasMany', 'hasAndBelongsToMany', 'belongsTo', 'belongsToMany'].forEach(function (relname) { - var rels = opts[relname]; + var rels = dir[relname]; if (!rels) { return; @@ -375,7 +389,7 @@ function wrap(db, dir) { }); }); - opts.indices.forEach(function (col) { + dir.indices.forEach(function (col) { var val = data[camelCase(col.name)]; //if (col.name in data) @@ -490,7 +504,7 @@ function wrap(db, dir) { var indexable = [idname + ' TEXT']; var sql; - opts.indices.forEach(function (col) { + dir.indices.forEach(function (col) { if ('string' === typeof col) { col = { name: col, type: 'TEXT' }; } @@ -509,7 +523,7 @@ function wrap(db, dir) { ; db.runAsync(sql).then(function () { - sqlite3GetColumns(tablename, opts.indices, function (err) { + sqlite3GetColumns(tablename, dir.indices, function (err) { if (err) { console.error('[Error] dbwrap get columns'); console.error(err.stack); @@ -523,16 +537,10 @@ function wrap(db, dir) { }); } - dir.forEach(function (opts) { - promises.push(createTable(opts).then(function (dbw) { - var modelname = opts.modelname; + dir.forEach(function (dir) { + promises.push(createTable(dir).then(function (dbw) { - if (!modelname) { - modelname = (opts.tablename || 'data'); - modelname = upperCamelCase(modelname); - } - - dbsMap[modelname] = dbw; + dbsMap[dir.modelname] = dbw; return dbw; }));