2626
2727/**
2828 * Generate SQL2 statements
29- *
30- * TODO: is eval... the best name for the functions here?
3129 */
3230class 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