Пример #1
0
  @Override
  public void updateAggregate(Session session) {
    HashMap<Expression, Object> group = select.getCurrentGroup();
    if (group == null) {
      // this is a different level (the enclosing query)
      return;
    }

    int groupRowId = select.getCurrentGroupRowId();
    if (lastGroupRowId == groupRowId) {
      // already visited
      return;
    }
    lastGroupRowId = groupRowId;

    Aggregate agg = (Aggregate) group.get(this);
    try {
      if (agg == null) {
        agg = getInstance();
        group.put(this, agg);
      }
      Object[] argValues = new Object[args.length];
      Object arg = null;
      for (int i = 0, len = args.length; i < len; i++) {
        Value v = args[i].getValue(session);
        v = v.convertTo(argTypes[i]);
        arg = v.getObject();
        argValues[i] = arg;
      }
      if (args.length == 1) {
        agg.add(arg);
      } else {
        agg.add(argValues);
      }
    } catch (SQLException e) {
      throw DbException.convert(e);
    }
  }