chagenbu                Thu Mar  1 09:22:59 2001 EDT

  Added files:                 
    /php4/pear/Cache/Container  db.php 
  Log:
  almost working version.
  
  

Index: php4/pear/Cache/Container/db.php
+++ php4/pear/Cache/Container/db.php
<?php
// +----------------------------------------------------------------------+
// | PHP version 4.0                                                      |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the PHP license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available at through the world-wide-web at                           |
// | http://www.php.net/license/2_02.txt.                                 |
// | If you did not receive a copy of the PHP license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | [EMAIL PROTECTED] so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | Authors: Ulf Wendel <[EMAIL PROTECTED]>                           |
// |          Sebastian Bergmann <[EMAIL PROTECTED]>               |
// +----------------------------------------------------------------------+
//
// $Id: db.php,v 1.1 2001/03/01 17:22:59 chagenbu Exp $

require_once 'DB.php';
require_once 'Cache/Container.php';

/**
 * PEAR/DB Cache Container.
 * 
 *   CREATE TABLE cache (
 *     id       varchar(32) NOT NULL DEFAULT '',
 *     data     text NOT NULL DEFAULT '',
 *     expires  int(9) NOT NULL DEFAULT 0,
 *     changed  timestamp(14),
 *     INDEX(expires),
 *     PRIMARY KEY(id)
 *   )
 * 
 * @author   Sebastian Bergmann <[EMAIL PROTECTED]>
 * @version  $Id: db.php,v 1.1 2001/03/01 17:22:59 chagenbu Exp $
 * @package  Cache
 */
class Cache_Container_db extends Cache_Container {
  
    /**
     * Name of the DB table to store caching data
     * 
     * @see  Cache_Container_file::$filename_prefix
     */  
    var $cache_table = '';
    
    /**
     * PEAR DB dsn to use.
     * 
     * @var  string
     */
    var $dsn = '';

    /**
     * PEAR DB object
     * 
     * @var  object PEAR_DB
     */
    var $db;
    
    /**
     *
     * @param    mixed
     */    
    function Cache_Container_db($options)
    {
        
        if (!is_array($options) || !isset($options['dsn'])) {
            return new CacheError('No dsn specified!', __FILE__, __LINE__);
        }
        
        $this->setOptions($options, array('dsn', 'cache_table'));
        
        if (!$this->dsn)
            return new CacheError('No dsn specified!', __FILE__, __LINE__);
        
        $this->db = DB::connect($this->dsn, true);
        if (DB::isError($this->db)) {
            return new CacheError('DB::connect failed: ' . 
DB::errorMessage($this->db));
        } else {
            $this->db->setFetchMode(DB_FETCHMODE_ASSOC);
        }
    }
    
    
    function fetch($id)
    {
        $query = sprintf('SELECT data, expires FROM %s WHERE id = %s',
                         $this->cache_table,
                         "'" . $this->db->quoteString($id) . "'");
        
        $res = $this->db->query($query);

        if (DB::isError($res))
            return new CacheError('DB::query failed: ' . DB::errorMessage($res));

        $row = $res->fetchRow();
        
        if (is_array($row))
            return array($row['expires'], $row['data']);
    }
    
    function save($id, $data, $expires = 0)
    {
        $query = sprintf('REPLACE INTO %s (data, expires, id) VALUES (%s, %d, %s)',
                         $this->cache_table,
                         "'" . $this->db->quoteString(serialize($data)) . "'",
                         $expires,
                         "'" . $this->db->quoteString($id) . "'");
        
        $res = $this->db->query($query);
        
        if (DB::isError($res)) {
            return new CacheError('DB::query failed: ' . DB::errorMessage($res));
        }
    }
    
    function delete($id)
    {
        $query = sprintf('DELETE FROM %s WHERE id = %s',
                         $this->cache_table,
                         "'" . $this->db->quoteString($id) . "'");
        
        $res = $this->db->query($query);
        
        if (DB::isError($res))
            return new CacheError('DB::query failed: ' . DB::errorMessage($res));
    }
    
    function flush()
    {
        $query = sprintf('DELETE FROM %s', $this->cache_table);
        
        $res = $this->db->query($query);

        if (DB::isError($res))
            return new CacheError('DB::query failed: ' . DB::errorMessage($res));
    }
    
    function idExists($id)
    {
        $query = sprintf('SELECT id FROM %s WHERE ID = %s', 
                         $this->cache_table,
                         "'" . $this->db->quoteString($id) . "'");
        
        $res = $this->db->query($query);
        
        if (DB::isError($res))
            return new CacheError('DB::query failed: ' . DB::errorMessage($res));

        $row = $res->fetchRow();
        
        if (is_array($row)) {
            return $row['id'];
        } else {
            return false;
        }
    }
    
    function garbageCollection()
    {
        $query = sprintf('DELETE FROM %s WHERE expires <= %d AND expires > 0',
                         $this->cache_table,
                         time());
        
        $res = $this->db->query($query);
        
        if (DB::isError($res)) {
            return new CacheError('DB::query failed: ' . DB::errorMessage($res));
        }
    }
    
}
?> 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to