|
From: <cw...@us...> - 2007-06-21 12:28:13
|
Revision: 460
http://rdfapi-php.svn.sourceforge.net/rdfapi-php/?rev=460&view=rev
Author: cweiske
Date: 2007-06-21 05:28:11 -0700 (Thu, 21 Jun 2007)
Log Message:
-----------
Nested nested queries are flattened
Modified Paths:
--------------
trunk/rdfapi-php/api/sparql/GraphPattern.php
trunk/rdfapi-php/api/sparql/SparqlEngineDb/QuerySimplifier.php
Modified: trunk/rdfapi-php/api/sparql/GraphPattern.php
===================================================================
--- trunk/rdfapi-php/api/sparql/GraphPattern.php 2007-06-21 09:48:40 UTC (rev 459)
+++ trunk/rdfapi-php/api/sparql/GraphPattern.php 2007-06-21 12:28:11 UTC (rev 460)
@@ -266,11 +266,8 @@
{
return
count($this->triplePatterns) == 0
- && $this->getGraphname() === null
&& count($this->constraints) == 0
- && $this->getOptional() === null
- && $this->getUnion() === null
- && $this->getSubpatternOf() === null
+ && $this->getGraphname() === null
;
}//public function isEmpty()
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/QuerySimplifier.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/QuerySimplifier.php 2007-06-21 09:48:40 UTC (rev 459)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/QuerySimplifier.php 2007-06-21 12:28:11 UTC (rev 460)
@@ -32,6 +32,7 @@
public function simplify(Query $query)
{
$arPatterns = $query->getResultPart();
+ self::dropEmpty($arPatterns);
$arPlan = $this->createPlan($arPatterns);
if (count($arPlan) == 0) {
return 0;
@@ -61,7 +62,7 @@
foreach ($arNumbers as $nId => $nPatternCount) {
$nParent = $arPatterns[$nId]->getSubpatternOf();
- $arPlan[$nParent][] = $nId;
+ $arPlan[$nParent][$nId] = true;
}
return $arPlan;
@@ -71,13 +72,17 @@
/**
* Executes the plan
+ *
+ * @param array $arPatterns Array of GraphPatterns
+ * @param array $arPlan Plan array as returned by createPlan()
*/
protected function executePlan(&$arPatterns, &$arPlan)
{
foreach ($arPlan as $nParent => $arChildren) {
- $base = $arPatterns[$nParent];
- $nNextId = $nParent;
- foreach ($arChildren as $nChild) {
+ $base = $arPatterns[$nParent];
+ $grandParent = $base->getSubpatternOf();
+ $nNextId = $nParent;
+ foreach ($arChildren as $nChild => $null) {
$new = clone $base;
$new->addTriplePatterns($arPatterns[$nChild]->getTriplePatterns());
$new->addConstraints( $arPatterns[$nChild]->getConstraints());
@@ -87,6 +92,11 @@
}
$arPatterns[$nNextId] = $new;
+ if ($grandParent !== null) {
+ //dynamically adjust plan
+ $arPlan[$grandParent][$nNextId] = true;
+ }
+
$nNextId = $nChild;
}
//last one is not not needed anymore
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|