From d29b29027525f2cdbabb3547b75d96e155681774 Mon Sep 17 00:00:00 2001 From: vizeke Date: Fri, 9 Jun 2017 12:58:27 -0300 Subject: [PATCH] Add nested where fields support --- src/index.js | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/index.js b/src/index.js index 2e22edd..12fce16 100644 --- a/src/index.js +++ b/src/index.js @@ -16,12 +16,24 @@ const UPDATE_OPTS_DEFAULTS = {} const DELETE_OPTS_DEFAULTS = {} const RUN_OPTS_DEFAULTS = {} +var getRowField = function (row, field) { + if (field.indexOf('.') === -1) { + return row(field) + } + let fields = field.split('.') + let resultRow = row(fields[ 0 ]) + for (let i = 1; i < fields.length; i++) { + resultRow = resultRow(fields[ i ]) + } + return resultRow +} + const equal = function (r, row, field, value) { - return row(field).default(null).eq(value) + return getRowField(field).default(null).eq(value) } const notEqual = function (r, row, field, value) { - return row(field).default(null).ne(value) + return getRowField(field).default(null).ne(value) } /** @@ -55,34 +67,34 @@ export const OPERATORS = { '!=': notEqual, '!==': notEqual, '>': function (r, row, field, value) { - return row(field).default(null).gt(value) + return getRowField(field).default(null).gt(value) }, '>=': function (r, row, field, value) { - return row(field).default(null).ge(value) + return getRowField(field).default(null).ge(value) }, '<': function (r, row, field, value) { - return row(field).default(null).lt(value) + return getRowField(field).default(null).lt(value) }, '<=': function (r, row, field, value) { - return row(field).default(null).le(value) + return getRowField(field).default(null).le(value) }, 'isectEmpty': function (r, row, field, value) { - return row(field).default([]).setIntersection(r.expr(value).default([])).count().eq(0) + return getRowField(field).default([]).setIntersection(r.expr(value).default([])).count().eq(0) }, 'isectNotEmpty': function (r, row, field, value) { - return row(field).default([]).setIntersection(r.expr(value).default([])).count().ne(0) + return getRowField(field).default([]).setIntersection(r.expr(value).default([])).count().ne(0) }, 'in': function (r, row, field, value) { - return r.expr(value).default(r.expr([])).contains(row(field).default(null)) + return r.expr(value).default(r.expr([])).contains(getRowField(field).default(null)) }, 'notIn': function (r, row, field, value) { - return r.expr(value).default(r.expr([])).contains(row(field).default(null)).not() + return r.expr(value).default(r.expr([])).contains(getRowField(field).default(null)).not() }, 'contains': function (r, row, field, value) { - return row(field).default([]).contains(value) + return getRowField(field).default([]).contains(value) }, 'notContains': function (r, row, field, value) { - return row(field).default([]).contains(value).not() + return getRowField(field).default([]).contains(value).not() } }