public static List<Evaluator> fromExpression(List<ResolvedExpression> exprs) {
    return exprs.stream()
        .map(e -> fromExpression((CallExpression) e))
        .collect(Collectors.toList());
  }
@Test
  void testAlwaysFalse() {
    FieldReferenceExpression ref = new FieldReferenceExpression("f_int", DataTypes.INT(), 2, 2);
    ValueLiteralExpression nullLiteral = new ValueLiteralExpression(null, DataTypes.INT());
    RowData indexRow = intIndexRow(11, 13);
    Map<String, ColumnStats> stats = convertColumnStats(indexRow, queryFields(2));
    FunctionDefinition[] funDefs = new FunctionDefinition[] {
        BuiltInFunctionDefinitions.EQUALS,
        BuiltInFunctionDefinitions.NOT_EQUALS,
        BuiltInFunctionDefinitions.LESS_THAN,
        BuiltInFunctionDefinitions.GREATER_THAN,
        BuiltInFunctionDefinitions.LESS_THAN_OR_EQUAL,
        BuiltInFunctionDefinitions.GREATER_THAN_OR_EQUAL,
        BuiltInFunctionDefinitions.IN};
    for (FunctionDefinition funDef : funDefs) {
      CallExpression expr =
          new CallExpression(
              funDef,
              Arrays.asList(ref, nullLiteral),
              DataTypes.BOOLEAN());
      // always return false if the literal value is null
      assertFalse(fromExpression(expr).eval(stats));
    }
  }