Skip to content

Commit 09150ad

Browse files
committed
sql2 generator add square brackets when needed. fix #13
1 parent 68d7156 commit 09150ad

File tree

1 file changed

+37
-17
lines changed

1 file changed

+37
-17
lines changed

src/PHPCR/Util/QOM/Sql2Generator.php

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626

2727
/**
2828
* Generate SQL2 statements
29-
*
30-
* TODO: is eval... the best name for the functions here?
3129
*/
3230
class Sql2Generator extends BaseSqlGenerator
3331
{
@@ -42,10 +40,7 @@ class Sql2Generator extends BaseSqlGenerator
4240
*/
4341
public function evalSelector($nodeTypeName, $selectorName = null)
4442
{
45-
$sql2 = $nodeTypeName;
46-
if (substr($sql2, 0, 1) !== '[' && substr($sql2, -1) !== ']') {
47-
$sql2 = '[' . $sql2 . ']';
48-
}
43+
$sql2 = $this->addBracketsIfNeeded($nodeTypeName);
4944

5045
$name = $selectorName;
5146
if (! is_null($name)) {
@@ -129,7 +124,10 @@ public function evalEquiJoinCondition($sel1Name, $prop1Name, $sel2Name, $prop2Na
129124
*/
130125
public function evalSameNodeJoinCondition($sel1Name, $sel2Name, $sel2Path = null)
131126
{
132-
$sql2 = "ISSAMENODE($sel1Name, $sel2Name";
127+
$sql2 = 'ISSAMENODE('
128+
. $this->addBracketsIfNeeded($sel1Name) . ', '
129+
. $this->addBracketsIfNeeded($sel2Name)
130+
;
133131
$sql2 .= ! is_null($sel2Path) ? ', ' . $sel2Path : '';
134132
$sql2 .= ')';
135133

@@ -149,7 +147,10 @@ public function evalSameNodeJoinCondition($sel1Name, $sel2Name, $sel2Path = null
149147
*/
150148
public function evalChildNodeJoinCondition($childSelectorName, $parentSelectorName)
151149
{
152-
return "ISCHILDNODE($childSelectorName, $parentSelectorName)";
150+
return 'ISCHILDNODE('
151+
. $this->addBracketsIfNeeded($childSelectorName) . ', '
152+
. $this->addBracketsIfNeeded($parentSelectorName) . ')'
153+
;
153154
}
154155

155156
/**
@@ -165,7 +166,10 @@ public function evalChildNodeJoinCondition($childSelectorName, $parentSelectorNa
165166
*/
166167
public function evalDescendantNodeJoinCondition($descendantSelectorName, $ancestorselectorName)
167168
{
168-
return "ISDESCENDANTNODE($descendantSelectorName, $ancestorselectorName)";
169+
return 'ISDESCENDANTNODE('
170+
. $this->addBracketsIfNeeded($descendantSelectorName) . ', '
171+
. $this->addBracketsIfNeeded($ancestorselectorName) . ')'
172+
;
169173
}
170174

171175
/**
@@ -177,7 +181,7 @@ public function evalDescendantNodeJoinCondition($descendantSelectorName, $ancest
177181
public function evalSameNode($path, $selectorName = null)
178182
{
179183
$sql2 = 'ISSAMENODE(';
180-
$sql2 .= is_null($selectorName) ? $path : $selectorName . ', ' . $path;
184+
$sql2 .= is_null($selectorName) ? $path : $this->addBracketsIfNeeded($selectorName) . ', ' . $path;
181185
$sql2 .= ')';
182186

183187
return $sql2;
@@ -192,7 +196,7 @@ public function evalSameNode($path, $selectorName = null)
192196
public function evalChildNode($path, $selectorName = null)
193197
{
194198
$sql2 = 'ISCHILDNODE(';
195-
$sql2 .= is_null($selectorName) ? $path : $selectorName . ', ' . $path;
199+
$sql2 .= is_null($selectorName) ? $path : $this->addBracketsIfNeeded($selectorName) . ', ' . $path;
196200
$sql2 .= ')';
197201

198202
return $sql2;
@@ -207,7 +211,7 @@ public function evalChildNode($path, $selectorName = null)
207211
public function evalDescendantNode($path, $selectorName = null)
208212
{
209213
$sql2 = 'ISDESCENDANTNODE(';
210-
$sql2 .= is_null($selectorName) ? $path : $selectorName . ', ' . $path;
214+
$sql2 .= is_null($selectorName) ? $path : $this->addBracketsIfNeeded($selectorName) . ', ' . $path;
211215
$sql2 .= ')';
212216

213217
return $sql2;
@@ -301,10 +305,7 @@ public function evalFullTextSearchScore($selectorValue = null)
301305
*/
302306
public function evalPropertyValue($propertyName, $selectorName = null)
303307
{
304-
if (false !== strpos($selectorName, ':')) {
305-
$selectorName = "[$selectorName]";
306-
}
307-
$sql2 = ! is_null($selectorName) ? $selectorName . '.' : '';
308+
$sql2 = ! is_null($selectorName) ? $this->addBracketsIfNeeded($selectorName) . '.' : '';
308309
if (false !== strpos($propertyName, ':')) {
309310
$propertyName = "[$propertyName]";
310311
}
@@ -356,7 +357,7 @@ public function evalColumn($selectorName, $propertyName = null, $colname = null)
356357
{
357358
$sql2 = '';
358359
if (! is_null($selectorName) && is_null($propertyName) && is_null($colname)) {
359-
$sql2 .= $selectorName . '.*';
360+
$sql2 .= $this->addBracketsIfNeeded($selectorName) . '.*';
360361
} else {
361362
$sql2 .= $this->evalPropertyValue($propertyName, $selectorName);
362363
$sql2 .= ! is_null($colname) ? ' AS ' . $colname : '';
@@ -400,4 +401,23 @@ public function evalCastLiteral($literal, $type)
400401
{
401402
return "CAST('$literal' AS $type)";
402403
}
404+
405+
/**
406+
* Add square brackets around a selector if needed
407+
*
408+
* @param string $selector
409+
*
410+
* @return string $selector guaranteed to have [] around it if needed
411+
*/
412+
private function addBracketsIfNeeded($selector)
413+
{
414+
if (substr($selector, 0, 1) !== '['
415+
&& substr($selector, -1) !== ']'
416+
&& false !== strpos($selector, ':')
417+
) {
418+
return "[$selector]";
419+
}
420+
421+
return $selector;
422+
}
403423
}

0 commit comments

Comments
 (0)