@@ -24,12 +24,10 @@ import {
2424 Ordering ,
2525 lessThan ,
2626 greaterThan ,
27- field ,
28- constant
27+ field
2928} from '../lite-api/expressions' ;
3029import { Pipeline } from '../lite-api/pipeline' ;
3130import { doc } from '../lite-api/reference' ;
32- import { isNanValue , isNullValue } from '../model/values' ;
3331import { fail } from '../util/assert' ;
3432
3533import { Bound } from './bound' ;
@@ -54,90 +52,76 @@ import {
5452export function toPipelineBooleanExpr ( f : FilterInternal ) : BooleanExpression {
5553 if ( f instanceof FieldFilterInternal ) {
5654 const fieldValue = field ( f . field . toString ( ) ) ;
57- if ( isNanValue ( f . value ) ) {
58- if ( f . op === Operator . EQUAL ) {
59- return and ( fieldValue . exists ( ) , fieldValue . equal ( constant ( NaN ) ) ) ;
60- } else {
61- return and ( fieldValue . exists ( ) , fieldValue . notEqual ( constant ( NaN ) ) ) ;
55+ // Comparison filters
56+ const value = f . value ;
57+ switch ( f . op ) {
58+ case Operator . LESS_THAN :
59+ return and (
60+ fieldValue . exists ( ) ,
61+ fieldValue . lessThan ( Constant . _fromProto ( value ) )
62+ ) ;
63+ case Operator . LESS_THAN_OR_EQUAL :
64+ return and (
65+ fieldValue . exists ( ) ,
66+ fieldValue . lessThanOrEqual ( Constant . _fromProto ( value ) )
67+ ) ;
68+ case Operator . GREATER_THAN :
69+ return and (
70+ fieldValue . exists ( ) ,
71+ fieldValue . greaterThan ( Constant . _fromProto ( value ) )
72+ ) ;
73+ case Operator . GREATER_THAN_OR_EQUAL :
74+ return and (
75+ fieldValue . exists ( ) ,
76+ fieldValue . greaterThanOrEqual ( Constant . _fromProto ( value ) )
77+ ) ;
78+ case Operator . EQUAL :
79+ return and (
80+ fieldValue . exists ( ) ,
81+ fieldValue . equal ( Constant . _fromProto ( value ) )
82+ ) ;
83+ case Operator . NOT_EQUAL :
84+ return and (
85+ fieldValue . exists ( ) ,
86+ fieldValue . notEqual ( Constant . _fromProto ( value ) )
87+ ) ;
88+ case Operator . ARRAY_CONTAINS :
89+ return and (
90+ fieldValue . exists ( ) ,
91+ fieldValue . arrayContains ( Constant . _fromProto ( value ) )
92+ ) ;
93+ case Operator . IN : {
94+ const values = value ?. arrayValue ?. values ?. map ( ( val : any ) =>
95+ Constant . _fromProto ( val )
96+ ) ;
97+ if ( ! values ) {
98+ return and ( fieldValue . exists ( ) , fieldValue . equalAny ( [ ] ) ) ;
99+ } else if ( values . length === 1 ) {
100+ return and ( fieldValue . exists ( ) , fieldValue . equal ( values [ 0 ] ) ) ;
101+ } else {
102+ return and ( fieldValue . exists ( ) , fieldValue . equalAny ( values ) ) ;
103+ }
62104 }
63- } else if ( isNullValue ( f . value ) ) {
64- if ( f . op === Operator . EQUAL ) {
65- return and ( fieldValue . exists ( ) , fieldValue . equal ( constant ( null ) ) ) ;
66- } else {
67- return and ( fieldValue . exists ( ) , fieldValue . notEqual ( constant ( null ) ) ) ;
105+ case Operator . ARRAY_CONTAINS_ANY : {
106+ const values = value ?. arrayValue ?. values ?. map ( ( val : any ) =>
107+ Constant . _fromProto ( val )
108+ ) ;
109+ return and ( fieldValue . exists ( ) , fieldValue . arrayContainsAny ( values ! ) ) ;
68110 }
69- } else {
70- // Comparison filters
71- const value = f . value ;
72- switch ( f . op ) {
73- case Operator . LESS_THAN :
74- return and (
75- fieldValue . exists ( ) ,
76- fieldValue . lessThan ( Constant . _fromProto ( value ) )
77- ) ;
78- case Operator . LESS_THAN_OR_EQUAL :
79- return and (
80- fieldValue . exists ( ) ,
81- fieldValue . lessThanOrEqual ( Constant . _fromProto ( value ) )
82- ) ;
83- case Operator . GREATER_THAN :
84- return and (
85- fieldValue . exists ( ) ,
86- fieldValue . greaterThan ( Constant . _fromProto ( value ) )
87- ) ;
88- case Operator . GREATER_THAN_OR_EQUAL :
89- return and (
90- fieldValue . exists ( ) ,
91- fieldValue . greaterThanOrEqual ( Constant . _fromProto ( value ) )
92- ) ;
93- case Operator . EQUAL :
94- return and (
95- fieldValue . exists ( ) ,
96- fieldValue . equal ( Constant . _fromProto ( value ) )
97- ) ;
98- case Operator . NOT_EQUAL :
99- return and (
100- fieldValue . exists ( ) ,
101- fieldValue . notEqual ( Constant . _fromProto ( value ) )
102- ) ;
103- case Operator . ARRAY_CONTAINS :
104- return and (
105- fieldValue . exists ( ) ,
106- fieldValue . arrayContains ( Constant . _fromProto ( value ) )
107- ) ;
108- case Operator . IN : {
109- const values = value ?. arrayValue ?. values ?. map ( ( val : any ) =>
110- Constant . _fromProto ( val )
111- ) ;
112- if ( ! values ) {
113- return and ( fieldValue . exists ( ) , fieldValue . equalAny ( [ ] ) ) ;
114- } else if ( values . length === 1 ) {
115- return and ( fieldValue . exists ( ) , fieldValue . equal ( values [ 0 ] ) ) ;
116- } else {
117- return and ( fieldValue . exists ( ) , fieldValue . equalAny ( values ) ) ;
118- }
119- }
120- case Operator . ARRAY_CONTAINS_ANY : {
121- const values = value ?. arrayValue ?. values ?. map ( ( val : any ) =>
122- Constant . _fromProto ( val )
123- ) ;
124- return and ( fieldValue . exists ( ) , fieldValue . arrayContainsAny ( values ! ) ) ;
125- }
126- case Operator . NOT_IN : {
127- const values = value ?. arrayValue ?. values ?. map ( ( val : any ) =>
128- Constant . _fromProto ( val )
129- ) ;
130- if ( ! values ) {
131- return and ( fieldValue . exists ( ) , fieldValue . notEqualAny ( [ ] ) ) ;
132- } else if ( values . length === 1 ) {
133- return and ( fieldValue . exists ( ) , fieldValue . notEqual ( values [ 0 ] ) ) ;
134- } else {
135- return and ( fieldValue . exists ( ) , fieldValue . notEqualAny ( values ) ) ;
136- }
111+ case Operator . NOT_IN : {
112+ const values = value ?. arrayValue ?. values ?. map ( ( val : any ) =>
113+ Constant . _fromProto ( val )
114+ ) ;
115+ if ( ! values ) {
116+ return and ( fieldValue . exists ( ) , fieldValue . notEqualAny ( [ ] ) ) ;
117+ } else if ( values . length === 1 ) {
118+ return and ( fieldValue . exists ( ) , fieldValue . notEqual ( values [ 0 ] ) ) ;
119+ } else {
120+ return and ( fieldValue . exists ( ) , fieldValue . notEqualAny ( values ) ) ;
137121 }
138- default :
139- fail ( 0x9047 , 'Unexpected operator' ) ;
140122 }
123+ default :
124+ fail ( 0x9047 , 'Unexpected operator' ) ;
141125 }
142126 } else if ( f instanceof CompositeFilterInternal ) {
143127 switch ( f . op ) {
0 commit comments