Removed draft directory from trunk; DQL parser rewrite continues in its own branch.
This commit is contained in:
parent
3a0f99f637
commit
41cf13e143
File diff suppressed because it is too large
Load Diff
@ -1,226 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* An LL(k) parser for the context-free grammar of Doctrine Query Language.
|
||||
* Parses a DQL query, reports any errors in it, and generates the corresponding
|
||||
* SQL.
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Parser
|
||||
{
|
||||
/**
|
||||
* The minimum number of tokens read after last detected error before
|
||||
* another error can be reported.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
const MIN_ERROR_DISTANCE = 2;
|
||||
|
||||
/**
|
||||
* A scanner object.
|
||||
*
|
||||
* @var Doctrine_Query_Scanner
|
||||
*/
|
||||
protected $_scanner;
|
||||
|
||||
/**
|
||||
* An array of production objects with their names as keys.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_productions = array();
|
||||
|
||||
/**
|
||||
* The next token in the query string.
|
||||
*
|
||||
* @var Doctrine_Query_Token
|
||||
*/
|
||||
public $lookahead;
|
||||
|
||||
/**
|
||||
* Array containing syntax and semantical errors detected in the query
|
||||
* string during parsing process.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_errors = array();
|
||||
|
||||
/**
|
||||
* The number of tokens read since last error in the input string
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_errorDistance = self::MIN_ERROR_DISTANCE;
|
||||
|
||||
/**
|
||||
* A query printer object used to print a parse tree from the input string
|
||||
* for debugging purposes.
|
||||
*
|
||||
* @var Doctrine_Query_Printer
|
||||
*/
|
||||
protected $_printer;
|
||||
|
||||
/**
|
||||
* The connection object used by this query.
|
||||
*
|
||||
* @var Doctrine_Connection
|
||||
*/
|
||||
protected $_conn;
|
||||
|
||||
/**
|
||||
* Creates a new query parser object.
|
||||
*
|
||||
* @param string $input query string to be parsed
|
||||
* @param Doctrine_Connection The connection object the query will use.
|
||||
*/
|
||||
public function __construct($input, Doctrine_Connection $conn = null)
|
||||
{
|
||||
$this->_scanner = new Doctrine_Query_Scanner($input);
|
||||
$this->_printer = new Doctrine_Query_Printer(true);
|
||||
|
||||
if ($conn === null) {
|
||||
$conn = Doctrine_Manager::getInstance()->getCurrentConnection();
|
||||
}
|
||||
|
||||
$this->_conn = $conn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the connection object used by the query.
|
||||
*
|
||||
* @return Doctrine_Connection
|
||||
*/
|
||||
public function getConnection()
|
||||
{
|
||||
return $this->_conn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a production object with the given name.
|
||||
*
|
||||
* @param string $name production name
|
||||
* @return Doctrine_Query_Production
|
||||
*/
|
||||
public function getProduction($name)
|
||||
{
|
||||
if ( ! isset($this->_productions[$name])) {
|
||||
$class = 'Doctrine_Query_Production_' . $name;
|
||||
$this->_productions[$name] = new $class($this);
|
||||
}
|
||||
|
||||
return $this->_productions[$name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to match the given token with the current lookahead token.
|
||||
*
|
||||
* If they match, updates the lookahead token; otherwise raises a syntax
|
||||
* error.
|
||||
*
|
||||
* @param int|string token type or value
|
||||
*/
|
||||
public function match($token)
|
||||
{
|
||||
if (is_string($token)) {
|
||||
$isMatch = ($this->lookahead['value'] === $token);
|
||||
} else {
|
||||
$isMatch = ($this->lookahead['type'] === $token);
|
||||
}
|
||||
|
||||
if ($isMatch) {
|
||||
$this->_printer->println($this->lookahead['value']);
|
||||
$this->lookahead = $this->_scanner->next();
|
||||
$this->_errorDistance++;
|
||||
} else {
|
||||
$this->logError();
|
||||
}
|
||||
}
|
||||
|
||||
public function logError($message = '')
|
||||
{
|
||||
if ($message === '') {
|
||||
if ($this->lookahead === null) {
|
||||
$message = 'Unexpected end of string.';
|
||||
} else {
|
||||
$message = 'Unexpected "' . $this->lookahead['value'] . '"';
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->_errorDistance >= self::MIN_ERROR_DISTANCE) {
|
||||
if ($this->lookahead !== null) {
|
||||
$message .= ' at position ' . $this->lookahead['position'];
|
||||
}
|
||||
$this->_errors[] = $message;
|
||||
}
|
||||
|
||||
$this->_errorDistance = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the scanner object associated with this object.
|
||||
*
|
||||
* @return Doctrine_Query_Scanner
|
||||
*/
|
||||
public function getScanner()
|
||||
{
|
||||
return $this->_scanner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the parse tree printer object associated with this object.
|
||||
*
|
||||
* @return Doctrine_Query_Printer
|
||||
*/
|
||||
public function getPrinter()
|
||||
{
|
||||
return $this->_printer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a query string.
|
||||
*
|
||||
* @throws Doctrine_Query_Parser_Exception if errors were detected in the query string
|
||||
*/
|
||||
public function parse()
|
||||
{
|
||||
$this->lookahead = $this->_scanner->next();
|
||||
|
||||
$this->getProduction('QueryLanguage')->execute();
|
||||
|
||||
if ($this->lookahead !== null) {
|
||||
$this->logError('End of string expected');
|
||||
}
|
||||
|
||||
if (count($this->_errors)) {
|
||||
$msg = 'Errors were detected during the query parsing ('
|
||||
. implode('; ', $this->_errors) . ').';
|
||||
throw new Doctrine_Query_Parser_Exception($msg);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Doctrine_Query_Parser_Exception
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Parser_Exception extends Doctrine_Exception
|
||||
{
|
||||
}
|
@ -1,95 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* A parse tree printer for Doctrine Query Language parser.
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Printer
|
||||
{
|
||||
/**
|
||||
* Current indentation level
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $_indent = 0;
|
||||
|
||||
/**
|
||||
* Defines whether parse tree is printed (default, false) or not (true).
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $_silent;
|
||||
|
||||
/**
|
||||
* Constructs a new parse tree printer.
|
||||
*
|
||||
* @param bool $silent Parse tree will not be printed if true.
|
||||
*/
|
||||
public function __construct($silent = false)
|
||||
{
|
||||
$this->_silent = $silent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints an opening parenthesis followed by production name and increases
|
||||
* indentation level by one.
|
||||
*
|
||||
* This method is called before executing a production.
|
||||
*
|
||||
* @param string $name production name
|
||||
*/
|
||||
public function startProduction($name)
|
||||
{
|
||||
$this->println('(' . $name);
|
||||
$this->_indent++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decreases indentation level by one and prints a closing parenthesis.
|
||||
*
|
||||
* This method is called after executing a production.
|
||||
*/
|
||||
public function endProduction()
|
||||
{
|
||||
$this->_indent--;
|
||||
$this->println(')');
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints text indented with spaces depending on current indentation level.
|
||||
*
|
||||
* @param string $str text
|
||||
*/
|
||||
public function println($str)
|
||||
{
|
||||
if ( ! $this->_silent) {
|
||||
echo str_repeat(' ', $this->_indent), $str, "\n";
|
||||
}
|
||||
}
|
||||
}
|
@ -1,98 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* An abstract base class for the productions of the Doctrine Query Language
|
||||
* context-free grammar.
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
abstract class Doctrine_Query_Production
|
||||
{
|
||||
/**
|
||||
* a parser object
|
||||
*
|
||||
* @var Doctrine_Query_Parser
|
||||
*/
|
||||
protected $_parser;
|
||||
|
||||
/**
|
||||
* Creates a new production object.
|
||||
*
|
||||
* @param Doctrine_Query_Parser $parser a parser object
|
||||
*/
|
||||
public function __construct(Doctrine_Query_Parser $parser)
|
||||
{
|
||||
$this->_parser = $parser;
|
||||
}
|
||||
|
||||
protected function _isNextToken($token)
|
||||
{
|
||||
$la = $this->_parser->lookahead;
|
||||
return ($la['type'] === $token || $la['value'] === $token);
|
||||
}
|
||||
|
||||
protected function _isFunction()
|
||||
{
|
||||
$la = $this->_parser->lookahead;
|
||||
$next = $this->_parser->getScanner()->peek();
|
||||
return ($la['type'] === Doctrine_Query_Token::T_IDENTIFIER && $next['value'] === '(');
|
||||
}
|
||||
|
||||
protected function _isSubselect()
|
||||
{
|
||||
$la = $this->_parser->lookahead;
|
||||
$next = $this->_parser->getScanner()->peek();
|
||||
return ($la['value'] === '(' && $next['type'] === Doctrine_Query_Token::T_SELECT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes a production with specified name and parameters.
|
||||
*
|
||||
* @param string $name production name
|
||||
* @param array $params an associative array containing parameter names and
|
||||
* their values
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($method, $args)
|
||||
{
|
||||
$this->_parser->getPrinter()->startProduction($method);
|
||||
$retval = $this->_parser->getProduction($method)->execute($args);
|
||||
$this->_parser->getPrinter()->endProduction();
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes this production using the specified parameters.
|
||||
*
|
||||
* @param array $params an associative array containing parameter names and
|
||||
* their values
|
||||
* @return mixed
|
||||
*/
|
||||
abstract public function execute(array $params = array());
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* AggregateExpression =
|
||||
* ("AVG" | "MAX" | "MIN" | "SUM" | "COUNT") "(" ["DISTINCT"] Expression ")"
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_AggregateExpression extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$token = $this->_parser->lookahead;
|
||||
|
||||
switch ($token['type']) {
|
||||
case Doctrine_Query_Token::T_AVG:
|
||||
case Doctrine_Query_Token::T_MAX:
|
||||
case Doctrine_Query_Token::T_MIN:
|
||||
case Doctrine_Query_Token::T_SUM:
|
||||
case Doctrine_Query_Token::T_COUNT:
|
||||
$this->_parser->match($token['type']);
|
||||
break;
|
||||
|
||||
default:
|
||||
$this->_parser->logError();
|
||||
}
|
||||
|
||||
$this->_parser->match('(');
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_DISTINCT)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_DISTINCT);
|
||||
}
|
||||
|
||||
$this->Expression();
|
||||
|
||||
$this->_parser->match(')');
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Atom = string | integer | float | input_parameter
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_Atom extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
switch ($this->_parser->lookahead['type']) {
|
||||
case Doctrine_Query_Token::T_STRING:
|
||||
$this->_parser->match(Doctrine_Query_Token::T_STRING);
|
||||
break;
|
||||
case Doctrine_Query_Token::T_INTEGER:
|
||||
$this->_parser->match(Doctrine_Query_Token::T_INTEGER);
|
||||
break;
|
||||
case Doctrine_Query_Token::T_FLOAT:
|
||||
$this->_parser->match(Doctrine_Query_Token::T_FLOAT);
|
||||
break;
|
||||
case Doctrine_Query_Token::T_INPUT_PARAMETER:
|
||||
$this->_parser->match(Doctrine_Query_Token::T_INPUT_PARAMETER);
|
||||
break;
|
||||
default:
|
||||
$this->_parser->syntaxError();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* BetweenExpression = ["NOT"] "BETWEEN" Expression "AND" Expression
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_BetweenExpression extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_NOT)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_NOT);
|
||||
}
|
||||
|
||||
$this->_parser->match(Doctrine_Query_Token::T_BETWEEN);
|
||||
$this->Expression();
|
||||
$this->_parser->match(Doctrine_Query_Token::T_AND);
|
||||
$this->Expression();
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ComparisonExpression = ComparisonOperator ( QuantifiedExpression | Expression | "(" Subselect ")" )
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_ComparisonExpression extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->ComparisonOperator();
|
||||
|
||||
if ($this->_isSubselect()) {
|
||||
$this->_parser->match('(');
|
||||
$this->Subselect();
|
||||
$this->_parser->match(')');
|
||||
} else {
|
||||
switch ($this->_parser->lookahead['type']) {
|
||||
case Doctrine_Query_Token::T_ALL:
|
||||
case Doctrine_Query_Token::T_ANY:
|
||||
case Doctrine_Query_Token::T_SOME:
|
||||
$this->QuantifiedExpression();
|
||||
break;
|
||||
default:
|
||||
$this->Expression();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ComparisonOperator = "=" | "<" | "<=" | "<>" | ">" | ">="
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_ComparisonOperator extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
switch ($this->_parser->lookahead['value']) {
|
||||
case '=':
|
||||
$this->_parser->match('=');
|
||||
break;
|
||||
case '<':
|
||||
$this->_parser->match('<');
|
||||
if ($this->_isNextToken('=')) {
|
||||
$this->_parser->match('=');
|
||||
} elseif ($this->_isNextToken('>')) {
|
||||
$this->_parser->match('>');
|
||||
}
|
||||
break;
|
||||
case '>':
|
||||
$this->_parser->match('>');
|
||||
if ($this->_isNextToken('=')) {
|
||||
$this->_parser->match('=');
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$this->_parser->logError();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ConditionalExpression = ConditionalTerm {"OR" ConditionalTerm}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_ConditionalExpression extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->ConditionalTerm();
|
||||
|
||||
while ($this->_isNextToken(Doctrine_Query_Token::T_OR)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_OR);
|
||||
$this->ConditionalTerm();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ConditionalFactor = ["NOT"] ConditionalPrimary
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_ConditionalFactor extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_NOT)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_NOT);
|
||||
}
|
||||
|
||||
$this->ConditionalPrimary();
|
||||
}
|
||||
}
|
@ -1,88 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ConditionalPrimary = SimpleConditionalExpression | "(" ConditionalExpression ")"
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_ConditionalPrimary extends Doctrine_Query_Production
|
||||
{
|
||||
private function _isConditionalExpression()
|
||||
{
|
||||
$token = $this->_parser->lookahead;
|
||||
$parenthesis = 0;
|
||||
|
||||
if ($token['value'] === '(') {
|
||||
$parenthesis++;
|
||||
}
|
||||
|
||||
while ($parenthesis > 0) {
|
||||
$token = $this->_parser->getScanner()->peek();
|
||||
|
||||
if ($token['value'] === '(') {
|
||||
$parenthesis++;
|
||||
} elseif ($token['value'] === ')') {
|
||||
$parenthesis--;
|
||||
} else {
|
||||
switch ($token['type']) {
|
||||
case Doctrine_Query_Token::T_NOT:
|
||||
case Doctrine_Query_Token::T_AND:
|
||||
case Doctrine_Query_Token::T_OR:
|
||||
case Doctrine_Query_Token::T_BETWEEN:
|
||||
case Doctrine_Query_Token::T_LIKE:
|
||||
case Doctrine_Query_Token::T_IN:
|
||||
case Doctrine_Query_Token::T_IS:
|
||||
case Doctrine_Query_Token::T_EXISTS:
|
||||
return true;
|
||||
|
||||
case Doctrine_Query_Token::T_NONE:
|
||||
switch ($token['value']) {
|
||||
case '=':
|
||||
case '<':
|
||||
case '>':
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
if ($this->_isConditionalExpression()) {
|
||||
$this->_parser->match('(');
|
||||
$this->ConditionalExpression();
|
||||
$this->_parser->match(')');
|
||||
} else {
|
||||
$this->SimpleConditionalExpression();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ConditionalTerm = ConditionalFactor {"AND" ConditionalFactor}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_ConditionalTerm extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->ConditionalFactor();
|
||||
|
||||
while ($this->_isNextToken(Doctrine_Query_Token::T_AND)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_AND);
|
||||
$this->ConditionalFactor();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DeleteClause = "DELETE" "FROM" RangeVariableDeclaration
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_DeleteClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_DELETE);
|
||||
$this->_parser->match(Doctrine_Query_Token::T_FROM);
|
||||
$this->RangeVariableDeclaration();
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DeleteStatement = DeleteClause [WhereClause] [OrderByClause] [LimitClause] [OffsetClause]
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_DeleteStatement extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->DeleteClause();
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_WHERE)) {
|
||||
$this->WhereClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_ORDER)) {
|
||||
$this->OrderByClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_LIMIT)) {
|
||||
$this->LimitClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_OFFSET)) {
|
||||
$this->OffsetClause();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ExistsExpression = "EXISTS" "(" Subselect ")"
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_ExistsExpression extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_EXISTS);
|
||||
|
||||
$this->_parser->match('(');
|
||||
$this->Subselect();
|
||||
$this->_parser->match(')');
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Expression = Term {("+" | "-") Term}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_Expression extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->Term();
|
||||
|
||||
while ($this->_isNextToken('+') || $this->_isNextToken('-')) {
|
||||
if ($this->_isNextToken('+')) {
|
||||
$this->_parser->match('+');
|
||||
} else{
|
||||
$this->_parser->match('-');
|
||||
}
|
||||
$this->Term();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Factor = [("+" | "-")] Primary
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_Factor extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
if ($this->_isNextToken('+')) {
|
||||
$this->_parser->match('+');
|
||||
} elseif ($this->_isNextToken('-')) {
|
||||
$this->_parser->match('-');
|
||||
}
|
||||
|
||||
$this->Primary();
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* FromClause = "FROM" IdentificationVariableDeclaration {"," IdentificationVariableDeclaration}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_FromClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_FROM);
|
||||
|
||||
$this->IdentificationVariableDeclaration();
|
||||
|
||||
while ($this->_isNextToken(',')) {
|
||||
$this->_parser->match(',');
|
||||
$this->IdentificationVariableDeclaration();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Function = identifier "(" [Expression {"," Expression}] ")"
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_Function extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_IDENTIFIER);
|
||||
|
||||
$this->_parser->match('(');
|
||||
|
||||
if ( ! $this->_isNextToken(')')) {
|
||||
$this->Expression();
|
||||
while ($this->_isNextToken(',')) {
|
||||
$this->_parser->match(',');
|
||||
$this->Expression();
|
||||
}
|
||||
}
|
||||
|
||||
$this->_parser->match(')');
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* GroupByClause = "GROUP" "BY" GroupByItem {"," GroupByItem}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_GroupByClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_GROUP);
|
||||
$this->_parser->match(Doctrine_Query_Token::T_BY);
|
||||
|
||||
$this->GroupByItem();
|
||||
|
||||
while ($this->_isNextToken(',')) {
|
||||
$this->_parser->match(',');
|
||||
$this->GroupByItem();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* OrderByItem = PathExpression
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_GroupByItem extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->PathExpression();
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* HavingClause = "HAVING" ConditionalExpression
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_HavingClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_HAVING);
|
||||
|
||||
$this->ConditionalExpression();
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* IdentificationVariable = identifier
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_IdentificationVariable extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$token = $this->_parser->lookahead;
|
||||
|
||||
$this->_parser->match(Doctrine_Query_Token::T_IDENTIFIER);
|
||||
|
||||
/*
|
||||
if ( ! isValidIdentificationVariable($token['value'])) {
|
||||
$this->error('"' . $name . '" is not a identification variable.');
|
||||
}
|
||||
*/
|
||||
return $token;
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* IdentificationVariableDeclaration = RangeVariableDeclaration {Join}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_IdentificationVariableDeclaration extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$rangeVarDecl = $this->RangeVariableDeclaration();
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_INDEX)) {
|
||||
$this->IndexBy();
|
||||
}
|
||||
|
||||
while ($this->_isNextToken(Doctrine_Query_Token::T_LEFT) ||
|
||||
$this->_isNextToken(Doctrine_Query_Token::T_INNER) ||
|
||||
$this->_isNextToken(Doctrine_Query_Token::T_JOIN)) {
|
||||
|
||||
$this->Join();
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_INDEX)) {
|
||||
$this->IndexBy();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* InExpression = ["NOT"] "IN" "(" (Atom {"," Atom} | Subselect) ")"
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_InExpression extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_NOT)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_NOT);
|
||||
}
|
||||
|
||||
$this->_parser->match(Doctrine_Query_Token::T_IN);
|
||||
|
||||
$this->_parser->match('(');
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_SELECT)) {
|
||||
$this->Subselect();
|
||||
} else {
|
||||
$this->Atom();
|
||||
while ($this->_isNextToken(',')) {
|
||||
$this->_parser->match(',');
|
||||
$this->Atom();
|
||||
}
|
||||
}
|
||||
|
||||
$this->_parser->match(')');
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* IndexBy = "INDEX" "BY" PathExpression
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_IndexBy extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_INDEX);
|
||||
$this->_parser->match(Doctrine_Query_Token::T_BY);
|
||||
$this->PathExpression();
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Join = ["LEFT" | "INNER"] "JOIN" RangeVariableDeclaration [("ON" | "WITH") ConditionalExpression]
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_Join extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_LEFT)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_LEFT);
|
||||
} elseif ($this->_isNextToken(Doctrine_Query_Token::T_INNER)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_INNER);
|
||||
}
|
||||
|
||||
$this->_parser->match(Doctrine_Query_Token::T_JOIN);
|
||||
|
||||
$this->RangeVariableDeclaration();
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_ON)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_ON);
|
||||
$this->ConditionalExpression();
|
||||
} elseif ($this->_isNextToken(Doctrine_Query_Token::T_WITH)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_WITH);
|
||||
$this->ConditionalExpression();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* LimitClause = "LIMIT" integer
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_LimitClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_LIMIT);
|
||||
$this->_parser->match(Doctrine_Query_Token::T_INTEGER);
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* OffsetClause = "OFFSET" integer
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_OffsetClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_OFFSET);
|
||||
$this->_parser->match(Doctrine_Query_Token::T_INTEGER);
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* OrderByClause = "ORDER" "BY" OrderByItem {"," OrderByItem}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_OrderByClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_ORDER);
|
||||
$this->_parser->match(Doctrine_Query_Token::T_BY);
|
||||
|
||||
$this->OrderByItem();
|
||||
|
||||
while ($this->_isNextToken(',')) {
|
||||
$this->_parser->match(',');
|
||||
$this->OrderByItem();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* OrderByItem = Expression ["ASC" | "DESC"]
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_OrderByItem extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->Expression();
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_ASC)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_ASC);
|
||||
} elseif ($this->_isNextToken(Doctrine_Query_Token::T_DESC)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_DESC);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* PathExpression = identifier { "." identifier }
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_PathExpression extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_IDENTIFIER);
|
||||
|
||||
while ($this->_isNextToken('.')) {
|
||||
$this->_parser->match('.');
|
||||
$this->_parser->match(Doctrine_Query_Token::T_IDENTIFIER);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* PathExpressionEndingWithAsterisk = {identifier "."} "*"
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_PathExpressionEndingWithAsterisk extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
while ($this->_isNextToken(Doctrine_Query_Token::T_IDENTIFIER)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_IDENTIFIER);
|
||||
$this->_parser->match('.');
|
||||
}
|
||||
|
||||
$this->_parser->match('*');
|
||||
}
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Primary = PathExpression | Atom | "(" Expression ")" | Function |
|
||||
* AggregateExpression
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_Primary extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
switch ($this->_parser->lookahead['type']) {
|
||||
case Doctrine_Query_Token::T_IDENTIFIER:
|
||||
if ($this->_isFunction()) {
|
||||
$this->Function();
|
||||
} else {
|
||||
$this->PathExpression();
|
||||
}
|
||||
break;
|
||||
case Doctrine_Query_Token::T_STRING:
|
||||
case Doctrine_Query_Token::T_INTEGER:
|
||||
case Doctrine_Query_Token::T_FLOAT:
|
||||
case Doctrine_Query_Token::T_INPUT_PARAMETER:
|
||||
$this->Atom();
|
||||
break;
|
||||
case Doctrine_Query_Token::T_AVG:
|
||||
case Doctrine_Query_Token::T_COUNT:
|
||||
case Doctrine_Query_Token::T_MAX:
|
||||
case Doctrine_Query_Token::T_MIN:
|
||||
case Doctrine_Query_Token::T_SUM:
|
||||
$this->AggregateExpression();
|
||||
break;
|
||||
case Doctrine_Query_Token::T_NONE:
|
||||
if ($this->_isNextToken('(')) {
|
||||
$this->_parser->match('(');
|
||||
$this->Expression();
|
||||
$this->_parser->match(')');
|
||||
break;
|
||||
}
|
||||
default:
|
||||
$this->_parser->logError();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* QuantifiedExpression = ("ALL" | "ANY" | "SOME") "(" Subselect ")"
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_QuantifiedExpression extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
switch ($this->_parser->lookahead['type']) {
|
||||
case Doctrine_Query_Token::T_ALL:
|
||||
$this->_parser->match(Doctrine_Query_Token::T_ALL);
|
||||
break;
|
||||
case Doctrine_Query_Token::T_ANY:
|
||||
$this->_parser->match(Doctrine_Query_Token::T_ANY);
|
||||
break;
|
||||
case Doctrine_Query_Token::T_SOME:
|
||||
$this->_parser->match(Doctrine_Query_Token::T_SOME);
|
||||
break;
|
||||
default:
|
||||
$this->_parser->logError();
|
||||
}
|
||||
|
||||
$this->_parser->match('(');
|
||||
$this->Subselect();
|
||||
$this->_parser->match(')');
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* QueryLanguage = SelectStatement | UpdateStatement | DeleteStatement
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_QueryLanguage extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
switch ($this->_parser->lookahead['type']) {
|
||||
case Doctrine_Query_Token::T_SELECT:
|
||||
case Doctrine_Query_Token::T_FROM:
|
||||
$this->SelectStatement();
|
||||
break;
|
||||
case Doctrine_Query_Token::T_UPDATE:
|
||||
$this->UpdateStatement();
|
||||
break;
|
||||
case Doctrine_Query_Token::T_DELETE:
|
||||
$this->DeleteStatement();
|
||||
break;
|
||||
default:
|
||||
$this->_parser->logError();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* RangeVariableDeclaration = PathExpression [["AS"] IdentificationVariable]
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_RangeVariableDeclaration extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->PathExpression();
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_AS)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_AS);
|
||||
$this->IdentificationVariable();
|
||||
} elseif ($this->_isNextToken(Doctrine_Query_Token::T_IDENTIFIER)) {
|
||||
$this->IdentificationVariable();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SelectClause = "SELECT" ["DISTINCT"] SelectExpression {"," SelectExpression}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_SelectClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_SELECT);
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_DISTINCT)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_DISTINCT);
|
||||
}
|
||||
|
||||
$this->SelectExpression();
|
||||
|
||||
while ($this->_isNextToken(',')) {
|
||||
$this->_parser->match(',');
|
||||
$this->SelectExpression();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SelectExpression = (PathExpressionEndingWithAsterisk | Expression | "(" Subselect ")")
|
||||
* [["AS"] IdentificationVariable]
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_SelectExpression extends Doctrine_Query_Production
|
||||
{
|
||||
private function _isPathExpressionEndingWithAsterisk()
|
||||
{
|
||||
$token = $this->_parser->lookahead;
|
||||
$this->_parser->getScanner()->resetPeek();
|
||||
|
||||
while (($token['type'] === Doctrine_Query_Token::T_IDENTIFIER) || ($token['value'] === '.')) {
|
||||
$token = $this->_parser->getScanner()->peek();
|
||||
}
|
||||
|
||||
return $token['value'] === '*';
|
||||
}
|
||||
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
if ($this->_isPathExpressionEndingWithAsterisk()) {
|
||||
$this->PathExpressionEndingWithAsterisk();
|
||||
} elseif ($this->_isSubselect()) {
|
||||
$this->_parser->match('(');
|
||||
$this->Subselect();
|
||||
$this->_parser->match(')');
|
||||
} else {
|
||||
$this->Expression();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_AS)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_AS);
|
||||
$this->_parser->match(Doctrine_Query_Token::T_IDENTIFIER);
|
||||
} elseif ($this->_isNextToken(Doctrine_Query_Token::T_IDENTIFIER)) {
|
||||
$this->IdentificationVariable();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SelectStatement = [SelectClause] FromClause [WhereClause] [GroupByClause]
|
||||
* [HavingClause] [OrderByClause] [LimitClause]
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_SelectStatement extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_SELECT)) {
|
||||
$this->SelectClause();
|
||||
}
|
||||
|
||||
$this->FromClause();
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_WHERE)) {
|
||||
$this->WhereClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_GROUP)) {
|
||||
$this->GroupByClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_HAVING)) {
|
||||
$this->HavingClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_ORDER)) {
|
||||
$this->OrderByClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_LIMIT)) {
|
||||
$this->LimitClause();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SimpleConditionalExpression =
|
||||
* Expression (ComparisonExpression | BetweenExpression | LikeExpression |
|
||||
* InExpression | NullComparisonExpression | QuantifiedExpression) |
|
||||
* ExistsExpression
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_SimpleConditionalExpression extends Doctrine_Query_Production
|
||||
{
|
||||
protected function _getExpressionType() {
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_NOT)) {
|
||||
$token = $this->_parser->getScanner()->peek();
|
||||
$this->_parser->getScanner()->resetPeek();
|
||||
} else {
|
||||
$token = $this->_parser->lookahead;
|
||||
}
|
||||
|
||||
return $token['type'];
|
||||
}
|
||||
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
if ($this->_getExpressionType() === Doctrine_Query_Token::T_EXISTS) {
|
||||
$this->ExistsExpression();
|
||||
} else {
|
||||
$this->Expression();
|
||||
|
||||
switch ($this->_getExpressionType()) {
|
||||
case Doctrine_Query_Token::T_BETWEEN:
|
||||
$this->BetweenExpression();
|
||||
break;
|
||||
case Doctrine_Query_Token::T_LIKE:
|
||||
$this->LikeExpression();
|
||||
break;
|
||||
case Doctrine_Query_Token::T_IN:
|
||||
$this->InExpression();
|
||||
break;
|
||||
case Doctrine_Query_Token::T_IS:
|
||||
$this->NullComparisonExpression();
|
||||
break;
|
||||
case Doctrine_Query_Token::T_NONE:
|
||||
$this->ComparisonExpression();
|
||||
break;
|
||||
default:
|
||||
$this->_parser->logError();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SimpleSelectClause = "SELECT" ["DISTINCT"] SelectExpression
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_SimpleSelectClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_SELECT);
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_DISTINCT)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_DISTINCT);
|
||||
}
|
||||
|
||||
$this->SelectExpression();
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Subselect = SimpleSelectClause FromClause [WhereClause] [GroupByClause]
|
||||
* [HavingClause] [OrderByClause] [LimitClause] [OffsetClause]
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_Subselect extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->SimpleSelectClause();
|
||||
|
||||
$this->FromClause();
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_WHERE)) {
|
||||
$this->WhereClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_GROUP)) {
|
||||
$this->GroupByClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_HAVING)) {
|
||||
$this->HavingClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_ORDER)) {
|
||||
$this->OrderByClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_LIMIT)) {
|
||||
$this->LimitClause();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Term = Factor {("*" | "/") Factor}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_Term extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->Factor();
|
||||
|
||||
while ($this->_isNextToken('*') || $this->_isNextToken('/')) {
|
||||
if ($this->_isNextToken('*')) {
|
||||
$this->_parser->match('*');
|
||||
} else {
|
||||
$this->_parser->match('/');
|
||||
}
|
||||
$this->Factor();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* UpdateClause = "UPDATE" RangeVariableDeclaration "SET" UpdateItem {"," UpdateItem}
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_UpdateClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_UPDATE);
|
||||
$this->RangeVariableDeclaration();
|
||||
$this->_parser->match(Doctrine_Query_Token::T_SET);
|
||||
|
||||
$this->UpdateItem();
|
||||
while ($this->_isNextToken(',')) {
|
||||
$this->_parser->match(',');
|
||||
$this->UpdateItem();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* UpdateItem = PathExpression "=" (Expression | "NULL")
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_UpdateItem extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->PathExpression();
|
||||
|
||||
$this->_parser->match('=');
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_NULL)) {
|
||||
$this->_parser->match(Doctrine_Query_Token::T_NULL);
|
||||
} else {
|
||||
$this->Expression();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* UpdateStatement = UpdateClause [WhereClause] [OrderByClause] [LimitClause]
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_UpdateStatement extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->UpdateClause();
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_WHERE)) {
|
||||
$this->WhereClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_ORDER)) {
|
||||
$this->OrderByClause();
|
||||
}
|
||||
|
||||
if ($this->_isNextToken(Doctrine_Query_Token::T_LIMIT)) {
|
||||
$this->LimitClause();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* WhereClause = "WHERE" ConditionalExpression
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Production_WhereClause extends Doctrine_Query_Production
|
||||
{
|
||||
public function execute(array $params = array())
|
||||
{
|
||||
$this->_parser->match(Doctrine_Query_Token::T_WHERE);
|
||||
|
||||
$this->ConditionalExpression();
|
||||
}
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.com>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Doctrine_Query_Registry
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Konsta Vesterinen <kvesteri@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link www.phpdoctrine.com
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Registry
|
||||
{
|
||||
protected $_queries = array();
|
||||
|
||||
public function add($key, $query)
|
||||
{
|
||||
if (strpos($key, '/') === false) {
|
||||
$this->_queries[$key] = $query;
|
||||
} else {
|
||||
// namespace found
|
||||
|
||||
$e = explode('/', $key);
|
||||
|
||||
$this->_queries[$e[0]][$e[1]] = $query;
|
||||
}
|
||||
}
|
||||
|
||||
public function get($key, $namespace = null)
|
||||
{
|
||||
if (isset($namespace)) {
|
||||
if ( ! isset($this->_queries[$namespace][$key])) {
|
||||
throw new Doctrine_Query_Registry_Exception('A query with the name ' . $namespace . '/' . $key . ' does not exist.');
|
||||
}
|
||||
$query = $this->_queries[$namespace][$key];
|
||||
} else {
|
||||
if ( ! isset($this->_queries[$key])) {
|
||||
throw new Doctrine_Query_Registry_Exception('A query with the name ' . $key . ' does not exist.');
|
||||
}
|
||||
$query = $this->_queries[$key];
|
||||
}
|
||||
|
||||
if ( ! ($query instanceof Doctrine_Query)) {
|
||||
$query = Doctrine_Query::create()->parseQuery($query);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
}
|
@ -1,164 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Scans a DQL query for tokens.
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
class Doctrine_Query_Scanner
|
||||
{
|
||||
/**
|
||||
* Array of scanned tokens
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_tokens = array();
|
||||
|
||||
protected $_position = 0;
|
||||
|
||||
protected $_peek = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new query scanner object.
|
||||
*
|
||||
* @param string $input a query string
|
||||
*/
|
||||
public function __construct($input)
|
||||
{
|
||||
$this->_scan($input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if an identifier is a keyword and returns its correct type.
|
||||
*
|
||||
* @param string $identifier identifier name
|
||||
* @return int token type
|
||||
*/
|
||||
public function _checkLiteral($identifier)
|
||||
{
|
||||
$name = 'Doctrine_Query_Token::T_' . strtoupper($identifier);
|
||||
|
||||
if (defined($name)) {
|
||||
$type = constant($name);
|
||||
|
||||
if ($type > 100) {
|
||||
return $type;
|
||||
}
|
||||
}
|
||||
|
||||
return Doctrine_Query_Token::T_IDENTIFIER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scans the input string for tokens.
|
||||
*
|
||||
* @param string $input a query string
|
||||
*/
|
||||
protected function _scan($input)
|
||||
{
|
||||
static $regex;
|
||||
|
||||
if ( ! isset($regex)) {
|
||||
$patterns = array(
|
||||
'[a-z_][a-z0-9_]*',
|
||||
'(?:[0-9]+(?:[\.][0-9]+)?)(?:e[+-]?[0-9]+)?',
|
||||
"'(?:[^']|'')*'",
|
||||
'\?|:[a-z]+'
|
||||
);
|
||||
$regex = '/(' . implode(')|(', $patterns) . ')|\s+|(.)/i';
|
||||
}
|
||||
|
||||
$flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE;
|
||||
$matches = preg_split($regex, $input, -1, $flags);
|
||||
|
||||
foreach ($matches as $match) {
|
||||
$value = $match[0];
|
||||
|
||||
if (is_numeric($value)) {
|
||||
if (strpos($value, '.') !== false || stripos($value, 'e') !== false) {
|
||||
$type = Doctrine_Query_Token::T_FLOAT;
|
||||
} else {
|
||||
$type = Doctrine_Query_Token::T_INTEGER;
|
||||
}
|
||||
} elseif ($value[0] === "'" && $value[strlen($value) - 1] === "'") {
|
||||
$type = Doctrine_Query_Token::T_STRING;
|
||||
} elseif (ctype_alpha($value[0]) || $value[0] === '_') {
|
||||
$type = $this->_checkLiteral($value);
|
||||
} elseif ($value[0] === '?' || $value[0] === ':') {
|
||||
$type = Doctrine_Query_Token::T_INPUT_PARAMETER;
|
||||
} else {
|
||||
$type = Doctrine_Query_Token::T_NONE;
|
||||
}
|
||||
|
||||
$this->_tokens[] = array(
|
||||
'value' => $value,
|
||||
'type' => $type,
|
||||
'position' => $match[1]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function peek()
|
||||
{
|
||||
if (isset($this->_tokens[$this->_position + $this->_peek])) {
|
||||
return $this->_tokens[$this->_position + $this->_peek++];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public function resetPeek()
|
||||
{
|
||||
$this->_peek = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next token in the input string.
|
||||
*
|
||||
* A token is an associative array containing three items:
|
||||
* - 'value' : the string value of the token in the input string
|
||||
* - 'type' : the type of the token (identifier, numeric, string, input
|
||||
* parameter, none)
|
||||
* - 'position' : the position of the token in the input string
|
||||
*
|
||||
* @return array|null the next token; null if there is no more tokens left
|
||||
*/
|
||||
public function next()
|
||||
{
|
||||
$this->_peek = 0;
|
||||
|
||||
if (isset($this->_tokens[$this->_position])) {
|
||||
return $this->_tokens[$this->_position++];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,88 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Container for token type constants of Doctrine Query Language.
|
||||
*
|
||||
* @package Doctrine
|
||||
* @subpackage Query
|
||||
* @author Janne Vanhala <jpvanhal@cc.hut.fi>
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link http://www.phpdoctrine.org
|
||||
* @since 1.0
|
||||
* @version $Revision$
|
||||
*/
|
||||
final class Doctrine_Query_Token
|
||||
{
|
||||
const T_NONE = 1;
|
||||
const T_IDENTIFIER = 2;
|
||||
const T_INTEGER = 3;
|
||||
const T_STRING = 4;
|
||||
const T_INPUT_PARAMETER = 5;
|
||||
const T_FLOAT = 6;
|
||||
|
||||
const T_ALL = 101;
|
||||
const T_AND = 102;
|
||||
const T_ANY = 103;
|
||||
const T_AS = 104;
|
||||
const T_ASC = 105;
|
||||
const T_AVG = 106;
|
||||
const T_BETWEEN = 107;
|
||||
const T_BY = 108;
|
||||
const T_COUNT = 109;
|
||||
const T_DELETE = 110;
|
||||
const T_DESC = 111;
|
||||
const T_DISTINCT = 112;
|
||||
const T_ESCAPE = 113;
|
||||
const T_EXISTS = 114;
|
||||
const T_FROM = 115;
|
||||
const T_GROUP = 116;
|
||||
const T_HAVING = 117;
|
||||
const T_IN = 118;
|
||||
const T_INDEX = 119;
|
||||
const T_INNER = 120;
|
||||
const T_IS = 121;
|
||||
const T_JOIN = 122;
|
||||
const T_LEFT = 123;
|
||||
const T_LIKE = 124;
|
||||
const T_LIMIT = 125;
|
||||
const T_MAX = 126;
|
||||
const T_MIN = 127;
|
||||
const T_MOD = 128;
|
||||
const T_NOT = 129;
|
||||
const T_NULL = 130;
|
||||
const T_OFFSET = 131;
|
||||
const T_ON = 132;
|
||||
const T_OR = 133;
|
||||
const T_ORDER = 134;
|
||||
const T_SELECT = 135;
|
||||
const T_SET = 136;
|
||||
const T_SIZE = 137;
|
||||
const T_SOME = 138;
|
||||
const T_SUM = 139;
|
||||
const T_UPDATE = 140;
|
||||
const T_WHERE = 141;
|
||||
const T_WITH = 142;
|
||||
const T_TRUE = 143;
|
||||
const T_FALSE = 144;
|
||||
|
||||
private function __construct() {}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
/* Context-free grammar for Doctrine Query Language
|
||||
*
|
||||
* Document syntax:
|
||||
* - non-terminals begin with an upper case character
|
||||
* - terminals begin with a lower case character
|
||||
* - parentheses (...) are used for grouping
|
||||
* - square brackets [...] are used for defining an optional part, eg. zero or
|
||||
* one time time
|
||||
* - curly brackets {...} are used for repetion, eg. zero or more times
|
||||
* - double quotation marks "..." define a terminal string
|
||||
* - a vertical bar represents an alternative
|
||||
*/
|
||||
|
||||
QueryLanguage = SelectStatement | UpdateStatement | DeleteStatement
|
||||
|
||||
SelectStatement = [SelectClause] FromClause [WhereClause] [GroupByClause] [HavingClause] [OrderByClause] [LimitClause] [OffsetClause]
|
||||
UpdateStatement = UpdateClause [WhereClause] [OrderByClause] [LimitClause] [OffsetClause]
|
||||
DeleteStatement = DeleteClause [WhereClause] [OrderByClause] [LimitClause] [OffsetClause]
|
||||
|
||||
Subselect = SimpleSelectClause FromClause [WhereClause] [GroupByClause] [HavingClause] [OrderByClause] [LimitClause] [OffsetClause]
|
||||
SelectClause = "SELECT" ["ALL" | "DISTINCT"] SelectExpression {"," SelectExpression}
|
||||
SimpleSelectClause = "SELECT" ["ALL" | "DISTINCT"] SelectExpression
|
||||
DeleteClause = "DELETE" "FROM" RangeVariableDeclaration
|
||||
WhereClause = "WHERE" ConditionalExpression
|
||||
FromClause = "FROM" IdentificationVariableDeclaration {"," IdentificationVariableDeclaration}
|
||||
HavingClause = "HAVING" ConditionalExpression
|
||||
GroupByClause = "GROUP" "BY" GroupByItem {"," GroupByItem}
|
||||
OrderByClause = "ORDER" "BY" OrderByItem {"," OrderByItem}
|
||||
LimitClause = "LIMIT" integer
|
||||
OffsetClause = "OFFSET" integer
|
||||
UpdateClause = "UPDATE" RangeVariableDeclaration "SET" UpdateItem {"," UpdateItem}
|
||||
|
||||
OrderByItem = Expression ["ASC" | "DESC"]
|
||||
GroupByItem = PathExpression
|
||||
UpdateItem = PathExpression "=" (Expression | "NULL")
|
||||
|
||||
IdentificationVariableDeclaration = RangeVariableDeclaration [IndexBy] {Join [IndexBy]}
|
||||
RangeVariableDeclaration = PathExpression [["AS"] IdentificationVariable]
|
||||
|
||||
Join = ["LEFT" | "INNER"] "JOIN" RangeVariableDeclaration [("ON" | "WITH") ConditionalExpression]
|
||||
IndexBy = "INDEX" "BY" PathExpression
|
||||
|
||||
ConditionalExpression = ConditionalTerm {"OR" ConditionalTerm}
|
||||
ConditionalTerm = ConditionalFactor {"AND" ConditionalFactor}
|
||||
ConditionalFactor = ["NOT"] ConditionalPrimary
|
||||
ConditionalPrimary = SimpleConditionalExpression | "(" ConditionalExpression ")"
|
||||
SimpleConditionalExpression
|
||||
= Expression (ComparisonExpression | BetweenExpression | LikeExpression
|
||||
| InExpression | NullComparisonExpression) | ExistsExpression
|
||||
|
||||
Atom = string | integer | float | boolean | input_parameter
|
||||
|
||||
Expression = Term {("+" | "-") Term}
|
||||
Term = Factor {("*" | "/") Factor}
|
||||
Factor = [("+" | "-")] Primary
|
||||
Primary = PathExpression | Atom | "(" Expression ")" | Function | AggregateExpression
|
||||
|
||||
SelectExpression = (PathExpressionEndingWithAsterisk | Expression | "(" Subselect ")" ) [["AS"] IdentificationVariable]
|
||||
PathExpression = identifier {"." identifier}
|
||||
PathExpressionEndingWithAsterisk = {identifier "."} "*"
|
||||
|
||||
AggregateExpression = ("AVG" | "MAX" | "MIN" | "SUM") "(" ["DISTINCT"] Expression ")"
|
||||
| "COUNT" "(" ["DISTINCT"] (Expression | "*") ")"
|
||||
|
||||
QuantifiedExpression = ("ALL" | "ANY" | "SOME") "(" Subselect ")"
|
||||
BetweenExpression = ["NOT"] "BETWEEN" Expression "AND" Expression
|
||||
ComparisonExpression = ComparisonOperator ( QuantifiedExpression | Expression | "(" Subselect ")" )
|
||||
InExpression = ["NOT"] "IN" "(" (Atom {"," Atom} | Subselect) ")"
|
||||
LikeExpression = ["NOT"] "LIKE" Expression ["ESCAPE" string]
|
||||
NullComparisonExpression = "IS" ["NOT"] "NULL"
|
||||
ExistsExpression = "EXISTS" "(" Subselect ")"
|
||||
|
||||
Function = identifier "(" [Expression {"," Expression}] ")"
|
@ -1,31 +0,0 @@
|
||||
<?php
|
||||
function autoload($className)
|
||||
{
|
||||
if (class_exists($className, false)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$class = dirname(__FILE__) . DIRECTORY_SEPARATOR
|
||||
. str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
|
||||
|
||||
if (file_exists($class)) {
|
||||
require_once($class);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
spl_autoload_register('autoload');
|
||||
|
||||
$n = 1000;
|
||||
|
||||
$start = microtime(true);
|
||||
for ($i = 0; $i < $n; $i++) {
|
||||
$parser = new Doctrine_Query_Parser('SELECT u.name, u.age FROM User u WHERE u.id = ?');
|
||||
$parser->parse();
|
||||
}
|
||||
$end = microtime(true);
|
||||
|
||||
printf("Parsed %d queries: %.3f ms per query\n", $n, ($end - $start) / $n * 1000);
|
@ -1,318 +0,0 @@
|
||||
<?php
|
||||
class Doctrine_Query_LanguageRecognition_TestCase extends Doctrine_UnitTestCase
|
||||
{
|
||||
public function assertValidDql($dql)
|
||||
{
|
||||
$parser = new Doctrine_Query_Parser($dql);
|
||||
|
||||
try {
|
||||
$parser->parse();
|
||||
$this->pass();
|
||||
} catch (Exception $e) {
|
||||
$this->fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function assertInvalidDql($dql)
|
||||
{
|
||||
$parser = new Doctrine_Query_Parser($dql);
|
||||
|
||||
try {
|
||||
$parser->parse();
|
||||
$this->fail();
|
||||
} catch (Exception $e) {
|
||||
$this->pass();
|
||||
}
|
||||
}
|
||||
|
||||
public function testEmptyQueryString()
|
||||
{
|
||||
$this->assertInvalidDql('');
|
||||
}
|
||||
|
||||
public function testPlainFromClauseWithoutAlias()
|
||||
{
|
||||
$this->assertValidDql('FROM User');
|
||||
}
|
||||
|
||||
public function testPlainFromClauseWithAlias()
|
||||
{
|
||||
$this->assertValidDql('FROM User u');
|
||||
}
|
||||
|
||||
public function testSelectSingleComponentWithAsterisk()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.* FROM User u');
|
||||
}
|
||||
|
||||
public function testSelectSingleComponentWithMultipleColumns()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name, u.type FROM User u');
|
||||
}
|
||||
|
||||
public function testSelectMultipleComponentsWithAsterisk()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.*, p.* FROM User u, u.Phonenumber p');
|
||||
}
|
||||
|
||||
public function testSelectDistinctIsSupported()
|
||||
{
|
||||
$this->assertValidDql('SELECT DISTINCT u.name FROM User u');
|
||||
}
|
||||
|
||||
public function testAggregateFunctionInSelect()
|
||||
{
|
||||
$this->assertValidDql('SELECT COUNT(u.id) FROM User u');
|
||||
}
|
||||
|
||||
public function testAggregateFunctionWithDistinctInSelect()
|
||||
{
|
||||
$this->assertValidDql('SELECT COUNT(DISTINCT u.name) FROM User u');
|
||||
}
|
||||
|
||||
public function testFunctionalExpressionsSupportedInWherePart()
|
||||
{
|
||||
$this->assertValidDql("SELECT u.name FROM User u WHERE TRIM(u.name) = 'someone'");
|
||||
}
|
||||
|
||||
public function testArithmeticExpressionsSupportedInWherePart()
|
||||
{
|
||||
$this->assertValidDql('FROM Account a WHERE ((a.amount + 5000) * a.amount + 3) < 10000000');
|
||||
}
|
||||
|
||||
public function testInExpressionSupportedInWherePart()
|
||||
{
|
||||
$this->assertValidDql('FROM User WHERE User.id IN (1, 2)');
|
||||
}
|
||||
|
||||
public function testNotInExpressionSupportedInWherePart()
|
||||
{
|
||||
$this->assertValidDql('FROM User WHERE User.id NOT IN (1)');
|
||||
}
|
||||
|
||||
public function testExistsExpressionSupportedInWherePart()
|
||||
{
|
||||
$this->assertValidDql('FROM User WHERE EXISTS (SELECT g.id FROM UserGroupuser g WHERE g.user_id = u.id)');
|
||||
}
|
||||
|
||||
public function testNotExistsExpressionSupportedInWherePart()
|
||||
{
|
||||
$this->assertValidDql('FROM User WHERE NOT EXISTS (SELECT g.id FROM UserGroupuser g WHERE g.user_id = u.id)');
|
||||
}
|
||||
|
||||
public function testLiteralValueAsInOperatorOperandIsSupported()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.id FROM User u WHERE 1 IN (1, 2)');
|
||||
}
|
||||
|
||||
public function testUpdateWorksWithOneColumn()
|
||||
{
|
||||
$this->assertValidDql("UPDATE User u SET u.name = 'someone'");
|
||||
}
|
||||
|
||||
public function testUpdateWorksWithMultipleColumns()
|
||||
{
|
||||
$this->assertValidDql("UPDATE User u SET u.name = 'someone', u.email_id = 5");
|
||||
}
|
||||
|
||||
public function testUpdateSupportsConditions()
|
||||
{
|
||||
$this->assertValidDql("UPDATE User u SET u.name = 'someone' WHERE u.id = 5");
|
||||
}
|
||||
|
||||
public function testDeleteAll()
|
||||
{
|
||||
$this->assertValidDql('DELETE FROM Entity');
|
||||
}
|
||||
|
||||
public function testDeleteWithCondition()
|
||||
{
|
||||
$this->assertValidDql('DELETE FROM Entity WHERE id = 3');
|
||||
}
|
||||
|
||||
public function testDeleteWithLimit()
|
||||
{
|
||||
$this->assertValidDql('DELETE FROM Entity LIMIT 20');
|
||||
}
|
||||
|
||||
public function testDeleteWithLimitAndOffset()
|
||||
{
|
||||
$this->assertValidDql('DELETE FROM Entity LIMIT 10 OFFSET 20');
|
||||
}
|
||||
|
||||
public function testAdditionExpression()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.*, (u.id + u.id) addition FROM User u');
|
||||
}
|
||||
|
||||
public function testSubtractionExpression()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.*, (u.id - u.id) subtraction FROM User u');
|
||||
}
|
||||
|
||||
public function testDivisionExpression()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.*, (u.id/u.id) division FROM User u');
|
||||
}
|
||||
|
||||
public function testMultiplicationExpression()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.*, (u.id * u.id) multiplication FROM User u');
|
||||
}
|
||||
|
||||
public function testNegationExpression()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.*, -u.id negation FROM User u');
|
||||
}
|
||||
|
||||
public function testExpressionWithPrecedingPlusSign()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.*, +u.id FROM User u');
|
||||
}
|
||||
|
||||
public function testAggregateFunctionInHavingClause()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p HAVING COUNT(p.id) > 2');
|
||||
$this->assertValidDql("SELECT u.name FROM User u LEFT JOIN u.Phonenumber p HAVING MAX(u.name) = 'zYne'");
|
||||
}
|
||||
|
||||
public function testMultipleAggregateFunctionsInHavingClause()
|
||||
{
|
||||
$this->assertValidDql("SELECT u.name FROM User u LEFT JOIN u.Phonenumber p HAVING MAX(u.name) = 'zYne'");
|
||||
}
|
||||
|
||||
public function testLeftJoin()
|
||||
{
|
||||
$this->assertValidDql('FROM User u LEFT JOIN u.UserGroup');
|
||||
}
|
||||
|
||||
public function testJoin()
|
||||
{
|
||||
$this->assertValidDql('FROM User u JOIN u.UserGroup');
|
||||
}
|
||||
|
||||
public function testInnerJoin()
|
||||
{
|
||||
$this->assertValidDql('FROM User u INNER JOIN u.UserGroup');
|
||||
}
|
||||
|
||||
public function testMultipleLeftJoin()
|
||||
{
|
||||
$this->assertValidDql('FROM User u LEFT JOIN u.UserGroup LEFT JOIN u.Phonenumber');
|
||||
}
|
||||
|
||||
public function testMultipleInnerJoin()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name FROM User u INNER JOIN u.UserGroup INNER JOIN u.Phonenumber');
|
||||
}
|
||||
|
||||
public function testMultipleInnerJoin2()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name FROM User u INNER JOIN u.UserGroup, u.Phonenumber');
|
||||
}
|
||||
|
||||
public function testMixingOfJoins()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name, g.name, p.phonenumber FROM User u INNER JOIN u.UserGroup g LEFT JOIN u.Phonenumber p');
|
||||
}
|
||||
|
||||
public function testMixingOfJoins2()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name, g.name, p.phonenumber FROM User u INNER JOIN u.UserGroup.Phonenumber p');
|
||||
}
|
||||
|
||||
public function testOrderBySingleColumn()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name FROM User u ORDER BY u.name');
|
||||
}
|
||||
|
||||
public function testOrderBySingleColumnAscending()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name FROM User u ORDER BY u.name ASC');
|
||||
}
|
||||
|
||||
public function testOrderBySingleColumnDescending()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name FROM User u ORDER BY u.name DESC');
|
||||
}
|
||||
|
||||
public function testOrderByMultipleColumns()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.firstname, u.lastname FROM User u ORDER BY u.lastname DESC, u.firstname DESC');
|
||||
}
|
||||
|
||||
public function testOrderByWithFunctionExpression()
|
||||
{
|
||||
$this->assertValidDql('SELECT u.name FROM User u ORDER BY COALESCE(u.id, u.name) DESC');
|
||||
}
|
||||
|
||||
public function testSubselectInInExpression()
|
||||
{
|
||||
$this->assertValidDql("FROM User u WHERE u.id NOT IN (SELECT u2.id FROM User u2 WHERE u2.name = 'zYne')");
|
||||
}
|
||||
|
||||
public function testSubselectInSelectPart()
|
||||
{
|
||||
$this->assertValidDql("SELECT u.name, (SELECT COUNT(p.id) FROM Phonenumber p WHERE p.entity_id = u.id) pcount FROM User u WHERE u.name = 'zYne' LIMIT 1");
|
||||
}
|
||||
|
||||
public function testPositionalInputParameter()
|
||||
{
|
||||
$this->assertValidDql('FROM User u WHERE u.id = ?');
|
||||
}
|
||||
|
||||
public function testNamedInputParameter()
|
||||
{
|
||||
$this->assertValidDql('FROM User u WHERE u.id = :id');
|
||||
}
|
||||
|
||||
public function testCustomJoinsAndWithKeywordSupported()
|
||||
{
|
||||
$this->assertValidDql('SELECT c.*, c2.*, d.* FROM Record_Country c INNER JOIN c.City c2 WITH c2.id = 2 WHERE c.id = 1');
|
||||
}
|
||||
|
||||
public function testJoinConditionsSupported()
|
||||
{
|
||||
$this->assertValidDql("SELECT u.name, p.id FROM User u LEFT JOIN u.Phonenumber p ON p.phonenumber = '123 123'");
|
||||
}
|
||||
|
||||
public function testIndexByClauseWithOneComponent()
|
||||
{
|
||||
$this->assertValidDql('FROM Record_City c INDEX BY c.name');
|
||||
}
|
||||
|
||||
public function testIndexBySupportsJoins()
|
||||
{
|
||||
$this->assertValidDql('FROM Record_Country c LEFT JOIN c.City c2 INDEX BY c2.name');
|
||||
}
|
||||
|
||||
public function testIndexBySupportsJoins2()
|
||||
{
|
||||
$this->assertValidDql('FROM User u INDEX BY u.name LEFT JOIN u.Phonenumber p INDEX BY p.phonenumber');
|
||||
}
|
||||
|
||||
public function testBetweenExpressionSupported()
|
||||
{
|
||||
$this->assertValidDql("FROM User u WHERE u.name BETWEEN 'jepso' AND 'zYne'");
|
||||
}
|
||||
|
||||
public function testNotBetweenExpressionSupported()
|
||||
{
|
||||
$this->assertValidDql("FROM User u WHERE u.name NOT BETWEEN 'jepso' AND 'zYne'");
|
||||
}
|
||||
|
||||
public function testAllExpression()
|
||||
{
|
||||
$this->assertValidDql('FROM Employee e WHERE e.salary > ALL (SELECT m.salary FROM Manager m WHERE m.department = e.department)');
|
||||
}
|
||||
|
||||
public function testAnyExpression()
|
||||
{
|
||||
$this->assertValidDql('FROM Employee e WHERE e.salary > ANY (SELECT m.salary FROM Manager m WHERE m.department = e.department)');
|
||||
}
|
||||
|
||||
public function testSomeExpression()
|
||||
{
|
||||
$this->assertValidDql('FROM Employee e WHERE e.salary > SOME (SELECT m.salary FROM Manager m WHERE m.department = e.department)');
|
||||
}
|
||||
}
|
@ -1,194 +0,0 @@
|
||||
<?php
|
||||
class Doctrine_Query_Scanner_TestCase extends Doctrine_UnitTestCase
|
||||
{
|
||||
public function testScannerRecognizesIdentifierWithLengthOfOneCharacter()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner('u');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_IDENTIFIER, $token['type']);
|
||||
$this->assertEqual('u', $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesIdentifierConsistingOfLetters()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner('someIdentifier');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_IDENTIFIER, $token['type']);
|
||||
$this->assertEqual('someIdentifier', $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesIdentifierIncludingDigits()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner('s0m31d3nt1f13r');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_IDENTIFIER, $token['type']);
|
||||
$this->assertEqual('s0m31d3nt1f13r', $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesIdentifierIncludingUnderscore()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner('some_identifier');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_IDENTIFIER, $token['type']);
|
||||
$this->assertEqual('some_identifier', $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesDecimalInteger()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner('1234');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_INTEGER, $token['type']);
|
||||
$this->assertEqual(1234, $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesFloat()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner('1.234');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_FLOAT, $token['type']);
|
||||
$this->assertEqual(1.234, $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesFloatWithExponent()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner('1.2e3');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_FLOAT, $token['type']);
|
||||
$this->assertEqual(1.2e3, $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesFloatWithNegativeExponent()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner('7E-10');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_FLOAT, $token['type']);
|
||||
$this->assertEqual(7E-10, $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesStringContainingWhitespace()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner("'This is a string.'");
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_STRING, $token['type']);
|
||||
$this->assertEqual("'This is a string.'", $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesStringContainingSingleQuotes()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner("'abc''defg'''");
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_STRING, $token['type']);
|
||||
$this->assertEqual("'abc''defg'''", $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesInputParameter()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner('?');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_INPUT_PARAMETER, $token['type']);
|
||||
$this->assertEqual('?', $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerRecognizesNamedInputParameter()
|
||||
{
|
||||
$scanner = new Doctrine_Query_Scanner(':name');
|
||||
|
||||
$token = $scanner->next();
|
||||
$this->assertEqual(Doctrine_Query_Token::T_INPUT_PARAMETER, $token['type']);
|
||||
$this->assertEqual(':name', $token['value']);
|
||||
}
|
||||
|
||||
public function testScannerTokenizesASimpleQueryCorrectly()
|
||||
{
|
||||
$dql = "SELECT u.* FROM User u WHERE u.name = 'Jack O''Neil'";
|
||||
$scanner = new Doctrine_Query_Scanner($dql);
|
||||
|
||||
$tokens = array(
|
||||
array(
|
||||
'value' => 'SELECT',
|
||||
'type' => Doctrine_Query_Token::T_SELECT,
|
||||
'position' => 0
|
||||
),
|
||||
array(
|
||||
'value' => 'u',
|
||||
'type' => Doctrine_Query_Token::T_IDENTIFIER,
|
||||
'position' => 7
|
||||
),
|
||||
array(
|
||||
'value' => '.',
|
||||
'type' => Doctrine_Query_Token::T_NONE,
|
||||
'position' => 8
|
||||
),
|
||||
array(
|
||||
'value' => '*',
|
||||
'type' => Doctrine_Query_Token::T_NONE,
|
||||
'position' => 9
|
||||
),
|
||||
array(
|
||||
'value' => 'FROM',
|
||||
'type' => Doctrine_Query_Token::T_FROM,
|
||||
'position' => 11
|
||||
),
|
||||
array(
|
||||
'value' => 'User',
|
||||
'type' => Doctrine_Query_Token::T_IDENTIFIER,
|
||||
'position' => 16
|
||||
),
|
||||
array(
|
||||
'value' => 'u',
|
||||
'type' => Doctrine_Query_Token::T_IDENTIFIER,
|
||||
'position' => 21
|
||||
),
|
||||
array(
|
||||
'value' => 'WHERE',
|
||||
'type' => Doctrine_Query_Token::T_WHERE,
|
||||
'position' => 23
|
||||
),
|
||||
array(
|
||||
'value' => 'u',
|
||||
'type' => Doctrine_Query_Token::T_IDENTIFIER,
|
||||
'position' => 29
|
||||
),
|
||||
array(
|
||||
'value' => '.',
|
||||
'type' => Doctrine_Query_Token::T_NONE,
|
||||
'position' => 30
|
||||
),
|
||||
array(
|
||||
'value' => 'name',
|
||||
'type' => Doctrine_Query_Token::T_IDENTIFIER,
|
||||
'position' => 31
|
||||
),
|
||||
array(
|
||||
'value' => '=',
|
||||
'type' => Doctrine_Query_Token::T_NONE,
|
||||
'position' => 36
|
||||
),
|
||||
array(
|
||||
'value' => "'Jack O''Neil'",
|
||||
'type' => Doctrine_Query_Token::T_STRING,
|
||||
'position' => 38
|
||||
)
|
||||
);
|
||||
|
||||
foreach ($tokens as $expected) {
|
||||
$actual = $scanner->next();
|
||||
$this->assertEqual($expected['value'], $actual['value']);
|
||||
$this->assertEqual($expected['type'], $actual['type']);
|
||||
$this->assertEqual($expected['position'], $actual['position']);
|
||||
}
|
||||
|
||||
$this->assertNull($scanner->next());
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
<?php
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
ini_set('max_execution_time', 900);
|
||||
ini_set('date.timezone', 'GMT+0');
|
||||
|
||||
set_include_path(
|
||||
dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'tests' .
|
||||
PATH_SEPARATOR . get_include_path()
|
||||
);
|
||||
|
||||
require_once 'DoctrineTest.php';
|
||||
require_once dirname(__FILE__) . '/../../lib/Doctrine.php';
|
||||
|
||||
function autoload($className)
|
||||
{
|
||||
if (class_exists($className, false)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$class = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR
|
||||
. str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
|
||||
|
||||
if (file_exists($class)) {
|
||||
require_once($class);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
spl_autoload_register('autoload');
|
||||
spl_autoload_register(array('Doctrine', 'autoload'));
|
||||
spl_autoload_register(array('DoctrineTest','autoload'));
|
||||
|
||||
$test = new DoctrineTest();
|
||||
//TICKET test cases
|
||||
$queryTests = new GroupTest('Query tests', 'queries');
|
||||
$queryTests->addTestCase(new Doctrine_Query_Scanner_TestCase());
|
||||
$queryTests->addTestCase(new Doctrine_Query_LanguageRecognition_TestCase());
|
||||
|
||||
$test->addTestCase($queryTests);
|
||||
|
||||
|
||||
$test->run();
|
||||
|
||||
echo memory_get_peak_usage() / 1024 . "\n";
|
Loading…
Reference in New Issue
Block a user