private ColumnCondition(ColumnDefinition column, Term collectionElement, Term value, List<Term> inValues, Operator op) { this.column = column; this.collectionElement = collectionElement; this.value = value; this.inValues = inValues; this.operator = op; if (!operator.equals(Operator.IN)) assert this.inValues == null; }
private SimpleBound(ColumnCondition condition, QueryOptions options) throws InvalidRequestException { super(condition.column, condition.operator); assert !(column.type instanceof CollectionType) && condition.collectionElement == null; assert !condition.operator.equals(Operator.IN); this.value = condition.value.bindAndGet(options); }
private static boolean setOrListAppliesTo(AbstractType<?> type, Iterator<Cell> iter, Iterator<ByteBuffer> conditionIter, Operator operator, boolean isSet) { while(iter.hasNext()) { if (!conditionIter.hasNext()) return operator.equals(Operator.GT) || operator.equals(Operator.GTE) || operator.equals(Operator.NEQ); // for lists we use the cell value; for sets we use the cell name ByteBuffer cellValue = isSet? iter.next().name().collectionElement() : iter.next().value(); int comparison = type.compare(cellValue, conditionIter.next()); if (comparison != 0) return evaluateComparisonWithOperator(comparison, operator); } if (conditionIter.hasNext()) return operator.equals(Operator.LT) || operator.equals(Operator.LTE) || operator.equals(Operator.NEQ); // they're equal return operator == Operator.EQ || operator == Operator.LTE || operator == Operator.GTE; }
private CollectionBound(ColumnCondition condition, QueryOptions options) throws InvalidRequestException { super(condition.column, condition.operator); assert column.type.isCollection() && condition.collectionElement == null; assert !condition.operator.equals(Operator.IN); this.value = condition.value.bind(options); }
private ElementAccessBound(ColumnCondition condition, QueryOptions options) throws InvalidRequestException { super(condition.column, condition.operator); assert column.type instanceof CollectionType && condition.collectionElement != null; assert !condition.operator.equals(Operator.IN); this.collectionElement = condition.collectionElement.bindAndGet(options); this.value = condition.value.bindAndGet(options); }
static boolean mapAppliesTo(MapType type, Iterator<Cell> iter, Map<ByteBuffer, ByteBuffer> elements, Operator operator) { Iterator<Map.Entry<ByteBuffer, ByteBuffer>> conditionIter = elements.entrySet().iterator(); while(iter.hasNext()) { if (!conditionIter.hasNext()) return operator.equals(Operator.GT) || operator.equals(Operator.GTE) || operator.equals(Operator.NEQ); Map.Entry<ByteBuffer, ByteBuffer> conditionEntry = conditionIter.next(); Cell c = iter.next(); // compare the keys int comparison = type.getKeysType().compare(c.name().collectionElement(), conditionEntry.getKey()); if (comparison != 0) return evaluateComparisonWithOperator(comparison, operator); // compare the values comparison = type.getValuesType().compare(c.value(), conditionEntry.getValue()); if (comparison != 0) return evaluateComparisonWithOperator(comparison, operator); } if (conditionIter.hasNext()) return operator.equals(Operator.LT) || operator.equals(Operator.LTE) || operator.equals(Operator.NEQ); // they're equal return operator == Operator.EQ || operator == Operator.LTE || operator == Operator.GTE; } }
private SimpleInBound(ColumnCondition condition, QueryOptions options) throws InvalidRequestException { super(condition.column, condition.operator); assert !(column.type instanceof CollectionType) && condition.collectionElement == null; assert condition.operator.equals(Operator.IN); if (condition.inValues == null) this.inValues = ((Lists.Marker) condition.value).bind(options).getElements(); else { this.inValues = new ArrayList<>(condition.inValues.size()); for (Term value : condition.inValues) this.inValues.add(value.bindAndGet(options)); } }
return operator.equals(Operator.NEQ);
/** * Collects the column specification for the bind variables of this operation. * * @param boundNames the list of column specification where to collect the * bind variables of this term in. */ public void collectMarkerSpecification(VariableSpecifications boundNames) { if (collectionElement != null) collectionElement.collectMarkerSpecification(boundNames); if (operator.equals(Operator.IN) && inValues != null) { for (Term value : inValues) value.collectMarkerSpecification(boundNames); } else { value.collectMarkerSpecification(boundNames); } }
public ColumnCondition.Bound bind(QueryOptions options) throws InvalidRequestException { boolean isInCondition = operator.equals(Operator.IN); if (column.type instanceof CollectionType) { if (collectionElement == null) return isInCondition ? new CollectionInBound(this, options) : new CollectionBound(this, options); else return isInCondition ? new ElementAccessInBound(this, options) : new ElementAccessBound(this, options); } return isInCondition ? new SimpleInBound(this, options) : new SimpleBound(this, options); }
assert condition.operator.equals(Operator.IN); inValues = new ArrayList<>(); if (condition.inValues == null)