@@ -5,6 +5,7 @@ var deepMixIn = require('mout/object/deepMixIn');
55var forEach = require ( 'mout/array/forEach' ) ;
66var contains = require ( 'mout/array/contains' ) ;
77var isObject = require ( 'mout/lang/isObject' ) ;
8+ var isEmpty = require ( 'mout/lang/isEmpty' ) ;
89var isString = require ( 'mout/lang/isString' ) ;
910var upperCase = require ( 'mout/string/upperCase' ) ;
1011var underscore = require ( 'mout/string/underscore' ) ;
@@ -53,53 +54,54 @@ function filterQuery(resourceConfig, params, options) {
5354 } ) ;
5455
5556 var query = r . db ( options . db || this . defaults . db ) . table ( resourceConfig . table || underscore ( resourceConfig . name ) ) ;
56- var subQuery ;
5757
58- forOwn ( params . where , function ( criteria , field ) {
59- if ( ! isObject ( criteria ) ) {
60- params . where [ field ] = {
61- '==' : criteria
62- } ;
63- }
64- forOwn ( criteria , function ( v , op ) {
65- if ( op === '==' || op === '===' ) {
66- subQuery = subQuery ? subQuery . and ( r . row ( field ) . default ( null ) . eq ( v ) ) : r . row ( field ) . default ( null ) . eq ( v ) ;
67- } else if ( op === '!=' || op === '!==' ) {
68- subQuery = subQuery ? subQuery . and ( r . row ( field ) . default ( null ) . ne ( v ) ) : r . row ( field ) . default ( null ) . ne ( v ) ;
69- } else if ( op === '>' ) {
70- subQuery = subQuery ? subQuery . and ( r . row ( field ) . default ( null ) . gt ( v ) ) : r . row ( field ) . default ( null ) . gt ( v ) ;
71- } else if ( op === '>=' ) {
72- subQuery = subQuery ? subQuery . and ( r . row ( field ) . default ( null ) . ge ( v ) ) : r . row ( field ) . default ( null ) . ge ( v ) ;
73- } else if ( op === '<' ) {
74- subQuery = subQuery ? subQuery . and ( r . row ( field ) . default ( null ) . lt ( v ) ) : r . row ( field ) . default ( null ) . lt ( v ) ;
75- } else if ( op === '<=' ) {
76- subQuery = subQuery ? subQuery . and ( r . row ( field ) . default ( null ) . le ( v ) ) : r . row ( field ) . default ( null ) . le ( v ) ;
77- } else if ( op === 'in' ) {
78- subQuery = subQuery ? subQuery . and ( r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( r . row ( field ) . default ( null ) ) ) : r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( r . row ( field ) . default ( null ) ) ;
79- } else if ( op === 'notIn' ) {
80- subQuery = subQuery ? subQuery . and ( r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( r . row ( field ) . default ( null ) ) . not ( ) ) : r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( r . row ( field ) . default ( null ) ) . not ( ) ;
81- } else if ( op === '|==' || op === '|===' ) {
82- subQuery = subQuery ? subQuery . or ( r . row ( field ) . default ( null ) . eq ( v ) ) : r . row ( field ) . default ( null ) . eq ( v ) ;
83- } else if ( op === '|!=' || op === '|!==' ) {
84- subQuery = subQuery ? subQuery . or ( r . row ( field ) . default ( null ) . ne ( v ) ) : r . row ( field ) . default ( null ) . ne ( v ) ;
85- } else if ( op === '|>' ) {
86- subQuery = subQuery ? subQuery . or ( r . row ( field ) . default ( null ) . gt ( v ) ) : r . row ( field ) . default ( null ) . gt ( v ) ;
87- } else if ( op === '|>=' ) {
88- subQuery = subQuery ? subQuery . or ( r . row ( field ) . default ( null ) . ge ( v ) ) : r . row ( field ) . default ( null ) . ge ( v ) ;
89- } else if ( op === '|<' ) {
90- subQuery = subQuery ? subQuery . or ( r . row ( field ) . default ( null ) . lt ( v ) ) : r . row ( field ) . default ( null ) . lt ( v ) ;
91- } else if ( op === '|<=' ) {
92- subQuery = subQuery ? subQuery . or ( r . row ( field ) . default ( null ) . le ( v ) ) : r . row ( field ) . default ( null ) . le ( v ) ;
93- } else if ( op === '|in' ) {
94- subQuery = subQuery ? subQuery . or ( r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( r . row ( field ) . default ( null ) ) ) : r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( r . row ( field ) . default ( null ) ) ;
95- } else if ( op === '|notIn' ) {
96- subQuery = subQuery ? subQuery . or ( r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( r . row ( field ) . default ( null ) ) . not ( ) ) : r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( r . row ( field ) . default ( null ) ) . not ( ) ;
97- }
58+ if ( ! isEmpty ( params . where ) ) {
59+ query = query . filter ( function ( row ) {
60+ var subQuery ;
61+ forOwn ( params . where , function ( criteria , field ) {
62+ if ( ! isObject ( criteria ) ) {
63+ params . where [ field ] = {
64+ '==' : criteria
65+ } ;
66+ }
67+ forOwn ( criteria , function ( v , op ) {
68+ if ( op === '==' || op === '===' ) {
69+ subQuery = subQuery ? subQuery . and ( row ( field ) . default ( null ) . eq ( v ) ) : row ( field ) . default ( null ) . eq ( v ) ;
70+ } else if ( op === '!=' || op === '!==' ) {
71+ subQuery = subQuery ? subQuery . and ( row ( field ) . default ( null ) . ne ( v ) ) : row ( field ) . default ( null ) . ne ( v ) ;
72+ } else if ( op === '>' ) {
73+ subQuery = subQuery ? subQuery . and ( row ( field ) . default ( null ) . gt ( v ) ) : row ( field ) . default ( null ) . gt ( v ) ;
74+ } else if ( op === '>=' ) {
75+ subQuery = subQuery ? subQuery . and ( row ( field ) . default ( null ) . ge ( v ) ) : row ( field ) . default ( null ) . ge ( v ) ;
76+ } else if ( op === '<' ) {
77+ subQuery = subQuery ? subQuery . and ( row ( field ) . default ( null ) . lt ( v ) ) : row ( field ) . default ( null ) . lt ( v ) ;
78+ } else if ( op === '<=' ) {
79+ subQuery = subQuery ? subQuery . and ( row ( field ) . default ( null ) . le ( v ) ) : row ( field ) . default ( null ) . le ( v ) ;
80+ } else if ( op === 'in' ) {
81+ subQuery = subQuery ? subQuery . and ( r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( row ( field ) . default ( null ) ) ) : r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( row ( field ) . default ( null ) ) ;
82+ } else if ( op === 'notIn' ) {
83+ subQuery = subQuery ? subQuery . and ( r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( row ( field ) . default ( null ) ) . not ( ) ) : r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( row ( field ) . default ( null ) ) . not ( ) ;
84+ } else if ( op === '|==' || op === '|===' ) {
85+ subQuery = subQuery ? subQuery . or ( row ( field ) . default ( null ) . eq ( v ) ) : row ( field ) . default ( null ) . eq ( v ) ;
86+ } else if ( op === '|!=' || op === '|!==' ) {
87+ subQuery = subQuery ? subQuery . or ( row ( field ) . default ( null ) . ne ( v ) ) : row ( field ) . default ( null ) . ne ( v ) ;
88+ } else if ( op === '|>' ) {
89+ subQuery = subQuery ? subQuery . or ( row ( field ) . default ( null ) . gt ( v ) ) : row ( field ) . default ( null ) . gt ( v ) ;
90+ } else if ( op === '|>=' ) {
91+ subQuery = subQuery ? subQuery . or ( row ( field ) . default ( null ) . ge ( v ) ) : row ( field ) . default ( null ) . ge ( v ) ;
92+ } else if ( op === '|<' ) {
93+ subQuery = subQuery ? subQuery . or ( row ( field ) . default ( null ) . lt ( v ) ) : row ( field ) . default ( null ) . lt ( v ) ;
94+ } else if ( op === '|<=' ) {
95+ subQuery = subQuery ? subQuery . or ( row ( field ) . default ( null ) . le ( v ) ) : row ( field ) . default ( null ) . le ( v ) ;
96+ } else if ( op === '|in' ) {
97+ subQuery = subQuery ? subQuery . or ( r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( row ( field ) . default ( null ) ) ) : r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( row ( field ) . default ( null ) ) ;
98+ } else if ( op === '|notIn' ) {
99+ subQuery = subQuery ? subQuery . or ( r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( row ( field ) . default ( null ) ) . not ( ) ) : r . expr ( v ) . default ( r . expr ( [ ] ) ) . contains ( row ( field ) . default ( null ) ) . not ( ) ;
100+ }
101+ } ) ;
102+ } ) ;
103+ return subQuery ;
98104 } ) ;
99- } ) ;
100-
101- if ( subQuery ) {
102- query = query . filter ( subQuery ) ;
103105 }
104106
105107 if ( params . orderBy ) {
0 commit comments