Smalyshev has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/361200 )
Change subject: Add getDesiredBound() for Labels
......................................................................
Add getDesiredBound() for Labels
This may make it easier for Optimizer to deal with it
Change-Id: I66cf4a2d5e29b8b14859f7727e77159b46c12778
---
M
blazegraph/src/main/java/org/wikidata/query/rdf/blazegraph/label/LabelService.java
M
blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/AbstractRandomizedBlazegraphTestBase.java
M
blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/label/LabelServiceUnitTest.java
M
blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/mwapi/ApiTemplateUnitTest.java
M pom.xml
5 files changed, 110 insertions(+), 29 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/wikidata/query/rdf
refs/changes/00/361200/1
diff --git
a/blazegraph/src/main/java/org/wikidata/query/rdf/blazegraph/label/LabelService.java
b/blazegraph/src/main/java/org/wikidata/query/rdf/blazegraph/label/LabelService.java
index 42c909e..18710c3 100644
---
a/blazegraph/src/main/java/org/wikidata/query/rdf/blazegraph/label/LabelService.java
+++
b/blazegraph/src/main/java/org/wikidata/query/rdf/blazegraph/label/LabelService.java
@@ -5,6 +5,7 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.openrdf.model.Literal;
@@ -34,11 +35,13 @@
import com.bigdata.rdf.sparql.ast.service.BigdataServiceCall;
import com.bigdata.rdf.sparql.ast.service.IServiceOptions;
import com.bigdata.rdf.sparql.ast.service.ServiceCallCreateParams;
+import com.bigdata.rdf.sparql.ast.service.ServiceNode;
import com.bigdata.rdf.sparql.ast.service.ServiceRegistry;
import com.bigdata.rdf.spo.ISPO;
import com.bigdata.rdf.store.AbstractTripleStore;
import com.bigdata.rdf.store.BD;
import com.bigdata.striterator.IChunkedOrderedIterator;
+import com.google.common.collect.ImmutableSet;
import cutthecrap.utils.striterators.ICloseableIterator;
import static org.wikidata.query.rdf.blazegraph.BigdataValuesHelper.makeIV;
@@ -96,7 +99,7 @@
/**
* URI for service language parameter.
*/
- private static final URIImpl LANGUAGE_PARAM = new
URIImpl(Ontology.NAMESPACE + "language");
+ public static final URIImpl LANGUAGE_PARAM = new
URIImpl(Ontology.NAMESPACE + "language");
/**
* Register the service so it is recognized by Blazegraph.
@@ -177,9 +180,16 @@
/**
* Create the resolutions list from the service call parameters.
*/
- @SuppressFBWarnings(value = "EC_UNRELATED_CLASS_AND_INTERFACE",
justification = "equals() is actually correct for some subtypes of
BigdataValue")
private List<Resolution> findResolutions(ServiceCallCreateParams params) {
- JoinGroupNode g = (JoinGroupNode)
params.getServiceNode().getGraphPattern();
+ return findResolutions(params.getServiceNode());
+ }
+
+ /**
+ * Create the resolutions list from the service call parameters.
+ */
+ @SuppressFBWarnings(value = "EC_UNRELATED_CLASS_AND_INTERFACE",
justification = "equals() is actually correct for some subtypes of
BigdataValue")
+ private List<Resolution> findResolutions(final ServiceNode params) {
+ JoinGroupNode g = (JoinGroupNode) params.getGraphPattern();
List<Resolution> resolutions = new ArrayList<>(g.args().size());
for (BOp st : g.args()) {
StatementPatternNode sn = (StatementPatternNode) st;
@@ -576,4 +586,14 @@
return mock(new LiteralImpl(b.toString(), language));
}
}
+
+ @Override
+ public Set<IVariable<?>> getDesiredBound(final ServiceNode serviceNode) {
+ final List<Resolution> res = findResolutions(serviceNode);
+ return res.stream()
+ .filter(resolution -> resolution.subject() instanceof IVariable)
+ .map(resolution -> (IVariable<?>)resolution.subject())
+ .collect(ImmutableSet.toImmutableSet());
+ }
+
}
diff --git
a/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/AbstractRandomizedBlazegraphTestBase.java
b/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/AbstractRandomizedBlazegraphTestBase.java
index c05adad..ff13c76 100644
---
a/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/AbstractRandomizedBlazegraphTestBase.java
+++
b/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/AbstractRandomizedBlazegraphTestBase.java
@@ -15,9 +15,13 @@
import org.wikidata.query.rdf.common.uri.WikibaseUris;
import org.wikidata.query.rdf.common.uri.WikibaseUris.PropertyType;
+import com.bigdata.rdf.model.BigdataLiteral;
import com.bigdata.rdf.model.BigdataStatement;
+import com.bigdata.rdf.model.BigdataURI;
import com.bigdata.rdf.sail.sparql.Bigdata2ASTSPARQLParser;
import com.bigdata.rdf.sparql.ast.ASTContainer;
+import com.bigdata.rdf.sparql.ast.DummyConstantNode;
+import com.bigdata.rdf.sparql.ast.TermNode;
import com.bigdata.rdf.sparql.ast.eval.ASTEvalHelper;
/**
@@ -121,4 +125,33 @@
WikibaseContextListener.initializeServices();
System.setProperty("ASTOptimizerClass",
WikibaseOptimizers.class.getName());
}
+
+ /**
+ * Create a constant node from string.
+ * @param value
+ * @return
+ */
+ protected TermNode createConstant(String value) {
+ BigdataLiteral literal =
store().getLexiconRelation().getValueFactory().createLiteral(value);
+ return new DummyConstantNode(literal);
+ }
+
+ /**
+ * Create a constant URI node from string.
+ * @param value
+ * @return
+ */
+ protected TermNode createURI(URI value) {
+ BigdataURI uri =
store().getLexiconRelation().getValueFactory().createURI(value.toString());
+ return new DummyConstantNode(uri);
+ }
+
+ /**
+ * Create a constant URI node from string.
+ * @param value
+ * @return
+ */
+ protected TermNode createURI(String value) {
+ return createURI(new URIImpl(value));
+ }
}
diff --git
a/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/label/LabelServiceUnitTest.java
b/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/label/LabelServiceUnitTest.java
index b8328b3..4336908 100644
---
a/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/label/LabelServiceUnitTest.java
+++
b/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/label/LabelServiceUnitTest.java
@@ -7,6 +7,7 @@
import static org.wikidata.query.rdf.test.Matchers.notBinds;
import java.util.Locale;
+import java.util.Set;
import org.junit.Test;
import org.openrdf.model.impl.LiteralImpl;
@@ -19,6 +20,18 @@
import org.wikidata.query.rdf.common.uri.RDFS;
import org.wikidata.query.rdf.common.uri.SKOS;
import org.wikidata.query.rdf.common.uri.SchemaDotOrg;
+
+import com.bigdata.bop.IVariable;
+import com.bigdata.bop.Var;
+import com.bigdata.rdf.sparql.ast.JoinGroupNode;
+import com.bigdata.rdf.sparql.ast.StatementPatternNode;
+import com.bigdata.rdf.sparql.ast.VarNode;
+import com.bigdata.rdf.sparql.ast.service.ServiceNode;
+import com.bigdata.rdf.store.BD;
+
+import static org.hamcrest.Matchers.hasItems;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasSize;
public class LabelServiceUnitTest extends AbstractRandomizedBlazegraphTestBase
{
private static final Logger log =
LoggerFactory.getLogger(LabelServiceUnitTest.class);
@@ -200,4 +213,43 @@
assertFalse(ask(query.toString()));
}
+ @SuppressWarnings("unchecked")
+ @Test
+ public void desiredVars() {
+ JoinGroupNode patterns = new JoinGroupNode();
+ // Label
+ patterns.addArg(new StatementPatternNode(
+ new VarNode("item"),
+ createURI(RDFS.LABEL),
+ new VarNode("itemLabel")
+ ));
+ // Description
+ patterns.addArg(new StatementPatternNode(
+ new VarNode("item2"),
+ createURI(SchemaDotOrg.DESCRIPTION),
+ new VarNode("itemDesc")
+ ));
+ // Fixed name
+ patterns.addArg(new StatementPatternNode(
+ createURI(uris().entity() + "Q123"),
+ createURI(RDFS.LABEL),
+ new VarNode("qLabel")
+ ));
+ // Parameters
+ patterns.addArg(new StatementPatternNode(
+ createURI(BD.SERVICE_PARAM),
+ createURI(LabelService.LANGUAGE_PARAM),
+ createConstant("en,fr")
+ ));
+ ServiceNode serviceNode = new
ServiceNode(createURI(LabelService.SERVICE_KEY), patterns);
+
+ final LabelService service = new LabelService();
+ Set<IVariable<?>> vars = service.getDesiredBound(serviceNode);
+ assertThat(vars, hasSize(2));
+
+ assertThat(vars, hasItems(
+ equalTo(Var.var("item")),
+ equalTo(Var.var("item2"))));
+ }
+
}
diff --git
a/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/mwapi/ApiTemplateUnitTest.java
b/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/mwapi/ApiTemplateUnitTest.java
index 15686aa..9abc865 100644
---
a/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/mwapi/ApiTemplateUnitTest.java
+++
b/blazegraph/src/test/java/org/wikidata/query/rdf/blazegraph/mwapi/ApiTemplateUnitTest.java
@@ -10,12 +10,8 @@
import org.wikidata.query.rdf.blazegraph.mwapi.ApiTemplate.OutputVariable;
import com.bigdata.bop.IVariableOrConstant;
-import com.bigdata.rdf.model.BigdataLiteral;
-import com.bigdata.rdf.model.BigdataURI;
-import com.bigdata.rdf.sparql.ast.DummyConstantNode;
import com.bigdata.rdf.sparql.ast.JoinGroupNode;
import com.bigdata.rdf.sparql.ast.StatementPatternNode;
-import com.bigdata.rdf.sparql.ast.TermNode;
import com.bigdata.rdf.sparql.ast.VarNode;
import com.bigdata.rdf.sparql.ast.eval.ServiceParams;
import com.bigdata.rdf.sparql.ast.service.ServiceNode;
@@ -68,26 +64,6 @@
private JsonNode parseJson(String jsonString) throws
JsonProcessingException, IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.readTree(jsonString);
- }
-
- /**
- * Create a constant node from string.
- * @param value
- * @return
- */
- private TermNode createConstant(String value) {
- BigdataLiteral literal =
store().getLexiconRelation().getValueFactory().createLiteral(value);
- return new DummyConstantNode(literal);
- }
-
- /**
- * Create a constant URI node from string.
- * @param value
- * @return
- */
- private TermNode createURI(URI value) {
- BigdataURI uri =
store().getLexiconRelation().getValueFactory().createURI(value.toString());
- return new DummyConstantNode(uri);
}
@Test
diff --git a/pom.xml b/pom.xml
index 4a10bad..8b142c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -512,12 +512,12 @@
<version>1.3</version>
<scope>test</scope>
</dependency>
- <dependency>
+ <!-- dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
- </dependency>
+ </dependency -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
--
To view, visit https://gerrit.wikimedia.org/r/361200
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I66cf4a2d5e29b8b14859f7727e77159b46c12778
Gerrit-PatchSet: 1
Gerrit-Project: wikidata/query/rdf
Gerrit-Branch: master
Gerrit-Owner: Smalyshev <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits