. */ /** * Doctrine_Query_QueryResult * * @package Doctrine * @subpackage Query * @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 Doctrine_Query_SqlExecutor_Abstract implements Serializable { // [TODO] Remove me later! public $AST; protected $_sqlStatements; public function __construct(Doctrine_Query_Production $AST) { // [TODO] Remove me later! $this->AST = $AST; } /** * 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_Connection $conn, array $params); /** * Factory method. * Creates an appropriate sql executor for the given AST. * * @param Doctrine_Query_Production $AST The root node of the AST. * @return Doctrine_Query_SqlExecutor_Abstract The executor that is suitable for the given AST. */ public static function create(Doctrine_Query_Production $AST) { $isDeleteStatement = $AST instanceof Doctrine_Query_Production_DeleteStatement; $isUpdateStatement = $AST instanceof Doctrine_Query_Production_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_Query_SqlExecutor_MultiTableDelete($AST); } else { return new Doctrine_Query_SqlExecutor_MultiTableUpdate($AST); } } else ... */ return new Doctrine_Query_SqlExecutor_SingleTableDeleteUpdate($AST); } else { return new Doctrine_Query_SqlExecutor_SingleSelect($AST); } } /** * 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); } }