Index: zend/library/Zend/Db/Adapter/Pdo/Abstract.php =================================================================== --- zend/library/Zend/Db/Adapter/Pdo/Abstract.php (revision 21071) +++ zend/library/Zend/Db/Adapter/Pdo/Abstract.php (working copy) @@ -187,6 +187,26 @@ } /** + * Excecute an SQL statement and return a PDOStatement-like object + * + * @param string|Zend_Db_Select $sql SQL query + * @return Zend_Db_Statement|PDOStatement + */ + protected function _query($sql) + { + $this->_connect(); + + $stmtClass = $this->_defaultStmtClass; + if (!class_exists($stmtClass)) { + require_once 'Zend/Loader.php'; + Zend_Loader::loadClass($stmtClass); + } + $stmt = new $stmtClass($this, $sql, $this->getConnection()->query($sql)); + $stmt->setFetchMode($this->_fetchMode); + return $stmt; + } + + /** * Gets the last ID generated automatically by an IDENTITY/AUTOINCREMENT column. * * As a convention, on RDBMS brands that support sequences Index: zend/library/Zend/Db/Adapter/Abstract.php =================================================================== --- zend/library/Zend/Db/Adapter/Abstract.php (revision 21071) +++ zend/library/Zend/Db/Adapter/Abstract.php (working copy) @@ -463,9 +463,13 @@ $bind = array($bind); } - // prepare and execute the statement with profiling - $stmt = $this->prepare($sql); - $stmt->execute($bind); + if (empty($bind)) { + $stmt = $this->_query($sql); + } else { + // prepare and execute the statement with profiling + $stmt = $this->prepare($sql); + $stmt->execute($bind); + } // return the results embedded in the prepared statement object $stmt->setFetchMode($this->_fetchMode); @@ -1186,6 +1190,14 @@ abstract public function prepare($sql); /** + * Excecute an SQL statement and return a PDOStatement-like object + * + * @param string|Zend_Db_Select $sql SQL query + * @return Zend_Db_Statement|PDOStatement + */ + abstract protected function _query($sql); + + /** * Gets the last ID generated automatically by an IDENTITY/AUTOINCREMENT column. * * As a convention, on RDBMS brands that support sequences Index: zend/library/Zend/Db/Statement.php =================================================================== --- zend/library/Zend/Db/Statement.php (revision 21071) +++ zend/library/Zend/Db/Statement.php (working copy) @@ -105,15 +105,20 @@ * @param Zend_Db_Adapter_Abstract $adapter * @param mixed $sql Either a string or Zend_Db_Select. */ - public function __construct($adapter, $sql) + public function __construct($adapter, $sql, $stmt = null) { $this->_adapter = $adapter; if ($sql instanceof Zend_Db_Select) { $sql = $sql->assemble(); } - $this->_parseParameters($sql); - $this->_prepare($sql); + if (null !== $stmt) { + $this->_stmt = $stmt; + } else { + $this->_parseParameters($sql); + $this->_prepare($sql); + } + $this->_queryId = $this->_adapter->getProfiler()->queryStart($sql); }