vendor/doctrine/lib/Doctrine/ORM/AbstractQuery.php
author cavaliet
Wed, 11 Apr 2012 12:07:42 +0200
changeset 86 38ee151428dc
parent 0 7f95f8617b0b
permissions -rwxr-xr-x
remove original label column from all tags list
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * This software consists of voluntary contributions made by many individuals
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * and is licensed under the LGPL. For more information, see
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * <http://www.doctrine-project.org>.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
namespace Doctrine\ORM;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
use Doctrine\DBAL\Types\Type,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    Doctrine\ORM\Query\QueryException;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 * Base contract for ORM queries. Base class for Query and NativeQuery.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 * @link    www.doctrine-project.org
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
 * @since   2.0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
 * @version $Revision$
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
 * @author  Benjamin Eberlei <kontakt@beberlei.de>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
 * @author  Jonathan Wage <jonwage@gmail.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
 * @author  Roman Borschel <roman@code-factory.org>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
 * @author  Konsta Vesterinen <kvesteri@cc.hut.fi>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
abstract class AbstractQuery
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    /* Hydration mode constants */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
     * Hydrates an object graph. This is the default behavior.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    const HYDRATE_OBJECT = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
     * Hydrates an array graph.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
    const HYDRATE_ARRAY = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
     * Hydrates a flat, rectangular result set with scalar values.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    const HYDRATE_SCALAR = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
     * Hydrates a single scalar value.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    const HYDRATE_SINGLE_SCALAR = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
     * Very simple object hydrator (optimized for performance).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    const HYDRATE_SIMPLEOBJECT = 5;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
     * @var array The parameter map of this query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    protected $_params = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
     * @var array The parameter type map of this query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    protected $_paramTypes = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
     * @var ResultSetMapping The user-specified ResultSetMapping to use.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
    protected $_resultSetMapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
     * @var Doctrine\ORM\EntityManager The entity manager used by this query object.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    protected $_em;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
     * @var array The map of query hints.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    protected $_hints = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
     * @var integer The hydration mode.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    protected $_hydrationMode = self::HYDRATE_OBJECT;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
     * The locally set cache driver used for caching result sets of this query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
     * @var CacheDriver
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
    protected $_resultCacheDriver;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
     * Boolean flag for whether or not to cache the results of this query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
     * @var boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    protected $_useResultCache;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
     * @var string The id to store the result cache entry under.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
    protected $_resultCacheId;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
     * @var boolean Boolean value that indicates whether or not expire the result cache.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
    protected $_expireResultCache = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
     * @var int Result Cache lifetime.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
    protected $_resultCacheTTL;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
     * Initializes a new instance of a class derived from <tt>AbstractQuery</tt>.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
     * @param Doctrine\ORM\EntityManager $entityManager
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
    public function __construct(EntityManager $em)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
        $this->_em = $em;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
     * Retrieves the associated EntityManager of this Query instance.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
     * @return Doctrine\ORM\EntityManager
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    public function getEntityManager()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
        return $this->_em;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
     * Frees the resources used by the query object.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
     * Resets Parameters, Parameter Types and Query Hints.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
    public function free()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
        $this->_params = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
        $this->_paramTypes = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
        $this->_hints = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
     * Get all defined parameters.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
     * @return array The defined query parameters.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
    public function getParameters()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
        return $this->_params;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
     * Gets a query parameter.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
     * @param mixed $key The key (index or name) of the bound parameter.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
     * @return mixed The value of the bound parameter.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
    public function getParameter($key)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
        return isset($this->_params[$key]) ? $this->_params[$key] : null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
     * Gets the SQL query that corresponds to this query object.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
     * The returned SQL syntax depends on the connection driver that is used
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
     * by this query object at the time of this method call.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
     * @return string SQL query
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
    abstract public function getSQL();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
     * Sets a query parameter.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
     * @param string|integer $key The parameter position or name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
     * @param mixed $value The parameter value.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
     * @param string $type The parameter type. If specified, the given value will be run through
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
     *                     the type conversion of this type. This is usually not needed for
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
     *                     strings and numeric types.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
     * @return Doctrine\ORM\AbstractQuery This query instance.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
    public function setParameter($key, $value, $type = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        if ($type === null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
            $type = Query\ParameterTypeInferer::inferType($value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
        $this->_paramTypes[$key] = $type;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
        $this->_params[$key] = $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
     * Sets a collection of query parameters.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
     * @param array $params
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
     * @param array $types
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
     * @return Doctrine\ORM\AbstractQuery This query instance.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
    public function setParameters(array $params, array $types = array())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
        foreach ($params as $key => $value) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
            if (isset($types[$key])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
                $this->setParameter($key, $value, $types[$key]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
                $this->setParameter($key, $value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
     * Sets the ResultSetMapping that should be used for hydration.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
     * @param ResultSetMapping $rsm
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
     * @return Doctrine\ORM\AbstractQuery
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
    public function setResultSetMapping(Query\ResultSetMapping $rsm)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
        $this->_resultSetMapping = $rsm;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
     * Defines a cache driver to be used for caching result sets.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
     * @param Doctrine\Common\Cache\Cache $driver Cache driver
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
     * @return Doctrine\ORM\AbstractQuery
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
    public function setResultCacheDriver($resultCacheDriver = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
        if ($resultCacheDriver !== null && ! ($resultCacheDriver instanceof \Doctrine\Common\Cache\Cache)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
            throw ORMException::invalidResultCacheDriver();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
        $this->_resultCacheDriver = $resultCacheDriver;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
        if ($resultCacheDriver) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
            $this->_useResultCache = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
     * Returns the cache driver used for caching result sets.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
     * @return Doctrine\Common\Cache\Cache Cache driver
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
    public function getResultCacheDriver()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
        if ($this->_resultCacheDriver) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
            return $this->_resultCacheDriver;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
            return $this->_em->getConfiguration()->getResultCacheImpl();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
     * Set whether or not to cache the results of this query and if so, for
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
     * how long and which ID to use for the cache entry.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
     * @param boolean $bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
     * @param integer $timeToLive
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
     * @param string $resultCacheId
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
     * @return Doctrine\ORM\AbstractQuery This query instance.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
    public function useResultCache($bool, $timeToLive = null, $resultCacheId = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
        $this->_useResultCache = $bool;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
        if ($timeToLive) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
            $this->setResultCacheLifetime($timeToLive);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
        if ($resultCacheId) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
            $this->_resultCacheId = $resultCacheId;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
     * Defines how long the result cache will be active before expire.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
     * @param integer $timeToLive How long the cache entry is valid.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
     * @return Doctrine\ORM\AbstractQuery This query instance.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
    public function setResultCacheLifetime($timeToLive)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
        if ($timeToLive !== null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
            $timeToLive = (int) $timeToLive;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
        $this->_resultCacheTTL = $timeToLive;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
     * Retrieves the lifetime of resultset cache.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
     * @return integer
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
    public function getResultCacheLifetime()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
        return $this->_resultCacheTTL;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
     * Defines if the result cache is active or not.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
     * @param boolean $expire Whether or not to force resultset cache expiration.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
     * @return Doctrine\ORM\AbstractQuery This query instance.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
    public function expireResultCache($expire = true)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
        $this->_expireResultCache = $expire;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
     * Retrieves if the resultset cache is active or not.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
    public function getExpireResultCache()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
        return $this->_expireResultCache;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
     * Change the default fetch mode of an association for this query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
     * $fetchMode can be one of ClassMetadata::FETCH_EAGER or ClassMetadata::FETCH_LAZY
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
     * @param  string $class
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
     * @param  string $assocName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
     * @param  int $fetchMode
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
     * @return AbstractQuery
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
    public function setFetchMode($class, $assocName, $fetchMode)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
        if ($fetchMode !== Mapping\ClassMetadata::FETCH_EAGER) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
            $fetchMode = Mapping\ClassMetadata::FETCH_LAZY;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
        $this->_hints['fetchMode'][$class][$assocName] = $fetchMode;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
     * Defines the processing mode to be used during hydration / result set transformation.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
     * @param integer $hydrationMode Doctrine processing mode to be used during hydration process.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
     *                               One of the Query::HYDRATE_* constants.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
     * @return Doctrine\ORM\AbstractQuery This query instance.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
    public function setHydrationMode($hydrationMode)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
        $this->_hydrationMode = $hydrationMode;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
     * Gets the hydration mode currently used by the query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
     * @return integer
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
    public function getHydrationMode()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
        return $this->_hydrationMode;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
     * Gets the list of results for the query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
     * Alias for execute(array(), $hydrationMode = HYDRATE_OBJECT).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
    public function getResult($hydrationMode = self::HYDRATE_OBJECT)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
        return $this->execute(array(), $hydrationMode);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
     * Gets the array of results for the query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
     * Alias for execute(array(), HYDRATE_ARRAY).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
    public function getArrayResult()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
        return $this->execute(array(), self::HYDRATE_ARRAY);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
     * Gets the scalar results for the query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
     * Alias for execute(array(), HYDRATE_SCALAR).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
    public function getScalarResult()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
        return $this->execute(array(), self::HYDRATE_SCALAR);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
     * Get exactly one result or null.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
     * @throws NonUniqueResultException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
     * @param int $hydrationMode
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
     * @return mixed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
    public function getOneOrNullResult($hydrationMode = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
        $result = $this->execute(array(), $hydrationMode);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
        if ($this->_hydrationMode !== self::HYDRATE_SINGLE_SCALAR && ! $result) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
            return null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
        if (is_array($result)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
            if (count($result) > 1) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
                throw new NonUniqueResultException;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
            return array_shift($result);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
        return $result;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
     * Gets the single result of the query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
     * Enforces the presence as well as the uniqueness of the result.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
     * If the result is not unique, a NonUniqueResultException is thrown.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
     * If there is no result, a NoResultException is thrown.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
     * @param integer $hydrationMode
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
     * @return mixed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
     * @throws NonUniqueResultException If the query result is not unique.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
     * @throws NoResultException If the query returned no result.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
    public function getSingleResult($hydrationMode = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
        $result = $this->execute(array(), $hydrationMode);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
        if ($this->_hydrationMode !== self::HYDRATE_SINGLE_SCALAR && ! $result) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
            throw new NoResultException;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
        if (is_array($result)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
            if (count($result) > 1) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
                throw new NonUniqueResultException;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
            return array_shift($result);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
        return $result;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
     * Gets the single scalar result of the query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
     * Alias for getSingleResult(HYDRATE_SINGLE_SCALAR).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
     * @return mixed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
     * @throws QueryException If the query result is not unique.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
    public function getSingleScalarResult()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
        return $this->getSingleResult(self::HYDRATE_SINGLE_SCALAR);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
     * Sets a query hint. If the hint name is not recognized, it is silently ignored.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
     * @param string $name The name of the hint.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
     * @param mixed $value The value of the hint.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
     * @return Doctrine\ORM\AbstractQuery
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
    public function setHint($name, $value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
        $this->_hints[$name] = $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
     * Gets the value of a query hint. If the hint name is not recognized, FALSE is returned.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
     * @param string $name The name of the hint.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
     * @return mixed The value of the hint or FALSE, if the hint name is not recognized.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
    public function getHint($name)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
        return isset($this->_hints[$name]) ? $this->_hints[$name] : false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
     * Return the key value map of query hints that are currently set.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
    public function getHints()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
        return $this->_hints;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
     * Executes the query and returns an IterableResult that can be used to incrementally
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
     * iterate over the result.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
     * @param array $params The query parameters.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
     * @param integer $hydrationMode The hydration mode to use.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
     * @return IterableResult
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
    public function iterate(array $params = array(), $hydrationMode = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
        if ($hydrationMode !== null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
            $this->setHydrationMode($hydrationMode);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
        if ($params) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
            $this->setParameters($params);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
        $stmt = $this->_doExecute();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
        return $this->_em->newHydrator($this->_hydrationMode)->iterate(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
            $stmt, $this->_resultSetMapping, $this->_hints
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
     * Executes the query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
     * @param array $params Any additional query parameters.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
     * @param integer $hydrationMode Processing mode to be used during the hydration process.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
     * @return mixed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
    public function execute($params = array(), $hydrationMode = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
        if ($hydrationMode !== null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
            $this->setHydrationMode($hydrationMode);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
        if ($params) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
            $this->setParameters($params);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
        // Check result cache
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
        if ($this->_useResultCache && $cacheDriver = $this->getResultCacheDriver()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
            list($key, $hash) = $this->getResultCacheId();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
            $cached = $this->_expireResultCache ? false : $cacheDriver->fetch($hash);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
            if ($cached === false || !isset($cached[$key])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
                // Cache miss.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
                $stmt = $this->_doExecute();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
                $result = $this->_em->getHydrator($this->_hydrationMode)->hydrateAll(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
                    $stmt, $this->_resultSetMapping, $this->_hints
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
                );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
                $cacheDriver->save($hash, array($key => $result), $this->_resultCacheTTL);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
                return $result;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
                // Cache hit.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
                return $cached[$key];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
        $stmt = $this->_doExecute();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
        if (is_numeric($stmt)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
            return $stmt;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
        return $this->_em->getHydrator($this->_hydrationMode)->hydrateAll(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
                $stmt, $this->_resultSetMapping, $this->_hints
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
                );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
     * Set the result cache id to use to store the result set cache entry.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
     * If this is not explicitely set by the developer then a hash is automatically
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
     * generated for you.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
     * @param string $id
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
     * @return Doctrine\ORM\AbstractQuery This query instance.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
    public function setResultCacheId($id)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
        $this->_resultCacheId = $id;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
        return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
     * Get the result cache id to use to store the result set cache entry.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
     * Will return the configured id if it exists otherwise a hash will be
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
     * automatically generated for you.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
     * @return array ($key, $hash)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
    protected function getResultCacheId()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
        if ($this->_resultCacheId) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
            return array($this->_resultCacheId, $this->_resultCacheId);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
            $params = $this->_params;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
            foreach ($params AS $key => $value) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
                if (is_object($value) && $this->_em->getMetadataFactory()->hasMetadataFor(get_class($value))) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
                    if ($this->_em->getUnitOfWork()->getEntityState($value) == UnitOfWork::STATE_MANAGED) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
                        $idValues = $this->_em->getUnitOfWork()->getEntityIdentifier($value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
                    } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
                        $class = $this->_em->getClassMetadata(get_class($value));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
                        $idValues = $class->getIdentifierValues($value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
                    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
                    $params[$key] = $idValues;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
                } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
                    $params[$key] = $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
            $sql = $this->getSql();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
            ksort($this->_hints);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
            $key = implode(";", (array)$sql) . var_export($params, true) .
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
                var_export($this->_hints, true)."&hydrationMode=".$this->_hydrationMode;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
            return array($key, md5($key));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
     * Executes the query and returns a the resulting Statement object.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
     * @return Doctrine\DBAL\Driver\Statement The executed database statement that holds the results.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
    abstract protected function _doExecute();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
     * Cleanup Query resource when clone is called.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
    public function __clone()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
        $this->_params = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
        $this->_paramTypes = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
        $this->_hints = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
}