jenkins-bot has submitted this change and it was merged. ( 
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(-)

Approvals:
  Smalyshev: Looks good to me, approved
  jenkins-bot: Verified
  Gehel: Looks good to me, but someone else must approve



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: merged
Gerrit-Change-Id: I66cf4a2d5e29b8b14859f7727e77159b46c12778
Gerrit-PatchSet: 1
Gerrit-Project: wikidata/query/rdf
Gerrit-Branch: master
Gerrit-Owner: Smalyshev <[email protected]>
Gerrit-Reviewer: Gehel <[email protected]>
Gerrit-Reviewer: Smalyshev <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to