Class FoldablesConvertFunction

All Implemented Interfaces:
NamedWriteable, Writeable, PostOptimizationVerificationAware, Resolvable, EvaluatorMapper
Direct Known Subclasses:
ToDatePeriod, ToTimeDuration

public abstract class FoldablesConvertFunction extends AbstractConvertFunction implements PostOptimizationVerificationAware
Base class for functions that converts a constant into an interval type - DATE_PERIOD or TIME_DURATION. The functions will be folded at the end of LogicalPlanOptimizer by the coordinator, it does not reach data node.
  • Constructor Details

    • FoldablesConvertFunction

      protected FoldablesConvertFunction(Source source, Expression field)
  • Method Details

    • writeTo

      public final void writeTo(StreamOutput out)
      Specified by:
      writeTo in interface Writeable
      Overrides:
      writeTo in class UnaryScalarFunction
    • getWriteableName

      public final String getWriteableName()
      Specified by:
      getWriteableName in interface NamedWriteable
    • resolveType

      protected final Expression.TypeResolution resolveType()
      Overrides:
      resolveType in class AbstractConvertFunction
    • factories

      protected final Map<DataType,org.elasticsearch.xpack.esql.expression.function.scalar.convert.AbstractConvertFunction.BuildFactory> factories()
      Description copied from class: AbstractConvertFunction
      A map from input type to EvalOperator.ExpressionEvaluator ctor. Usually implemented like:
      
           private static final Map<DataType, BuildFactory> EVALUATORS = Map.ofEntries(
               Map.entry(BOOLEAN, (field, source) -> field),
               Map.entry(KEYWORD, ToBooleanFromStringEvaluator.Factory::new),
               ...
           );
      
           @Override
           protected Map<DataType, BuildFactory> factories() {
               return EVALUATORS;
           }
       
      Specified by:
      factories in class AbstractConvertFunction
    • fold

      public final Object fold(FoldContext ctx)
      Overrides:
      fold in class EsqlScalarFunction
    • postOptimizationVerification

      public final void postOptimizationVerification(Failures failures)
      Description copied from interface: PostOptimizationVerificationAware
      Validates the implementing expression - discovered failures are reported to the given Failures class.

      Example: the Bucket function, which produces buckets over a numerical or date field, based on a number of literal arguments needs to check if its arguments are all indeed literals. This is how this verification is performed:

           
      
            @Override
            public void postOptimizationVerification(Failures failures) {
                String operation = sourceText();
      
                failures.add(isFoldable(buckets, operation, SECOND))
                    .add(from != null ? isFoldable(from, operation, THIRD) : null)
                    .add(to != null ? isFoldable(to, operation, FOURTH) : null);
            }
           
           
      Specified by:
      postOptimizationVerification in interface PostOptimizationVerificationAware