@@ -28,7 +28,6 @@ import {
2828} from '../lite-api/expressions' ;
2929import { Pipeline } from '../lite-api/pipeline' ;
3030import { doc } from '../lite-api/reference' ;
31- import { isNanValue , isNullValue } from '../model/values' ;
3231import { fail } from '../util/assert' ;
3332
3433import { Bound } from './bound' ;
@@ -53,90 +52,76 @@ import {
5352export function toPipelineBooleanExpr ( f : FilterInternal ) : BooleanExpression {
5453 if ( f instanceof FieldFilterInternal ) {
5554 const fieldValue = field ( f . field . toString ( ) ) ;
56- if ( isNanValue ( f . value ) ) {
57- if ( f . op === Operator . EQUAL ) {
58- return and ( fieldValue . exists ( ) , fieldValue . isNan ( ) ) ;
59- } else {
60- return and ( fieldValue . exists ( ) , fieldValue . isNotNan ( ) ) ;
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+ }
61104 }
62- } else if ( isNullValue ( f . value ) ) {
63- if ( f . op === Operator . EQUAL ) {
64- return and ( fieldValue . exists ( ) , fieldValue . isNull ( ) ) ;
65- } else {
66- return and ( fieldValue . exists ( ) , fieldValue . isNotNull ( ) ) ;
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 ! ) ) ;
67110 }
68- } else {
69- // Comparison filters
70- const value = f . value ;
71- switch ( f . op ) {
72- case Operator . LESS_THAN :
73- return and (
74- fieldValue . exists ( ) ,
75- fieldValue . lessThan ( Constant . _fromProto ( value ) )
76- ) ;
77- case Operator . LESS_THAN_OR_EQUAL :
78- return and (
79- fieldValue . exists ( ) ,
80- fieldValue . lessThanOrEqual ( Constant . _fromProto ( value ) )
81- ) ;
82- case Operator . GREATER_THAN :
83- return and (
84- fieldValue . exists ( ) ,
85- fieldValue . greaterThan ( Constant . _fromProto ( value ) )
86- ) ;
87- case Operator . GREATER_THAN_OR_EQUAL :
88- return and (
89- fieldValue . exists ( ) ,
90- fieldValue . greaterThanOrEqual ( Constant . _fromProto ( value ) )
91- ) ;
92- case Operator . EQUAL :
93- return and (
94- fieldValue . exists ( ) ,
95- fieldValue . equal ( Constant . _fromProto ( value ) )
96- ) ;
97- case Operator . NOT_EQUAL :
98- return and (
99- fieldValue . exists ( ) ,
100- fieldValue . notEqual ( Constant . _fromProto ( value ) )
101- ) ;
102- case Operator . ARRAY_CONTAINS :
103- return and (
104- fieldValue . exists ( ) ,
105- fieldValue . arrayContains ( Constant . _fromProto ( value ) )
106- ) ;
107- case Operator . IN : {
108- const values = value ?. arrayValue ?. values ?. map ( ( val : any ) =>
109- Constant . _fromProto ( val )
110- ) ;
111- if ( ! values ) {
112- return and ( fieldValue . exists ( ) , fieldValue . equalAny ( [ ] ) ) ;
113- } else if ( values . length === 1 ) {
114- return and ( fieldValue . exists ( ) , fieldValue . equal ( values [ 0 ] ) ) ;
115- } else {
116- return and ( fieldValue . exists ( ) , fieldValue . equalAny ( values ) ) ;
117- }
118- }
119- case Operator . ARRAY_CONTAINS_ANY : {
120- const values = value ?. arrayValue ?. values ?. map ( ( val : any ) =>
121- Constant . _fromProto ( val )
122- ) ;
123- return and ( fieldValue . exists ( ) , fieldValue . arrayContainsAny ( values ! ) ) ;
124- }
125- case Operator . NOT_IN : {
126- const values = value ?. arrayValue ?. values ?. map ( ( val : any ) =>
127- Constant . _fromProto ( val )
128- ) ;
129- if ( ! values ) {
130- return and ( fieldValue . exists ( ) , fieldValue . notEqualAny ( [ ] ) ) ;
131- } else if ( values . length === 1 ) {
132- return and ( fieldValue . exists ( ) , fieldValue . notEqual ( values [ 0 ] ) ) ;
133- } else {
134- return and ( fieldValue . exists ( ) , fieldValue . notEqualAny ( values ) ) ;
135- }
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 ) ) ;
136121 }
137- default :
138- fail ( 0x9047 , 'Unexpected operator' ) ;
139122 }
123+ default :
124+ fail ( 0x9047 , 'Unexpected operator' ) ;
140125 }
141126 } else if ( f instanceof CompositeFilterInternal ) {
142127 switch ( f . op ) {
0 commit comments