Fetch multiple unsent messages at once to speed up delivery

This commit is contained in:
Andris Reinman 2016-05-25 18:01:39 +03:00
parent 9a5d723663
commit f29a8a1b67
9 changed files with 184 additions and 77 deletions

View file

@ -512,7 +512,7 @@ module.exports.deleteRule = (id, callback) => {
});
};
module.exports.getQuery = (id, callback) => {
module.exports.getQuery = (id, prefix, callback) => {
module.exports.get(id, (err, segment) => {
if (err) {
return callback(err);
@ -522,6 +522,8 @@ module.exports.getQuery = (id, callback) => {
return callback(new Error('Segment not found'));
}
prefix = prefix ? prefix + '.' : '';
let query = [];
let values = [];
@ -539,25 +541,25 @@ module.exports.getQuery = (id, callback) => {
segment.rules.forEach(rule => {
switch (rule.columnType.type) {
case 'string':
query.push('`' + rule.columnType.column + '` LIKE ?');
query.push(prefix + '`' + rule.columnType.column + '` LIKE ?');
values.push(rule.value.value);
break;
case 'boolean':
query.push('`' + rule.columnType.column + '` = ?');
query.push(prefix + '`' + rule.columnType.column + '` = ?');
values.push(rule.value.value);
break;
case 'number':
if (rule.value.range) {
if (rule.value.start) {
query.push('`' + rule.columnType.column + '` >= ?');
query.push(prefix + '`' + rule.columnType.column + '` >= ?');
values.push(rule.value.start);
}
if (rule.value.end) {
query.push('`' + rule.columnType.column + '` < ?');
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(rule.value.end);
}
} else {
query.push('`' + rule.columnType.column + '` = ?');
query.push(prefix + '`' + rule.columnType.column + '` = ?');
values.push(rule.value.value);
}
break;
@ -565,13 +567,13 @@ module.exports.getQuery = (id, callback) => {
if (rule.value.range) {
let start = rule.value.start || '01-01';
let end = rule.value.end || '12-31';
query.push('`' + rule.columnType.column + '` >= ?');
query.push(prefix + '`' + rule.columnType.column + '` >= ?');
values.push(getDate('2000-' + start));
query.push('`' + rule.columnType.column + '` < ?');
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(getDate('2000-' + end, true));
} else {
query.push('`' + rule.columnType.column + '` >= ?');
query.push('`' + rule.columnType.column + '` < ?');
query.push(prefix + '`' + rule.columnType.column + '` >= ?');
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(getDate('2000-' + rule.value.value));
values.push(getDate('2000-' + rule.value.value, true));
}
@ -579,16 +581,16 @@ module.exports.getQuery = (id, callback) => {
case 'date':
if (rule.value.range) {
if (rule.value.start) {
query.push('`' + rule.columnType.column + '` >= ?');
query.push(prefix + '`' + rule.columnType.column + '` >= ?');
values.push(getDate(rule.value.start));
}
if (rule.value.end) {
query.push('`' + rule.columnType.column + '` < ?');
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(getDate(rule.value.end, true));
}
} else {
query.push('`' + rule.columnType.column + '` >= ?');
query.push('`' + rule.columnType.column + '` < ?');
query.push(prefix + '`' + rule.columnType.column + '` >= ?');
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(getDate(rule.value.value));
values.push(getDate(rule.value.value, true));
}
@ -612,7 +614,7 @@ module.exports.subscribers = (id, onlySubscribed, callback) => {
if (!segment) {
return callback(new Error('Segment not found'));
}
module.exports.getQuery(id, (err, queryData) => {
module.exports.getQuery(id, false, (err, queryData) => {
if (err) {
return callback(err);
}

View file

@ -122,7 +122,7 @@ module.exports.filter = (listId, request, columns, segmentId, callback) => {
};
if (segmentId) {
segments.getQuery(segmentId, (err, queryData) => {
segments.getQuery(segmentId, false, (err, queryData) => {
if (err) {
return callback(err);
}