Skip to content

Commit ac899c0

Browse files
committed
Merge pull request #171 from phpcr/escape-property-name
allow for property name to be escaped
2 parents 4d14ff4 + c46c93d commit ac899c0

File tree

2 files changed

+65
-15
lines changed

2 files changed

+65
-15
lines changed

tests/Query/QOM/Sql2TestQueries.php

+64-14
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,18 @@ public static function getQueries()
3232
/*
3333
* 6.7.8. EquiJoinCondition
3434
*/
35-
$queries['6.7.8.EquiJoin.Inner'] = 'SELECT * FROM [nt:file] AS file INNER JOIN [nt:folder] AS folder ON file.prop1=folder.prop2';
36-
$queries['6.7.8.EquiJoin.Left'] = 'SELECT * FROM [nt:file] AS file LEFT OUTER JOIN [nt:folder] AS folder ON file.prop1=folder.prop2';
37-
$queries['6.7.8.EquiJoin.Right'] = 'SELECT * FROM [nt:file] AS file RIGHT OUTER JOIN [nt:folder] AS folder ON file.prop1=folder.prop2';
35+
$queries['6.7.8.EquiJoin.Inner'] = array(
36+
'SELECT * FROM [nt:file] AS file INNER JOIN [nt:folder] AS folder ON file.prop1=folder.prop2',
37+
'SELECT * FROM [nt:file] AS file INNER JOIN [nt:folder] AS folder ON file.[prop1]=folder.[prop2]',
38+
);
39+
$queries['6.7.8.EquiJoin.Left'] = array(
40+
'SELECT * FROM [nt:file] AS file LEFT OUTER JOIN [nt:folder] AS folder ON file.prop1=folder.prop2',
41+
'SELECT * FROM [nt:file] AS file LEFT OUTER JOIN [nt:folder] AS folder ON file.[prop1]=folder.[prop2]',
42+
);
43+
$queries['6.7.8.EquiJoin.Right'] = array(
44+
'SELECT * FROM [nt:file] AS file RIGHT OUTER JOIN [nt:folder] AS folder ON file.prop1=folder.prop2',
45+
'SELECT * FROM [nt:file] AS file RIGHT OUTER JOIN [nt:folder] AS folder ON file.[prop1]=folder.[prop2]',
46+
);
3847

