|
From: <cw...@us...> - 2007-07-16 10:10:45
|
Revision: 469
http://rdfapi-php.svn.sourceforge.net/rdfapi-php/?rev=469&view=rev
Author: cweiske
Date: 2007-07-16 03:10:44 -0700 (Mon, 16 Jul 2007)
Log Message:
-----------
Fix sql generation on infinite number of models
Modified Paths:
--------------
trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php 2007-07-05 13:23:35 UTC (rev 468)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php 2007-07-16 10:10:44 UTC (rev 469)
@@ -424,7 +424,8 @@
$strFrom = 'LEFT JOIN statements as ' . $strTablePrefix
. ' ON (' . implode(' OR ', $arIDs) . ')';
} else {
- $strFrom = 'LEFT JOIN statements as ' . $strTablePrefix;
+ $strFrom = 'LEFT JOIN statements as ' . $strTablePrefix
+ . ' ON t0.modelID = ' . $strTablePrefix . '.modelID';
}
foreach ($arRefVars as $strRefVar => $strSqlVar) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <cw...@us...> - 2007-08-02 21:20:05
|
Revision: 472
http://rdfapi-php.svn.sourceforge.net/rdfapi-php/?rev=472&view=rev
Author: cweiske
Date: 2007-08-02 14:19:57 -0700 (Thu, 02 Aug 2007)
Log Message:
-----------
Fix table id for complicated union queries
Modified Paths:
--------------
trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php 2007-07-16 12:32:24 UTC (rev 471)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php 2007-08-02 21:19:57 UTC (rev 472)
@@ -184,6 +184,7 @@
}
if ($graphPattern->getUnion() !== null) {
++$this->nUnionCount;
+ $this->nTableId = 0;
$this->nUnionTriplePatternCount = 0;
$this->nGraphPatternCount = 0;
$this->arUnionVarAssignments[$this->nUnionCount] = array();
@@ -298,7 +299,10 @@
$arSelect = array();
$strFrom = null;
$strWhere = null;
- $strWhereEquality = '';
+ $strWhereEquality = '';
+ $bWhereEqualitySubject = false;
+ $bWhereEqualityPredicate = false;
+ $bWhereEqualityObject = false;
$subject = $triple->getSubject();
$predicate = $triple->getPredicate();
@@ -314,10 +318,7 @@
if (SparqlVariable::isVariable($subject)) {
if (isset($this->arUnionVarAssignments[$this->nUnionCount][$subject])) {
//already selected -> add equality check
- $strWhereEquality .= ' AND ' . self::getSqlEqualityCondition(
- array($strTablePrefix, 's'),
- $this->arVarAssignments[$subject]
- );
+ $bWhereEqualitySubject = true;
$this->arUsedVarTypes[$subject]['s'] = true;
} else {
if (isset($this->arVarAssignments[$subject][0])) {
@@ -343,10 +344,7 @@
if (SparqlVariable::isVariable($predicate)) {
if (isset($this->arUnionVarAssignments[$this->nUnionCount][$predicate])) {
//already selected -> add equality check
- $strWhereEquality .= ' AND ' . self::getSqlEqualityCondition(
- array($strTablePrefix, 'p'),
- $this->arVarAssignments[$predicate]
- );
+ $bWhereEqualityPredicate = true;
$this->arUsedVarTypes[$predicate]['p'] = true;
} else {
if (isset($this->arVarAssignments[$predicate][0])) {
@@ -371,10 +369,7 @@
if (SparqlVariable::isVariable($object)) {
if (isset($this->arUnionVarAssignments[$this->nUnionCount][$object])) {
//already selected -> add equality check
- $strWhereEquality .= ' AND ' . self::getSqlEqualityCondition(
- array($strTablePrefix, 'o'),
- $this->arVarAssignments[$object]
- );
+ $bWhereEqualityObject = true;
$this->arUsedVarTypes[$object]['o'] = true;
} else {
if (isset($this->arVarAssignments[$object][0])) {
@@ -411,6 +406,29 @@
}
/**
+ * WhereEquality - needs to be done now because strTablePrefix may change
+ */
+ if ($bWhereEqualitySubject) {
+ $strWhereEquality .= ' AND ' . self::getSqlEqualityCondition(
+ array($strTablePrefix, 's'),
+ $this->arVarAssignments[$subject]
+ );
+ }
+ if ($bWhereEqualityPredicate) {
+ $strWhereEquality .= ' AND ' . self::getSqlEqualityCondition(
+ array($strTablePrefix, 'p'),
+ $this->arVarAssignments[$predicate]
+ );
+ }
+ if ($bWhereEqualityObject) {
+ $strWhereEquality .= ' AND ' . self::getSqlEqualityCondition(
+ array($strTablePrefix, 'o'),
+ $this->arVarAssignments[$object]
+ );
+ }
+
+
+ /**
* FROM part
*/
if ($this->nUnionTriplePatternCount == 0) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|