Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2008-09-10 17:18:27 +0000
committerEike Stepper2008-09-10 17:18:27 +0000
commit04cd09ce8dddc9c73fd57cadc6d380257a3f727e (patch)
tree904139244fc89a1f2420178b264633e99ca7b328
parent7d706b194b4d1ae6808031eb14e8eb06d9fd49e3 (diff)
downloadcdo-04cd09ce8dddc9c73fd57cadc6d380257a3f727e.tar.gz
cdo-04cd09ce8dddc9c73fd57cadc6d380257a3f727e.tar.xz
cdo-04cd09ce8dddc9c73fd57cadc6d380257a3f727e.zip
[208689] Add resource queries
https://bugs.eclipse.org/bugs/show_bug.cgi?id=208689
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/query/CDOQueryInfo.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/query/CDOQueryInfoImpl.java13
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java16
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreReader.java19
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/ResourcesQueryHandler.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IQueryContext.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreReader.java13
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/query/CDOQuery.java10
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/query/CDOQueryImpl.java7
11 files changed, 46 insertions, 57 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/query/CDOQueryInfo.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/query/CDOQueryInfo.java
index 5e49a38537..5bbe2f0a05 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/query/CDOQueryInfo.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/query/CDOQueryInfo.java
@@ -19,6 +19,8 @@ import java.util.Map;
*/
public interface CDOQueryInfo
{
+ public static final int UNLIMITED_RESULTS = -1;
+
public String getQueryLanguage();
public String getQueryString();
@@ -26,7 +28,7 @@ public interface CDOQueryInfo
public Map<String, Object> getParameters();
/**
- * Return the maximum number of results to retrieve.
+ * Returns the maximum number of results to retrieve or {@link #UNLIMITED_RESULTS} for no limitation.
*/
public int getMaxResults();
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/query/CDOQueryInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/query/CDOQueryInfoImpl.java
index 7c34eedf1a..2c4c70c027 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/query/CDOQueryInfoImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/query/CDOQueryInfoImpl.java
@@ -31,7 +31,7 @@ public class CDOQueryInfoImpl implements CDOQueryInfo
protected Map<String, Object> parameters = new HashMap<String, Object>();
- protected int maxResult = -1;
+ protected int maxResults = UNLIMITED_RESULTS;
public CDOQueryInfoImpl(String language, String queryString)
{
@@ -43,7 +43,7 @@ public class CDOQueryInfoImpl implements CDOQueryInfo
{
queryLanguage = in.readString();
queryString = in.readString();
- maxResult = in.readInt();
+ maxResults = in.readInt();
int size = in.readInt();
for (int i = 0; i < size; i++)
@@ -58,7 +58,7 @@ public class CDOQueryInfoImpl implements CDOQueryInfo
{
out.writeString(queryLanguage);
out.writeString(queryString);
- out.writeInt(maxResult);
+ out.writeInt(maxResults);
out.writeInt(parameters.size());
for (Entry<String, Object> entry : parameters.entrySet())
@@ -90,11 +90,12 @@ public class CDOQueryInfoImpl implements CDOQueryInfo
public int getMaxResults()
{
- return maxResult;
+ return maxResults;
}
- public void setMaxResult(int maxResult)
+ public CDOQueryInfoImpl setMaxResults(int maxResults)
{
- this.maxResult = maxResult;
+ this.maxResults = maxResults;
+ return this;
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java
index b0fb31b00f..f41700de4e 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java
@@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.server.db;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.model.CDOClass;
import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.server.IStoreReader.QueryResourcesContext;
import org.eclipse.net4j.util.collection.CloseableIterator;
@@ -47,23 +48,10 @@ public interface IMappingStrategy
/**
* @since 2.0
*/
- public void queryResourceIDs(IDBStoreReader storeReader, QueryResourceIDsContext context);
+ public void queryResources(IDBStoreReader storeReader, QueryResourcesContext context);
/**
* Must return the maximum CDOID value .
*/
public long repairAfterCrash(Connection connection);
-
- /**
- * @author Eike Stepper
- * @since 2.0
- */
- public interface QueryResourceIDsContext
- {
- public String getPathPrefix();
-
- public int getMaxResults();
-
- public boolean addResourceID(CDOID resourceID);
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreReader.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreReader.java
index e4fb7c2b8f..1d3315f238 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreReader.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreReader.java
@@ -292,24 +292,7 @@ public class DBStoreReader extends DBStoreAccessor implements IDBStoreReader
public void queryResources(final QueryResourcesContext context)
{
IMappingStrategy mappingStrategy = getStore().getMappingStrategy();
- mappingStrategy.queryResourceIDs(this, new IMappingStrategy.QueryResourceIDsContext()
- {
- public String getPathPrefix()
- {
- return context.getPathPrefix();
- }
-
- public int getMaxResults()
- {
- return context.getMaxResults();
- }
-
- public boolean addResourceID(CDOID resourceID)
- {
- CDORevision revision = readRevision(resourceID, CDORevision.UNCHUNKED);
- return context.addResource(revision);
- }
- });
+ mappingStrategy.queryResources(this, context);
}
/**
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java
index ff13d2fa59..38da1838b9 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java
@@ -18,6 +18,7 @@ import org.eclipse.emf.cdo.common.model.CDOClassRef;
import org.eclipse.emf.cdo.common.model.resource.CDOPathFeature;
import org.eclipse.emf.cdo.common.model.resource.CDOResourceClass;
import org.eclipse.emf.cdo.server.IPackageManager;
+import org.eclipse.emf.cdo.server.IStoreReader.QueryResourcesContext;
import org.eclipse.emf.cdo.server.db.IAttributeMapping;
import org.eclipse.emf.cdo.server.db.IClassMapping;
import org.eclipse.emf.cdo.server.db.IDBStore;
@@ -268,7 +269,7 @@ public abstract class MappingStrategy extends Lifecycle implements IMappingStrat
};
}
- public void queryResourceIDs(IDBStoreReader storeReader, QueryResourceIDsContext context)
+ public void queryResources(IDBStoreReader storeReader, QueryResourcesContext context)
{
IClassMapping mapping = getResourceClassMapping();
IDBTable resourceTable = mapping.getTable();
@@ -300,7 +301,7 @@ public abstract class MappingStrategy extends Lifecycle implements IMappingStrat
{
long longID = resultSet.getLong(1);
CDOID id = CDOIDUtil.createLong(longID);
- if (!context.addResourceID(id))
+ if (!context.addResource(id))
{
break;
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java
index 1efbef6d4f..9261c76614 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java
@@ -173,7 +173,7 @@ public class MEMStoreAccessor extends StoreAccessor implements IStoreReader, ISt
String path = getResourcePath(revision);
if (path != null && path.startsWith(context.getPathPrefix()))
{
- if (!context.addResource(revision))
+ if (!context.addResource(revision.getID()))
{
break;
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/ResourcesQueryHandler.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/ResourcesQueryHandler.java
index 0c1538be28..582f6de7ec 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/ResourcesQueryHandler.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/ResourcesQueryHandler.java
@@ -11,8 +11,8 @@
package org.eclipse.emf.cdo.internal.server;
import org.eclipse.emf.cdo.common.CDOProtocolConstants;
+import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.query.CDOQueryInfo;
-import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.IQueryContext;
import org.eclipse.emf.cdo.server.IQueryHandler;
import org.eclipse.emf.cdo.server.IStoreReader;
@@ -45,9 +45,9 @@ public class ResourcesQueryHandler implements IQueryHandler
return info.getMaxResults();
}
- public boolean addResource(CDORevision resource)
+ public boolean addResource(CDOID resourceID)
{
- return context.addResult(resource);
+ return context.addResult(resourceID);
}
});
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IQueryContext.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IQueryContext.java
index 69c1ea959d..b7b311119e 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IQueryContext.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IQueryContext.java
@@ -19,8 +19,12 @@ public interface IQueryContext
public IView getView();
/**
- * Adds the given object to the results of the associated query and returns <code>true</code> if more results are
- * allowed, <code>false</code> otherwise.
+ * Adds the given object to the results of the associated query.
+ *
+ * @param object
+ * TODO Simon: Describe the allowed types/values!
+ * @return <code>true</code> to indicate that more results can be passed subsequently, <code>false</code> otherwise
+ * (i.e. maxResults has been reached or an asynchronous query has been canceled).
*/
public boolean addResult(Object object);
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreReader.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreReader.java
index 8e4cb2f77f..4cbb965c39 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreReader.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreReader.java
@@ -16,6 +16,7 @@ import org.eclipse.emf.cdo.common.model.CDOClassRef;
import org.eclipse.emf.cdo.common.model.CDOFeature;
import org.eclipse.emf.cdo.common.model.CDOPackage;
import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
+import org.eclipse.emf.cdo.common.query.CDOQueryInfo;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.net4j.util.collection.CloseableIterator;
@@ -91,8 +92,18 @@ public interface IStoreReader extends IStoreAccessor, IQueryHandler
{
public String getPathPrefix();
+ /**
+ * Returns the maximum number of results expected by the client or {@link CDOQueryInfo#UNLIMITED_RESULTS} for no
+ * limitation.
+ */
public int getMaxResults();
- public boolean addResource(CDORevision resource);
+ /**
+ * Adds the CDOID of one resource to the results of the underlying query.
+ *
+ * @return <code>true</code> to indicate that more results can be passed subsequently, <code>false</code> otherwise
+ * (i.e. maxResults has been reached or an asynchronous query has been canceled).
+ */
+ public boolean addResource(CDOID resourceID);
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/query/CDOQuery.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/query/CDOQuery.java
index 8ac6f38130..b71e5fc1ea 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/query/CDOQuery.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/query/CDOQuery.java
@@ -34,13 +34,11 @@ public interface CDOQuery extends CDOQueryInfo
* Sets the maximum number of results to retrieve.
* <p>
*
- * @param maxResult
- * the maximum number of results to retrieve
- * @return the same query instance
- * @throws IllegalArgumentException
- * if argument is negative
+ * @param maxResults
+ * the maximum number of results to retrieve or {@link #UNLIMITED_RESULTS} for no limitation.
+ * @return the same query instance.
*/
- public CDOQuery setMaxResults(int maxResult);
+ public CDOQuery setMaxResults(int maxResults);
/**
* Binds an argument value to a named parameter.
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/query/CDOQueryImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/query/CDOQueryImpl.java
index 0a4f511156..33c5553490 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/query/CDOQueryImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/query/CDOQueryImpl.java
@@ -48,9 +48,10 @@ public class CDOQueryImpl extends CDOQueryInfoImpl implements CDOQuery
return view;
}
- public CDOQuery setMaxResults(int maxResult)
+ @Override
+ public CDOQueryImpl setMaxResults(int maxResults)
{
- this.maxResult = maxResult;
+ this.maxResults = maxResults;
return this;
}
@@ -124,7 +125,7 @@ public class CDOQueryImpl extends CDOQueryInfoImpl implements CDOQuery
protected CDOQueryInfoImpl createQueryInfo()
{
CDOQueryInfoImpl queryInfo = new CDOQueryInfoImpl(getQueryLanguage(), getQueryString());
- queryInfo.setMaxResult(getMaxResults());
+ queryInfo.setMaxResults(getMaxResults());
for (Entry<String, Object> entry : getParameters().entrySet())
{
Object value = entry.getValue();

Back to the top