3948
/*
4049
* 6.7.9. SameNodeJoinCondition
@@ -62,16 +71,19 @@ public static function getQueries()
6271
$queries['6.7.12.Constraint.Precedence.1'] = array(
6372
'SELECT * FROM [nt:file] AS file WHERE file.prop1 = \'1\' OR file.prop2 = \'2\' AND file.prop3 = \'3\'',
6473
'SELECT * FROM [nt:file] AS file WHERE (file.prop1 = \'1\' OR (file.prop2 = \'2\' AND file.prop3 = \'3\'))',
74+
'SELECT * FROM [nt:file] AS file WHERE (file.[prop1] = \'1\' OR (file.[prop2] = \'2\' AND file.[prop3] = \'3\'))',
6575
);
6676
$queries['6.7.12.Constraint.Precedence.2'] = array(
6777
'SELECT * FROM [nt:file] AS file WHERE file.prop1 = \'1\' AND file.prop2 = \'2\' OR file.prop3 = \'3\'',
6878
'SELECT * FROM [nt:file] AS file WHERE ((file.prop1 = \'1\' AND file.prop2 = \'2\') OR file.prop3 = \'3\')',
79+
'SELECT * FROM [nt:file] AS file WHERE ((file.[prop1] = \'1\' AND file.[prop2] = \'2\') OR file.[prop3] = \'3\')',
6980
);
7081

7182
$queries['6.7.12.Constraint.Precedence.3'] = array(
7283
'SELECT * FROM [nt:file] AS file WHERE NOT file.prop1 = \'1\' OR file.prop2 = \'2\' AND NOT file.prop3 = \'3\'',
7384
'SELECT * FROM [nt:file] AS file WHERE (NOT file.prop1 = \'1\' OR (file.prop2 = \'2\' AND NOT file.prop3 = \'3\'))',
7485
'SELECT * FROM [nt:file] AS file WHERE ((NOT file.prop1 = \'1\') OR (file.prop2 = \'2\' AND (NOT file.prop3 = \'3\')))',
86+
'SELECT * FROM [nt:file] AS file WHERE ((NOT file.[prop1] = \'1\') OR (file.[prop2] = \'2\' AND (NOT file.[prop3] = \'3\')))',
7587
);
7688

7789
$queries['6.7.12.Constraint.Precedence.4'] = array(
@@ -82,6 +94,7 @@ public static function getQueries()
8294
AND file.prop6 IS NOT NULL AND file.prop7 IS NOT NULL',
8395

8496
'SELECT * FROM [nt:file] AS file WHERE (((file.prop1 IS NOT NULL AND file.prop2 IS NOT NULL) AND file.prop3 IS NOT NULL) OR (((file.prop4 IS NOT NULL AND file.prop5 IS NOT NULL) AND file.prop6 IS NOT NULL) AND file.prop7 IS NOT NULL))',
97+
'SELECT * FROM [nt:file] AS file WHERE (((file.[prop1] IS NOT NULL AND file.[prop2] IS NOT NULL) AND file.[prop3] IS NOT NULL) OR (((file.[prop4] IS NOT NULL AND file.[prop5] IS NOT NULL) AND file.[prop6] IS NOT NULL) AND file.[prop7] IS NOT NULL))',
8598
);
8699

87100
$queries['6.7.12.Constraint.Precedence.5'] = array(
@@ -90,6 +103,7 @@ public static function getQueries()
90103
OR NOT file.prop3 = \'hello\' AND file.prop4 <> \'hello\'',
91104
'SELECT * FROM [nt:file] AS file WHERE ((NOT file.prop1 IS NOT NULL AND NOT NOT file.prop2 IS NOT NULL) OR (NOT file.prop3 = \'hello\' AND file.prop4 <> \'hello\'))',
92105
'SELECT * FROM [nt:file] AS file WHERE (((NOT file.prop1 IS NOT NULL) AND (NOT (NOT file.prop2 IS NOT NULL))) OR ((NOT file.prop3 = \'hello\') AND file.prop4 <> \'hello\'))',
106+
'SELECT * FROM [nt:file] AS file WHERE (((NOT file.[prop1] IS NOT NULL) AND (NOT (NOT file.[prop2] IS NOT NULL))) OR ((NOT file.[prop3] = \'hello\') AND file.[prop4] <> \'hello\'))',
93107
);
94108

95109
/*
@@ -98,6 +112,7 @@ public static function getQueries()
98112
$queries['6.7.13.And'] = array(
99113
'SELECT * FROM [nt:file] AS file WHERE file.prop1 IS NOT NULL AND file.prop2 IS NOT NULL',
100114
'SELECT * FROM [nt:file] AS file WHERE (file.prop1 IS NOT NULL AND file.prop2 IS NOT NULL)',
115+
'SELECT * FROM [nt:file] AS file WHERE (file.[prop1] IS NOT NULL AND file.[prop2] IS NOT NULL)',
101116
);
102117

103118
/*
@@ -106,6 +121,7 @@ public static function getQueries()
106121
$queries['6.7.14.Or'] = array(
107122
'SELECT * FROM [nt:file] AS file WHERE file.prop1 IS NOT NULL OR file.prop2 IS NOT NULL',
108123
'SELECT * FROM [nt:file] AS file WHERE (file.prop1 IS NOT NULL OR file.prop2 IS NOT NULL)',
124+
'SELECT * FROM [nt:file] AS file WHERE (file.[prop1] IS NOT NULL OR file.[prop2] IS NOT NULL)',
109125
);
110126

111127
/*
@@ -114,6 +130,7 @@ public static function getQueries()
114130
$queries['6.7.15.Not'] = array(
115131
'SELECT * FROM [nt:file] AS file WHERE NOT file.prop1 IS NOT NULL',
116132
'SELECT * FROM [nt:file] AS file WHERE (NOT file.prop1 IS NOT NULL)',
133+
'SELECT * FROM [nt:file] AS file WHERE (NOT file.[prop1] IS NOT NULL)',
117134
);
118135

119136
/*
@@ -124,13 +141,22 @@ public static function getQueries()
124141
/*
125142
* 6.7.18. PropertyExistence
126143
*/
127-
$queries['6.7.18.PropertyExistence'] = 'SELECT * FROM [nt:file] AS file WHERE file.prop1 IS NOT NULL';
144+
$queries['6.7.18.PropertyExistence'] = array(
145+
'SELECT * FROM [nt:file] AS file WHERE file.prop1 IS NOT NULL',
146+
'SELECT * FROM [nt:file] AS file WHERE file.[prop1] IS NOT NULL',
147+
);
128148

129149
/*
130150
* 6.7.19. FullTextSearch
131151
*/
132-
$queries['6.7.19.FullTextSearch'] = 'SELECT * FROM [nt:file] AS file WHERE CONTAINS(file.prop, \'expr\')';
133-
$queries['6.7.19.FullTextSearch_With_Single_Quote'] = "SELECT * FROM [nt:file] AS file WHERE CONTAINS(file.prop, 'expr''')";
152+
$queries['6.7.19.FullTextSearch'] = array(
153+
'SELECT * FROM [nt:file] AS file WHERE CONTAINS(file.prop, \'expr\')',
154+
'SELECT * FROM [nt:file] AS file WHERE CONTAINS(file.[prop], \'expr\')',
155+
);
156+
$queries['6.7.19.FullTextSearch_With_Single_Quote'] = array(
157+
"SELECT * FROM [nt:file] AS file WHERE CONTAINS(file.prop, 'expr''')",
158+
"SELECT * FROM [nt:file] AS file WHERE CONTAINS(file.[prop], 'expr''')",
159+
);
134160

