vendor/jackalope/jackalope/src/Jackalope/Query/Query.php line 108

Open in your IDE?
  1. <?php
  2. namespace Jackalope\Query;
  3. use PHPCR\UnsupportedRepositoryOperationException;
  4. use PHPCR\RepositoryException;
  5. use PHPCR\ItemNotFoundException;
  6. use PHPCR\Query\QueryInterface;
  7. use Jackalope\ObjectManager;
  8. use Jackalope\FactoryInterface;
  9. /**
  10.  * Abstract Query implementation for the different Query-languages
  11.  *
  12.  * This can never be legally created if the transport does not implement
  13.  * QueryInterface.
  14.  *
  15.  * @license http://www.apache.org/licenses Apache License Version 2.0, January 2004
  16.  * @license http://opensource.org/licenses/MIT MIT License
  17.  *
  18.  * @api
  19.  */
  20. abstract class Query implements QueryInterface
  21. {
  22.     /**
  23.      * The factory to instantiate objects
  24.      *
  25.      * @var FactoryInterface
  26.      */
  27.     protected $factory;
  28.     /**
  29.      * The query statement
  30.      *
  31.      * @var string
  32.      */
  33.     protected $statement;
  34.     /**
  35.      * Limit for the query
  36.      *
  37.      * @var integer
  38.      */
  39.     protected $limit;
  40.     /**
  41.      * Offset to start results from
  42.      *
  43.      * @var integer
  44.      */
  45.     protected $offset;
  46.     /**
  47.      * The object manager to execute the query with.
  48.      *
  49.      * @var ObjectManager
  50.      */
  51.     protected $objectManager;
  52.     /**
  53.      * If this is a stored query, the path to the node that stores this query.
  54.      *
  55.      * @var string
  56.      */
  57.     protected $path;
  58.     /**
  59.      * Create a new query instance
  60.      *
  61.      * @param FactoryInterface $factory       the object factory
  62.      * @param string           $statement     The statement for this query
  63.      * @param ObjectManager    $objectManager (can be omitted if you do not want
  64.      *      to execute the query but just use it with a parser)
  65.      * @param string $path If this query is loaded from workspace with
  66.      *      QueryManager::getQuery(), path has to be provided here
  67.      */
  68.     public function __construct(FactoryInterface $factory$statementObjectManager $objectManager null$path null)
  69.     {
  70.         $this->factory $factory;
  71.         $this->statement $statement;
  72.         $this->objectManager $objectManager;
  73.         $this->path $path;
  74.     }
  75.     /**
  76.      * {@inheritDoc}
  77.      *
  78.      * @api
  79.      */
  80.     public function bindValue($varName$value)
  81.     {
  82.         throw new RepositoryException('Not Implemented...');
  83.     }
  84.     /**
  85.      * {@inheritDoc}
  86.      *
  87.      * @api
  88.      */
  89.     public function execute()
  90.     {
  91.         if (null === $this->objectManager) {
  92.             // if the ObjectManager was not injected in the header. this is only supposed to happen in the DBAL client.
  93.             throw new RepositoryException('Jackalope implementation error: This query was built for parsing only. (There is no ObjectManager to run the query against.)');
  94.         }
  95.         $transport $this->objectManager->getTransport();
  96.         $rawData $transport->query($this);
  97.         $queryResult $this->factory->get(QueryResult::class, [$rawData$this->objectManager]);
  98.         return $queryResult;
  99.     }
  100.     /**
  101.      * {@inheritDoc}
  102.      *
  103.      * @api
  104.      */
  105.     public function cancel()
  106.     {
  107.         return false;
  108.     }
  109.     /**
  110.      * {@inheritDoc}
  111.      *
  112.      * @api
  113.      */
  114.     public function getBindVariableNames()
  115.     {
  116.         throw new RepositoryException('Not Implemented...');
  117.     }
  118.     /**
  119.      * {@inheritDoc}
  120.      *
  121.      * @api
  122.      */
  123.     public function setLimit($limit)
  124.     {
  125.         $this->limit $limit;
  126.     }
  127.     /**
  128.      * Access the limit from the transport layer
  129.      *
  130.      * @return int the limit set with setLimit
  131.      */
  132.     public function getLimit()
  133.     {
  134.         return $this->limit;
  135.     }
  136.     /**
  137.      * {@inheritDoc}
  138.      *
  139.      * @api
  140.      */
  141.     public function setOffset($offset)
  142.     {
  143.         $this->offset $offset;
  144.     }
  145.     /**
  146.      * Access the offset from the transport layer
  147.      *
  148.      * @return int the offset set with setOffset
  149.      */
  150.     public function getOffset()
  151.     {
  152.         return $this->offset;
  153.     }
  154.     /**
  155.      * {@inheritDoc}
  156.      *
  157.      * @api
  158.      */
  159.     public function getStatement()
  160.     {
  161.         return $this->statement;
  162.     }
  163.     /**
  164.      * {@inheritDoc}
  165.      *
  166.      * @api
  167.      */
  168.     public function getStoredQueryPath()
  169.     {
  170.         if ($this->path === null) {
  171.             throw new ItemNotFoundException('Not a stored query');
  172.         }
  173.         return $this->path;
  174.     }
  175.     /**
  176.      * {@inheritDoc}
  177.      *
  178.      * @api
  179.      */
  180.     public function storeAsNode($absPath)
  181.     {
  182.         // when implementing this, use ->getStatement***() and not $this->statement
  183.         // so this works for the extending QueryObjectModel as well
  184.         throw new UnsupportedRepositoryOperationException('Not implemented: Write');
  185.     }
  186. }