Skip to content

Commit

Permalink
#ignite-738: move GridCacheQueryCommandHandler to new query API.
Browse files Browse the repository at this point in the history
  • Loading branch information
ivasilinets committed Apr 13, 2015
1 parent f9e922a commit 4623cad
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 193 deletions.
Expand Up @@ -106,27 +106,9 @@ public enum GridQueryType {
/** Page size. */ /** Page size. */
private int pageSize; private int pageSize;


/** Timeout. */
private long timeout;

/** Include backups flag. */
private boolean includeBackups;

/** Enable dedup flag. */
private boolean enableDedup;

/** Keep portable flag. */
private boolean keepPortable;

/** Class name. */ /** Class name. */
private String clsName; private String clsName;


/** Remote reducer class name. */
private String rmtReducerClsName;

/** Remote transformer class name. */
private String rmtTransformerClsName;

/** Query arguments. */ /** Query arguments. */
private Object[] qryArgs; private Object[] qryArgs;


Expand Down Expand Up @@ -214,55 +196,6 @@ public void pageSize(int pageSize) {
this.pageSize = pageSize; this.pageSize = pageSize;
} }


/**
* @return Query timeout.
*/
public long timeout() {
return timeout;
}

/**
* @param timeout Query timeout.
*/
public void timeout(long timeout) {
this.timeout = timeout;
}

/**
* @return Include backups flag.
*/
public boolean includeBackups() {
return includeBackups;
}

/**
* @param includeBackups Include backups flag.
*/
public void includeBackups(boolean includeBackups) {
this.includeBackups = includeBackups;
}

/**
* @return Enable de-duplication flag.
*/
public boolean enableDedup() {
return enableDedup;
}

/**
* @return Keep portable flag.
*/
public boolean keepPortable() {
return keepPortable;
}

/**
* @param enableDedup Enable de-duplication flag.
*/
public void enableDedup(boolean enableDedup) {
this.enableDedup = enableDedup;
}

/** /**
* @return Class name. * @return Class name.
*/ */
Expand All @@ -277,34 +210,6 @@ public void className(String clsName) {
this.clsName = clsName; this.clsName = clsName;
} }


/**
* @return Remote reducer class name.
*/
public String remoteReducerClassName() {
return rmtReducerClsName;
}

/**
* @param rmtReducerClsName Remote reducer class name.
*/
public void remoteReducerClassName(String rmtReducerClsName) {
this.rmtReducerClsName = rmtReducerClsName;
}

/**
* @return Remote transformer class name.
*/
public String remoteTransformerClassName() {
return rmtTransformerClsName;
}

/**
* @param rmtTransformerClsName Remote transformer class name.
*/
public void remoteTransformerClassName(String rmtTransformerClsName) {
this.rmtTransformerClsName = rmtTransformerClsName;
}

/** /**
* @return Query arguments. * @return Query arguments.
*/ */
Expand All @@ -329,13 +234,7 @@ public void queryArguments(Object[] qryArgs) {
cacheName = U.readString(in); cacheName = U.readString(in);
clause = U.readString(in); clause = U.readString(in);
pageSize = in.readInt(); pageSize = in.readInt();
timeout = in.readLong();
includeBackups = in.readBoolean();
enableDedup = in.readBoolean();
keepPortable = in.readBoolean();
clsName = U.readString(in); clsName = U.readString(in);
rmtReducerClsName = U.readString(in);
rmtTransformerClsName = U.readString(in);
qryArgs = U.readArray(in); qryArgs = U.readArray(in);
} }


Expand All @@ -348,14 +247,7 @@ public void queryArguments(Object[] qryArgs) {
out.writeInt(type == null ? -1 : type.ordinal()); out.writeInt(type == null ? -1 : type.ordinal());
U.writeString(out, cacheName); U.writeString(out, cacheName);
U.writeString(out, clause); U.writeString(out, clause);
out.writeInt(pageSize);
out.writeLong(timeout);
out.writeBoolean(includeBackups);
out.writeBoolean(enableDedup);
out.writeBoolean(keepPortable);
U.writeString(out, clsName); U.writeString(out, clsName);
U.writeString(out, rmtReducerClsName);
U.writeString(out, rmtTransformerClsName);
U.writeArray(out, qryArgs); U.writeArray(out, qryArgs);
} }


