@ExplodeLoop
 private void initFrame(VirtualFrame frame, Page page) {
   for (FrameMapping frameMapping : mapping) {
     frame.setObject(frameMapping.getFrameSlot(), getColumnSlow(page, frameMapping));
   }
   frame.setDouble(reduceNode.getSlot(), 0.0);
 }
  @Override
  public Object execute(VirtualFrame frame) {
    Page page = PageArguments.get(frame);
    initFrame(frame, page);

    for (int row = 0; row < page.getRowCount(); row++) {
      frame.setInt(rowSlot, row);
      try {
        if (filterNode.executeBoolean(frame)) {
          reduceNode.execute(frame);
        }
      } catch (UnexpectedResultException e) {
        throw new IllegalStateException("not implemented yet: rewrite in reduce node");
      }
    }

    try {
      return frame.getDouble(reduceNode.getSlot());
    } catch (FrameSlotTypeException e) {
      throw new IllegalStateException("should not reach here");
    }
  }