in exprs.go [569:596]
func (up *unboundUnaryPredicate) Bind(schema *Schema, caseSensitive bool) (BooleanExpression, error) {
bound, err := up.term.Bind(schema, caseSensitive)
if err != nil {
return nil, err
}
// fast case optimizations
switch up.op {
case OpIsNull:
if bound.Ref().Field().Required && !schema.FieldHasOptionalParent(bound.Ref().Field().ID) {
return AlwaysFalse{}, nil
}
case OpNotNull:
if bound.Ref().Field().Required && !schema.FieldHasOptionalParent(bound.Ref().Field().ID) {
return AlwaysTrue{}, nil
}
case OpIsNan:
if !bound.Type().Equals(PrimitiveTypes.Float32) && !bound.Type().Equals(PrimitiveTypes.Float64) {
return AlwaysFalse{}, nil
}
case OpNotNan:
if !bound.Type().Equals(PrimitiveTypes.Float32) && !bound.Type().Equals(PrimitiveTypes.Float64) {
return AlwaysTrue{}, nil
}
}
return createBoundUnaryPredicate(up.op, bound), nil
}