135161
/*
136162
* 6.7.20. SameNode
@@ -162,13 +188,22 @@ public static function getQueries()
162188
/*
163189
* 6.7.27. PropertyValue
164190
*/
165-
$queries['6.7.27.PropertyValue'] = 'SELECT * FROM [nt:file] AS file WHERE file.prop LIKE \'literal\'';
166-
$queries['6.7.27.1.PropertyValue'] = 'SELECT * FROM [nt:unstructured] AS sel WHERE sel.prop > CAST(\'2013-04-15T00:00:00.000+02:00\' AS DATE)';
191+
$queries['6.7.27.PropertyValue'] = array(
192+
'SELECT * FROM [nt:file] AS file WHERE file.prop LIKE \'literal\'',
193+
'SELECT * FROM [nt:file] AS file WHERE file.[prop] LIKE \'literal\'',
194+
);
195+
$queries['6.7.27.1.PropertyValue'] = array(
196+
'SELECT * FROM [nt:unstructured] AS sel WHERE sel.prop > CAST(\'2013-04-15T00:00:00.000+02:00\' AS DATE)',
197+
'SELECT * FROM [nt:unstructured] AS sel WHERE sel.[prop] > CAST(\'2013-04-15T00:00:00.000+02:00\' AS DATE)',
198+
);
167199

168200
/*
169201
* 6.7.28. Length
170202
*/
171-
$queries['6.7.28.Length'] = 'SELECT * FROM [nt:file] AS file WHERE LENGTH(file.prop) LIKE \'literal\'';
203+
$queries['6.7.28.Length'] = array(
204+
'SELECT * FROM [nt:file] AS file WHERE LENGTH(file.prop) LIKE \'literal\'',
205+
'SELECT * FROM [nt:file] AS file WHERE LENGTH(file.[prop]) LIKE \'literal\'',
206+
);
172207

173208
/*
174209
* 6.7.29. NodeName
@@ -204,16 +239,31 @@ public static function getQueries()
204239
* 6.7.38 Order
205240
*/
206241
$queries['6.7.38.Order.None'] = 'SELECT * FROM [nt:unstructured] AS u';
207-
$queries['6.7.38.Order.Asc'] = 'SELECT * FROM [nt:unstructured] AS u ORDER BY u.prop1 ASC';
208-
$queries['6.7.38.Order.Desc'] = 'SELECT * FROM [nt:unstructured] AS u ORDER BY u.prop1 DESC';
209-
$queries['6.7.38.Order.Mixed'] = 'SELECT * FROM [nt:unstructured] AS u ORDER BY u.prop1 ASC, u.prop2 DESC';
242+
$queries['6.7.38.Order.Asc'] = array(
243+
'SELECT * FROM [nt:unstructured] AS u ORDER BY u.prop1 ASC',
244+
'SELECT * FROM [nt:unstructured] AS u ORDER BY u.[prop1] ASC',
245+
);
246+
$queries['6.7.38.Order.Desc'] = array(
247+
'SELECT * FROM [nt:unstructured] AS u ORDER BY u.prop1 DESC',
248+
'SELECT * FROM [nt:unstructured] AS u ORDER BY u.[prop1] DESC',
249+
);
250+
$queries['6.7.38.Order.Mixed'] = array(
251+
'SELECT * FROM [nt:unstructured] AS u ORDER BY u.prop1 ASC, u.prop2 DESC',
252+
'SELECT * FROM [nt:unstructured] AS u ORDER BY u.[prop1] ASC, u.[prop2] DESC',
253+
);
210254

211255
/*
212256
* 6.7.39 Column
213257
*/
214258
$queries['6.7.39.Colum.Wildcard'] = 'SELECT * FROM [nt:unstructured] AS u';
215-
$queries['6.7.39.Colum.Selector'] = 'SELECT u.prop1 AS col1 FROM [nt:unstructured] AS u';
216-
$queries['6.7.39.Colum.Mixed'] = 'SELECT u.prop1 AS col1, u.prop2 FROM [nt:unstructured] AS u';
259+
$queries['6.7.39.Colum.Selector'] = array(
260+
'SELECT u.prop1 AS col1 FROM [nt:unstructured] AS u',
261+
'SELECT u.[prop1] AS col1 FROM [nt:unstructured] AS u',
262+
);
263+
$queries['6.7.39.Colum.Mixed'] = array(
264+
'SELECT u.prop1 AS col1, u.prop2 FROM [nt:unstructured] AS u',
265+
'SELECT u.[prop1] AS col1, u.[prop2] FROM [nt:unstructured] AS u',
266+
);
217267

218268
return $queries;
219269
}

tests/Query/QOM/Sql2ToQomConverterTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function setUp()
3939

4040
public function testColumnsAndSelector()
4141
{
42-
$sql2 = $this->sql2Queries['6.7.39.Colum.Mixed'];
42+
$sql2 = reset($this->sql2Queries['6.7.39.Colum.Mixed']);
4343
$query = $this->parser->parse($sql2);
4444

4545
$this->assertInstanceOf('\PHPCR\Query\QOM\QueryObjectModelInterface', $query);

0 commit comments

Comments
 (0)