@Override
  public String toString() {
    if (hasTruthValue()) {
      return "" + getTruthValue();
    }
    StringBuffer buf = new StringBuffer("(");
    int count = 0;
    if (rs != null) {
      for (List<Object> row : rs) {
        if (count++ > 15) {
          buf.append("...");
          break;
        }
        if (count > 1) {
          buf.append(", ");
        }
        buf.append("[row:" + (count - 1) + " ");
        int col = 0;
        for (Object val : row) {
          if (col > 15) {
            buf.append("...");
            break;
          }
          if (col > 0) {
            buf.append(", ");
          }
          buf.append("{");
          buf.append(columnNames.get(col++));
          buf.append("->").append(val);
          buf.append("}");
        }
        buf.append("]");
      }
    }
    buf.append(")");
    return buf.toString();
  }