예제 #1
0
  /**
   * Converts nested ColumnFilter.f values from a column ID to the corresponding SQL field name.
   *
   * @param filters
   * @param entities
   * @return A copy of filters with field names in place of the column IDs.
   * @see ColumnFilter#f
   */
  private static NestedColumnFilters convertColumnIdsToFieldNames(
      NestedColumnFilters filters, Map<Integer, DataEntity> entities) {
    if (filters == null) return null;

    NestedColumnFilters result = new NestedColumnFilters();
    if (filters.cond != null) {
      result.cond = new ColumnFilter();
      result.cond.v = filters.cond.v;
      result.cond.r = filters.cond.r;
      result.cond.f =
          entities
              .get(((Number) filters.cond.f).intValue())
              .privateMetadata
              .get(PrivateMetadata.SQLCOLUMN);
    } else {
      NestedColumnFilters[] in = (filters.and != null ? filters.and : filters.or);
      NestedColumnFilters[] out = new NestedColumnFilters[in.length];
      for (int i = 0; i < in.length; i++) out[i] = convertColumnIdsToFieldNames(in[i], entities);
      if (filters.and == in) result.and = out;
      else result.or = out;
    }
    return result;
  }