Index: Select.php =================================================================== --- Select.php (revision 11943) +++ Select.php (working copy) @@ -22,11 +22,6 @@ /** - * @see Zend_Db_Adapter_Abstract - */ -require_once 'Zend/Db/Adapter/Abstract.php'; - -/** * @see Zend_Db_Expr */ require_once 'Zend/Db/Expr.php'; @@ -87,6 +82,13 @@ * @var Zend_Db_Adapter_Abstract */ protected $_adapter; + /** + * Wither or not that object is connected to + * the adapter + * + * @var bool + */ + protected $_connected = true; /** * The initial values for the $_parts array. @@ -1225,4 +1227,46 @@ return $sql; } + /** + * called when object is getting serialized + * + * @return array + * + */ + public function __sleep() + { + return array_keys(array_diff_key(get_object_vars($this), array('_adapter'=>false))); + } + + /** + * called when object is getting unserialized + * + * @return void + */ + public function __wakeup() + { + if (Zend_Registry::isRegistered('Zend_Db_Adapter') && + Zend_Registry::get('Zend_Db_Adapter') instanceof Zend_Db_Adapter_Abstract) { + $this->_adapter = Zend_Registry::get('Zend_Db_Adapter'); + } else { + $this->_connected = false; + } + } + + /** + * Attach a Db adapter to this instance + * + * @param Zend_Db_Adapter_Abstract $adapter + * @throws Zend_Db_Select_Exception + * @return void + */ + public function setAdapter(Zend_Db_Adapter_Abstract $adapter) + { + if ($this->_connected === false) { + require_once 'Zend/Db/Select_Exception.php'; + throw new Zend_Db_Select_Exception("Select object already has an adapter"); + } + $this->_adapter = $adapter; + $this->_connected = true; + } }