198 lines
		
	
	
		
			No EOL
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			No EOL
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
#   Copyright (C) 2006-2010 Tobias Leupold <tobias.leupold@web.de>
 | 
						|
#
 | 
						|
#   This file is part of the b8 package
 | 
						|
#
 | 
						|
#   This program is free software; you can redistribute it and/or modify it
 | 
						|
#   under the terms of the GNU Lesser General Public License as published by
 | 
						|
#   the Free Software Foundation in version 2.1 of the License.
 | 
						|
#
 | 
						|
#   This program is distributed in the hope that it will be useful, but
 | 
						|
#   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 | 
						|
#   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 | 
						|
#   License for more details.
 | 
						|
#
 | 
						|
#   You should have received a copy of the GNU Lesser General Public License
 | 
						|
#   along with this program; if not, write to the Free Software Foundation,
 | 
						|
#   Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
 | 
						|
 | 
						|
/**
 | 
						|
 * The DBA (Berkeley DB) abstraction layer for communicating with the database.
 | 
						|
 * Copyright (C) 2006-2010 Tobias Leupold <tobias.leupold@web.de>
 | 
						|
 *
 | 
						|
 * @license LGPL
 | 
						|
 * @access public
 | 
						|
 * @package b8
 | 
						|
 * @author Tobias Leupold
 | 
						|
 */
 | 
						|
 | 
						|
class b8_storage_dba extends b8_storage_base
 | 
						|
{
 | 
						|
 | 
						|
	public $config = array(
 | 
						|
		'database'    => 'wordlist.db',
 | 
						|
		'handler'     => 'db4',
 | 
						|
	);
 | 
						|
 | 
						|
	public $b8_config = array(
 | 
						|
		'degenerator' => NULL,
 | 
						|
		'today'       => NULL
 | 
						|
	);
 | 
						|
 | 
						|
	private $_db          = NULL;
 | 
						|
 | 
						|
	const DATABASE_CONNECTION_FAIL = 'DATABASE_CONNECTION_FAIL';
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Constructs the database layer.
 | 
						|
	 *
 | 
						|
	 * @access public
 | 
						|
	 * @param string $config
 | 
						|
	 */
 | 
						|
 | 
						|
	function __construct($config, $degenerator, $today)
 | 
						|
	{
 | 
						|
 | 
						|
		# Pass some variables of the main b8 config to this class
 | 
						|
		$this->b8_config['degenerator'] = $degenerator;
 | 
						|
		$this->b8_config['today']       = $today;
 | 
						|
 | 
						|
		# Validate the config items
 | 
						|
		if(count($config) > 0) {
 | 
						|
			foreach ($config as $name => $value) {
 | 
						|
				$this->config[$name] = (string) $value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Closes the database connection.
 | 
						|
	 *
 | 
						|
	 * @access public
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
 | 
						|
	function __destruct()
 | 
						|
	{
 | 
						|
		if($this->_db !== NULL) {
 | 
						|
			dba_close($this->_db);
 | 
						|
			$this->connected = FALSE;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Connect to the database and do some checks.
 | 
						|
	 *
 | 
						|
	 * @access public
 | 
						|
	 * @return mixed Returns TRUE on a successful database connection, otherwise returns a constant from b8.
 | 
						|
	 */
 | 
						|
 | 
						|
	public function connect()
 | 
						|
	{
 | 
						|
 | 
						|
		# Have we already connected?
 | 
						|
		if($this->_db !== NULL)
 | 
						|
			return TRUE;
 | 
						|
 | 
						|
		# Open the database connection
 | 
						|
		$this->_db = dba_open(dirname(__FILE__) . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . $this->config['database'], "w", $this->config['handler']);
 | 
						|
 | 
						|
		if($this->_db === FALSE) {
 | 
						|
			$this->connected = FALSE;
 | 
						|
			$this->_db = NULL;
 | 
						|
			return self::DATABASE_CONNECTION_FAIL;
 | 
						|
		}
 | 
						|
 | 
						|
		# Everything is okay and connected
 | 
						|
 | 
						|
		$this->connected = TRUE;
 | 
						|
 | 
						|
		# Let's see if this is a b8 database and the version is okay
 | 
						|
		return $this->check_database();
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Does the actual interaction with the database when fetching data.
 | 
						|
	 *
 | 
						|
	 * @access protected
 | 
						|
	 * @param array $tokens
 | 
						|
	 * @return mixed Returns an array of the returned data in the format array(token => data) or an empty array if there was no data.
 | 
						|
	 */
 | 
						|
 | 
						|
	protected function _get_query($tokens)
 | 
						|
	{
 | 
						|
 | 
						|
		$data = array();
 | 
						|
 | 
						|
		foreach ($tokens as $token) {
 | 
						|
 | 
						|
			$count = dba_fetch($token, $this->_db);
 | 
						|
 | 
						|
			if($count !== FALSE)
 | 
						|
				$data[$token] = $count;
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		return $data;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Store a token to the database.
 | 
						|
	 *
 | 
						|
	 * @access protected
 | 
						|
	 * @param string $token
 | 
						|
	 * @param string $count
 | 
						|
	 * @return bool TRUE on success or FALSE on failure
 | 
						|
	 */
 | 
						|
 | 
						|
	protected function _put($token, $count) {
 | 
						|
		return dba_insert($token, $count, $this->_db);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Update an existing token.
 | 
						|
	 *
 | 
						|
	 * @access protected
 | 
						|
	 * @param string $token
 | 
						|
	 * @param string $count
 | 
						|
	 * @return bool TRUE on success or FALSE on failure
 | 
						|
	 */
 | 
						|
 | 
						|
	protected function _update($token, $count)
 | 
						|
	{
 | 
						|
		return dba_replace($token, $count, $this->_db);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Remove a token from the database.
 | 
						|
	 *
 | 
						|
	 * @access protected
 | 
						|
	 * @param string $token
 | 
						|
	 * @return bool TRUE on success or FALSE on failure
 | 
						|
	 */
 | 
						|
 | 
						|
	protected function _del($token)
 | 
						|
	{
 | 
						|
		return dba_delete($token, $this->_db);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Does nothing :-D
 | 
						|
	 *
 | 
						|
	 * @access protected
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
 | 
						|
	protected function _commit()
 | 
						|
	{
 | 
						|
		# We just need this function because the (My)SQL backend(s) need it.
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
?>
 |