Extbase:
[Packages/TYPO3.CMS.git] / typo3 / sysext / extbase / Classes / Persistence / QOM / QueryObjectModelFactory.php
1 <?php
2 /***************************************************************
3 * Copyright notice
4 *
5 * (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
6 * All rights reserved
7 *
8 * This class is a backport of the corresponding class of FLOW3.
9 * All credits go to the v5 team.
10 *
11 * This script is part of the TYPO3 project. The TYPO3 project is
12 * free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * The GNU General Public License can be found at
18 * http://www.gnu.org/copyleft/gpl.html.
19 *
20 * This script is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * This copyright notice MUST APPEAR in all copies of the script!
26 ***************************************************************/
27
28 /**
29 * The Query Object Model Factory
30 *
31 * @package Extbase
32 * @subpackage Persistence
33 * @version $Id: QueryObjectModelFactory.php 2191 2009-05-07 19:49:06Z k-fish $
34 * @scope prototype
35 */
36 class Tx_Extbase_Persistence_QOM_QueryObjectModelFactory implements Tx_Extbase_Persistence_QOM_QueryObjectModelFactoryInterface {
37 // SK: Needs to be cleaned up (methods might need to be removed, and comments fixed)
38 /**
39 * @var Tx_Extbase_Persistence_Storage_BackendInterface
40 */
41 protected $storageBackend;
42
43 /**
44 * Constructs the Component Factory
45 *
46 * @param Tx_Extbase_Persistence_Storage_BackendInterfasce $storageBackend
47 * @param Tx_Extbase_Persistence_Mapper_DataMapper $dataMapper
48 */
49 public function __construct(Tx_Extbase_Persistence_Storage_BackendInterface $storageBackend, Tx_Extbase_Persistence_Mapper_DataMapper $dataMapper) {
50 $this->storageBackend = $storageBackend;
51 $this->dataMapper = $dataMapper;
52 }
53
54 /**
55 * Creates a query with one or more selectors.
56 * If source is a selector, that selector is the default selector of the
57 * query. Otherwise the query does not have a default selector.
58 *
59 * If the query is invalid, this method throws an InvalidQueryException.
60 * See the individual QOM factory methods for the validity criteria of each
61 * query element.
62 *
63 * @param mixed $source the Selector or the node-tuple Source; non-null
64 * @param Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint the constraint, or null if none
65 * @param array $orderings zero or more orderings; null is equivalent to a zero-length array
66 * @param array $columns the columns; null is equivalent to a zero-length array
67 * @return Tx_Extbase_Persistence_QOM_QueryObjectModelInterface the query; non-null
68 * @throws \F3\PHPCR\Query\InvalidQueryException if a particular validity test is possible on this method, the implemention chooses to perform that test and the parameters given fail that test. See the individual QOM factory methods for the validity criteria of each query element.
69 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if another error occurs.
70 */
71 public function createQuery(Tx_Extbase_Persistence_QOM_SourceInterface $selectorOrSource, $constraint, array $orderings, array $columns) {
72 $query = new Tx_Extbase_Persistence_QOM_QueryObjectModel($selectorOrSource, $constraint, $orderings, $columns);
73 $query->injectStorageBackend($this->storageBackend);
74 $query->injectDataMapper($this->dataMapper);
75 return $query;
76 }
77
78 /**
79 * Selects a subset of the nodes in the repository based on node type.
80 *
81 * @param string $nodeTypeName the name of the required node type; non-null
82 * @param string $selectorName the selector name; optional
83 * @return Tx_Extbase_Persistence_QOM_SelectorInterface the selector
84 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
85 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
86 */
87 public function selector($nodeTypeName, $selectorName = '') {
88 if ($selectorName === '') {
89 $selectorName = $nodeTypeName;
90 }
91 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_Selector', $selectorName, $nodeTypeName);
92 }
93
94 /**
95 * Performs a join between two node-tuple sources.
96 *
97 * @param Tx_Extbase_Persistence_QOM_SourceInterface $left the left node-tuple source; non-null
98 * @param Tx_Extbase_Persistence_QOM_SourceInterface $right the right node-tuple source; non-null
99 * @param string $joinType one of QueryObjectModelConstants.JCR_JOIN_TYPE_*
100 * @param Tx_Extbase_Persistence_QOM_JoinConditionInterface $join Condition the join condition; non-null
101 * @return Tx_Extbase_Persistence_QOM_JoinInterface the join; non-null
102 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
103 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
104 */
105 public function join(Tx_Extbase_Persistence_QOM_SourceInterface $left, Tx_Extbase_Persistence_QOM_SourceInterface $right, $joinType, Tx_Extbase_Persistence_QOM_JoinConditionInterface $joinCondition) {
106 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_Join', $left, $right, $joinType, $joinCondition);
107 }
108
109 /**
110 * Tests whether the value of a property in a first selector is equal to the value of a property in a second selector.
111 *
112 * @param string $selector1Name the name of the first selector; non-null
113 * @param string $property1Name the property name in the first selector; non-null
114 * @param string $selector2Name the name of the second selector; non-null
115 * @param string $property2Name the property name in the second selector; non-null
116 * @return Tx_Extbase_Persistence_QOM_EquiJoinConditionInterface the constraint; non-null
117 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
118 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
119 */
120 public function equiJoinCondition($selector1Name, $property1Name, $selector2Name, $property2Name) {
121 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_EquiJoinCondition', $selector1Name, $property1Name, $selector2Name, $property2Name);
122 }
123
124 /**
125 * Tests whether a first selector's node is the same as a node identified by relative path from a second selector's node.
126 *
127 * @param string $selector1Name the name of the first selector; non-null
128 * @param string $selector2Name the name of the second selector; non-null
129 * @param string $selector2Path the path relative to the second selector; non-null
130 * @return Tx_Extbase_Persistence_QOM_SameNodeJoinConditionInterface the constraint; non-null
131 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
132 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
133 */
134 public function sameNodeJoinCondition($selector1Name, $selector2Name, $selector2Path = NULL) {
135 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058190);
136 }
137
138 /**
139 * Tests whether a first selector's node is a child of a second selector's node.
140 *
141 * @param string $childSelectorName the name of the child selector; non-null
142 * @param string $parentSelectorName the name of the parent selector; non-null
143 * @return Tx_Extbase_Persistence_QOM_ChildNodeJoinConditionInterface the constraint; non-null
144 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
145 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
146 */
147 public function childNodeJoinCondition($childSelectorName, $parentSelectorName) {
148 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058190);
149 }
150
151 /**
152 * Tests whether a first selector's node is a descendant of a second selector's node.
153 *
154 * @param string $descendantSelectorName the name of the descendant selector; non-null
155 * @param string $ancestorSelectorName the name of the ancestor selector; non-null
156 * @return Tx_Extbase_Persistence_QOM_DescendantNodeJoinConditionInterface the constraint; non-null
157 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
158 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
159 */
160 public function descendantNodeJoinCondition($descendantSelectorName, $ancestorSelectorName) {
161 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058192);
162 }
163
164 /**
165 * Performs a logical conjunction of two other constraints.
166 *
167 * @param Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint1 the first constraint; non-null
168 * @param Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint2 the second constraint; non-null
169 * @return Tx_Extbase_Persistence_QOM_AndInterface the And constraint; non-null
170 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
171 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
172 */
173 public function _and(Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint1, Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint2) {
174 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_And', $constraint1, $constraint2);
175 }
176
177 /**
178 * Performs a logical disjunction of two other constraints.
179 *
180 * @param Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint1 the first constraint; non-null
181 * @param Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint2 the second constraint; non-null
182 * @return Tx_Extbase_Persistence_QOM_OrInterface the Or constraint; non-null
183 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
184 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
185 */
186 public function _or(Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint1, Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint2) {
187 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_Or', $constraint1, $constraint2);
188 }
189
190 /**
191 * Performs a logical negation of another constraint.
192 *
193 * @param Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint the constraint to be negated; non-null
194 * @return Tx_Extbase_Persistence_QOM_NotInterface the Not constraint; non-null
195 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
196 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
197 */
198 public function not(Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint) {
199 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_Not', $constraint);
200 }
201
202 /**
203 * Filters related node-tuples based on an object property.
204 *
205 * @param Tx_Extbase_DomainObject_AbstractEntity $object The object
206 * @param string $propertyName The name of the property of the related object
207 * @return Tx_Extbase_Persistence_QOM_RelatedInterface the constraint; non-null
208 */
209 public function related(Tx_Extbase_DomainObject_AbstractEntity $object, $propertyName) {
210 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_Related', $object, $propertyName);
211 }
212
213 /**
214 * Filters node-tuples based on the outcome of a binary operation.
215 *
216 * @param Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand1 the first operand; non-null
217 * @param string $operator the operator; one of QueryObjectModelConstants.JCR_OPERATOR_*
218 * @param Tx_Extbase_Persistence_QOM_StaticOperandInterface $operand2 the second operand; non-null
219 * @return Tx_Extbase_Persistence_QOM_ComparisonInterface the constraint; non-null
220 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
221 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
222 */
223 public function comparison(Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand1, $operator, Tx_Extbase_Persistence_QOM_StaticOperandInterface $operand2) {
224 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_Comparison', $operand1, $operator, $operand2);
225 }
226
227 /**
228 * Tests the existence of a property in the specified or default selector.
229 *
230 * @param string $propertyName the property name; non-null
231 * @param string $selectorName the selector name; non-null
232 * @return Tx_Extbase_Persistence_QOM_PropertyExistenceInterface the constraint; non-null
233 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
234 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
235 */
236 public function propertyExistence($propertyName, $selectorName = NULL) {
237 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058196);
238 }
239
240 /**
241 * Performs a full-text search against the specified or default selector.
242 *
243 * @param string $propertyName the property name, or null to search all full-text indexed properties of the node (or node subgraph, in some implementations);
244 * @param string $fullTextSearchExpression the full-text search expression; non-null
245 * @param string $selectorName the selector name; non-null
246 * @return Tx_Extbase_Persistence_QOM_FullTextSearchInterface the constraint; non-null
247 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
248 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
249 */
250 public function fullTextSearch($propertyName, $fullTextSearchExpression, $selectorName = NULL) {
251 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058197);
252 }
253
254 /**
255 * Tests whether a node in the specified or default selector is reachable by a specified absolute path.
256 *
257 * @param string $selectorName the selector name; non-null
258 * @param string $path an absolute path; non-null
259 * @return Tx_Extbase_Persistence_QOM_SameNodeInterface the constraint; non-null
260 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
261 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
262 */
263 public function sameNode($path, $selectorName = NULL) {
264 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058198);
265 }
266
267 /**
268 * Tests whether a node in the specified or default selector is a child of a node reachable by a specified absolute path.
269 *
270 * @param string $path an absolute path; non-null
271 * @param string $selectorName the selector name; non-null
272 * @return Tx_Extbase_Persistence_QOM_ChildNodeInterface the constraint; non-null
273 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
274 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
275 */
276 public function childNode($path, $selectorName = NULL) {
277 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058199);
278 }
279
280 /**
281 * Tests whether a node in the specified or default selector is a descendant of a node reachable by a specified absolute path.
282 *
283 * @param string $path an absolute path; non-null
284 * @param string $selectorName the selector name; non-null
285 * @return Tx_Extbase_Persistence_QOM_DescendantNodeInterface the constraint; non-null
286 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
287 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
288 */
289 public function descendantNode($path, $selectorName = NULL) {
290 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058200);
291 }
292
293 /**
294 * Evaluates to the value (or values, if multi-valued) of a property in the specified or default selector.
295 *
296 * @param string $propertyName the property name; non-null
297 * @param string $selectorName the selector name; non-null
298 * @return Tx_Extbase_Persistence_QOM_PropertyValueInterface the operand; non-null
299 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
300 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
301 */
302 public function propertyValue($propertyName, $selectorName = '') {
303 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_PropertyValue', $propertyName, $selectorName);
304 }
305
306 /**
307 * Evaluates to the length (or lengths, if multi-valued) of a property.
308 *
309 * @param Tx_Extbase_Persistence_QOM_PropertyValueInterface $propertyValue the property value for which to compute the length; non-null
310 * @return Tx_Extbase_Persistence_QOM_LengthInterface the operand; non-null
311 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
312 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
313 */
314 public function length(Tx_Extbase_Persistence_QOM_PropertyValueInterface $propertyValue) {
315 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058202);
316 }
317
318 /**
319 * Evaluates to a NAME value equal to the prefix-qualified name of a node in the specified or default selector.
320 *
321 * @param string $selectorName the selector name; non-null
322 * @return Tx_Extbase_Persistence_QOM_NodeNameInterface the operand; non-null
323 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
324 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
325 */
326 public function nodeName($selectorName = NULL) {
327 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058203);
328 }
329
330 /**
331 * Evaluates to a NAME value equal to the local (unprefixed) name of a node in the specified or default selector.
332 *
333 * @param string $selectorName the selector name; non-null
334 * @return Tx_Extbase_Persistence_QOM_NodeLocalNameInterface the operand; non-null
335 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
336 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
337 */
338 public function nodeLocalName($selectorName = NULL) {
339 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058204);
340 }
341
342 /**
343 * Evaluates to a DOUBLE value equal to the full-text search score of a node in the specified or default selector.
344 *
345 * @param string $selectorName the selector name; non-null
346 * @return Tx_Extbase_Persistence_QOM_FullTextSearchScoreInterface the operand; non-null
347 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
348 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
349 */
350 public function fullTextSearchScore($selectorName = NULL) {
351 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058205);
352 }
353
354 /**
355 * Evaluates to the lower-case string value (or values, if multi-valued) of an operand.
356 *
357 * @param Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand the operand whose value is converted to a lower-case string; non-null
358 * @return Tx_Extbase_Persistence_QOM_LowerCaseInterface the operand; non-null
359 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
360 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
361 */
362 public function lowerCase(Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand) {
363 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_LowerCase', $operand);
364 }
365
366 /**
367 * Evaluates to the upper-case string value (or values, if multi-valued) of an operand.
368 *
369 * @param Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand the operand whose value is converted to a upper-case string; non-null
370 * @return Tx_Extbase_Persistence_QOM_UpperCaseInterface the operand; non-null
371 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
372 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
373 */
374 public function upperCase(Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand) {
375 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_UpperCase', $operand);
376 }
377
378 /**
379 * Evaluates to the value of a bind variable.
380 *
381 * @param string $bindVariableName the bind variable name; non-null
382 * @return Tx_Extbase_Persistence_QOM_BindVariableValueInterface the operand; non-null
383 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
384 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
385 */
386 public function bindVariable($bindVariableName) {
387 return t3lib_div::makeInstance('Tx_Extbase_Persistence_QOM_BindVariableValue', $bindVariableName);
388 }
389
390 /**
391 * Evaluates to a literal value.
392 *
393 * The query is invalid if no value is bound to $literalValue.
394 *
395 * @param \F3\PHPCR\ValueInterface $literalValue the value
396 * @return \F3\PHPCR\ValueInterface the operand; non-null
397 * @throws \F3\PHPCR\Query\InvalidQueryException if a particular validity test is possible on this method, the implemention chooses to perform that test (and not leave it until later) on createQuery, and the parameters given fail that test
398 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
399 */
400 public function literal(Tx_Extbase_Persistence_ValueInterface $literalValue) {
401 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058209);
402 }
403
404 /**
405 * Orders by the value of the specified operand, in ascending order.
406 *
407 * The query is invalid if $operand does not evaluate to a scalar value.
408 *
409 * @param Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand the operand by which to order; non-null
410 * @return Tx_Extbase_Persistence_QOM_OrderingInterface the ordering
411 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
412 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
413 */
414 public function ascending(Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand) {
415 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058209);
416 }
417
418 /**
419 * Orders by the value of the specified operand, in descending order.
420 *
421 * The query is invalid if $operand does not evaluate to a scalar value.
422 *
423 * @param Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand the operand by which to order; non-null
424 * @return Tx_Extbase_Persistence_QOM_OrderingInterface the ordering
425 * @throws \F3\PHPCR\Query\InvalidQueryException if the query is invalid
426 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
427 */
428 public function descending(Tx_Extbase_Persistence_QOM_DynamicOperandInterface $operand) {
429 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058210);
430 }
431
432 /**
433 * Identifies a property in the specified or default selector to include in
434 * the tabular view of query results.
435 * The column name is the property name if not given.
436 *
437 * The query is invalid if:
438 * $selectorName is not the name of a selector in the query, or
439 * $propertyName is specified but it is not a syntactically valid JCR name, or
440 * $propertyName is specified but does not evaluate to a scalar value, or
441 * $propertyName is specified but $columnName is omitted, or
442 * $propertyName is omitted but $columnName is specified, or
443 * the columns in the tabular view are not uniquely named, whether those
444 * column names are specified by $columnName (if $propertyName is specified)
445 * or generated as described above (if $propertyName is omitted).
446 *
447 * If $propertyName is specified but, for a node-tuple, the selector node
448 * does not have a property named $propertyName, the query is valid and the
449 * column has null value.
450 *
451 * @param string $propertyName the property name, or null to include a column for each single-value non-residual property of the selector's node type
452 * @param string $columnName the column name; must be null if propertyName is null
453 * @param string $selectorName the selector name; non-null
454 * @return Tx_Extbase_Persistence_QOM_ColumnInterface the column; non-null
455 * @throws \F3\PHPCR\Query\InvalidQueryException if the query has no default selector or is otherwise invalid
456 * @throws Tx_Extbase_Persistence_Exception_RepositoryException if the operation otherwise fails
457 */
458 public function column($propertyName, $columnName = NULL, $selectorName = NULL) {
459 throw new Tx_Extbase_Persistence_Exception('Method not yet implemented, sorry!', 1217058211);
460 }
461
462 }
463 ?>