/** * A filter that only fetches/queries the provided columns. * <p> * Note that this shouldn't be used for CQL queries in general as all columns should be queried to * preserve CQL semantic (see class javadoc). This is ok for some internal queries however (and * for #6588 if/when we implement it). */ public static ColumnFilter selection(PartitionColumns columns) { return new ColumnFilter(false, null, columns, null); }
public static ISSTableScanner getScanner(SSTableReader sstable, Iterator<AbstractBounds<PartitionPosition>> rangeIterator) { return new BigTableScanner(sstable, ColumnFilter.all(sstable.metadata), null, rangeIterator); }
public boolean canSkipValue(ColumnDefinition column) { return columnsToFetch != null && !columnsToFetch.fetchedColumnIsQueried(column); }
protected ColumnFilter makeColumnFilter() { if (columns == null || columns.isEmpty()) return ColumnFilter.all(cfs.metadata); ColumnFilter.Builder filter = ColumnFilter.selectionBuilder(); for (ColumnIdentifier column : columns) filter.add(cfs.metadata.getColumnDefinition(column)); return filter.build(); }
boolean mayFilterColumns = !filter.fetchesAllColumns() || !filter.allFetchedColumnsAreQueried(); boolean mayHaveShadowed = activeDeletion.supersedes(deletion.time()); Columns columns = filter.fetchedColumns().columns(isStatic()); Predicate<ColumnDefinition> inclusionTester = columns.inOrderInclusionTester(); Predicate<ColumnDefinition> queriedByUserTester = filter.queriedColumns().columns(isStatic()).inOrderInclusionTester(); final LivenessInfo rowLiveness = newInfo; return transformAndFilter(newInfo, newDeletion, (cd) -> {
if (command.columnFilter().fetches(index.getIndexedColumn())) return result.unfilteredIterator(); for (ColumnDefinition selected : command.columnFilter().fetchedColumns()) slices.add(Slice.make(comparator, selected.name.bytes)); return result.unfilteredIterator(ColumnFilter.all(command.metadata()), slices.build(), false);
private ColumnFilter getExtendedFilter(ColumnFilter initialFilter) { if (command.columnFilter().fetches(index.getIndexedColumn())) return initialFilter; ColumnFilter.Builder builder = ColumnFilter.selectionBuilder(); builder.addAll(initialFilter.fetchedColumns()); builder.add(index.getIndexedColumn()); return builder.build(); }
public Row withOnlyQueriedData(ColumnFilter filter) { if (filter.allFetchedColumnsAreQueried()) return this; return transformAndFilter(primaryKeyLivenessInfo, deletion, (cd) -> { ColumnDefinition column = cd.column(); if (column.isComplex()) return ((ComplexColumnData)cd).withOnlyQueriedData(filter); return filter.fetchedColumnIsQueried(column) ? cd : null; }); }
@Override public PartitionColumns columns() { return selectedColumns.fetchedColumns(); }
private boolean isQueried(Cell cell) { // When we read, we may have some cell that have been fetched but are not selected by the user. Those cells may // have empty values as optimization (see CASSANDRA-10655) and hence they should not be included in the read-repair. // This is fine since those columns are not actually requested by the user and are only present for the sake of CQL // semantic (making sure we can always distinguish between a row that doesn't exist from one that do exist but has /// no value for the column requested by the user) and so it won't be unexpected by the user that those columns are // not repaired. ColumnDefinition column = cell.column(); ColumnFilter filter = command.columnFilter(); return column.isComplex() ? filter.fetchedCellIsQueried(column, cell.path()) : filter.fetchedColumnIsQueried(column); } };
public void startOfComplexColumn(ColumnDefinition column) { this.tester = columnsToFetch == null ? null : columnsToFetch.newTester(column); this.currentDroppedComplex = droppedColumns.get(column.name.bytes); }
/** * Filter the provided iterator to only include cells that are selected by the user. * * @param iterator the iterator to filter. * @param filter the {@code ColumnFilter} to use when deciding which cells are queried by the user. This should be the filter * that was used when querying {@code iterator}. * @return the filtered iterator.. */ public static RowIterator withOnlyQueriedData(RowIterator iterator, ColumnFilter filter) { if (filter.allFetchedColumnsAreQueried()) return iterator; return Transformation.apply(iterator, new WithOnlyQueriedData(filter)); }
public ComplexColumnData withOnlyQueriedData(ColumnFilter filter) { return transformAndFilter(complexDeletion, (cell) -> filter.fetchedCellIsQueried(column, cell.path()) ? null : cell); }
public boolean includes(ColumnDefinition column) { return columnsToFetch == null || columnsToFetch.fetches(column); }
@Override public String toString() { if (isFetchAll) return "*"; if (queried.isEmpty()) return ""; Iterator<ColumnDefinition> defs = queried.selectOrderIterator(); if (!defs.hasNext()) return "<none>"; StringBuilder sb = new StringBuilder(); while (defs.hasNext()) { appendColumnDef(sb, defs.next()); if (defs.hasNext()) sb.append(", "); } return sb.toString(); }
boolean mayFilterColumns = !filter.fetchesAllColumns() || !filter.allFetchedColumnsAreQueried(); boolean mayHaveShadowed = activeDeletion.supersedes(deletion.time()); Columns columns = filter.fetchedColumns().columns(isStatic()); Predicate<ColumnDefinition> inclusionTester = columns.inOrderInclusionTester(); Predicate<ColumnDefinition> queriedByUserTester = filter.queriedColumns().columns(isStatic()).inOrderInclusionTester(); final LivenessInfo rowLiveness = newInfo; return transformAndFilter(newInfo, newDeletion, (cd) -> {
if (command.columnFilter().fetches(index.getIndexedColumn())) return result.unfilteredIterator(); for (ColumnDefinition selected : command.columnFilter().fetchedColumns()) slices.add(Slice.make(comparator, selected.name.bytes)); return result.unfilteredIterator(ColumnFilter.all(command.metadata()), slices.build(), false);
private ColumnFilter getExtendedFilter(ColumnFilter initialFilter) { if (command.columnFilter().fetches(index.getIndexedColumn())) return initialFilter; ColumnFilter.Builder builder = ColumnFilter.selectionBuilder(); builder.addAll(initialFilter.fetchedColumns()); builder.add(index.getIndexedColumn()); return builder.build(); }
public Row withOnlyQueriedData(ColumnFilter filter) { if (filter.allFetchedColumnsAreQueried()) return this; return transformAndFilter(primaryKeyLivenessInfo, deletion, (cd) -> { ColumnDefinition column = cd.column(); if (column.isComplex()) return ((ComplexColumnData)cd).withOnlyQueriedData(filter); return filter.fetchedColumnIsQueried(column) ? cd : null; }); }
private boolean queriesMulticellType() { for (ColumnDefinition column : columnFilter().fetchedColumns()) { if (column.type.isMultiCell() || column.type.isCounter()) return true; } return false; }