From c08b7d14065fae8978dd11c028d6a53be4604c66 Mon Sep 17 00:00:00 2001 From: Christian Maier Date: Mon, 30 Aug 2010 13:29:47 +0200 Subject: [PATCH] merge --- Erfurt/Sparql/EngineDb/TypeSorter.php.bak | 106 ++++++++++++++++++++-- 1 file changed, 98 insertions(+), 8 deletions(-) diff --git a/Erfurt/Sparql/EngineDb/TypeSorter.php.bak b/Erfurt/Sparql/EngineDb/TypeSorter.php.bak index f023e09e..0add135b 100644 --- a/Erfurt/Sparql/EngineDb/TypeSorter.php.bak +++ b/Erfurt/Sparql/EngineDb/TypeSorter.php.bak @@ -41,11 +41,14 @@ class Erfurt_Sparql_EngineDb_TypeSorter protected $_query; protected $_sg; + protected $_backend; public function __construct(Erfurt_Sparql_Query $query, $engine) { $this->_engine = $engine; $this->_query = $query; + $config = Erfurt_App::getInstance()->getConfig(); + $this->_backend = strtolower($config->store->backend); } /** @@ -104,13 +107,18 @@ class Erfurt_Sparql_EngineDb_TypeSorter } $arSpecial = $this->getSpecialOrderVariables(); + + + if (count($arSpecial) == 0) { - $strOrder = $this->getSqlOrderBy(); + $strOrder = $this->getSqlOrderBy(); + foreach ($arSqls as &$arSql) { if ($strOrder !== '') { - $arSql['order'] = $strOrder; - } + $arSql['order'] = $strOrder; + } + } return array( @@ -245,6 +253,7 @@ class Erfurt_Sparql_EngineDb_TypeSorter } + $sql = 'SELECT DISTINCT ' . implode(',', $arSel) . ' ' . $strFrom . $strWhere; $arResult = $this->_engine->sqlQuery($sql); @@ -415,6 +424,15 @@ class Erfurt_Sparql_EngineDb_TypeSorter $sqlOrder = array(); foreach ($arSM['order by'] as $arVar) { $strSparqlVar = $arVar['val']; + + + $sqlOrderVar = $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->arUnionVarAssignments[$n][$strSparqlVar][1]; + + if($this->_backend == 'mssql'){ + $sqlOrderVar = '+*+'.$sqlOrderVar.'-*-'; + } + + if (isset($this->arUnionVarAssignments[$n][$strSparqlVar])) { $dt = null; if (isset($arTypeSet[$strSparqlVar])) { @@ -430,15 +448,16 @@ class Erfurt_Sparql_EngineDb_TypeSorter } if (!isset($dt) || $dt == '' || $dt == 'String' || $dt == 'http://www.w3.org/2001/XMLSchema#string') { - $sqlOrder[] = $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->arUnionVarAssignments[$n][$strSparqlVar][1] . ' ' . strtoupper($arVar['type']); + + $sqlOrder[] = $sqlOrderVar . ' ' . strtoupper($arVar['type']); } else { try { $sqlOrder[] = self::getCastMethod( $dt, - $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->arUnionVarAssignments[$n][$strSparqlVar][1] + $sqlOrderVar ) . ' ' . strtoupper($arVar['type']); } catch (Exception $e) { - $sqlOrder[] = $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->arUnionVarAssignments[$n][$strSparqlVar][1] . ' ' . strtoupper($arVar['type']); + $sqlOrder[] = $sqlOrderVar . ' ' . strtoupper($arVar['type']); } } @@ -517,7 +536,7 @@ class Erfurt_Sparql_EngineDb_TypeSorter $strWhereTypes .= ' OR ' . $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->_sg->arTableColumnNames['datatype']['value'] - . '="")'; + . '=\'\')';//Sqlsrvchange } else { $strWhereTypes .= $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->_sg->arTableColumnNames['datatype']['value'] @@ -532,7 +551,7 @@ class Erfurt_Sparql_EngineDb_TypeSorter $strWhereTypes .= ' OR ' . $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->_sg->arTableColumnNames['datatype']['value'] - . '="")'; + . '=\'\')'; //Sqlsrvchange } else { $strWhereTypes .= ' OR ' . $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->_sg->arTableColumnNames['datatype']['value'] @@ -566,4 +585,75 @@ class Erfurt_Sparql_EngineDb_TypeSorter } }//protected function getStringNullComparison($str) + function getSqlOrderByVariable($arTypeSet = array(), $n = 0) + { + + $arSM = $this->_query->getSolutionModifier(); + + if ($arSM['order by'] === null) { + return ''; + } + + #if (count($arTypeSet) === 0) { + # return ''; + #} + +//var_dump($arTypeSet); +//var_dump($this->arUnionVarAssignments); + + $sqlOrder = array(); + foreach ($arSM['order by'] as $arVar) { + $strSparqlVar = $arVar['val']; + + if (isset($this->arUnionVarAssignments[$n][$strSparqlVar])) { + $dt = null; + if (isset($arTypeSet[$strSparqlVar])) { + foreach ($arTypeSet[$strSparqlVar]['datatype'] as $datatype) { + if ($datatype !== 'http://www.w3.org/2001/XMLSchema#string') { + $dt = $datatype; + break; + } + } + } + if (null === $dt) { + $dt = 'http://www.w3.org/2001/XMLSchema#string'; + } + + if (!isset($dt) || $dt == '' || $dt == 'String' || $dt == 'http://www.w3.org/2001/XMLSchema#string') { + + $sqlOrderVaribale[] = $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->arUnionVarAssignments[$n][$strSparqlVar][1]; + } else { + try { + $sqlOrderVaribale[] = $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->arUnionVarAssignments[$n][$strSparqlVar][1]; + + } catch (Exception $e) { + $sqlOrderVaribale[] = $this->arUnionVarAssignments[$n][$strSparqlVar][0] . '.' . $this->arUnionVarAssignments[$n][$strSparqlVar][1]; + } + + } + } + } + + if (count($sqlOrderVaribale) === 0) { + require_once 'Erfurt/Exception.php'; + throw new Erfurt_Exception('Something went wrong with ORDER BY.'); + } +//var_dump($sqlOrder);exit; + return implode(', ', $sqlOrderVaribale); + + + + + + + }//function getSqlOrderBy($arTypeSet = array()) + + + + + + + + + }