Fix ANY match segments with range queries

This commit is contained in:
Andris Reinman 2016-06-24 14:53:30 +03:00
parent c3ec92d14f
commit 3182566526

View file

@ -575,14 +575,18 @@ module.exports.getQuery = (id, prefix, callback) => {
break; break;
case 'number': case 'number':
if (rule.value.range) { if (rule.value.range) {
let ruleval = '';
if (rule.value.start) { if (rule.value.start) {
query.push(prefix + '`' + rule.columnType.column + '` >= ?'); ruleval = prefix + '`' + rule.columnType.column + '` >= ?';
values.push(rule.value.start); values.push(rule.value.start);
} }
if (rule.value.end) { if (rule.value.end) {
query.push(prefix + '`' + rule.columnType.column + '` < ?'); ruleval = (ruleval ? '(' + ruleval + ' AND ' : '') + prefix + '`' + rule.columnType.column + '` < ?' + (ruleval ? ')' : '');
values.push(rule.value.end); values.push(rule.value.end);
} }
if (ruleval) {
query.push(ruleval);
}
} else { } else {
query.push(prefix + '`' + rule.columnType.column + '` = ?'); query.push(prefix + '`' + rule.columnType.column + '` = ?');
values.push(rule.value.value); values.push(rule.value.value);
@ -592,38 +596,37 @@ module.exports.getQuery = (id, prefix, callback) => {
if (rule.value.range) { if (rule.value.range) {
let start = rule.value.start || '01-01'; let start = rule.value.start || '01-01';
let end = rule.value.end || '12-31'; let end = rule.value.end || '12-31';
query.push(prefix + '`' + rule.columnType.column + '` >= ?'); query.push('(' + prefix + '`' + rule.columnType.column + '` >= ? AND ' + prefix + '`' + rule.columnType.column + '` < ?)');
values.push(getDate('2000-' + start)); values.push(getDate('2000-' + start));
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(getDate('2000-' + end, true)); values.push(getDate('2000-' + end, true));
} else { } else {
query.push(prefix + '`' + rule.columnType.column + '` >= ?'); query.push('(' + prefix + '`' + rule.columnType.column + '` >= ? AND ' + prefix + '`' + rule.columnType.column + '` < ?)');
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(getDate('2000-' + rule.value.value)); values.push(getDate('2000-' + rule.value.value));
values.push(getDate('2000-' + rule.value.value, true)); values.push(getDate('2000-' + rule.value.value, true));
} }
break; break;
case 'date': case 'date':
if (rule.value.relativeRange) { if (rule.value.relativeRange) {
query.push('(' + prefix + '`' + rule.columnType.column + '` >= ? AND ' + prefix + '`' + rule.columnType.column + '` < ?)');
// start // start
query.push(prefix + '`' + rule.columnType.column + '` >= ?');
values.push(getDate(getRelativeDate(rule.value.start, rule.value.startDirection))); values.push(getDate(getRelativeDate(rule.value.start, rule.value.startDirection)));
// end // end
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(getDate(getRelativeDate(rule.value.end, rule.value.endDirection), true)); values.push(getDate(getRelativeDate(rule.value.end, rule.value.endDirection), true));
} else if (rule.value.range) { } else if (rule.value.range) {
let ruleval = '';
if (rule.value.start) { if (rule.value.start) {
query.push(prefix + '`' + rule.columnType.column + '` >= ?'); ruleval = prefix + '`' + rule.columnType.column + '` >= ?';
values.push(getDate(rule.value.start)); values.push(getDate(rule.value.start));
} }
if (rule.value.end) { if (rule.value.end) {
query.push(prefix + '`' + rule.columnType.column + '` < ?'); ruleval = (ruleval ? '(' + ruleval + ' AND ' : '') + prefix + '`' + rule.columnType.column + '` < ?' + (ruleval ? ')' : '');
values.push(getDate(rule.value.end, true)); values.push(getDate(rule.value.end, true));
} }
if (ruleval) {
query.push(ruleval);
}
} else { } else {
query.push(prefix + '`' + rule.columnType.column + '` >= ?'); query.push('(' + prefix + '`' + rule.columnType.column + '` >= ? AND ' + prefix + '`' + rule.columnType.column + '` < ?)');
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(getDate(rule.value.value)); values.push(getDate(rule.value.value));
values.push(getDate(rule.value.value, true)); values.push(getDate(rule.value.value, true));
} }