Example usage for org.apache.cassandra.db DataRange startKey

List of usage examples for org.apache.cassandra.db DataRange startKey

Introduction

In this page you can find the example usage for org.apache.cassandra.db DataRange startKey.

Prototype

public PartitionPosition startKey() 

Source Link

Document

The start of the partition key range queried by this DataRange .

Usage

From source file:com.stratio.cassandra.index.RowMapperWide.java

License:Apache License

/**
 * Returns the Lucene {@link Filter} to get the {@link Document}s satisfying the specified {@link DataRange}.
 *
 * @param dataRange A {@link DataRange}.
 * @return The Lucene {@link Filter} to get the {@link Document}s satisfying the specified {@link DataRange}.
 *//*from   ww  w .j av  a 2s.c om*/
public Query query(DataRange dataRange) {
    RowPosition startPosition = dataRange.startKey();
    RowPosition stopPosition = dataRange.stopKey();
    Token startToken = startPosition.getToken();
    Token stopToken = stopPosition.getToken();
    boolean isSameToken = startToken.compareTo(stopToken) == 0 && !tokenMapper.isMinimum(startToken);
    BooleanClause.Occur occur = isSameToken ? MUST : SHOULD;
    boolean includeStart = tokenMapper.includeStart(startPosition);
    boolean includeStop = tokenMapper.includeStop(stopPosition);

    SliceQueryFilter sqf = null;
    if (startPosition instanceof DecoratedKey) {
        sqf = (SliceQueryFilter) dataRange.columnFilter(((DecoratedKey) startPosition).getKey());
    } else {
        sqf = (SliceQueryFilter) dataRange.columnFilter(ByteBufferUtil.EMPTY_BYTE_BUFFER);
    }
    Composite startName = sqf.start();
    Composite stopName = sqf.finish();

    BooleanQuery query = new BooleanQuery();

    if (!startName.isEmpty()) {
        BooleanQuery q = new BooleanQuery();
        q.add(tokenMapper.query(startToken), MUST);
        q.add(clusteringKeyMapper.query(startName, null), MUST);
        query.add(q, occur);
        includeStart = false;
    }

    if (!stopName.isEmpty()) {
        BooleanQuery q = new BooleanQuery();
        q.add(tokenMapper.query(stopToken), MUST);
        q.add(clusteringKeyMapper.query(null, stopName), MUST);
        query.add(q, occur);
        includeStop = false;
    }

    if (!isSameToken) {
        Query rangeQuery = tokenMapper.query(startToken, stopToken, includeStart, includeStop);
        if (rangeQuery != null)
            query.add(rangeQuery, SHOULD);
    } else if (query.getClauses().length == 0) {
        return tokenMapper.query(startToken);
    }

    return query.getClauses().length == 0 ? null : query;
}

From source file:com.stratio.cassandra.index.TokenMapper.java

License:Apache License

/**
 * Returns a Lucene {@link Query} for filtering documents/rows according to the row token range specified in {@code
 * dataRange}.//from w w w  .  j  a  v a  2 s  .  c o m
 *
 * @param dataRange The key range containing the row token range to be filtered.
 * @return A Lucene {@link Query} for filtering documents/rows according to the row token range specified in {@code
 * dataRage}.
 */
public Query query(DataRange dataRange) {
    RowPosition startPosition = dataRange.startKey();
    RowPosition stopPosition = dataRange.stopKey();
    Token start = startPosition.getToken();
    Token stop = stopPosition.getToken();
    boolean includeLower = includeStart(startPosition);
    boolean includeUpper = includeStop(stopPosition);
    return query(start, stop, includeLower, includeUpper);
}

From source file:com.stratio.cassandra.lucene.cache.SearchCacheEntry.java

License:Apache License

private boolean validKey(DataRange dataRange) {
    PartitionPosition start = dataRange.startKey();
    if (currentPosition.compareTo(start) == 0 && startPosition.compareTo(start) <= 0) {
        PartitionPosition stop = dataRange.stopKey();
        return stopPosition.compareTo(stop) == 0;
    }// w ww  .j  a  va 2s.c om
    return false;
}

From source file:com.stratio.cassandra.lucene.IndexServiceSkinny.java

License:Apache License

/** {@inheritDoc} */
@Override/*from  ww w. j a v a  2 s. com*/
public Optional<Query> query(DataRange dataRange) {
    PartitionPosition startPosition = dataRange.startKey();
    PartitionPosition stopPosition = dataRange.stopKey();
    return query(startPosition, stopPosition);
}

From source file:com.stratio.cassandra.lucene.IndexServiceWide.java

License:Apache License

/** {@inheritDoc} */
@Override/*  w w w  .j  a va  2  s .  c o m*/
public Optional<Query> query(DataRange dataRange) {

    // Extract data range data
    PartitionPosition startPosition = dataRange.startKey();
    PartitionPosition stopPosition = dataRange.stopKey();
    Token startToken = startPosition.getToken();
    Token stopToken = stopPosition.getToken();
    Optional<ClusteringPrefix> maybeStartClustering = KeyMapper.startClusteringPrefix(dataRange);
    Optional<ClusteringPrefix> maybeStopClustering = KeyMapper.stopClusteringPrefix(dataRange);

    // Prepare query builder
    BooleanQuery.Builder builder = new BooleanQuery.Builder();

    // Add first partition filter
    maybeStartClustering.ifPresent(startClustering -> {
        DecoratedKey startKey = (DecoratedKey) startPosition;
        builder.add(keyMapper.query(startKey, startClustering, null, false, true), SHOULD);
    });

    // Add token range filter
    boolean includeStart = startPosition.kind() == MIN_BOUND && !maybeStartClustering.isPresent();
    boolean includeStop = stopPosition.kind() == MAX_BOUND && !maybeStopClustering.isPresent();
    tokenMapper.query(startToken, stopToken, includeStart, includeStop).ifPresent(x -> builder.add(x, SHOULD));

    // Add last partition filter
    maybeStopClustering.ifPresent(stopClustering -> {
        DecoratedKey stopKey = (DecoratedKey) stopPosition;
        builder.add(keyMapper.query(stopKey, null, stopClustering, true, false), SHOULD);
    });

    // Return query, or empty if there are no restrictions
    BooleanQuery query = builder.build();
    return query.clauses().isEmpty() ? Optional.empty() : Optional.of(query);
}

