/** * @param QOM\OperandInterface $operand * * @return string * * @throws InvalidQueryException */ public function walkOperand(QOM\OperandInterface $operand) { if ($operand instanceof QOM\NodeNameInterface) { $selectorName = $operand->getSelectorName(); $alias = $this->getTableAlias($selectorName); return $this->platform->getConcatExpression("{$alias}.namespace", "(CASE {$alias}.namespace WHEN '' THEN '' ELSE ':' END)", "{$alias}.local_name"); } if ($operand instanceof QOM\NodeLocalNameInterface) { $selectorName = $operand->getSelectorName(); $alias = $this->getTableAlias($selectorName); return "{$alias}.local_name"; } if ($operand instanceof QOM\LowerCaseInterface) { return $this->platform->getLowerExpression($this->walkOperand($operand->getOperand())); } if ($operand instanceof QOM\UpperCaseInterface) { return $this->platform->getUpperExpression($this->walkOperand($operand->getOperand())); } if ($operand instanceof QOM\LiteralInterface) { return $this->conn->quote($this->getLiteralValue($operand)); } if ($operand instanceof QOM\PropertyValueInterface) { $alias = $this->getTableAlias($operand->getSelectorName() . '.' . $operand->getPropertyName()); $property = $operand->getPropertyName(); if ($property == "jcr:path") { return $alias . ".path"; } if ($property == "jcr:uuid") { return $alias . ".identifier"; } return $this->sqlXpathExtractValue($alias, $property); } if ($operand instanceof QOM\LengthInterface) { $alias = $this->getTableAlias($operand->getPropertyValue()->getSelectorName()); $property = $operand->getPropertyValue()->getPropertyName(); return $this->sqlXpathExtractValueAttribute($alias, $property, 'length'); } throw new InvalidQueryException("Dynamic operand " . get_class($operand) . " not yet supported."); }
/** * @param QOM\OperandInterface $operand */ private function walkOperand(QOM\OperandInterface $operand) { if ($operand instanceof QOM\NodeNameInterface) { return ZendSearchAdapter::IDX_NODENAME; } if ($operand instanceof QOM\NodeLocalNameInterface) { return ZendSearchAdapter::IDX_NODELOCALNAME; } if ($operand instanceof QOM\LiteralInterface) { return $this->escape($operand->getLiteralValue()); } if ($operand instanceof QOM\PropertyValueInterface) { return $this->escape($operand->getPropertyName()); } if ($operand instanceof QOM\LowerCaseInterface) { return $this->walkOperand($operand->getOperand()); } if ($operand instanceof QOM\UpperCaseInterface) { return $this->walkOperand($operand->getOperand()); } throw new InvalidQueryException("Dynamic operand " . get_class($operand) . " not yet supported."); }