/** {@inheritDoc} */ @Override public String toString() { final ToStringHelper helper = Objects.toStringHelper(this).add("name", getColumnName()); if (mMaxVersions != 0) { helper.add("max_versions", mMaxVersions); } if (mFilter != null) { helper.add("filter", mFilter); } if (mPageSize != PAGING_DISABLED) { helper.add("page_size", mPageSize); } if (mReaderSpec != null) { helper.add("reader_spec", mReaderSpec); } return helper.toString(); } }
final ColumnReaderSpec readerSpec = columnRequest.getReaderSpec(); if (readerSpec != null) { final FijiColumnName column = columnRequest.getColumnName(); readerSpecs.add(BoundColumnReaderSpec.create(readerSpec, column));
final boolean isNotDuplicate = columns.add(column.getColumnName()); Preconditions.checkState(isNotDuplicate, "Duplicate definition for column '%s'.", column); "FijiDataRequest may not simultaneously contain definitions for family '%s' " + "and definitions for fully qualified columns '%s'.", column.getFamily(), column.getColumnName()); familiesOfColumns.add(column.getFamily());
FijiColumnName fijiColumnName = column.getColumnName(); if (fijiColumnName.isFullyQualified() || !familyToQualifiersMap.containsKey(fijiColumnName.getFamily())) {
for (FijiDataRequest.Column column : mDataRequest.getColumns()) { if (column.getReaderSpec() != null) { overridesBuilder.put(column.getColumnName(), column.getReaderSpec());
columnResults.put(columnRequest.getColumnName(), columnResult);
final FijiColumnName requestedColumn = columnRequest.getColumnName();
final FijiColumnName requestColumnName = columnRequest.getColumnName();
for (final Column columnRequest : columnRequests) { if (columnRequest.getFamily().equals(family)) { requestedColumns.add(columnRequest.getColumnName());
throw new NoSuchElementException("Fiji qualifier pager is exhausted."); final FijiColumnName column = mColumnRequest.getColumnName(); final ColumnsDef columnDef = ColumnsDef .create()
final PagedColumnIterable columnIterable = new PagedColumnIterable(columnRequest); mCloser.register(columnIterable); columnResults.put(columnRequest.getColumnName(), columnIterable);
columnResults.put(columnRequest.getColumnName(), columnIterable);
for (final Column columnRequest : columnRequests) { if (columnRequest.getFamily().equals(family)) { requestedColumns.add(columnRequest.getColumnName());
/** {@inheritDoc} */ @Override public FijiRowData next(final int pageSize) { if (!hasNext()) { throw new NoSuchElementException("Fiji pager is exhausted."); } final FijiColumnName column = mColumnRequest.getColumnName(); final ColumnsDef columnDef = ColumnsDef .create() .withFilter(mColumnRequest.getFilter()) .withPageSize(FijiDataRequest.PAGING_DISABLED) .withMaxVersions(mColumnRequest.getMaxVersions()) .add(column, mColumnRequest.getReaderSpec()); final FijiDataRequestBuilder dataRequest = FijiDataRequest.builder(); dataRequest.addColumns(columnDef); final List<FijiCell<Object>> cells = ImmutableList.copyOf(Iterators.limit(mCells, pageSize)); final FijiResult<Object> result = MaterializedFijiResult.create( mResult.getEntityId(), dataRequest.build(), mLayout, ImmutableSortedMap.<FijiColumnName, List<FijiCell<Object>>>naturalOrder() .put(column, cells) .build()); return new FijiResultRowData(mLayout, result); }
/** * Get the list of {@code KeyValue}s in a {@code Result} belonging to a column request. * * <p> * This method will filter extra version from the result if necessary. * </p> * * @param columnRequest of the column whose {@code KeyValues} to return. * @param translator for the table. * @param result the scan results. * @return the {@code KeyValue}s for the column. */ private static List<KeyValue> getColumnKeyValues( final Column columnRequest, final HBaseColumnNameTranslator translator, final Result result ) { if (result.isEmpty()) { return ImmutableList.of(); } final FijiColumnName column = columnRequest.getColumnName(); final List<KeyValue> keyValues = Arrays.asList(result.raw()); if (column.isFullyQualified()) { return getQualifiedColumnKeyValues(columnRequest, translator, keyValues); } else { return getFamilyKeyValues(columnRequest, translator, keyValues); } }
/** * Returns a {@code SortedMap} of {@code FijiColumnName} to list of {@code FijiCell} of the * provided {@code FijiResult}. *<p> * Should not be used with PagedFijiResults *</p> * * @param result {@code FijiResult} for which to get materialized result * @param <T> the type of values in the {@code FijiResult} * @return A {@code SortedMap} of each {@code FijiColumnName} to list of {@code FijiCell} * the contents of the materialized result */ public static <T> SortedMap<FijiColumnName, List<FijiCell<T>>> getMaterializedContents(final FijiResult<T> result) { SortedMap<FijiColumnName, List<FijiCell<T>>> materializedResult = new TreeMap<FijiColumnName, List<FijiCell<T>>>(); for (Column column: result.getDataRequest().getColumns()) { if (column.isPagingEnabled()) { throw new IllegalArgumentException( "Columns should not be paged when using MaterializedResult"); } FijiColumnName columnName = column.getColumnName(); List<FijiCell<T>> cells = ImmutableList.copyOf(result.narrowView(columnName).iterator()); materializedResult.put(columnName, cells); } return materializedResult; }
/** * Initializes the list of associated fully qualified cell FijiPagers for this FijiRowData. Any * non fully qualified cell paging configuration will be ignored. * * @param fijiDataRequest the data request for this FijiRowData. * @param fijiRowData the fijiRowData to generate the pagers from. * @return map of FijiColumnNames to their associated cell pagers. */ private static Map<FijiColumnName, FijiPager> getFijiCellPagers(FijiDataRequest fijiDataRequest, FijiRowData fijiRowData) { Map<FijiColumnName, FijiPager> fijiCellPagers = Maps.newHashMap(); for (FijiDataRequest.Column column : fijiDataRequest.getColumns()) { if (column.isPagingEnabled() && column.getColumnName().isFullyQualified()) { // Only include pagers for fully qualified cells try { LOG.info("Paging enabled for column: {}", column.getColumnName()); FijiPager fijiPager = fijiRowData.getPager(column.getFamily(), column.getQualifier()); fijiCellPagers.put(column.getColumnName(), fijiPager); } catch (FijiColumnPagingNotEnabledException e) { LOG.warn("Paging not enabled for column: {}", column.getColumnName()); } } } return fijiCellPagers; }
/** * Initializes the list of associated column family FijiPagers for this FijiRowData. * * @param fijiDataRequest the data request for this FijiRowData. * @return map of families to their associated qualifier pagers. */ private Map<String, FijiPager> getFijiQualifierPagers(FijiDataRequest fijiDataRequest) { Map<String, FijiPager> fijiQualifierPagers = Maps.newHashMap(); for (FijiDataRequest.Column column : fijiDataRequest.getColumns()) { if (column.isPagingEnabled() && !column.getColumnName().isFullyQualified()) { // Only include pagers for column families. try { LOG.info("Paging enabled for column family: {}", column.getColumnName()); FijiPager fijiPager = mRowData.getPager(column.getFamily()); fijiQualifierPagers.put(column.getFamily(), fijiPager); } catch (FijiColumnPagingNotEnabledException e) { LOG.warn("Paging not enabled for column family: {}", column.getColumnName()); } } } return fijiQualifierPagers; }
/** * Constructs a data request with cell paging enabled for the specified columns. * * @param fijiDataRequest to use as a base. * @param cellPagingMap of fiji columns to page sizes. * @return A new data request with paging enabled for the specified columns. */ public static FijiDataRequest addCellPaging(FijiDataRequest fijiDataRequest, Map<FijiColumnName, Integer> cellPagingMap) { FijiDataRequestBuilder pagedRequestBuilder = FijiDataRequest.builder(); for (Column column : fijiDataRequest.getColumns()) { FijiColumnName fijiColumnName = column.getColumnName(); if (cellPagingMap.containsKey(fijiColumnName)) { Integer pageSize = cellPagingMap.get(fijiColumnName); pagedRequestBuilder.newColumnsDef().withPageSize(pageSize).add(fijiColumnName); } } FijiDataRequest merged = fijiDataRequest.merge(pagedRequestBuilder.build()); return merged; }
/** * Constructs a data request with paging enabled for the specified family. * * @param fijiDataRequest to use as a base. * @param qualifierPagingMap of fiji columns to page sizes. * @return A new data request with paging enabled for the specified family. */ public static FijiDataRequest addQualifierPaging(FijiDataRequest fijiDataRequest, Map<FijiColumnName, Integer> qualifierPagingMap) { FijiDataRequestBuilder pagedRequestBuilder = FijiDataRequest.builder(); for (Column column : fijiDataRequest.getColumns()) { FijiColumnName fijiColumnName = column.getColumnName(); if (qualifierPagingMap.containsKey(fijiColumnName)) { Integer pageSize = qualifierPagingMap.get(fijiColumnName); pagedRequestBuilder.newColumnsDef().withPageSize(pageSize).add(fijiColumnName); } } FijiDataRequest merged = fijiDataRequest.merge(pagedRequestBuilder.build()); return merged; }