<?phpnamespace Jackalope\Query\QOM;use InvalidArgumentException;use PHPCR\Query\QOM\QueryObjectModelInterface;use PHPCR\Query\QOM\SourceInterface;use PHPCR\Query\QOM\ConstraintInterface;use PHPCR\Query\QOM\OrderingInterface;use PHPCR\Query\QOM\ColumnInterface;use PHPCR\Util\QOM\Sql2Generator;use PHPCR\Util\QOM\QomToSql2QueryConverter;use Jackalope\ObjectManager;use Jackalope\Query\SqlQuery;use Jackalope\FactoryInterface;use Jackalope\NotImplementedException;use PHPCR\Util\ValueConverter;/** * {@inheritDoc} * * We extend SqlQuery to have features like limit and offset. * * @license http://www.apache.org/licenses Apache License Version 2.0, January 2004 * @license http://opensource.org/licenses/MIT MIT License * * @api */class QueryObjectModel extends SqlQuery implements QueryObjectModelInterface{ /** * @var SourceInterface */ protected $source; /** * @var ConstraintInterface */ protected $constraint; /** * @var array */ protected $orderings; /** * @var array */ protected $columns; /** * Constructor * * @param FactoryInterface $factory the object factory * @param ObjectManager $objectManager (can be omitted if you do not want * to execute the query but just use it with a parser) * @param SourceInterface $source * @param ConstraintInterface $constraint * @param array $orderings * @param array $columns * * @throws InvalidArgumentException */ public function __construct( FactoryInterface $factory, ObjectManager $objectManager = null, SourceInterface $source, ConstraintInterface $constraint = null, array $orderings, array $columns ) { foreach ($orderings as $o) { if (! $o instanceof OrderingInterface) { throw new InvalidArgumentException("Not a valid ordering: $o"); } } foreach ($columns as $c) { if (! $c instanceof ColumnInterface) { throw new InvalidArgumentException("Not a valid column: $c"); } } parent::__construct($factory, '', $objectManager); $this->source = $source; $this->constraint = $constraint; $this->orderings = $orderings; $this->columns = $columns; } /** * {@inheritDoc} * * @api */ public function getSource() { return $this->source; } /** * {@inheritDoc} * * @api */ public function getConstraint() { return $this->constraint; } /** * {@inheritDoc} * * @api */ public function getOrderings() { return $this->orderings; } /** * {@inheritDoc} * * @api */ public function getColumns() { return $this->columns; } /** * {@inheritDoc} * * @api */ public function getBindVariableNames() { // TODO: can we inherit from SqlQuery? throw new NotImplementedException(); } /** * {@inheritDoc} * * @api */ public function getStatement() { $valueConverter = $this->factory->get(ValueConverter::class); $converter = new QomToSql2QueryConverter(new Sql2Generator($valueConverter)); return $converter->convert($this); } /** * {@inheritDoc} * * @api */ public function getLanguage() { return self::JCR_SQL2; }}