sbergmann               Thu Mar  1 07:42:36 2001 EDT

  Added files:                 
    /php4/pear/Cache/Container  cache_container_phplib.php 
  Log:
  Added Cache Container class for PHPLIB's database abstraction layer DB_Sql. I can't 
test this right now, but Ulf told me earlier today that it works fine.
  

Index: php4/pear/Cache/Container/cache_container_phplib.php
+++ php4/pear/Cache/Container/cache_container_phplib.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: cache_container_phplib.php,v 1.1 2001/03/01 15:42:36 sbergmann Exp $

require_once("Cache/Container/cache_container.php");

/*
CREATE TABLE cache (
  id       CHAR(32) NOT NULL DEFAULT '',
  data     TEXT NOT NULL DEFAULT '',
  expires  INT(9) NOT NULL DEFAULT 0,
  
  changed  TIMESTAMP(14),
  
  INDEX (expires),
  PRIMARY KEY (id)
)
*/

/**
* Stores cache data into a database table.
* 
* @author   Ulf Wendel  <[EMAIL PROTECTED]>, Sebastian Bergmann 
<[EMAIL PROTECTED]>
* @version  $Id: cache_container_phplib.php,v 1.1 2001/03/01 15:42:36 sbergmann Exp $
* @package  Cache
*/
class cache_container_phplib extends cache_container {
  
    /**
    * Name of the DB table to store caching data
    * 
    * @see  cache_container_file::$filename_prefix
    */  
    var $cache_table = "cache";
    
    /**
    * PHPLib object
    * 
    * @var  object PEAR_DB
    */
    var $db;
    
    
    /**
    * Name of the PHPLib DB class to use
    * 
    * @var  string  
    * @see  $db_path, $local_path
    */
    var $db_class = "";
    
    
    /**
    * Filename of your local.inc
    * 
    * If empty, "local.inc" is assumed.
    *
    * @var       string
    */
    var $local_file = "";
       

    /**
    * Include path for you local.inc
    *
    * HINT: If your're not using prepend.php you must 
    * take care that all classes (files) references by you 
    * local.inc are included automatically. So you might 
    * want to write a new local2.inc that only referrs to 
    * the database class (file) you're using and includes all required files!
    *
    * @var  string  path to your local.inc - make sure to add a trailing slash
    * @see  $local_file
    */
    var $local_path = "";
    
    
    /**
    *
    * @param    mixed
    */    
    function cache_container_phplib($options = "") {
    
        if (is_array($options))
            $this->setOptions($options, array("db_class", "db_file", "db_path", 
"local_file", "local_path"));

        if (!$this->db_class)
            return new CacheError("No database class specified.", __FILE__, __LINE__);

        // include the required files            
        include_once($this->local_path . $this->local_file);

        // create a db object                
        $this->db = new $this->db_class;

    } // end constructor
    
    
    function fetch($id) {
    
        $query = sprintf("SELECT expires, data FROM %s WHERE id = '%s'",
                            $this->cache_table, 
                            $id
                         );
        $this->db->query($query);
        if (!$this->db->Next_Record())
            return array(NULL, NULL);
            
        return array($this->db->f("expires"), $this->decode($this->db->f("data")));
    } // end func fetch
    
    
    function save($id, $data, $expires = 0) {
        
        $query = sprintf("REPLACE INTO %s (data, expires, id) VALUES ('%s', %d, '%s')",
                            $this->cache_table,
                            $this->encode($data),
                            $expires,
                            $id
                         );
        $this->db->query($query);                         
        
        return (boolean)$this->db->affected_rows();        
    } // end func save
    
    
    function delete($id) {
        
        $query = sprintf("DELETE FROM %s WHERE id = '%s'",
                            $this->cache_table,
                            $id
                          );
        $this->db->query($query);
        
        return (boolean)$this->db->affected_rows();                          
    } // end func delete
    
    
    function flush() {
        
        $query = sprintf("DELETE FROM %s", $this->cache_table);
        $this->db->query($query);

        return $this->db->affected_rows();        
    } // end func flush
    
    
    function idExists($id) {
        
        $query = sprintf("SELECT id FROM %s WHERE ID = '%s'", 
                            $this->cache_table,
                            $id
                         );
        
    } // end func isExists
    
    
    function garbageCollection() {
        
        $query = sprintf("DELETE FORM %s WHERE expires <= %d AND expires > 0", 
                            $this->cache_table, 
                            time()
                         );
        #$this->db->query($query);
                                 
    } // end func garbageCollection
    
    
} // end class cache_container_phplib
?>


-- 
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