. */ namespace Doctrine\ORM\Query\Exec; /** * Doctrine_ORM_Query_QueryResult * * @author Roman Borschel * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link http://www.phpdoctrine.org * @since 2.0 * @version $Revision$ */ abstract class AbstractExecutor implements \Serializable { protected $_sqlStatements; public function __construct(\Doctrine\ORM\Query\AST\Node $AST, $sqlWalker) { } /** * Gets the SQL statements that are executed by the executor. * * @return array All the SQL update statements. */ public function getSqlStatements() { return $this->_sqlStatements; } /** * Executes all sql statements. * * @param Doctrine_Connection $conn The database connection that is used to execute the queries. * @param array $params The parameters. */ abstract public function execute(\Doctrine\DBAL\Connection $conn, array $params); /** * Factory method. * Creates an appropriate sql executor for the given AST. * * @param Doctrine_ORM_Query_AST $AST The root node of the AST. * @return Doctrine_ORM_Query_SqlExecutor_Abstract The executor that is suitable for the given AST. */ public static function create(\Doctrine\ORM\Query\AST\Node $AST, $sqlWalker) { $isDeleteStatement = $AST instanceof \Doctrine\ORM\Query\AST\DeleteStatement; $isUpdateStatement = $AST instanceof \Doctrine\ORM\Query\AST\UpdateStatement; if ($isUpdateStatement || $isDeleteStatement) { // TODO: Inspect the $AST and create the proper executor like so (pseudo-code): /* if (primaryClassInFromClause->isMultiTable()) { if ($isDeleteStatement) { return new Doctrine_ORM_Query_SqlExecutor_MultiTableDelete($AST); } else { return new Doctrine_ORM_Query_SqlExecutor_MultiTableUpdate($AST); } } else ... */ return new SingleTableDeleteUpdateExecutor($AST, $sqlWalker); } else { return new SingleSelectExecutor($AST, $sqlWalker); } } /** * Serializes the sql statements of the executor. * * @return string */ public function serialize() { return serialize($this->_sqlStatements); } /** * Reconstructs the executor with it's sql statements. */ public function unserialize($serialized) { $this->_sqlStatements = unserialize($serialized); } }