diff options
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql')
4 files changed, 97 insertions, 27 deletions
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/EvaluatorTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/EvaluatorTest.java index a46c4e426..137922078 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/EvaluatorTest.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/EvaluatorTest.java @@ -19,6 +19,7 @@ import org.eclipse.equinox.internal.p2.metadata.IRequiredCapability; import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory; import org.eclipse.equinox.p2.metadata.*; import org.eclipse.equinox.p2.metadata.expression.*; +import org.eclipse.equinox.p2.metadata.expression.IContextExpression; import org.eclipse.equinox.p2.metadata.query.InstallableUnitQuery; import org.eclipse.equinox.p2.publisher.PublisherInfo; import org.eclipse.equinox.p2.publisher.PublisherResult; @@ -34,8 +35,8 @@ import org.eclipse.equinox.p2.tests.TestActivator; import org.osgi.framework.Filter; public class EvaluatorTest extends AbstractProvisioningTest { - private static final IQLParser parser = QL.newParser(); - private static final IQLFactory factory = QL.getFactory(); + private static final IExpressionParser parser = ExpressionUtil.getParser(); + private static final IExpressionFactory factory = ExpressionUtil.getFactory(); public void testArguments() throws Exception { IExpression expr = parser.parse("'a' == $0 && 'b' == $1 && 'c' == $2"); @@ -100,7 +101,7 @@ public class EvaluatorTest extends AbstractProvisioningTest { "parent.requiredCapabilities.unique(requirementsCache).select(rc | rc.filter == null || $2 ~= filter(rc.filter)), _, " + // "{rcs, child | rcs.exists(rc | child ~= rc)})}).limit(10)"; - IContextExpression expr = factory.contextExpression(IInstallableUnit.class, parser.parseQuery(exprString)); + IContextExpression expr = factory.contextExpression(parser.parseQuery(exprString)); System.out.println(expr.toString()); assertEquals(exprString, expr.toString()); } @@ -114,12 +115,12 @@ public class EvaluatorTest extends AbstractProvisioningTest { IExpression cmp2 = factory.equals(factory.at(factory.member(item, "properties"), factory.indexedParameter(1)), factory.indexedParameter(2)); IExpression lambda = factory.lambda(item, factory.and(cmp1, cmp2)); - IExpression latest = factory.latest(factory.select(factory.variable("everything"), lambda)); + IExpression latest = ((IQLFactory) factory).latest(((IQLFactory) factory).select(factory.variable("everything"), lambda)); // Create the query - IContextExpression e3 = factory.contextExpression(IInstallableUnit.class, latest, "test.bundle", "org.eclipse.equinox.p2.type.group", "true"); + IContextExpression<IInstallableUnit> e3 = factory.contextExpression(latest, "test.bundle", "org.eclipse.equinox.p2.type.group", "true"); IMetadataRepository repo = getMDR("/testData/metadataRepo/multipleversions1"); - IQueryResult result = repo.query(new QLContextQuery(e3), new NullProgressMonitor()); + IQueryResult result = repo.query(new QLContextQuery(IInstallableUnit.class, e3), new NullProgressMonitor()); assertEquals(queryResultSize(result), 1); } @@ -213,11 +214,11 @@ public class EvaluatorTest extends AbstractProvisioningTest { env.put("osgi.ws", "gtk"); env.put("osgi.arch", "x86"); - IContextExpression expr = factory.contextExpression(IInstallableUnit.class, parser.parseQuery("" + // + IContextExpression<IInstallableUnit> expr = factory.contextExpression(parser.parseQuery("" + // "select(x | x.id == $0 && x.version == $1).traverse(capabilityIndex(everything), _, { index, parent |" + // "index.satisfiesAny(parent.requiredCapabilities.select(rc | rc.filter == null || $2 ~= rc.filter))})"), "org.eclipse.sdk.feature.group", Version.create("3.5.0.v20090423-7Q7bA7DPR-wM38__Q4iRsmx9z0KOjbpx3AbyvXd-Uq7J2"), env); - QLContextQuery query = new QLContextQuery(expr); + QLContextQuery query = new QLContextQuery(IInstallableUnit.class, expr); IMetadataRepository repo = getMDR("/testData/galileoM7"); IQueryResult result = repo.query(query, new NullProgressMonitor()); assertEquals(queryResultSize(result), 411); @@ -235,7 +236,7 @@ public class EvaluatorTest extends AbstractProvisioningTest { env.put("osgi.ws", "gtk"); env.put("osgi.arch", "x86"); - IContextExpression expr = factory.contextExpression(IInstallableUnit.class, parser.parseQuery("" + // + IContextExpression<IInstallableUnit> expr = factory.contextExpression(parser.parseQuery("" + // "select(x | x.id == $0 && x.version == $1).traverse(parent |" + // "$5.satisfiesAny(parent.requiredCapabilities.select(rc | rc.filter == null || $4 ~= rc.filter))).intersect(" + // "select(x | x.id == $2 && x.version == $3).traverse(parent |" + // @@ -247,7 +248,7 @@ public class EvaluatorTest extends AbstractProvisioningTest { env,// index); - QLContextQuery query = new QLContextQuery(expr); + QLContextQuery query = new QLContextQuery(IInstallableUnit.class, expr); IQueryResult result = repo.query(query, new NullProgressMonitor()); assertEquals(queryResultSize(result), 184); } @@ -301,10 +302,10 @@ public class EvaluatorTest extends AbstractProvisioningTest { IExpression everything = factory.variable("everything"); IExpression lambda = factory.lambda(item, cmp1); - IContextExpression e3 = factory.contextExpression(Object.class, factory.select(everything, lambda)); + IContextExpression e3 = factory.contextExpression(((IQLFactory) factory).select(everything, lambda)); - IContextExpression<Object> contextExpression = factory.contextExpression(Object.class, parser.parseQuery(e3.toString()), "ian bull"); - QLContextQuery qlContextQuery = new QLContextQuery(contextExpression); + IContextExpression<Object> contextExpression = factory.contextExpression(parser.parseQuery(e3.toString()), "ian bull"); + QLContextQuery qlContextQuery = new QLContextQuery(IInstallableUnit.class, contextExpression); System.out.println(e3); IQueryResult queryResult = qlContextQuery.perform(items.iterator()); @@ -317,7 +318,7 @@ public class EvaluatorTest extends AbstractProvisioningTest { public void testMatchQueryInjectionInContext() throws Exception { IMetadataRepository repo = getMDR("/testData/galileoM7"); - IContextExpression expr = factory.contextExpression(IInstallableUnit.class, parser.parseQuery("select(x | iquery($0, x) || iquery($1, x)).latest()"), new MatchQuery() { + IContextExpression<IInstallableUnit> expr = factory.contextExpression(parser.parseQuery("select(x | iquery($0, x) || iquery($1, x)).latest()"), new MatchQuery() { @Override public boolean isMatch(Object candidate) { return "true".equals(((IInstallableUnit) candidate).getProperty("org.eclipse.equinox.p2.type.category")); @@ -328,7 +329,7 @@ public class EvaluatorTest extends AbstractProvisioningTest { return "true".equals(((IInstallableUnit) candidate).getProperty("org.eclipse.equinox.p2.type.group")); } }); - IQueryResult result = repo.query(new QLContextQuery(expr), new NullProgressMonitor()); + IQueryResult result = repo.query(new QLContextQuery(IInstallableUnit.class, expr), new NullProgressMonitor()); assertEquals(queryResultSize(result), 497); } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/PerformanceTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/PerformanceTest.java index 972a701fb..174433938 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/PerformanceTest.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/PerformanceTest.java @@ -134,8 +134,7 @@ public class PerformanceTest extends AbstractProvisioningTest { IInstallableUnit[] roots = new IInstallableUnit[] {(IInstallableUnit) itor.next()}; IQuery query = new QLContextQuery(IInstallableUnit.class, "" + // - "$0.traverse(set(), capabilityIndex(everything), _, {rqCache, index, parent | " + // - "index.satisfiesAny(parent.requiredCapabilities.unique(rqCache).select(rc | rc.filter == null || $1 ~= rc.filter))})", roots, env); + "$0.traverse(set(), _, { cache, parent | parent.requiredCapabilities.unique(cache).select(rc | rc.filter == null || $1 ~= rc.filter).collect(rc | everything.select(iu | iu ~= rc)).flatten()})", roots, env); long sliceTime = 0; long traverseTime = 0; diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/TestIndexes.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/TestIndexes.java new file mode 100644 index 000000000..2fe2ebf99 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/TestIndexes.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2009 Cloudsmith Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Cloudsmith Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.equinox.p2.tests.ql; + +import java.net.URI; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory; +import org.eclipse.equinox.p2.metadata.IInstallableUnit; +import org.eclipse.equinox.p2.metadata.IRequirement; +import org.eclipse.equinox.p2.ql.QLContextQuery; +import org.eclipse.equinox.p2.query.IQuery; +import org.eclipse.equinox.p2.query.IQueryResult; +import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; +import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager; +import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; + +public class TestIndexes extends AbstractProvisioningTest { + + public void testIdIndexSimple() throws Exception { + IMetadataRepository repo = getMDR("/testData/galileoM7"); + IQuery<IInstallableUnit> query = new QLContextQuery<IInstallableUnit>(IInstallableUnit.class, "select(x | x.id == $0)", "org.eclipse.sdk.feature.group"); + IQueryResult<IInstallableUnit> result = repo.query(query, getMonitor()); + assertEquals(queryResultSize(result), 1); + } + + public void testIdIndexWithOR() throws Exception { + IMetadataRepository repo = getMDR("/testData/galileoM7"); + IQuery<IInstallableUnit> query = new QLContextQuery<IInstallableUnit>(IInstallableUnit.class, "select(x | x.id == $0 || x.id == $1)", "org.eclipse.sdk.feature.group", "org.eclipse.sdk.feature.jar"); + IQueryResult<IInstallableUnit> result = repo.query(query, getMonitor()); + assertEquals(queryResultSize(result), 2); + } + + public void testIdIndexWithNot() throws Exception { + IMetadataRepository repo = getMDR("/testData/galileoM7"); + IQuery<IInstallableUnit> query = new QLContextQuery<IInstallableUnit>(IInstallableUnit.class, "select(x | x.id == $0 || x.id != $1)", "org.eclipse.sdk.feature.group", "org.eclipse.sdk.feature.jar"); + IQueryResult<IInstallableUnit> result = repo.query(query, getMonitor()); + assertEquals(queryResultSize(result), 3464); + } + + public void testCapabilityIndexSimple() throws Exception { + IMetadataRepository repo = getMDR("/testData/galileoM7"); + IQuery<IInstallableUnit> query = new QLContextQuery<IInstallableUnit>(IInstallableUnit.class, "select(x | x.providedCapabilities.exists(pc | pc.namespace == 'org.eclipse.equinox.p2.iu' && pc.name == $0))", "org.eclipse.core.resources"); + IQueryResult<IInstallableUnit> result = repo.query(query, getMonitor()); + assertEquals(queryResultSize(result), 1); + } + + public void testCapabilityIndexMatches() throws Exception { + IMetadataRepository repo = getMDR("/testData/galileoM7"); + IRequirement requirement = MetadataFactory.createRequiredCapability("org.eclipse.equinox.p2.iu", "org.eclipse.core.resources", null, null, 1, 2, true); + IQuery<IInstallableUnit> query = new QLContextQuery<IInstallableUnit>(IInstallableUnit.class, "select(x | x ~= $0)", requirement); + IQueryResult<IInstallableUnit> result = repo.query(query, getMonitor()); + assertEquals(queryResultSize(result), 1); + } + + private IMetadataRepository getMDR(String uri) throws Exception { + URI metadataRepo = getTestData("1.1", uri).toURI(); + + IMetadataRepositoryManager metadataManager = (IMetadataRepositoryManager) getAgent().getService(IMetadataRepositoryManager.SERVICE_NAME); + assertNotNull(metadataManager); + + return metadataManager.loadRepository(metadataRepo, new NullProgressMonitor()); + } +}
\ No newline at end of file diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/TestQueryReimplementation.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/TestQueryReimplementation.java index 9a51eda88..6010bee0b 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/TestQueryReimplementation.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ql/TestQueryReimplementation.java @@ -12,9 +12,8 @@ package org.eclipse.equinox.p2.tests.ql; import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory; import org.eclipse.equinox.p2.metadata.*; -import org.eclipse.equinox.p2.metadata.expression.IExpression; -import org.eclipse.equinox.p2.metadata.expression.IExpressionParser; -import org.eclipse.equinox.p2.ql.*; +import org.eclipse.equinox.p2.metadata.expression.*; +import org.eclipse.equinox.p2.ql.QLMatchQuery; import org.eclipse.equinox.p2.query.IQueryResult; import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; @@ -26,7 +25,7 @@ public class TestQueryReimplementation extends AbstractProvisioningTest { private static final IExpression expr2; static { - IQLParser parser = QL.newParser(); + IExpressionParser parser = ExpressionUtil.getParser(); // This expression is used in case the updateFrom is an IInstallableUnitPatch // @@ -41,15 +40,15 @@ public class TestQueryReimplementation extends AbstractProvisioningTest { } public UpdateQuery(IInstallableUnit updateFrom) { - super(IInstallableUnit.class, QL.getFactory().matchExpression(updateFrom instanceof IInstallableUnitPatch ? expr1 : expr2, updateFrom, IInstallableUnitPatch.class)); + super(IInstallableUnit.class, ExpressionUtil.getFactory().matchExpression(updateFrom instanceof IInstallableUnitPatch ? expr1 : expr2, updateFrom, IInstallableUnitPatch.class)); } } public static class IUPropertyQuery extends QLMatchQuery { - private static final IExpression expr = QL.newParser().parse("properties[$0] == $1"); + private static final IExpression expr = ExpressionUtil.getParser().parse("properties[$0] == $1"); public IUPropertyQuery(String propertyName, String propertyValue) { - super(IInstallableUnit.class, QL.getFactory().matchExpression(expr, propertyName, propertyValue)); + super(IInstallableUnit.class, ExpressionUtil.getFactory().matchExpression(expr, propertyName, propertyValue)); } } @@ -64,7 +63,7 @@ public class TestQueryReimplementation extends AbstractProvisioningTest { private static final IExpression idRangeQuery; static { - IExpressionParser parser = QL.newParser(); + IExpressionParser parser = ExpressionUtil.getParser(); idVersionQuery = parser.parse("($0 == null || $0 == id) && ($1 == null || $1 == version)"); idRangeQuery = parser.parse("($0 == null || $0 == id) && ($1 == null || version ~= $1)"); } @@ -87,7 +86,7 @@ public class TestQueryReimplementation extends AbstractProvisioningTest { * @param range The version range to match */ public InstallableUnitQuery(String id, VersionRange range) { - super(IInstallableUnit.class, QL.getFactory().matchExpression(idRangeQuery, id, range)); + super(IInstallableUnit.class, ExpressionUtil.getFactory().matchExpression(idRangeQuery, id, range)); } /** @@ -98,7 +97,7 @@ public class TestQueryReimplementation extends AbstractProvisioningTest { * @param version The precise version that a matching unit must have */ public InstallableUnitQuery(String id, Version version) { - super(IInstallableUnit.class, QL.getFactory().matchExpression(idVersionQuery, id, version)); + super(IInstallableUnit.class, ExpressionUtil.getFactory().matchExpression(idVersionQuery, id, version)); } /** |