diff options
| -rw-r--r-- | HISTORY | 1 | ||||
| -rw-r--r-- | framework/Caching/TDbCache.php | 20 | ||||
| -rw-r--r-- | framework/Data/TDbCommand.php | 5 | 
3 files changed, 20 insertions, 6 deletions
@@ -8,6 +8,7 @@ BUG: Ticket#750 - The "expire" parameter is used inconsistently in cache modules  BUG: Ticket#753 - Themes not allways being set (Qiang)  BUG: Ticket#776 - Logout button should not cause validation in blog tutorial (Qiang)  BUG: Ticket#785 - TDatePicker OnDateChanged event problem (Christophe) +BUG: Ticket#766, #786 - TDbCache does not work with MySQL and PostgreSQL (Qiang)  BUG: Fixed a bug in TPropertyValue::ensureArray() (Qiang)  CHG: Changed TConditional so that the controls in its template behave like they are in its parent (Qiang)  CHG: Active Record many-to-many relationship change from self::HAS_MANY to self::MANY_TO_MANY (Wei) diff --git a/framework/Caching/TDbCache.php b/framework/Caching/TDbCache.php index bc4d4309..90607368 100644 --- a/framework/Caching/TDbCache.php +++ b/framework/Caching/TDbCache.php @@ -31,10 +31,10 @@ Prado::using('System.Data.TDbConnection');   * The cached data is stored in a table in the specified database.
   * By default, the name of the table is called 'pradocache'. If the table does not
   * exist in the database, it will be automatically created with the following structure:
 - * (key CHAR(128) PRIMARY KEY, value BLOB, expire INT)
 + * (itemkey CHAR(128) PRIMARY KEY, value BLOB, expire INT)
   *
 - * Note, if you are using MySQL, you may want to manually create the DB table by relacing
 - * BLOB with LONGBLOB. Some users reported that BLOB may cause problems in MySQL.
 + * Note, some DBMS might not support BLOB type. In this case, replace 'BLOB' with a suitable
 + * binary data type (e.g. LONGBLOB in MySQL, BYTEA in PostgreSQL.)
   *
   * If you want to change the cache table name, or if you want to create the table by yourself,
   * you may set {@link setCacheTableName CacheTableName} and {@link setAutoCreateCacheTable AutoCreateCacheTableName} properties.
 @@ -134,7 +134,15 @@ class TDbCache extends TCache  			// DB table not exists
  			if($this->_autoCreate)
  			{
 -				$sql='CREATE TABLE '.$this->_cacheTable.' (itemkey CHAR(128) PRIMARY KEY, value BLOB, expire INT)';
 +				$driver=$db->getDriverName();
 +				if($driver==='mysql')
 +					$blob='LONGBLOB';
 +				else if($driver==='pgsql')
 +					$blob='BYTEA';
 +				else
 +					$blob='BLOB';
 +
 +				$sql='CREATE TABLE '.$this->_cacheTable." (itemkey CHAR(128) PRIMARY KEY, value $blob, expire INT)";
  				$db->createCommand($sql)->execute();
  			}
  			else
 @@ -276,7 +284,9 @@ class TDbCache extends TCache  	 * Note, if {@link setAutoCreateCacheTable AutoCreateCacheTable} is false
  	 * and you want to create the DB table manually by yourself,
  	 * you need to make sure the DB table is of the following structure:
 -	 * (key CHAR(128) PRIMARY KEY, value BLOB, expire INT)
 +	 * (itemkey CHAR(128) PRIMARY KEY, value BLOB, expire INT)
 +	 * Note, some DBMS might not support BLOB type. In this case, replace 'BLOB' with a suitable
 +	 * binary data type (e.g. LONGBLOB in MySQL, BYTEA in PostgreSQL.)
  	 * @param string the name of the DB table to store cache content
  	 * @see setAutoCreateCacheTable
  	 */
 diff --git a/framework/Data/TDbCommand.php b/framework/Data/TDbCommand.php index caa4476b..90e86844 100644 --- a/framework/Data/TDbCommand.php +++ b/framework/Data/TDbCommand.php @@ -276,7 +276,10 @@ class TDbCommand extends TComponent  				$this->_statement=$this->getConnection()->getPdoInstance()->query($this->getText());
  			$result=$this->_statement->fetchColumn();
  			$this->_statement->closeCursor();
 -			return $result;
 +			if(is_resource($result) && get_resource_type($result)==='stream')
 +				return stream_get_contents($result);
 +			else
 +				return $result;
  		}
  		catch(Exception $e)
  		{
  | 
