diff options
author | Eike Stepper | 2008-09-10 17:18:27 +0000 |
---|---|---|
committer | Eike Stepper | 2008-09-10 17:18:27 +0000 |
commit | 04cd09ce8dddc9c73fd57cadc6d380257a3f727e (patch) | |
tree | 904139244fc89a1f2420178b264633e99ca7b328 | |
parent | 7d706b194b4d1ae6808031eb14e8eb06d9fd49e3 (diff) | |
download | cdo-04cd09ce8dddc9c73fd57cadc6d380257a3f727e.tar.gz cdo-04cd09ce8dddc9c73fd57cadc6d380257a3f727e.tar.xz cdo-04cd09ce8dddc9c73fd57cadc6d380257a3f727e.zip |
[208689] Add resource queries
https://bugs.eclipse.org/bugs/show_bug.cgi?id=208689
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(); |