diff --git a/lib/db/update.js b/lib/db/update.js index 5a8abde..49cbba7 100644 --- a/lib/db/update.js +++ b/lib/db/update.js @@ -1,47 +1,32 @@ +var async = require('async'); var qb = require('../qb'); -exports.update = function (args, cb) { - switch (args.action) { - case 'insert': - case 'update': - var types = ['view', 'oneToOne', 'manyToOne']; - break; - case 'remove': - var types = ['oneToOne', 'manyToOne', 'view']; - break; - } +exports.update = function (args, done) { + var types = /insert|update/.test(args.action) + ? ['view', 'oneToOne', 'manyToOne'] + // remove + : ['oneToOne', 'manyToOne', 'view']; - (function loopTypes (k) { - if (k == types.length) return cb(); - - args.type = types[k]; - args.tables = args.data[types[k]]; - if (!args.tables) return loopTypes(++k); - var keys = Object.keys(args.tables); + async.eachSeries(types, function (type, done) { + args.type = type; + args.tables = args.data[type]; + if (!args.tables) return done(); - (function loopTables (i) { - if (i == keys.length) return loopTypes(++k); - - var records = args.tables[keys[i]].records; - if (!records) return loopTables(++i); + async.eachSeries(Object.keys(args.tables), function (table, done) { + var records = args.tables[table].records; + if (!records) return done(); - (function loopRecords (j) { - if (j == records.length) return loopTables(++i); - - var record = records[j], - settings = args.settings[keys[i]]; + async.eachSeries(records, function (record, done) { + var settings = args.settings[table]; tbl.inline(args, settings, record); - var data = tbl.query(args, settings, record); - tbl.execute(data.action, args, data.query, record, settings, function (err) { - if (err) return cb(err); - loopRecords(++j); - }); - }(0)); - }(0)); - }(0)); + var data = tbl.query(args, settings, record); + tbl.execute(data.action, args, data.query, record, settings, done); + }, done); + }, done); + }, done); }