Skip to content

Commit

Permalink
pushed field/orderby validation into the QB
Browse files Browse the repository at this point in the history
  • Loading branch information
lsmith77 committed Aug 29, 2014
1 parent a56b830 commit 5fa4e2c
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 29 deletions.
27 changes: 1 addition & 26 deletions lib/Doctrine/ODM/PHPCR/DocumentRepository.php
Expand Up @@ -146,23 +146,7 @@ public function findBy(array $criteria, array $orderBy = null, $limit = null, $o
$orderByNode = $qb->orderBy();

if ($orderBy) {
$classMeta = $this->getClassMetadata();
foreach ($orderBy as $field => $order) {
if ($field === $classMeta->nodename) {
throw new InvalidArgumentException(sprintf(
'It is not possible to order by a nodename property "%s->%s"',
$classMeta->name,
$field
));
}
if ($classMeta->hasAssociation($field)) {
throw new InvalidArgumentException(sprintf(
'It is not possible to order by association field "%s->%s"',
$classMeta->name,
$field
));
}

$order = strtolower($order);
if (!in_array($order, array('asc', 'desc'))) {
throw new InvalidArgumentException(sprintf(
Expand Down Expand Up @@ -202,16 +186,7 @@ public function findBy(array $criteria, array $orderBy = null, $limit = null, $o
*/
protected function constraintField(ConstraintFactory $where, $field, $value, $alias)
{
$classMeta = $this->getClassMetadata();
if ($classMeta->hasAssociation($field)) {
throw new InvalidArgumentException(sprintf(
'It is not possible to filter on association fields %s->%s',
$classMeta->name,
$field
));
}

if ($field === $this->getClassMetadata()->nodename) {
if ($field === $this->class->nodename) {
$where->eq()->name($alias)->literal($value);
} else {
$where->eq()->field($alias.'.'.$field)->literal($value);
Expand Down
38 changes: 35 additions & 3 deletions lib/Doctrine/ODM/PHPCR/Query/Builder/BuilderConverterPhpcr.php
Expand Up @@ -132,7 +132,6 @@ protected function getPhpcrProperty($originalAlias, $odmField)
$this->validateAlias($originalAlias);
$meta = $this->aliasMetadata[$originalAlias];;


if ($meta->hasField($odmField)) {
$fieldMeta = $meta->getField($odmField);
} elseif ($meta->hasAssociation($odmField)) {
Expand Down Expand Up @@ -637,9 +636,21 @@ protected function walkConstraintNot(ConstraintNot $node)

protected function walkOperandDynamicField(OperandDynamicField $node)
{
$alias = $node->getAlias();
$field = $node->getField();

$classMeta = $this->aliasMetadata[$alias];
if ($classMeta->hasAssociation($field)) {
throw new InvalidArgumentException(sprintf(
'It is not possible to filter on association fields %s->%s',
$classMeta->name,
$field
));
}

list($alias, $phpcrProperty) = $this->getPhpcrProperty(
$node->getAlias(),
$node->getField()
$alias,
$field
);

$op = $this->qomf->propertyValue(
Expand Down Expand Up @@ -747,6 +758,27 @@ protected function walkOrderBy(OrderBy $node)

/** @var $ordering Ordering */
foreach ($orderings as $ordering) {
$node = $ordering->getChild();
$alias = $node->getAlias();
$field = $node->getField();

$classMeta = $this->aliasMetadata[$alias];
if ($field === $classMeta->nodename) {
throw new InvalidArgumentException(sprintf(
'It is not possible to order by a nodename property "%s->%s"',
$classMeta->name,
$field
));
}

if ($classMeta->hasAssociation($field)) {
throw new InvalidArgumentException(sprintf(
'It is not possible to order by association field "%s->%s"',
$classMeta->name,
$field
));
}

$dynOp = $ordering->getChildOfType(
QBConstants::NT_OPERAND_DYNAMIC
);
Expand Down

0 comments on commit 5fa4e2c

Please sign in to comment.