Review comment - #5278 (comment)
There is an incoherency. This is a selector of ExprEval, not of ExprEval.value(). This class is used only in ExpressionSelectors.makeExprEvalSelector(). This incoherency already causes problems in AggregatorUtil: ExpressionSelectors.makeExprEvalSelector() is used there only to call getObject(), not taking advantage of ConstantColumnValueSelector optimization.
To make things more coherent, either
ExpressionSelectors.makeExprEvalSelector() should return ColumnValueSelector, not of ExprEval (with according changes)
Or Supplier should be returned from this method, enforcing all clients to go via get().asDouble() path (and ConstantColumnValueSelector should adapt accordingly).
Review comment - #5278 (comment)
There is an incoherency. This is a selector of ExprEval, not of ExprEval.value(). This class is used only in ExpressionSelectors.makeExprEvalSelector(). This incoherency already causes problems in AggregatorUtil: ExpressionSelectors.makeExprEvalSelector() is used there only to call getObject(), not taking advantage of ConstantColumnValueSelector optimization.
To make things more coherent, either
ExpressionSelectors.makeExprEvalSelector() should return ColumnValueSelector, not of ExprEval (with according changes)
Or Supplier should be returned from this method, enforcing all clients to go via get().asDouble() path (and ConstantColumnValueSelector should adapt accordingly).