docs: public static ColumnValueSelector makeColumnValueSelector(
        ColumnSelectorFactory columnSelectorFactory,
        Expr expression
    )
    {
      final ColumnValueSelector<ExprEval> baseSelector = makeExprEvalSelector(columnSelectorFactory, expression);
  
      return new ColumnValueSelector()
      {
        @Override
        public double getDouble()
        {
          // No Assert for null handling as baseSelector already have it.
          return baseSelector.getDouble();
        }
  
        @Override
        public float getFloat()
        {
          // No Assert for null handling as baseSelector already have it.
          return baseSelector.getFloat();
        }
  
        @Override
        public long getLong()
        {
          // No Assert for null handling as baseSelector already have it.
          return baseSelector.getLong();
        }
  
        @Override
        public boolean isNull()
        {
          return baseSelector.isNull();
        }
  
        @Nullable
        @Override
        public Object getObject()
        {
          // No need for null check on getObject() since baseSelector impls will never return null.
          //noinspection ConstantConditions
          return baseSelector.getObject().value();
        }
  
        @Override
        public Class classOfObject()
        {
          return Object.class;
        }
  
        @Override
        public void inspectRuntimeShape(RuntimeShapeInspector inspector)
        {
          inspector.visit("baseSelector", baseSelector);
        }
      };
    }