description and source-codemysql-events = function (dsn, settings) {
var mySQLEvents = {
//Watching - to check whether the zongji.on() has been called or not
started: false,
//zongji instance
zongji: {},
//db list which are currenly watching
databases: [],
//table list, key will be dbname
tables: {},
//column list - 2D Array of objects, [dbname][table][column]
columns: {},
//events - unique list of events, thats passed to includeEvents to zongji
events: ['tablemap', 'writerows', 'updaterows', 'deleterows'],
//triggers - each MySQLEvents.add() generate an object, stored here
triggers: [],
dsn,
//settings available - serverId, startAtEnd, binlogName, binlogNextPos, includeEvents, excludeEvents, includeSchema, excludeSchema
settings: settings || {},
//connect - instantiate an ZongJi Class
connect: function(dsn) {
if (!_underScore.isUndefined(dsn.host) &&
!_underScore.isUndefined(dsn.user) &&
!_underScore.isUndefined(dsn.password)
) {
this.dsn = dsn;
}
else {
throw new Error('Error: MySQLEvents connect() needs host, user & password');
}
},
//Add a watcher
add: function(watchon, callback, columnValue) {
var trigger = {
trigger: watchon,
callback: callback
};
if (!_underScore.isUndefined(columnValue)) {
_underScore.extend(trigger, {
value: columnValue
});
}
this.triggers.push(trigger);
this.reload();
return trigger;
},
//unset watcher - this is the stop() method on the returned object of add() call
remove: function(trigger) {
this.triggers = _underScore.reject(this.triggers, function(obj) {
return _underScore.isEqual(obj, trigger);
});
this.reload();
},
//Stop all watchers
stop: function() {
this.zongji.stop();
},
//set the zongji includeSchema based on current watcher list
reload: function() {
var map = {
startAtEnd: true,
includeEvents: this.events,
includeSchema: this.includeSchema()
};
//override default settings
Object.assign(map, this.settings);
//check whether ZongJi started
if (!this.started) {
this.zongji = zongjiManager(this.dsn, map, function(evt) {
if (
evt.getEventName() === 'writerows' ||
evt.getEventName() === 'updaterows' ||
evt.getEventName() === 'deleterows'
) {
//console.log(evt.getEventName());
//console.log("zongji ctrlConnection", mySQLEvents.zongji.ctrlConnection.state);
var database = evt.tableMap[evt.tableId].parentSchema;
var table = evt.tableMap[evt.tableId].tableName;
var columns = evt.tableMap[evt.tableId].columns;
var oldRow = {};
var newRow = {};
var changedColumns = [];
_underScore.each(evt.rows, function(row) {
//console.log(row);
if (evt.getEventName() == 'writerows') {
oldRow = null;
newRow = {
database: database,
table: table,
affectedColumns: columns,
changedColumns: changedColumns,
fields: row
};
}
if (evt.getEventName() == 'deleterows') {
newRow = null;
oldRow = {
database: database,
table: table,
affectedColumns: columns,
changedColumns: changedColumns,
fields: row
};
}
if (evt.getEventName() == 'updaterows') {
//get the changed rows list
_underScore.each(row.before, function(val, key) {
if (row.before[key] != row.after[key]) {
changedColumns.push(key);
}
});
oldRow = {
database: database, ...