You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2018/11/02 11:16:54 UTC

[45/56] lucene-solr:jira/gradle: Add :solr:contrib:analytics module

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
deleted file mode 100644
index afd2c2a..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
+++ /dev/null
@@ -1,723 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.analytics.function.mapping;
-
-import java.util.function.Consumer;
-import java.util.function.DoubleConsumer;
-import java.util.function.IntConsumer;
-import java.util.function.LongConsumer;
-
-import org.apache.solr.analytics.ExpressionFactory.CreatorFunction;
-import org.apache.solr.analytics.util.function.BooleanConsumer;
-import org.apache.solr.analytics.util.function.FloatConsumer;
-import org.apache.solr.analytics.value.AnalyticsValue;
-import org.apache.solr.analytics.value.AnalyticsValueStream;
-import org.apache.solr.analytics.value.BooleanValue;
-import org.apache.solr.analytics.value.BooleanValueStream;
-import org.apache.solr.analytics.value.DateValue;
-import org.apache.solr.analytics.value.DateValueStream;
-import org.apache.solr.analytics.value.DoubleValue;
-import org.apache.solr.analytics.value.DoubleValueStream;
-import org.apache.solr.analytics.value.FloatValue;
-import org.apache.solr.analytics.value.FloatValueStream;
-import org.apache.solr.analytics.value.IntValue;
-import org.apache.solr.analytics.value.IntValueStream;
-import org.apache.solr.analytics.value.LongValue;
-import org.apache.solr.analytics.value.LongValueStream;
-import org.apache.solr.analytics.value.StringValue;
-import org.apache.solr.analytics.value.StringValueStream;
-import org.apache.solr.analytics.value.AnalyticsValue.AbstractAnalyticsValue;
-import org.apache.solr.analytics.value.AnalyticsValueStream.AbstractAnalyticsValueStream;
-import org.apache.solr.analytics.value.BooleanValue.AbstractBooleanValue;
-import org.apache.solr.analytics.value.BooleanValueStream.AbstractBooleanValueStream;
-import org.apache.solr.analytics.value.DateValue.AbstractDateValue;
-import org.apache.solr.analytics.value.DateValueStream.AbstractDateValueStream;
-import org.apache.solr.analytics.value.DoubleValue.AbstractDoubleValue;
-import org.apache.solr.analytics.value.DoubleValueStream.AbstractDoubleValueStream;
-import org.apache.solr.analytics.value.FloatValue.AbstractFloatValue;
-import org.apache.solr.analytics.value.FloatValueStream.AbstractFloatValueStream;
-import org.apache.solr.analytics.value.IntValue.AbstractIntValue;
-import org.apache.solr.analytics.value.IntValueStream.AbstractIntValueStream;
-import org.apache.solr.analytics.value.LongValue.AbstractLongValue;
-import org.apache.solr.analytics.value.LongValueStream.AbstractLongValueStream;
-import org.apache.solr.analytics.value.StringValue.AbstractStringValue;
-import org.apache.solr.analytics.value.StringValueStream.AbstractStringValueStream;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
-
-/**
- * A mapping function to filter a Value or ValueStream. For each document, the value exists if the second parameter 
- * is true and it doesn't exist otherwise.
- * <p>
- * The first parameter can be any type of analytics expression. (Required)
- * <br>
- * The second parameter must be a {@link BooleanValue}. (Required)
- */
-public class FilterFunction {
-  public static final String name = "filter";
-
-  public static final CreatorFunction creatorFunction = (params -> {
-    if (params.length != 2) {
-      throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires 2 paramaters, " + params.length + " found.");
-    }
-    if (!(params[1] instanceof BooleanValue)) {
-      throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires the second paramater to be single-valued and boolean.");
-    }
-
-    AnalyticsValueStream baseExpr = params[0];
-    BooleanValue filterExpr = (BooleanValue)params[1];
-
-    if (baseExpr instanceof DateValue) {
-      return new DateFilterFunction((DateValue)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof DateValueStream) {
-      return new DateStreamFilterFunction((DateValueStream)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof BooleanValue) {
-      return new BooleanFilterFunction((BooleanValue)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof BooleanValueStream) {
-      return new BooleanStreamFilterFunction((BooleanValueStream)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof IntValue) {
-      return new IntFilterFunction((IntValue)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof IntValueStream) {
-      return new IntStreamFilterFunction((IntValueStream)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof LongValue) {
-      return new LongFilterFunction((LongValue)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof LongValueStream) {
-      return new LongStreamFilterFunction((LongValueStream)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof FloatValue) {
-      return new FloatFilterFunction((FloatValue)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof FloatValueStream) {
-      return new FloatStreamFilterFunction((FloatValueStream)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof DoubleValue) {
-      return new DoubleFilterFunction((DoubleValue)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof DoubleValueStream) {
-      return new DoubleStreamFilterFunction((DoubleValueStream)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof StringValue) {
-      return new StringFilterFunction((StringValue)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof StringValueStream) {
-      return new StringStreamFilterFunction((StringValueStream)baseExpr,filterExpr);
-    }
-    if (baseExpr instanceof AnalyticsValue) {
-      return new ValueFilterFunction((AnalyticsValue)baseExpr,filterExpr);
-    }
-    return new StreamFilterFunction(baseExpr,filterExpr);
-  });
-}
-class StreamFilterFunction extends AbstractAnalyticsValueStream {
-  private final AnalyticsValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public StreamFilterFunction(AnalyticsValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-
-  @Override
-  public void streamObjects(Consumer<Object> cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamObjects(cons);
-    }
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class ValueFilterFunction extends AbstractAnalyticsValue {
-  private final AnalyticsValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public ValueFilterFunction(AnalyticsValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-  
-  boolean exists = false;
-
-  @Override
-  public Object getObject() {
-    Object value = baseExpr.getObject();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class BooleanStreamFilterFunction extends AbstractBooleanValueStream {
-  private final BooleanValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public BooleanStreamFilterFunction(BooleanValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-
-  @Override
-  public void streamBooleans(BooleanConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamBooleans(cons);
-    }
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class BooleanFilterFunction extends AbstractBooleanValue {
-  private final BooleanValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public BooleanFilterFunction(BooleanValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-  
-  boolean exists = false;
-
-  @Override
-  public boolean getBoolean() {
-    boolean value = baseExpr.getBoolean();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class IntStreamFilterFunction extends AbstractIntValueStream {
-  private final IntValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public IntStreamFilterFunction(IntValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-
-  @Override
-  public void streamInts(IntConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamInts(cons);
-    }
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class IntFilterFunction extends AbstractIntValue {
-  private final IntValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public IntFilterFunction(IntValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-  
-  boolean exists = false;
-
-  @Override
-  public int getInt() {
-    int value = baseExpr.getInt();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class LongStreamFilterFunction extends AbstractLongValueStream {
-  private final LongValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public LongStreamFilterFunction(LongValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamLongs(cons);
-    }
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class LongFilterFunction extends AbstractLongValue {
-  private final LongValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public LongFilterFunction(LongValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-  
-  boolean exists = false;
-
-  @Override
-  public long getLong() {
-    long value = baseExpr.getLong();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class FloatStreamFilterFunction extends AbstractFloatValueStream {
-  private final FloatValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public FloatStreamFilterFunction(FloatValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-
-  @Override
-  public void streamFloats(FloatConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamFloats(cons);
-    }
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class FloatFilterFunction extends AbstractFloatValue {
-  private final FloatValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public FloatFilterFunction(FloatValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-  
-  boolean exists = false;
-
-  @Override
-  public float getFloat() {
-    float value = baseExpr.getFloat();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DoubleStreamFilterFunction extends AbstractDoubleValueStream {
-  private final DoubleValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public DoubleStreamFilterFunction(DoubleValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-
-  @Override
-  public void streamDoubles(DoubleConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamDoubles(cons);
-    }
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DoubleFilterFunction extends AbstractDoubleValue {
-  private final DoubleValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public DoubleFilterFunction(DoubleValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-  
-  boolean exists = false;
-
-  @Override
-  public double getDouble() {
-    double value = baseExpr.getDouble();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DateStreamFilterFunction extends AbstractDateValueStream {
-  private final DateValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public DateStreamFilterFunction(DateValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamLongs(cons);
-    }
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DateFilterFunction extends AbstractDateValue {
-  private final DateValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public DateFilterFunction(DateValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-  
-  boolean exists = false;
-
-  @Override
-  public long getLong() {
-    long value = baseExpr.getLong();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class StringStreamFilterFunction extends AbstractStringValueStream {
-  private final StringValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public StringStreamFilterFunction(StringValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-
-  @Override
-  public void streamStrings(Consumer<String> cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamStrings(cons);
-    }
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class StringFilterFunction extends AbstractStringValue {
-  private final StringValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public StringFilterFunction(StringValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
-  
-  boolean exists = false;
-
-  @Override
-  public String getString() {
-    String value = baseExpr.getString();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f0366b94/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
deleted file mode 100644
index 0e4f1b9..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
+++ /dev/null
@@ -1,893 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.analytics.function.mapping;
-
-import java.util.function.Consumer;
-import java.util.function.DoubleConsumer;
-import java.util.function.IntConsumer;
-import java.util.function.LongConsumer;
-
-import org.apache.solr.analytics.ExpressionFactory.CreatorFunction;
-import org.apache.solr.analytics.util.function.BooleanConsumer;
-import org.apache.solr.analytics.util.function.FloatConsumer;
-import org.apache.solr.analytics.value.AnalyticsValue;
-import org.apache.solr.analytics.value.AnalyticsValueStream;
-import org.apache.solr.analytics.value.BooleanValue;
-import org.apache.solr.analytics.value.BooleanValueStream;
-import org.apache.solr.analytics.value.DateValue;
-import org.apache.solr.analytics.value.DateValueStream;
-import org.apache.solr.analytics.value.DoubleValue;
-import org.apache.solr.analytics.value.DoubleValueStream;
-import org.apache.solr.analytics.value.FloatValue;
-import org.apache.solr.analytics.value.FloatValueStream;
-import org.apache.solr.analytics.value.IntValue;
-import org.apache.solr.analytics.value.IntValueStream;
-import org.apache.solr.analytics.value.LongValue;
-import org.apache.solr.analytics.value.LongValueStream;
-import org.apache.solr.analytics.value.StringValue;
-import org.apache.solr.analytics.value.StringValueStream;
-import org.apache.solr.analytics.value.AnalyticsValue.AbstractAnalyticsValue;
-import org.apache.solr.analytics.value.AnalyticsValueStream.AbstractAnalyticsValueStream;
-import org.apache.solr.analytics.value.BooleanValue.AbstractBooleanValue;
-import org.apache.solr.analytics.value.BooleanValueStream.AbstractBooleanValueStream;
-import org.apache.solr.analytics.value.DateValue.AbstractDateValue;
-import org.apache.solr.analytics.value.DateValueStream.AbstractDateValueStream;
-import org.apache.solr.analytics.value.DoubleValue.AbstractDoubleValue;
-import org.apache.solr.analytics.value.DoubleValueStream.AbstractDoubleValueStream;
-import org.apache.solr.analytics.value.FloatValue.AbstractFloatValue;
-import org.apache.solr.analytics.value.FloatValueStream.AbstractFloatValueStream;
-import org.apache.solr.analytics.value.IntValue.AbstractIntValue;
-import org.apache.solr.analytics.value.IntValueStream.AbstractIntValueStream;
-import org.apache.solr.analytics.value.LongValue.AbstractLongValue;
-import org.apache.solr.analytics.value.LongValueStream.AbstractLongValueStream;
-import org.apache.solr.analytics.value.StringValue.AbstractStringValue;
-import org.apache.solr.analytics.value.StringValueStream.AbstractStringValueStream;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
-
-/**
- * An if-else mapping function. 
- * <p>
- * Three arguments are required. The first, the conditional parameter, must be a {@link BooleanValue} and
- * the later two, the if and else parameters, can be any type of {@link AnalyticsValueStream}. 
- * For each document, if the conditional value is true then the if-value is used otherwise the else-value is used.
- * <p>
- * The resulting Value or ValueStream will be typed with the closest super-type of the two non-conditional parameters.
- * (e.g. {@value #name}(boolean,double,int) will return a double)
- * If two {@link AnalyticsValue}s are passed as the if-else parameters, an {@link AnalyticsValue} will be returned.
- * If either parameter isn't single-valued, a {@link AnalyticsValueStream} will be returned.
- */
-public class IfFunction extends AbstractAnalyticsValueStream {
-  private final BooleanValue ifExpr;
-  private final AnalyticsValueStream thenExpr;
-  private final AnalyticsValueStream elseExpr;
-  public static final String name = "if";
-  private final String exprStr;
-  private final ExpressionType funcType;
-  public static final CreatorFunction creatorFunction = (params -> {
-    if (params.length != 3) {
-      throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires 3 paramaters, " + params.length + " found.");
-    }
-    if (!(params[0] instanceof BooleanValue)) {
-      throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires single-valued numeric parameters. " + 
-                      "Incorrect parameter: "+params[0].getExpressionStr());
-    }
-    
-    BooleanValue castedIf = (BooleanValue) params[0];
-    AnalyticsValueStream thenExpr = params[1];
-    AnalyticsValueStream elseExpr = params[2];
-
-    if (thenExpr instanceof DateValue && elseExpr instanceof DateValue) {
-      return new DateIfFunction(castedIf,(DateValue)thenExpr,(DateValue)elseExpr);
-    }
-    if (thenExpr instanceof DateValueStream && elseExpr instanceof DateValueStream) {
-      return new DateStreamIfFunction(castedIf,(DateValueStream)thenExpr,(DateValueStream)elseExpr);
-    }
-    if (thenExpr instanceof BooleanValue && elseExpr instanceof BooleanValue) {
-      return new BooleanIfFunction(castedIf,(BooleanValue)thenExpr,(BooleanValue)elseExpr);
-    }
-    if (thenExpr instanceof BooleanValueStream && elseExpr instanceof BooleanValueStream) {
-      return new BooleanStreamIfFunction(castedIf,(BooleanValueStream)thenExpr,(BooleanValueStream)elseExpr);
-    }
-    if (thenExpr instanceof IntValue && elseExpr instanceof IntValue) {
-      return new IntIfFunction(castedIf,(IntValue)thenExpr,(IntValue)elseExpr);
-    }
-    if (thenExpr instanceof IntValueStream && elseExpr instanceof IntValueStream) {
-      return new IntStreamIfFunction(castedIf,(IntValueStream)thenExpr,(IntValueStream)elseExpr);
-    }
-    if (thenExpr instanceof LongValue && elseExpr instanceof LongValue) {
-      return new LongIfFunction(castedIf,(LongValue)thenExpr,(LongValue)elseExpr);
-    }
-    if (thenExpr instanceof LongValueStream && elseExpr instanceof LongValueStream) {
-      return new LongStreamIfFunction(castedIf,(LongValueStream)thenExpr,(LongValueStream)elseExpr);
-    }
-    if (thenExpr instanceof FloatValue && elseExpr instanceof FloatValue) {
-      return new FloatIfFunction(castedIf,(FloatValue)thenExpr,(FloatValue)elseExpr);
-    }
-    if (thenExpr instanceof FloatValueStream && elseExpr instanceof FloatValueStream) {
-      return new FloatStreamIfFunction(castedIf,(FloatValueStream)thenExpr,(FloatValueStream)elseExpr);
-    }
-    if (thenExpr instanceof DoubleValue && elseExpr instanceof DoubleValue) {
-      return new DoubleIfFunction(castedIf,(DoubleValue)thenExpr,(DoubleValue)elseExpr);
-    }
-    if (thenExpr instanceof DoubleValueStream && elseExpr instanceof DoubleValueStream) {
-      return new DoubleStreamIfFunction(castedIf,(DoubleValueStream)thenExpr,(DoubleValueStream)elseExpr);
-    }
-    if (thenExpr instanceof StringValue && elseExpr instanceof StringValue) {
-      return new StringIfFunction(castedIf,(StringValue)thenExpr,(StringValue)elseExpr);
-    }
-    if (thenExpr instanceof StringValueStream && elseExpr instanceof StringValueStream) {
-      return new StringStreamIfFunction(castedIf,(StringValueStream)thenExpr,(StringValueStream)elseExpr);
-    }
-    if (thenExpr instanceof AnalyticsValue && elseExpr instanceof AnalyticsValue) {
-      return new ValueIfFunction(castedIf,(AnalyticsValue)thenExpr,(AnalyticsValue)elseExpr);
-    }
-    return new IfFunction(castedIf,thenExpr,elseExpr);
-  });
-  
-  public IfFunction(BooleanValue ifExpr, AnalyticsValueStream thenExpr, AnalyticsValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  @Override
-  public void streamObjects(Consumer<Object> cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamObjects(cons);
-      }
-      else {
-        elseExpr.streamObjects(cons);
-      }
-    }
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class ValueIfFunction extends AbstractAnalyticsValue {
-  private final BooleanValue ifExpr;
-  private final AnalyticsValue thenExpr;
-  private final AnalyticsValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public ValueIfFunction(BooleanValue ifExpr, AnalyticsValue thenExpr, AnalyticsValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  private boolean exists = false;
-
-  @Override
-  public Object getObject() {
-    exists = false;
-    Object value = null;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getObject();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getObject();
-        exists = elseExpr.exists();
-      }
-    }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class BooleanStreamIfFunction extends AbstractBooleanValueStream {
-  private final BooleanValue ifExpr;
-  private final BooleanValueStream thenExpr;
-  private final BooleanValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public BooleanStreamIfFunction(BooleanValue ifExpr, BooleanValueStream thenExpr, BooleanValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  @Override
-  public void streamBooleans(BooleanConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamBooleans(cons);
-      }
-      else {
-        elseExpr.streamBooleans(cons);
-      }
-    }
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class BooleanIfFunction extends AbstractBooleanValue {
-  private final BooleanValue ifExpr;
-  private final BooleanValue thenExpr;
-  private final BooleanValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public BooleanIfFunction(BooleanValue ifExpr, BooleanValue thenExpr, BooleanValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  private boolean exists = false;
-
-  @Override
-  public boolean getBoolean() {
-    exists = false;
-    boolean value = false;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getBoolean();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getBoolean();
-        exists = elseExpr.exists();
-      }
-    }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class IntStreamIfFunction extends AbstractIntValueStream {
-  private final BooleanValue ifExpr;
-  private final IntValueStream thenExpr;
-  private final IntValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public IntStreamIfFunction(BooleanValue ifExpr, IntValueStream thenExpr, IntValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  @Override
-  public void streamInts(IntConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamInts(cons);
-      }
-      else {
-        elseExpr.streamInts(cons);
-      }
-    }
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class IntIfFunction extends AbstractIntValue {
-  private final BooleanValue ifExpr;
-  private final IntValue thenExpr;
-  private final IntValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public IntIfFunction(BooleanValue ifExpr, IntValue thenExpr, IntValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  private boolean exists = false;
-
-  @Override
-  public int getInt() {
-    exists = false;
-    int value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getInt();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getInt();
-        exists = elseExpr.exists();
-      }
-    }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class LongStreamIfFunction extends AbstractLongValueStream {
-  private final BooleanValue ifExpr;
-  private final LongValueStream thenExpr;
-  private final LongValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public LongStreamIfFunction(BooleanValue ifExpr, LongValueStream thenExpr, LongValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamLongs(cons);
-      }
-      else {
-        elseExpr.streamLongs(cons);
-      }
-    }
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class LongIfFunction extends AbstractLongValue {
-  private final BooleanValue ifExpr;
-  private final LongValue thenExpr;
-  private final LongValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public LongIfFunction(BooleanValue ifExpr, LongValue thenExpr, LongValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  private boolean exists = false;
-
-  @Override
-  public long getLong() {
-    exists = false;
-    long value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getLong();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getLong();
-        exists = elseExpr.exists();
-      }
-    }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class FloatStreamIfFunction extends AbstractFloatValueStream {
-  private final BooleanValue ifExpr;
-  private final FloatValueStream thenExpr;
-  private final FloatValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public FloatStreamIfFunction(BooleanValue ifExpr, FloatValueStream thenExpr, FloatValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  @Override
-  public void streamFloats(FloatConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamFloats(cons);
-      }
-      else {
-        elseExpr.streamFloats(cons);
-      }
-    }
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class FloatIfFunction extends AbstractFloatValue {
-  private final BooleanValue ifExpr;
-  private final FloatValue thenExpr;
-  private final FloatValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public FloatIfFunction(BooleanValue ifExpr, FloatValue thenExpr, FloatValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  private boolean exists = false;
-
-  @Override
-  public float getFloat() {
-    exists = false;
-    float value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getFloat();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getFloat();
-        exists = elseExpr.exists();
-      }
-    }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DoubleStreamIfFunction extends AbstractDoubleValueStream {
-  private final BooleanValue ifExpr;
-  private final DoubleValueStream thenExpr;
-  private final DoubleValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public DoubleStreamIfFunction(BooleanValue ifExpr, DoubleValueStream thenExpr, DoubleValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  @Override
-  public void streamDoubles(DoubleConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamDoubles(cons);
-      }
-      else {
-        elseExpr.streamDoubles(cons);
-      }
-    }
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DoubleIfFunction extends AbstractDoubleValue {
-  private final BooleanValue ifExpr;
-  private final DoubleValue thenExpr;
-  private final DoubleValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public DoubleIfFunction(BooleanValue ifExpr, DoubleValue thenExpr, DoubleValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  private boolean exists = false;
-
-  @Override
-  public double getDouble() {
-    exists = false;
-    double value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getDouble();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getDouble();
-        exists = elseExpr.exists();
-      }
-    }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DateStreamIfFunction extends AbstractDateValueStream {
-  private final BooleanValue ifExpr;
-  private final DateValueStream thenExpr;
-  private final DateValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public DateStreamIfFunction(BooleanValue ifExpr, DateValueStream thenExpr, DateValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamLongs(cons);
-      }
-      else {
-        elseExpr.streamLongs(cons);
-      }
-    }
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DateIfFunction extends AbstractDateValue {
-  private final BooleanValue ifExpr;
-  private final DateValue thenExpr;
-  private final DateValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public DateIfFunction(BooleanValue ifExpr, DateValue thenExpr, DateValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  private boolean exists = false;
-
-  @Override
-  public long getLong() {
-    exists = false;
-    long value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getLong();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getLong();
-        exists = elseExpr.exists();
-      }
-    }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class StringStreamIfFunction extends AbstractStringValueStream {
-  private final BooleanValue ifExpr;
-  private final StringValueStream thenExpr;
-  private final StringValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public StringStreamIfFunction(BooleanValue ifExpr, StringValueStream thenExpr, StringValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  @Override
-  public void streamStrings(Consumer<String> cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamStrings(cons);
-      }
-      else {
-        elseExpr.streamStrings(cons);
-      }
-    }
-  }
-  
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class StringIfFunction extends AbstractStringValue {
-  private final BooleanValue ifExpr;
-  private final StringValue thenExpr;
-  private final StringValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-  
-  public StringIfFunction(BooleanValue ifExpr, StringValue thenExpr, StringValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  private boolean exists = false;
-
-  @Override
-  public String getString() {
-    exists = false;
-    String value = null;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getString();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getString();
-        exists = elseExpr.exists();
-      }
-    }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
-
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
\ No newline at end of file