|
From: <cw...@us...> - 2007-07-04 08:44:03
|
Revision: 466
http://rdfapi-php.svn.sourceforge.net/rdfapi-php/?rev=466&view=rev
Author: cweiske
Date: 2007-07-04 01:44:01 -0700 (Wed, 04 Jul 2007)
Log Message:
-----------
Add support for selecting lang() and datatype()
Modified Paths:
--------------
trunk/rdfapi-php/api/sparql/Query.php
trunk/rdfapi-php/api/sparql/SparqlEngine.php
trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/Default.php
trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/HTML.php
trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/PlainText.php
trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/XML.php
trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php
trunk/rdfapi-php/api/sparql/SparqlEngineDb.php
trunk/rdfapi-php/api/sparql/SparqlParser.php
Modified: trunk/rdfapi-php/api/sparql/Query.php
===================================================================
--- trunk/rdfapi-php/api/sparql/Query.php 2007-06-27 16:47:57 UTC (rev 465)
+++ trunk/rdfapi-php/api/sparql/Query.php 2007-07-04 08:44:01 UTC (rev 466)
@@ -178,6 +178,19 @@
public function getPrefixes(){
return $this->prefixes;
}
+ /**
+ * Returns a list containing the result vars.
+ *
+ * @return Array
+ */
+ public function getResultVar($strName) {
+ foreach ($this->resultVars as $var) {
+ if ((string)$var == $strName) {
+ return $var;
+ }
+ }
+ return false;
+ }
/**
* Returns a list containing the result vars.
@@ -274,9 +287,11 @@
* @return void
*/
public function addResultVar($var){
- $this->resultVars[]= $var;
- $this->varLanguages[$var] = self::getLanguageTag($var);
- $this->varDatatypes[$var] = $this->getDatatype($var);
+ $this->resultVars[] = $var;
+ $var->setDatatype($this->getDatatype($var));
+
+ $this->varLanguages[$var->getId()] = self::getLanguageTag($var);
+ $this->varDatatypes[$var->getId()] = $this->getDatatype($var);
}
@@ -522,7 +537,99 @@
return false;
}
-}
-// end class: Query.php
+}// end class: Query.php
+
+
+class Query_ResultVariable
+{
+ public $variable = null;
+ public $datatype = null;
+ public $language = null;
+ public $newname = null;
+ public $func = null;
+
+
+ public function __construct($variable)
+ {
+ $this->variable = $variable;
+ $this->language = Query::getLanguageTag($variable);
+ }
+
+
+
+ public function setNewName($as)
+ {
+ $this->newname = $as;
+ }
+
+
+
+ public function setFunc($func)
+ {
+ $this->func = $func;
+ }
+
+
+
+ public function setDatatype($datatype)
+ {
+ $this->datatype = $datatype;
+ }
+
+
+
+ public function getId()
+ {
+ //FIXME
+ return $this->variable;
+ }
+
+
+
+ public function getFunc()
+ {
+ return $this->func;
+ }
+
+
+
+ public function getLanguage()
+ {
+ return $this->language;
+ }
+
+
+
+ public function getDatatype()
+ {
+ return $this->datatype;
+ }
+
+
+
+ public function getName()
+ {
+ if ($this->newname !== null) {
+ return $this->newname;
+ }
+ //FIXME: support for nested(functios())
+ return $this->variable;
+ }
+
+
+
+ public function getVariable()
+ {
+ return $this->variable;
+ }
+
+
+
+ public function __toString()
+ {
+ return $this->getName();
+ }
+}//class Query_ResultVariable
+
?>
\ No newline at end of file
Modified: trunk/rdfapi-php/api/sparql/SparqlEngine.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngine.php 2007-06-27 16:47:57 UTC (rev 465)
+++ trunk/rdfapi-php/api/sparql/SparqlEngine.php 2007-07-04 08:44:01 UTC (rev 466)
@@ -599,10 +599,10 @@
$hits = 0;
foreach($table as $val){
foreach($vars as $var){
- if(isset($val[$var])){
- $resTable[$hits][$var]=$val[$var];
+ if(isset($val[(string)$var])){
+ $resTable[$hits][(string)$var]=$val[(string)$var];
}else{
- $resTable[$hits][$var]="";
+ $resTable[$hits][(string)$var]="";
}
}
$hits++;
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/Default.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/Default.php 2007-06-27 16:47:57 UTC (rev 465)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/Default.php 2007-07-04 08:44:01 UTC (rev 466)
@@ -146,14 +146,15 @@
foreach ($dbRecordSet as $row) {
$arResultRow = array();
- foreach ($arResultVars as $strVarName) {
+ foreach ($arResultVars as $strVar) {
+ $strVarName = (string)$strVar;
if (!isset($this->sg->arVarAssignments[$strVarName])) {
//variable is in select, but not in result (test: q-select-2)
$arResultRow[$strVarName] = '';
} else {
$arVarSettings = $this->sg->arVarAssignments[$strVarName];
$strMethod = $this->arCreationMethods[$arVarSettings[1]];
- $arResultRow[$strVarName] = $this->$strMethod($dbRecordSet, $arVarSettings[0], $strVarName);
+ $arResultRow[$strVarName] = $this->$strMethod($dbRecordSet, $arVarSettings[0], $strVar);
}
}
$arResult[] = $arResultRow;
@@ -196,8 +197,9 @@
*
* @return Resource RDF triple subject resource object
*/
- protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
//FIXME: should be NULL, but doesn't pass test
return '';
@@ -227,8 +229,9 @@
*
* @return Resource RDF triple predicate resource object
*/
- protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
//FIXME: should be NULL, but doesn't pass test
return '';
@@ -250,8 +253,9 @@
*
* @return Resource RDF triple object resource object
*/
- protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
//FIXME: should be NULL, but doesn't pass test
return '';
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/HTML.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/HTML.php 2007-06-27 16:47:57 UTC (rev 465)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/HTML.php 2007-07-04 08:44:01 UTC (rev 466)
@@ -127,14 +127,15 @@
foreach ($dbRecordSet as $row) {
$arResultRow = array();
- foreach ($arResultVars as $strVarName) {
+ foreach ($arResultVars as $strVar) {
+ $strVarName = (string)$strVar;
if (!isset($this->sg->arVarAssignments[$strVarName])) {
//variable is in select, but not in result (test: q-select-2)
$arResultRow[$strVarName] = '';
} else {
$arVarSettings = $this->sg->arVarAssignments[$strVarName];
$strMethod = $this->arCreationMethods[$arVarSettings[1]];
- list($strCode, $strColor) = $this->$strMethod($dbRecordSet, $arVarSettings[0], $strVarName);
+ list($strCode, $strColor) = $this->$strMethod($dbRecordSet, $arVarSettings[0], $strVar);
$arResultRow[$strVarName] = '<td style="background-color: '
. $strColor . '">' . $strCode . '</td>';
}
@@ -178,8 +179,9 @@
*
* @return string HTML code
*/
- protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
return $this->getHtmlNull();
}
@@ -191,7 +193,7 @@
} else {
return $this->getHtmlBlank($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']]);
}
- }//protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ }//protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
@@ -206,14 +208,15 @@
*
* @return string HTML code
*/
- protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
return $this->getHtmlNull();
}
return $this->getHtmlResource($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']]);
- }//protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ }//protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
@@ -228,8 +231,9 @@
*
* @return string HTML code
*/
- protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
return $this->getHtmlNull();
}
@@ -247,7 +251,7 @@
$dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_type']]
);
}
- }//protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ }//protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/PlainText.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/PlainText.php 2007-06-27 16:47:57 UTC (rev 465)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/PlainText.php 2007-07-04 08:44:01 UTC (rev 466)
@@ -146,14 +146,15 @@
foreach ($dbRecordSet as $row) {
$arResultRow = array();
- foreach ($arResultVars as $strVarName) {
+ foreach ($arResultVars as $strVar) {
+ $strVarName = (string)$strVar;
if (!isset($this->sg->arVarAssignments[$strVarName])) {
//variable is in select, but not in result (test: q-select-2)
$arResultRow[$strVarName] = '';
} else {
$arVarSettings = $this->sg->arVarAssignments[$strVarName];
$strMethod = $this->arCreationMethods[$arVarSettings[1]];
- $arResultRow[$strVarName] = $this->$strMethod($dbRecordSet, $arVarSettings[0], $strVarName);
+ $arResultRow[$strVarName] = $this->$strMethod($dbRecordSet, $arVarSettings[0], $strVar);
}
}
$arResult[] = $arResultRow;
@@ -196,8 +197,9 @@
*
* @return Resource RDF triple subject resource object
*/
- protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
//FIXME: should be NULL, but doesn't pass test
return '';
@@ -212,7 +214,7 @@
return $this->createBlankNode($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']]);
}
return $subject;
- }//protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ }//protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
@@ -227,14 +229,15 @@
*
* @return Resource RDF triple predicate resource object
*/
- protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
//FIXME: should be NULL, but doesn't pass test
return '';
}
return $this->createResource($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']]);
- }//protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ }//protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
@@ -249,8 +252,9 @@
*
* @return Resource RDF triple object resource object
*/
- protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
//FIXME: should be NULL, but doesn't pass test
return '';
@@ -269,7 +273,7 @@
$dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_type']]
);
}
- }//protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ }//protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/XML.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/XML.php 2007-06-27 16:47:57 UTC (rev 465)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/XML.php 2007-07-04 08:44:01 UTC (rev 466)
@@ -146,14 +146,15 @@
foreach ($dbRecordSet as $row) {
$arResultRow = array();
- foreach ($arResultVars as $strVarName) {
+ foreach ($arResultVars as $strVar) {
+ $strVarName = (string)$strVar;
if (!isset($this->sg->arVarAssignments[$strVarName])) {
//variable is in select, but not in result (test: q-select-2)
$arResultRow[$strVarName] = '';
} else {
$arVarSettings = $this->sg->arVarAssignments[$strVarName];
$strMethod = $this->arCreationMethods[$arVarSettings[1]];
- $arResultRow[$strVarName] = $this->$strMethod($dbRecordSet, $arVarSettings[0], $strVarName);
+ $arResultRow[$strVarName] = $this->$strMethod($dbRecordSet, $arVarSettings[0], $strVar);
}
}
$arResult[] = $arResultRow;
@@ -213,8 +214,9 @@
*
* @return string HTML code
*/
- protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
return $this->getXmlNull();
}
@@ -226,7 +228,7 @@
} else {
return $this->getXmlBlank($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']]);
}
- }//protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ }//protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
@@ -241,14 +243,15 @@
*
* @return string HTML code
*/
- protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
return $this->getXmlNull();
}
return $this->getXmlResource($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']]);
- }//protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ }//protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
@@ -263,8 +266,9 @@
*
* @return string HTML code
*/
- protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
{
+ $strVarName = (string)$strVar;
if ($dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_value']] === null) {
return $this->getXmlNull();
}
@@ -282,7 +286,7 @@
$dbRecordSet->fields[$strVarBase . '.' . $this->sg->arVarAssignments[$strVarName]['sql_type']]
);
}
- }//protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
+ }//protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVar)
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php 2007-06-27 16:47:57 UTC (rev 465)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/SqlGenerator.php 2007-07-04 08:44:01 UTC (rev 466)
@@ -323,9 +323,8 @@
$this->arUsedVarTypes[$subject]['s'] = true;
if (self::isResultVar($subject, $arResultVars)) {
//new variable that needs to be selected
- $arSelect[$subject] = array(
- $strTablePrefix . '.subject as "' . $strTablePrefix . '.' . $this->getSqlVariableNameValue($subject) . '"',
- $strTablePrefix . '.subject_is as "' . $strTablePrefix . '.' . $this->getSqlVariableNameIs($subject) . '"'
+ $arSelect[$subject] = $this->createVariableSelectArray(
+ 's', $subject, $strTablePrefix
);
if (isset($this->arUsedVarAssignments[$subject])) {
$arRefVars[$subject] = $strTablePrefix . '.subject';
@@ -352,8 +351,8 @@
$this->arUnionVarAssignments[$this->nUnionCount][$predicate] = array($strTablePrefix, 'p');
$this->arUsedVarTypes[$predicate]['p'] = true;
if (self::isResultVar($predicate, $arResultVars)) {
- $arSelect[$predicate] = array(
- $strTablePrefix . '.predicate as "' . $strTablePrefix . '.' . $this->getSqlVariableNameValue($predicate) . '"'
+ $arSelect[$predicate] = $this->createVariableSelectArray(
+ 'p', $predicate, $strTablePrefix
);
if (isset($this->arUsedVarAssignments[$predicate])) {
$arRefVars[$predicate] = $strTablePrefix . '.predicate';
@@ -380,11 +379,8 @@
$this->arUnionVarAssignments[$this->nUnionCount][$object] = array($strTablePrefix, 'o');
$this->arUsedVarTypes[$object]['o'] = true;
if (self::isResultVar($object, $arResultVars)) {
- $arSelect[$object] = array(
- $strTablePrefix . '.object as "' . $strTablePrefix . '.' . $this->getSqlVariableNameValue($object) . '"',
- $strTablePrefix . '.object_is as "' . $strTablePrefix . '.' . $this->getSqlVariableNameIs($object) . '"',
- $strTablePrefix . '.l_language as "' . $strTablePrefix . '.' . $this->getSqlVariableNameLanguage($object) . '"',
- $strTablePrefix . '.l_datatype as "' . $strTablePrefix . '.' . $this->getSqlVariableNameDatatype($object) . '"',
+ $arSelect[$object] = $this->createVariableSelectArray(
+ 'o', $object, $strTablePrefix
);
if (isset($this->arUsedVarAssignments[$object])) {
$arRefVars[$object] = $strTablePrefix . '.object';
@@ -473,6 +469,72 @@
+
+ protected function createVariableSelectArray($chType, $varname, $strTablePrefix)
+ {
+ $var = $this->query->getResultVar($varname);
+ if ($var !== false) {
+ //works on non-* only
+ $func = $var->getFunc();
+ if ($func != null) {
+ if ($func == 'datatype') {
+ if ($chType != 'o') {
+ throw new SparqlEngineDb_SqlGeneratorException(
+ 'datatype() works on objects only'
+ );
+ }
+ return array(
+ $strTablePrefix . '.l_datatype as "' . $strTablePrefix . '.' . $this->getSqlVariableNameValue($varname) . '"',
+ '"r"' . ' as "' . $strTablePrefix . '.' . $this->getSqlVariableNameIs($varname) . '"',
+ '""' . ' as "' . $strTablePrefix . '.' . $this->getSqlVariableNameLanguage($varname) . '"',
+ '""' . ' as "' . $strTablePrefix . '.' . $this->getSqlVariableNameDatatype($varname) . '"',
+ );
+ } else if ($func == 'lang') {
+ if ($chType != 'o') {
+ throw new SparqlEngineDb_SqlGeneratorException(
+ 'lang() works on objects only'
+ );
+ }
+ return array(
+ $strTablePrefix . '.l_language as "' . $strTablePrefix . '.' . $this->getSqlVariableNameValue($varname) . '"',
+ '"l"' . ' as "' . $strTablePrefix . '.' . $this->getSqlVariableNameIs($varname) . '"',
+ '""' . ' as "' . $strTablePrefix . '.' . $this->getSqlVariableNameLanguage($varname) . '"',
+ '""' . ' as "' . $strTablePrefix . '.' . $this->getSqlVariableNameDatatype($varname) . '"',
+ );
+ } else {
+ throw new SparqlEngineDb_SqlGeneratorException(
+ 'Unsupported function for select "' . $func . '"'
+ );
+ }
+ }
+ }
+
+ switch ($chType) {
+ case 's':
+ return array(
+ $strTablePrefix . '.subject as "' . $strTablePrefix . '.' . $this->getSqlVariableNameValue($varname) . '"',
+ $strTablePrefix . '.subject_is as "' . $strTablePrefix . '.' . $this->getSqlVariableNameIs($varname) . '"'
+ );
+ case 'p':
+ return array(
+ $strTablePrefix . '.predicate as "' . $strTablePrefix . '.' . $this->getSqlVariableNameValue($varname) . '"'
+ );
+ case 'o':
+ return array(
+ $strTablePrefix . '.object as "' . $strTablePrefix . '.' . $this->getSqlVariableNameValue($varname) . '"',
+ $strTablePrefix . '.object_is as "' . $strTablePrefix . '.' . $this->getSqlVariableNameIs($varname) . '"',
+ $strTablePrefix . '.l_language as "' . $strTablePrefix . '.' . $this->getSqlVariableNameLanguage($varname) . '"',
+ $strTablePrefix . '.l_datatype as "' . $strTablePrefix . '.' . $this->getSqlVariableNameDatatype($varname) . '"',
+ );
+ default:
+ throw new SparqlEngineDb_SqlGeneratorException(
+ 'Unknown sentence type "' . $chType . "', one of (s,p,o) expected"
+ );
+ }
+ }//protected function createVariableSelectArray($chType, $value, $strTablePrefix)
+
+
+
/**
* Creates SELECT statements that have the same number of columns.
* Needed for UNIONs.
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb.php 2007-06-27 16:47:57 UTC (rev 465)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb.php 2007-07-04 08:44:01 UTC (rev 466)
@@ -311,7 +311,7 @@
// I want associative arrays.
$oldmode = $this->dbConn->SetFetchMode(ADODB_FETCH_ASSOC);
-//var_dump($strSql);
+var_dump($strSql);
if ($nLimit === null && $nOffset == 0) {
$ret = $this->dbConn->execute($strSql);
} else if ($nLimit === null) {
Modified: trunk/rdfapi-php/api/sparql/SparqlParser.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlParser.php 2007-06-27 16:47:57 UTC (rev 465)
+++ trunk/rdfapi-php/api/sparql/SparqlParser.php 2007-07-04 08:44:01 UTC (rev 466)
@@ -292,34 +292,56 @@
*/
protected function parseSelect()
{
- while (strtolower(current($this->tokens)) != 'from' &
- strtolower(current($this->tokens)) != 'where' &
- strtolower(current($this->tokens)) != "{"
+ $this->_fastForward();
+ $curLow = strtolower(current($this->tokens));
+ prev($this->tokens);
+ if ($curLow == 'distinct') {
+ $this->query->setResultForm('select distinct');
+ } else {
+ $this->query->setResultForm('select');
+ }
+
+ $currentVar = null;
+ $currentFunc = null;
+ $bWaitForRenaming = false;
+ while ($curLow != 'from' && $curLow != 'where' &&
+ $curLow != "{"
){
$this->_fastForward();
- if ($this->varCheck(current($this->tokens))
- | strtolower(current($this->tokens)) == '*'
- ){
- $this->query->addResultVar(current($this->tokens));
- if (!$this->query->getResultForm()) {
- $this->query->setResultForm('select');
- }
- } else {
- if (strtolower(current($this->tokens))=='distinct') {
- $this->query->setResultForm('select distinct');
- $this->_fastForward();
- if ($this->varCheck(current($this->tokens))
- | strtolower(current($this->tokens))=='*'
- ) {
- $this->query->addResultVar(current($this->tokens));
- } else {
- throw new SparqlParserException(
- "Variable or '*' expected.",
- null,
- key($this->tokens)
- );
+ $curTok = current($this->tokens);
+ $curLow = strtolower($curTok);
+
+ if ($this->varCheck($curTok) || $curLow == '*') {
+ if ($bWaitForRenaming) {
+ $bWaitForRenaming = false;
+ $currentVar->setNewName($curTok);
+ if ($currentFunc != null) {
+ $currentVar->setFunc($currentFunc);
}
+ $this->query->addResultVar($currentVar);
+ $currentVar = null;
+ } else {
+ if ($currentVar != null) {
+ $this->query->addResultVar($currentVar);
+ $currentVar = null;
+ }
+ $currentVar = new Query_ResultVariable($curTok);
+ if ($currentFunc != null) {
+ $currentVar->setFunc($currentFunc);
+ }
}
+ $currentFunc = null;
+ } else if ($curLow == 'as') {
+ if ($currentVar === null) {
+ throw new SparqlParserException(
+ 'AS requires a variable left and right',
+ null,
+ key($this->tokens)
+ );
+ }
+ $bWaitForRenaming = true;
+ } else if (in_array($curLow, self::$sops)) {
+ $currentFunc = $curLow;
}
if (!current($this->tokens)) {
@@ -328,13 +350,24 @@
null,
key($this->tokens)
);
- break;
}
}
+
+ if ($currentVar != null) {
+ $this->query->addResultVar($currentVar);
+ }
prev($this->tokens);
- }
+ if (count($this->query->getResultVars()) == 0) {
+ throw new SparqlParserException(
+ "Variable or '*' expected.",
+ null,
+ key($this->tokens)
+ );
+ }
+ }//protected function parseSelect()
+
/**
* Adds a new variable to the query and sets result form to 'DESCRIBE'.
*
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|