2021-03-14 11:09:02 +01:00

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);