use of org.locationtech.geowave.core.store.flatten.FlattenedUnreadData in project geowave by locationtech.
the class QueryFilterIterator method acceptInternal.
@Override
public boolean acceptInternal(final Key key, final Value value) {
if (isSet()) {
final PersistentDataset<Object> commonData = new MultiFieldPersistentDataset<>();
final FlattenedUnreadData unreadData = aggregateFieldData(key, value, commonData);
return applyRowFilter(key.getRow(currentRow), commonData, unreadData);
}
// it'll just have to accept everything
return true;
}
use of org.locationtech.geowave.core.store.flatten.FlattenedUnreadData in project geowave by locationtech.
the class WholeRowAggregationIterator method filter.
@Override
protected boolean filter(final Text currentRow, final List<Key> keys, final List<Value> values) {
if ((aggregationIterator != null) && (aggregationIterator.queryFilterIterator != null)) {
final PersistentDataset<Object> commonData = new MultiFieldPersistentDataset<>();
final List<FlattenedUnreadData> unreadData = new ArrayList<>();
for (int i = 0; (i < keys.size()) && (i < values.size()); i++) {
final Key key = keys.get(i);
final Value value = values.get(i);
final FlattenedUnreadData singleRow = aggregationIterator.queryFilterIterator.aggregateFieldData(key, value, commonData);
if (singleRow != null) {
unreadData.add(singleRow);
}
}
final CommonIndexedPersistenceEncoding encoding = QueryFilterIterator.getEncoding(currentRow, queryFilterIterator.partitionKeyLength, commonData, unreadData.isEmpty() ? null : new UnreadFieldDataList(unreadData));
boolean queryFilterResult = true;
if (aggregationIterator.queryFilterIterator.isSet()) {
queryFilterResult = aggregationIterator.queryFilterIterator.applyRowFilter(encoding);
}
if (queryFilterResult) {
aggregationIterator.aggregateRow(currentRow, queryFilterIterator.model, encoding);
}
}
// we don't want to return anything but the aggregation result
return false;
}
use of org.locationtech.geowave.core.store.flatten.FlattenedUnreadData in project geowave by locationtech.
the class MemoryDataStoreOperations method createReader.
@Override
public <T> RowReader<T> createReader(final ReaderParams<T> readerParams) {
final SortedSet<MemoryStoreEntry> internalData = storeData.get(readerParams.getIndex().getName());
int counter = 0;
List<MemoryStoreEntry> retVal = new ArrayList<>();
final Collection<SinglePartitionQueryRanges> partitionRanges = readerParams.getQueryRanges().getPartitionQueryRanges();
if ((partitionRanges == null) || partitionRanges.isEmpty()) {
retVal.addAll(internalData);
// remove unauthorized
final Iterator<MemoryStoreEntry> it = retVal.iterator();
while (it.hasNext()) {
if (!isAuthorized(it.next(), readerParams.getAdditionalAuthorizations())) {
it.remove();
}
}
if ((readerParams.getLimit() != null) && (readerParams.getLimit() > 0) && (retVal.size() > readerParams.getLimit())) {
retVal = retVal.subList(0, readerParams.getLimit());
}
} else {
for (final SinglePartitionQueryRanges p : partitionRanges) {
for (final ByteArrayRange r : p.getSortKeyRanges()) {
final SortedSet<MemoryStoreEntry> set;
if (r.isSingleValue()) {
set = Sets.newTreeSet(internalData.subSet(new MemoryStoreEntry(p.getPartitionKey(), r.getStart()), new MemoryStoreEntry(p.getPartitionKey(), ByteArrayUtils.getNextPrefix(r.getStart()))));
} else {
set = Sets.newTreeSet(internalData.tailSet(new MemoryStoreEntry(p.getPartitionKey(), r.getStart())).headSet(new MemoryStoreEntry(p.getPartitionKey(), r.getEndAsNextPrefix())));
}
// remove unauthorized
final Iterator<MemoryStoreEntry> it = set.iterator();
while (it.hasNext()) {
final MemoryStoreEntry entry = it.next();
if (!isAuthorized(entry, readerParams.getAdditionalAuthorizations())) {
it.remove();
} else if (!ArrayUtils.contains(readerParams.getAdapterIds(), entry.row.getAdapterId())) {
it.remove();
}
}
if ((readerParams.getLimit() != null) && (readerParams.getLimit() > 0) && ((counter + set.size()) > readerParams.getLimit())) {
final List<MemoryStoreEntry> subset = new ArrayList<>(set);
retVal.addAll(subset.subList(0, readerParams.getLimit() - counter));
break;
} else {
retVal.addAll(set);
counter += set.size();
if ((readerParams.getLimit() != null) && (readerParams.getLimit() > 0) && (counter >= readerParams.getLimit())) {
break;
}
}
}
}
}
return new MyIndexReader<>(Iterators.filter(retVal.iterator(), new Predicate<MemoryStoreEntry>() {
@Override
public boolean apply(final MemoryStoreEntry input) {
if ((readerParams.getFilter() != null) && options.isServerSideLibraryEnabled()) {
final PersistentDataset<Object> commonData = new MultiFieldPersistentDataset<>();
final List<FlattenedUnreadData> unreadData = new ArrayList<>();
final List<String> commonIndexFieldNames = DataStoreUtils.getUniqueDimensionFields(readerParams.getIndex().getIndexModel());
for (final GeoWaveValue v : input.getRow().getFieldValues()) {
unreadData.add(DataStoreUtils.aggregateFieldData(input.getRow(), v, commonData, readerParams.getIndex().getIndexModel(), commonIndexFieldNames));
}
return readerParams.getFilter().accept(readerParams.getIndex().getIndexModel(), new DeferredReadCommonIndexedPersistenceEncoding(input.getRow().getAdapterId(), input.getRow().getDataId(), input.getRow().getPartitionKey(), input.getRow().getSortKey(), input.getRow().getNumberOfDuplicates(), commonData, unreadData.isEmpty() ? null : new UnreadFieldDataList(unreadData)));
}
return true;
}
}), readerParams.getRowTransformer());
}
use of org.locationtech.geowave.core.store.flatten.FlattenedUnreadData in project geowave by locationtech.
the class WholeRowQueryFilterIterator method filter.
@Override
protected boolean filter(final Text currentRow, final List<Key> keys, final List<Value> values) {
if ((queryFilterIterator != null) && queryFilterIterator.isSet()) {
final PersistentDataset<Object> commonData = new MultiFieldPersistentDataset<>();
final List<FlattenedUnreadData> unreadData = new ArrayList<>();
for (int i = 0; (i < keys.size()) && (i < values.size()); i++) {
final Key key = keys.get(i);
final Value value = values.get(i);
unreadData.add(queryFilterIterator.aggregateFieldData(key, value, commonData));
}
return queryFilterIterator.applyRowFilter(currentRow, commonData, unreadData.isEmpty() ? null : new UnreadFieldDataList(unreadData));
}
// it'll just have to accept everything
return true;
}
use of org.locationtech.geowave.core.store.flatten.FlattenedUnreadData in project geowave by locationtech.
the class AggregationIterator method acceptInternal.
@Override
protected boolean acceptInternal(final Key key, final Value value) {
if (queryFilterIterator != null) {
final PersistentDataset<Object> commonData = new MultiFieldPersistentDataset<>();
key.getRow(currentRow);
final FlattenedUnreadData unreadData = queryFilterIterator.aggregateFieldData(key, value, commonData);
final CommonIndexedPersistenceEncoding encoding = QueryFilterIterator.getEncoding(currentRow, queryFilterIterator.partitionKeyLength, commonData, unreadData);
boolean queryFilterResult = true;
if (queryFilterIterator.isSet()) {
queryFilterResult = queryFilterIterator.applyRowFilter(encoding);
}
if (queryFilterResult) {
aggregateRow(currentRow, queryFilterIterator.model, encoding);
}
}
// we don't want to return anything but the aggregation result
return false;
}
Aggregations