From source file:com.stratio.cassandra.lucene.key.KeyMapper.java

License:Apache License

/**
 * Returns the start {@link ClusteringPrefix} of the first partition of the specified {@link DataRange}.
 *
 * @param dataRange the data range/*from   w  w  w. j av  a  2 s.c o  m*/
 * @return the start clustering prefix of {@code dataRange}, or {@code null} if there is no such start
 */
public static Optional<ClusteringPrefix> startClusteringPrefix(DataRange dataRange) {
    PartitionPosition startPosition = dataRange.startKey();
    if (startPosition instanceof DecoratedKey) {
        DecoratedKey startKey = (DecoratedKey) startPosition;
        ClusteringIndexFilter filter = dataRange.clusteringIndexFilter(startKey);
        if (filter instanceof ClusteringIndexSliceFilter) {
            ClusteringIndexSliceFilter sliceFilter = (ClusteringIndexSliceFilter) filter;
            Slices slices = sliceFilter.requestedSlices();
            return Optional.of(slices.get(0).start());
        }
    }
    return Optional.empty();
}

From source file:com.stratio.cassandra.lucene.service.RowMapperSkinny.java

License:Apache License

/**
 * {@inheritDoc}/*from   ww w.jav a2  s .  c  o  m*/
 */
@Override
public final Query query(DataRange dataRange) {
    RowPosition startPosition = dataRange.startKey();
    RowPosition stopPosition = dataRange.stopKey();
    Token startToken = startPosition.getToken();
    Token stopToken = stopPosition.getToken();
    boolean includeStart = tokenMapper.includeStart(startPosition);
    boolean includeStop = tokenMapper.includeStop(stopPosition);
    if (startPosition instanceof DecoratedKey) {
        DecoratedKey decoratedKey = (DecoratedKey) startPosition;
        IDiskAtomFilter filter = dataRange.columnFilter(decoratedKey.getKey());
        if (filter != null && filter instanceof SliceQueryFilter) {
            SliceQueryFilter sliceQueryFilter = (SliceQueryFilter) filter;
            Composite startName = sliceQueryFilter.start();
            if (startName != null && !startName.isEmpty()) {
                includeStart = false;
            }
        }
    }
    return tokenMapper.query(startToken, stopToken, includeStart, includeStop);
}

From source file:com.stratio.cassandra.lucene.service.RowMapperWide.java

License:Apache License

/**
 * Returns the Lucene {@link Query} to get the {@link Document}s satisfying the specified {@link DataRange}.
 *
 * @param dataRange A {@link DataRange}.
 * @return The Lucene {@link Query} to get the {@link Document}s satisfying the specified {@link DataRange}.
 */// w w w  .ja  v a  2 s  . c  o m
public Query query(DataRange dataRange) {
    RowPosition startPosition = dataRange.startKey();
    RowPosition stopPosition = dataRange.stopKey();
    Token startToken = startPosition.getToken();
    Token stopToken = stopPosition.getToken();
    boolean isSameToken = startToken.compareTo(stopToken) == 0 && !tokenMapper.isMinimum(startToken);
    BooleanClause.Occur occur = isSameToken ? MUST : SHOULD;
    boolean includeStart = tokenMapper.includeStart(startPosition);
    boolean includeStop = tokenMapper.includeStop(stopPosition);

    SliceQueryFilter sqf;
    if (startPosition instanceof DecoratedKey) {
        sqf = (SliceQueryFilter) dataRange.columnFilter(((DecoratedKey) startPosition).getKey());
    } else {
        sqf = (SliceQueryFilter) dataRange.columnFilter(ByteBufferUtil.EMPTY_BYTE_BUFFER);
    }
    Composite startName = sqf.start();
    Composite stopName = sqf.finish();

    BooleanQuery query = new BooleanQuery();

    if (!startName.isEmpty()) {
        BooleanQuery q = new BooleanQuery();
        q.add(tokenMapper.query(startToken), MUST);
        q.add(clusteringKeyMapper.query(startName, null), MUST);
        query.add(q, occur);
        includeStart = false;
    }

    if (!stopName.isEmpty()) {
        BooleanQuery q = new BooleanQuery();
        q.add(tokenMapper.query(stopToken), MUST);
        q.add(clusteringKeyMapper.query(null, stopName), MUST);
        query.add(q, occur);
        includeStop = false;
    }

    if (!isSameToken) {
        Query rangeQuery = tokenMapper.query(startToken, stopToken, includeStart, includeStop);
        if (rangeQuery != null)
            query.add(rangeQuery, SHOULD);
    } else if (query.getClauses().length == 0) {
        return tokenMapper.query(startToken);
    }

    return query.getClauses().length == 0 ? null : query;
}