use of org.apache.ignite.cache.query.TextQuery in project ignite by apache.
the class GridCacheFullTextQuerySelfTest method checkTextQuery.
/**
* @param clause Query clause.
* @param loc local query flag.
* @param keepBinary keep binary flag.
*/
private void checkTextQuery(String clause, boolean loc, boolean keepBinary) throws Exception {
final IgniteEx ignite = grid(0);
if (F.isEmpty(clause))
clause = "1*";
// 1. Populate cache with data, calculating expected count in parallel.
Set<Integer> exp = populateCache(ignite, loc, MAX_ITEM_COUNT, new IgnitePredicate<Integer>() {
@Override
public boolean apply(Integer x) {
return String.valueOf(x).startsWith("1");
}
});
// 2. Validate results.
TextQuery qry = new TextQuery<>(Person.class, clause).setLocal(loc);
validateQueryResults(ignite, qry, exp, keepBinary);
clearCache(ignite);
}
use of org.apache.ignite.cache.query.TextQuery in project ignite by apache.
the class IgniteCacheProxyImpl method query.
/**
* @param query Query.
* @param grp Optional cluster group.
* @return Cursor.
* @throws IgniteCheckedException If failed.
*/
@SuppressWarnings("unchecked")
private QueryCursor<Cache.Entry<K, V>> query(final Query query, @Nullable ClusterGroup grp) throws IgniteCheckedException {
GridCacheContext<K, V> ctx = getContextSafe();
final CacheQuery qry;
CacheOperationContext opCtxCall = ctx.operationContextPerCall();
boolean isKeepBinary = opCtxCall != null && opCtxCall.isKeepBinary();
final CacheQueryFuture fut;
if (query instanceof TextQuery) {
TextQuery q = (TextQuery) query;
qry = ctx.queries().createFullTextQuery(q.getType(), q.getText(), q.getLimit(), q.getPageSize(), isKeepBinary);
if (grp != null)
qry.projection(grp);
fut = ctx.kernalContext().query().executeQuery(GridCacheQueryType.TEXT, q.getText(), ctx, new IgniteOutClosureX<CacheQueryFuture<Map.Entry<K, V>>>() {
@Override
public CacheQueryFuture<Map.Entry<K, V>> applyx() {
return qry.execute();
}
}, false);
} else if (query instanceof SpiQuery) {
qry = ctx.queries().createSpiQuery(isKeepBinary);
if (grp != null)
qry.projection(grp);
fut = ctx.kernalContext().query().executeQuery(GridCacheQueryType.SPI, query.getClass().getSimpleName(), ctx, new IgniteOutClosureX<CacheQueryFuture<Map.Entry<K, V>>>() {
@Override
public CacheQueryFuture<Map.Entry<K, V>> applyx() {
return qry.execute(((SpiQuery) query).getArgs());
}
}, false);
} else if (query instanceof IndexQuery) {
IndexQuery q = (IndexQuery) query;
qry = ctx.queries().createIndexQuery(q, isKeepBinary);
if (q.getPageSize() > 0)
qry.pageSize(q.getPageSize());
if (grp != null)
qry.projection(grp);
fut = ctx.kernalContext().query().executeQuery(GridCacheQueryType.INDEX, q.getValueType(), ctx, new IgniteOutClosureX<CacheQueryFuture<Map.Entry<K, V>>>() {
@Override
public CacheQueryFuture<Map.Entry<K, V>> applyx() {
return qry.execute();
}
}, false);
} else {
if (query instanceof SqlFieldsQuery)
throw new CacheException("Use methods 'queryFields' and 'localQueryFields' for " + SqlFieldsQuery.class.getSimpleName() + ".");
throw new CacheException("Unsupported query type: " + query);
}
return new QueryCursorImpl<>(new GridCloseableIteratorAdapter<Entry<K, V>>() {
/**
*/
private Cache.Entry<K, V> cur;
@Override
protected Entry<K, V> onNext() throws IgniteCheckedException {
if (!onHasNext())
throw new NoSuchElementException();
Cache.Entry<K, V> e = cur;
cur = null;
return e;
}
@Override
protected boolean onHasNext() throws IgniteCheckedException {
if (cur != null)
return true;
Object next = fut.next();
// instead of Iterator<Map.Entry> due to IndexingSpi interface.
if (next == null)
return false;
if (next instanceof Cache.Entry)
cur = (Cache.Entry) next;
else {
Map.Entry e = (Map.Entry) next;
cur = new CacheEntryImpl(e.getKey(), e.getValue());
}
return true;
}
@Override
protected void onClose() throws IgniteCheckedException {
fut.cancel();
}
});
}
use of org.apache.ignite.cache.query.TextQuery in project ignite by apache.
the class SqlQueryHistorySelfTest method testTextQueryHistoryNotFullyFetched.
/**
* Test metrics for Sql queries.
*
* @throws Exception In case of error.
*/
@Test
public void testTextQueryHistoryNotFullyFetched() throws Exception {
TextQuery qry = new TextQuery<>("String", "1");
qry.setPageSize(10);
checkQueryNotFullyFetchedMetrics(qry, true);
}
use of org.apache.ignite.cache.query.TextQuery in project ignite by apache.
the class GridCacheFullTextQuerySelfTest method clearCache.
/**
* Clear cache with check.
*/
private static void clearCache(IgniteEx ignite) {
IgniteCache<Integer, Person> cache = ignite.cache(PERSON_CACHE);
cache.clear();
List all = cache.query(new TextQuery<>(Person.class, "1*")).getAll();
assertTrue(all.isEmpty());
}
use of org.apache.ignite.cache.query.TextQuery in project ignite by apache.
the class GridCacheFullTextQuerySelfTest method checkTextQuery.
/**
* @param clause Query clause.
* @param limit limits response size
* @param loc local query flag.
* @param keepBinary keep binary flag.
*/
private void checkTextQuery(String clause, int limit, boolean loc, boolean keepBinary) throws Exception {
final IgniteEx ignite = grid(0);
if (F.isEmpty(clause))
clause = "1*";
// 1. Populate cache with data, calculating expected count in parallel.
Set<Integer> exp = populateCache(ignite, loc, MAX_ITEM_COUNT, new IgnitePredicate<Integer>() {
@Override
public boolean apply(Integer x) {
return String.valueOf(x).startsWith("1");
}
});
// 2. Validate results.
TextQuery qry = new TextQuery<>(Person.class, clause).setLocal(loc).setLimit(limit);
validateQueryResults(ignite, qry, exp, keepBinary);
clearCache(ignite);
}
Aggregations