use of com.cinchapi.concourse.thrift.Operator in project concourse by cinchapi.
the class ConcourseServer method findKeyOperatorValuesTimePage.
@Override
@TranslateClientExceptions
@VerifyAccessToken
@VerifyReadPermission
public Set<Long> findKeyOperatorValuesTimePage(String key, Operator operator, List<TObject> values, long timestamp, TPage page, AccessToken creds, TransactionToken transaction, String environment) throws TException {
TObject[] tValues = values.toArray(Array.containing());
AtomicSupport store = getStore(transaction, environment);
Function<Store, Set<Long>> function = $store -> Stores.find($store, timestamp, key, operator, tValues);
Set<Long> records;
try {
records = function.apply(store);
} catch (InsufficientAtomicityException e) {
records = AtomicOperations.supplyWithRetry(store, atomic -> function.apply(atomic));
}
return Paging.page(records, Pages.from(page));
}
use of com.cinchapi.concourse.thrift.Operator in project concourse by cinchapi.
the class RangeToken method intersects.
/**
* Return {@code true} if this RangeToken intersects the {@code other}
* RangeToken. This RangeToken is considered to intersect another one if the
* left point of this RangeToken is less than or equal to the right point of
* the other one and the right point of this RangeToken is greater than or
* equal to the left point of the other one.
*
* @param other
* @return {@code true} if this RangeToken intersects the other
*/
public boolean intersects(RangeToken other) {
Value value = other.values[0];
Value myValue = this.values[0];
Operator myOperator = this.operator == null ? Operator.EQUALS : this.operator;
Operator operator = other.operator == null ? Operator.EQUALS : other.operator;
switch(myOperator) {
case EQUALS:
switch(operator) {
case EQUALS:
return myValue.compareTo(value) == 0;
case NOT_EQUALS:
return myValue.compareTo(value) != 0;
case GREATER_THAN:
return myValue.compareTo(value) > 0;
case GREATER_THAN_OR_EQUALS:
return myValue.compareTo(value) >= 0;
case LESS_THAN:
return myValue.compareTo(value) < 0;
case LESS_THAN_OR_EQUALS:
return myValue.compareTo(value) <= 0;
case BETWEEN:
return myValue.compareTo(value) >= 0 && myValue.compareTo(other.values[1]) < 0;
case REGEX:
case NOT_REGEX:
return true;
default:
throw new UnsupportedOperationException();
}
case NOT_EQUALS:
switch(operator) {
case EQUALS:
return myValue.compareTo(value) != 0;
case NOT_EQUALS:
case GREATER_THAN:
case GREATER_THAN_OR_EQUALS:
case LESS_THAN:
case LESS_THAN_OR_EQUALS:
return true;
case BETWEEN:
return myValue.compareTo(value) != 0 || myValue.compareTo(other.values[1]) != 0;
case REGEX:
case NOT_REGEX:
return true;
default:
throw new UnsupportedOperationException();
}
case GREATER_THAN:
switch(operator) {
case EQUALS:
case LESS_THAN:
case LESS_THAN_OR_EQUALS:
return value.compareTo(myValue) > 0;
case NOT_EQUALS:
case GREATER_THAN:
case GREATER_THAN_OR_EQUALS:
return true;
case BETWEEN:
return other.values[1].compareTo(myValue) > 0;
case REGEX:
case NOT_REGEX:
return true;
default:
throw new UnsupportedOperationException();
}
case GREATER_THAN_OR_EQUALS:
switch(operator) {
case EQUALS:
case LESS_THAN_OR_EQUALS:
return value.compareTo(myValue) >= 0;
case LESS_THAN:
return value.compareTo(myValue) > 0;
case NOT_EQUALS:
case GREATER_THAN:
case GREATER_THAN_OR_EQUALS:
return true;
case BETWEEN:
// end of range
return other.values[1].compareTo(myValue) > 0;
// included for BETWEEN
case REGEX:
case NOT_REGEX:
return true;
default:
throw new UnsupportedOperationException();
}
case LESS_THAN:
switch(operator) {
case EQUALS:
case GREATER_THAN:
case GREATER_THAN_OR_EQUALS:
return value.compareTo(myValue) < 0;
case NOT_EQUALS:
case LESS_THAN:
case LESS_THAN_OR_EQUALS:
return true;
case BETWEEN:
return value.compareTo(myValue) < 0;
case REGEX:
case NOT_REGEX:
return true;
default:
throw new UnsupportedOperationException();
}
case LESS_THAN_OR_EQUALS:
switch(operator) {
case EQUALS:
case GREATER_THAN_OR_EQUALS:
return value.compareTo(myValue) <= 0;
case LESS_THAN:
case LESS_THAN_OR_EQUALS:
case NOT_EQUALS:
return true;
case GREATER_THAN:
return value.compareTo(myValue) < 0;
case BETWEEN:
return value.compareTo(myValue) <= 0;
case REGEX:
case NOT_REGEX:
return true;
default:
throw new UnsupportedOperationException();
}
case BETWEEN:
Value myOtherValue = this.values[1];
switch(operator) {
case EQUALS:
return value.compareTo(myValue) >= 0 && value.compareTo(myOtherValue) < 0;
case NOT_EQUALS:
return value.compareTo(myValue) != 0 || value.compareTo(myOtherValue) != 0;
case GREATER_THAN:
case GREATER_THAN_OR_EQUALS:
return value.compareTo(myOtherValue) < 0;
case LESS_THAN:
return value.compareTo(myValue) > 0;
case LESS_THAN_OR_EQUALS:
return value.compareTo(myValue) >= 0;
case BETWEEN:
return myOtherValue.compareTo(value) >= 0 && myValue.compareTo(other.values[1]) <= 0;
case REGEX:
case NOT_REGEX:
return true;
default:
throw new UnsupportedOperationException();
}
case REGEX:
case NOT_REGEX:
return true;
default:
throw new UnsupportedOperationException();
}
}
use of com.cinchapi.concourse.thrift.Operator in project concourse by cinchapi.
the class Finder method visit.
@Override
public Set<Long> visit(ExpressionTree tree, Object... data) {
Verify.that(data.length >= 1);
Verify.that(data[0] instanceof Store);
Store store = (Store) data[0];
ExpressionSymbol expression = ((ExpressionSymbol) tree.root());
String key = expression.raw().key();
Operator operator = (Operator) expression.raw().operator();
if (key.equals(Constants.JSON_RESERVED_IDENTIFIER_NAME)) {
Set<Long> ids;
if (operator == Operator.EQUALS) {
ids = Sets.newTreeSet();
expression.raw().values().forEach(value -> ids.add(((Number) value).longValue()));
} else if (operator == Operator.NOT_EQUALS) {
Set<Long> exclude = expression.raw().values().stream().map(value -> ((Number) value).longValue()).collect(Collectors.toCollection(HashSet::new));
ids = Sets.difference(store.getAllRecords(), exclude);
} else {
throw new IllegalArgumentException("Cannot query on record id using " + expression.raw().operator());
}
return ids;
} else {
ArrayBuilder<TObject> values = ArrayBuilder.builder();
expression.values().forEach(value -> values.add(Convert.javaToThrift(value.value())));
Set<Long> results = (expression.timestamp() == TimestampSymbol.PRESENT || expression.timestamp() == null) ? Stores.find(store, key, operator, values.build()) : Stores.find(store, expression.raw().timestamp(), key, operator, values.build());
return results;
}
}
use of com.cinchapi.concourse.thrift.Operator in project concourse by cinchapi.
the class Buffer method explore.
@Override
public Map<Long, Set<TObject>> explore(Map<Long, Set<TObject>> context, String key, Aliases aliases, long timestamp) {
Iterator<Write> it = iterator(key, timestamp);
try {
Operator operator = aliases.operator();
TObject[] values = aliases.values();
while (it.hasNext()) {
Write write = it.next();
long record = write.getRecord().longValue();
if (matches(write.getValue(), operator, values)) {
if (write.getType() == Action.ADD) {
MultimapViews.put(context, record, write.getValue().getTObject());
} else {
MultimapViews.remove(context, record, write.getValue().getTObject());
}
}
}
return TMaps.asSortedMap(context);
} finally {
Iterators.close(it);
}
}
use of com.cinchapi.concourse.thrift.Operator in project concourse by cinchapi.
the class RangeTokensTest method testConvertNotEqualRangeToken.
@Test
public void testConvertNotEqualRangeToken() {
Text key = TestData.getText();
Operator operator = Operator.NOT_EQUALS;
Value value = TestData.getValue();
RangeToken token = RangeToken.forReading(key, operator, value);
Iterable<Range<Value>> ranges = RangeTokens.convertToRange(token);
Assert.assertEquals(Lists.newArrayList(Range.lessThan(value), Range.greaterThan(value)), ranges);
}
Aggregations