224 lines
5.4 KiB
JavaScript
224 lines
5.4 KiB
JavaScript
|
|
var cps = require('cps');
|
|
var Class = require('better-js-class');
|
|
var $U = require('underscore');
|
|
|
|
var db = require('../lib/node-mysql.js');
|
|
var DB = db.DB;
|
|
|
|
|
|
var cb = function() {
|
|
var handleError = function(e) {
|
|
if (e.stack) {
|
|
console.log(e.stack);
|
|
} else {
|
|
console.log(e);
|
|
}
|
|
};
|
|
|
|
var start = new Date();
|
|
return function(err, res) {
|
|
try {
|
|
var end = new Date();
|
|
console.log('time spent: ', end-start);
|
|
if (err) {
|
|
handleError(err);
|
|
} else {
|
|
console.log(res);
|
|
}
|
|
} catch(e) {
|
|
handleError(e);
|
|
} finally {
|
|
// dw.end();
|
|
}
|
|
};
|
|
}();
|
|
|
|
var dw = new db.DB({
|
|
host : 'localhost',
|
|
user : 'root',
|
|
password : '',
|
|
database : 'data_warehouse_dev'
|
|
});
|
|
|
|
var Model = function() {
|
|
var cls = {
|
|
};
|
|
|
|
var Row = Class(db.Row, {
|
|
_init: function(data) {
|
|
this.parent._init.call(this, data, {
|
|
table: Table
|
|
});
|
|
}
|
|
});
|
|
|
|
var TableClass = Class(db.Table, {
|
|
});
|
|
|
|
var Table = new TableClass({
|
|
'name': 'subscription_initiation',
|
|
'idFieldName': 'id',
|
|
'rowClass': Row,
|
|
'db': dw
|
|
});
|
|
|
|
$U.extend(cls, {
|
|
Row: Row,
|
|
Table: Table
|
|
});
|
|
|
|
return cls;
|
|
}();
|
|
|
|
|
|
var findAndUpdateTest = function(cb) {
|
|
dw.connect(function(conn, cb) {
|
|
var o;
|
|
cps.seq([
|
|
function(_, cb) {
|
|
var q = Model.Table.baseQuery('order by date_created desc limit 1');
|
|
console.log(q);
|
|
Model.Table.find(conn, q, cb);
|
|
},
|
|
function(res, cb) {
|
|
o = res[0];
|
|
var dto = {
|
|
'first_shipment_id': 300,
|
|
'junk': function() {}
|
|
};
|
|
o.update(conn, dto, cb);
|
|
},
|
|
function(res, cb) {
|
|
console.log(res);
|
|
cb();
|
|
}
|
|
], cb);
|
|
}, cb);
|
|
};
|
|
|
|
|
|
var getSampleDto = function() {
|
|
return {
|
|
id: 46585,
|
|
user_id: '1',
|
|
subscription_id: '1',
|
|
order_id: '1',
|
|
product_id: '1',
|
|
init_date: new Date(),
|
|
subscription_status: 'inactive',
|
|
date_created: new Date(),
|
|
last_updated: new Date(),
|
|
version: 100
|
|
}
|
|
};
|
|
|
|
var createTest = function(cb) {
|
|
dw.connect(function(conn, cb) {
|
|
cps.seq([
|
|
function(_, cb) {
|
|
Model.Table.clone(conn, getSampleDto(), cb);
|
|
},
|
|
function(res, cb) {
|
|
console.log(res);
|
|
cb();
|
|
}
|
|
], cb);
|
|
}, cb);
|
|
};
|
|
|
|
var txnTest = function(cb) {
|
|
var add2Rows = function(conn, b, cb) {
|
|
dw.transaction(conn, function(conn, cb) {
|
|
cps.seq([
|
|
function(_, cb) {
|
|
Model.Table.create(conn, getSampleDto(), cb);
|
|
},
|
|
function(_, cb) {
|
|
dw.transaction(conn, function(conn, cb) {
|
|
Model.Table.create(conn, getSampleDto(), cb);
|
|
}, cb);
|
|
},
|
|
function(_, cb) {
|
|
if (b) {
|
|
cb(null, "Commit");
|
|
} else {
|
|
throw new Error("Roll back");
|
|
}
|
|
}
|
|
], cb);
|
|
}, cb);
|
|
|
|
};
|
|
|
|
dw.connect(function(conn, cb) {
|
|
// dw.transaction(conn, function(conn, cb) {
|
|
cps.seq([
|
|
function(_, cb) {
|
|
add2Rows(conn, true, cb);
|
|
},
|
|
function(_, cb) {
|
|
add2Rows(conn, true, cb);
|
|
}
|
|
], cb);
|
|
// }, cb);
|
|
}, cb);
|
|
};
|
|
|
|
var lockTest = function(cb) {
|
|
var id = 74;
|
|
|
|
var exclusiveUpdate = function(conn, delay, value, cb) {
|
|
dw.transaction(conn, function(conn, cb) {
|
|
cps.seq([
|
|
function(_, cb) {
|
|
console.log('start to lock: ' + value);
|
|
Model.Table.lockById(conn, id, cb);
|
|
},
|
|
function(res, cb) {
|
|
console.log('locked to update to: ' + value);
|
|
setTimeout(function() {
|
|
cb(null, res);
|
|
}, delay);
|
|
},
|
|
function(row, cb) {
|
|
if (value == 'foo1') {
|
|
row.update(conn, {'product_id': 50}, cb);
|
|
} else {
|
|
row.update(conn, {'subscription_status': value}, cb);
|
|
}
|
|
},
|
|
function(res, cb) {
|
|
console.log('updated with value: ' + value);
|
|
console.log(res);
|
|
cb();
|
|
}
|
|
], cb)
|
|
}, cb);
|
|
};
|
|
|
|
var conn;
|
|
|
|
dw.connect(function(conn, cb) {
|
|
cps.seq([
|
|
function(_, cb) {
|
|
cps.parallel([
|
|
function(cb) {
|
|
exclusiveUpdate(conn, 2000, 'foo1', cb);
|
|
},
|
|
function(cb) {
|
|
exclusiveUpdate(conn, 0, 'bar1', cb);
|
|
}
|
|
], cb);
|
|
},
|
|
function(res, cb) {
|
|
console.log(res);
|
|
cb();
|
|
}
|
|
], cb);
|
|
}, cb);
|
|
};
|
|
|
|
|
|
createTest(cb);
|