Expand Down
Expand Up @@ -19,11 +19,10 @@


import org.apache.ignite.*; import org.apache.ignite.*;
import org.apache.ignite.cache.*; import org.apache.ignite.cache.*;
import org.apache.ignite.cache.query.*;
import org.apache.ignite.internal.*; import org.apache.ignite.internal.*;
import org.apache.ignite.internal.processors.cache.*; import org.apache.ignite.internal.processors.cache.*;
import org.apache.ignite.internal.processors.cache.query.*;
import org.apache.ignite.internal.processors.rest.*; import org.apache.ignite.internal.processors.rest.*;
import org.apache.ignite.internal.processors.rest.client.message.*;
import org.apache.ignite.internal.processors.rest.handlers.*; import org.apache.ignite.internal.processors.rest.handlers.*;
import org.apache.ignite.internal.processors.rest.request.*; import org.apache.ignite.internal.processors.rest.request.*;
import org.apache.ignite.internal.util.future.*; import org.apache.ignite.internal.util.future.*;
Expand Down Expand Up @@ -175,10 +174,7 @@ private static GridRestResponse fetchQueryResults(
) throws IgniteCheckedException { ) throws IgniteCheckedException {
if (wrapper == null) if (wrapper == null)
throw new IgniteCheckedException("Failed to find query future (query has been expired)."); throw new IgniteCheckedException("Failed to find query future (query has been expired).");

Collection<Object> col = wrapper.result();
GridCacheQueryFutureAdapter<?, ?, ?> fut = wrapper.future();

Collection<Object> col = (Collection<Object>)fut.nextPage();


GridCacheRestResponse res = new GridCacheRestResponse(); GridCacheRestResponse res = new GridCacheRestResponse();


Expand Down Expand Up @@ -268,67 +264,41 @@ private ExecuteQuery(GridRestCacheQueryRequest req) {
@Override public GridRestResponse call() throws Exception { @Override public GridRestResponse call() throws Exception {
long qryId = qryIdGen.getAndIncrement(); long qryId = qryIdGen.getAndIncrement();


CacheQueries<Object,Object> queries = ((IgniteKernal)g).getCache(req.cacheName()).queries(); IgniteCache cache = g.cache(req.cacheName());


CacheQuery<?> qry; Query qry;


switch (req.type()) { switch (req.type()) {
case SQL: case SQL:
qry = queries.createSqlQuery(req.className(), req.clause()); qry = new SqlQuery(req.className(), req.clause()).setArgs(req.queryArguments());


break; break;


case SQL_FIELDS: case SQL_FIELDS:
qry = queries.createSqlFieldsQuery(req.clause()); qry = new SqlFieldsQuery(req.clause()).setArgs(req.queryArguments());


break; break;


case FULL_TEXT: case FULL_TEXT:
qry = queries.createFullTextQuery(req.className(), req.clause()); qry = new TextQuery(req.className(), req.clause());


break; break;


case SCAN: case SCAN:
qry = queries.createScanQuery(instance(IgniteBiPredicate.class, req.className())); qry = new ScanQuery(instance(IgniteBiPredicate.class, req.className()));


break; break;


default: default:
throw new IgniteCheckedException("Unsupported query type: " + req.type()); throw new IgniteCheckedException("Unsupported query type: " + req.type());
} }


boolean keepPortable = req.keepPortable();

if (!keepPortable) {
if (req.type() != GridClientCacheQueryRequest.GridQueryType.SCAN &&
(req.remoteReducerClassName() == null && req.remoteTransformerClassName() == null))
// Do not deserialize values on server if not needed.
keepPortable = true;
}

((GridCacheQueryAdapter)qry).keepPortable(keepPortable);
((GridCacheQueryAdapter)qry).subjectId(req.clientId());

if (req.pageSize() > 0) if (req.pageSize() > 0)
qry = qry.pageSize(req.pageSize()); qry = qry.setPageSize(req.pageSize());

if (req.timeout() > 0)
qry = qry.timeout(req.timeout());


qry = qry.includeBackups(req.includeBackups()).enableDedup(req.enableDedup()).keepAll(false); List<?> fut;


GridCacheQueryFutureAdapter<?, ?, ?> fut; fut = cache.query(qry).getAll();

if (req.remoteReducerClassName() != null)
fut = (GridCacheQueryFutureAdapter<?, ?, ?>)qry.execute(
instance(IgniteReducer.class, req.remoteReducerClassName()),
req.queryArguments());
else if (req.remoteTransformerClassName() != null)
fut = (GridCacheQueryFutureAdapter<?, ?, ?>)qry.execute(
instance(IgniteClosure.class, req.remoteTransformerClassName()),
req.queryArguments());
else
fut = (GridCacheQueryFutureAdapter<?, ?, ?>)qry.execute(req.queryArguments());


ConcurrentMap<QueryExecutionKey, QueryFutureWrapper> locMap = g.cluster().nodeLocalMap(); ConcurrentMap<QueryExecutionKey, QueryFutureWrapper> locMap = g.cluster().nodeLocalMap();


Expand Down Expand Up @@ -447,15 +417,15 @@ private QueryExecutionKey(long qryId) {
*/ */
private static class QueryFutureWrapper { private static class QueryFutureWrapper {
/** Query future. */ /** Query future. */
private final GridCacheQueryFutureAdapter<?, ?, ?> qryFut; private final List qryFut;


/** Last future use timestamp. */ /** Last future use timestamp. */
private volatile long lastUseTs; private volatile long lastUseTs;


/** /**
* @param qryFut Query future. * @param qryFut Query future.
*/ */
private QueryFutureWrapper(GridCacheQueryFutureAdapter<?, ?, ?> qryFut) { private QueryFutureWrapper(List qryFut) {
this.qryFut = qryFut; this.qryFut = qryFut;


lastUseTs = U.currentTimeMillis(); lastUseTs = U.currentTimeMillis();
Expand All @@ -464,7 +434,7 @@ private QueryFutureWrapper(GridCacheQueryFutureAdapter<?, ?, ?> qryFut) {
/** /**
* @return Query future. * @return Query future.
*/ */
private GridCacheQueryFutureAdapter<?, ?, ?> future() { private List result() {
lastUseTs = U.currentTimeMillis(); lastUseTs = U.currentTimeMillis();


return qryFut; return qryFut;
Expand Down
Expand Up @@ -80,54 +80,13 @@ public int pageSize() {
return msg.pageSize(); return msg.pageSize();
} }


/**
* @return Timeout.
*/
public long timeout() {
return msg.timeout();
}

/**
* @return Include backups.
*/
public boolean includeBackups() {
return msg.includeBackups();
}

/**
* @return Enable dedup.
*/
public boolean enableDedup() {
return msg.enableDedup();
}

/**
* @return Keep portable flag.
*/
public boolean keepPortable() {
return msg.keepPortable();
}

/** /**
* @return Class name. * @return Class name.
*/ */
public String className() { public String className() {
return msg.className(); return msg.className();
} }


/**
* @return Remot reducer class name.
*/
public String remoteReducerClassName() {
return msg.remoteReducerClassName();
}

/**
* @return Remote transformer class name.
*/
public String remoteTransformerClassName() {
return msg.remoteTransformerClassName();
}


/** /**
* @return Query arguments. * @return Query arguments.
Expand Down

0 comments on commit 4623cad

Please sign in to comment.