package org.radargun.service; import org.infinispan.query.Search; import org.infinispan.query.dsl.Expression; import org.infinispan.query.dsl.FilterConditionContext; import org.infinispan.query.dsl.QueryFactory; import org.radargun.traits.Query; /** * Nothing new here, only needed because of the change in return values of methods in * FilterConditionEndContext.java (commit ba9fc6d0372ccdb2b2ca4b66491a1cdd87f2f1f1). */ public class Infinispan90EmbeddedQueryable extends Infinispan80EmbeddedQueryable { public Infinispan90EmbeddedQueryable(Infinispan90EmbeddedService service) { super(service); } @Override public Query.Builder getBuilder(String containerName, Class<?> clazz) { return new QueryBuilder90Impl(Search.getQueryFactory(service.getCache(containerName)), clazz); } protected static class QueryBuilder90Impl extends QueryBuilder80Impl { public QueryBuilder90Impl(QueryFactory factory, Class<?> clazz) { super(factory, clazz); } protected QueryBuilder90Impl(QueryFactory factory) { super(factory); } @Override public Query.Builder subquery() { return new QueryBuilder90Impl(factory); } @Override public Query.Builder eq(Query.SelectExpression selectExpression, Object value) { context = getEndContext(selectExpression).eq(value); return this; } @Override public Query.Builder lt(Query.SelectExpression selectExpression, Object value) { context = getEndContext(selectExpression).lt(value); return this; } @Override public Query.Builder le(Query.SelectExpression selectExpression, Object value) { context = getEndContext(selectExpression).lte(value); return this; } @Override public Query.Builder gt(Query.SelectExpression selectExpression, Object value) { context = getEndContext(selectExpression).gt(value); return this; } @Override public Query.Builder ge(Query.SelectExpression selectExpression, Object value) { context = getEndContext(selectExpression).gte(value); return this; } @Override public Query.Builder between(Query.SelectExpression selectExpression, Object lowerBound, boolean lowerInclusive, Object upperBound, boolean upperInclusive) { context = getEndContext(selectExpression).between(lowerBound, upperBound).includeLower(lowerInclusive).includeUpper(upperInclusive); return this; } @Override public Query.Builder isNull(Query.SelectExpression selectExpression) { context = getEndContext(selectExpression).isNull(); return this; } @Override public Query.Builder like(Query.SelectExpression selectExpression, String pattern) { context = getEndContext(selectExpression).like(pattern); return this; } @Override public Query.Builder contains(Query.SelectExpression selectExpression, Object value) { context = getEndContext(selectExpression).contains(value); return this; } @Override public Query.Builder not(Query.Builder subquery) { FilterConditionContext subqueryContext = ((QueryBuilderImpl) subquery).context; if (subqueryContext == null) { return this; } if (context != null) { context = context.and().not(subqueryContext); } else if (builder != null) { context = builder.not(subqueryContext); } else { context = factory.not(subqueryContext); } return this; } @Override public Query.Builder any(Query.Builder... subqueries) { if (subqueries.length == 0) { return this; } FilterConditionContext innerContext = null; for (Query.Builder subquery : subqueries) { if (innerContext == null) { innerContext = ((QueryBuilderImpl) subquery).context; } else { innerContext = innerContext.or(((QueryBuilderImpl) subquery).context); } } if (context != null) { context = context.and(innerContext); } else if (builder != null) { context = builder.not().not(innerContext); } else { context = factory.not().not(innerContext); } return this; } @Override public Query.Builder projection(Query.SelectExpression... selectExpressions) { if (builder == null) throw new IllegalArgumentException("You have to call projection() on root query builder!"); Expression[] projections = new Expression[selectExpressions.length]; for (int i = 0; i < selectExpressions.length; i++) { projections[i] = attributeToExpression(selectExpressions[i]); } builder.select(projections); return this; } @Override public Query.Builder offset(long offset) { if (builder == null) throw new IllegalArgumentException("You have to call offset() on root query builder!"); builder.startOffset(offset); return this; } @Override public Query.Builder limit(long limit) { if (builder == null) throw new IllegalArgumentException("You have to call limit() on root query builder!"); builder.maxResults(limit > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) limit); return this; } @Override public Query build() { if (builder == null) throw new IllegalArgumentException("You have to call build() on root query builder!"); return new QueryImpl(builder.build()); } } }