mirror of
https://gitlab.com/hashborgir/d2tools.git
synced 2025-04-27 14:55:38 +00:00
294 lines
5.9 KiB
PHP
294 lines
5.9 KiB
PHP
<?php
|
|
|
|
namespace RedBeanPHP\Adapter;
|
|
|
|
use RedBeanPHP\Observable as Observable;
|
|
use RedBeanPHP\Adapter as Adapter;
|
|
use RedBeanPHP\Driver as Driver;
|
|
|
|
/**
|
|
* DBAdapter (Database Adapter)
|
|
*
|
|
* An adapter class to connect various database systems to RedBean
|
|
* Database Adapter Class. The task of the database adapter class is to
|
|
* communicate with the database driver. You can use all sorts of database
|
|
* drivers with RedBeanPHP. The default database drivers that ships with
|
|
* the RedBeanPHP library is the RPDO driver ( which uses the PHP Data Objects
|
|
* Architecture aka PDO ).
|
|
*
|
|
* @file RedBeanPHP/Adapter/DBAdapter.php
|
|
* @author Gabor de Mooij and the RedBeanPHP Community.
|
|
* @license BSD/GPLv2
|
|
*
|
|
* @copyright
|
|
* (c) copyright G.J.G.T. (Gabor) de Mooij and the RedBeanPHP community.
|
|
* This source file is subject to the BSD/GPLv2 License that is bundled
|
|
* with this source code in the file license.txt.
|
|
*/
|
|
class DBAdapter extends Observable implements Adapter
|
|
{
|
|
/**
|
|
* @var Driver
|
|
*/
|
|
private $db = NULL;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $sql = '';
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* Creates an instance of the RedBean Adapter Class.
|
|
* This class provides an interface for RedBean to work
|
|
* with ADO compatible DB instances.
|
|
*
|
|
* Usage:
|
|
*
|
|
* <code>
|
|
* $database = new RPDO( $dsn, $user, $pass );
|
|
* $adapter = new DBAdapter( $database );
|
|
* $writer = new PostgresWriter( $adapter );
|
|
* $oodb = new OODB( $writer, FALSE );
|
|
* $bean = $oodb->dispense( 'bean' );
|
|
* $bean->name = 'coffeeBean';
|
|
* $id = $oodb->store( $bean );
|
|
* $bean = $oodb->load( 'bean', $id );
|
|
* </code>
|
|
*
|
|
* The example above creates the 3 RedBeanPHP core objects:
|
|
* the Adapter, the Query Writer and the OODB instance and
|
|
* wires them together. The example also demonstrates some of
|
|
* the methods that can be used with OODB, as you see, they
|
|
* closely resemble their facade counterparts.
|
|
*
|
|
* The wiring process: create an RPDO instance using your database
|
|
* connection parameters. Create a database adapter from the RPDO
|
|
* object and pass that to the constructor of the writer. Next,
|
|
* create an OODB instance from the writer. Now you have an OODB
|
|
* object.
|
|
*
|
|
* @param Driver $database ADO Compatible DB Instance
|
|
*/
|
|
public function __construct( $database )
|
|
{
|
|
$this->db = $database;
|
|
}
|
|
|
|
/**
|
|
* Returns a string containing the most recent SQL query
|
|
* processed by the database adapter, thus conforming to the
|
|
* interface:
|
|
*
|
|
* @see Adapter::getSQL
|
|
*
|
|
* Methods like get(), getRow() and exec() cause this SQL cache
|
|
* to get filled. If no SQL query has been processed yet this function
|
|
* will return an empty string.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getSQL()
|
|
{
|
|
return $this->sql;
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::exec
|
|
*/
|
|
public function exec( $sql, $bindings = array(), $noevent = FALSE )
|
|
{
|
|
if ( !$noevent ) {
|
|
$this->sql = $sql;
|
|
$this->signal( 'sql_exec', $this );
|
|
}
|
|
|
|
return $this->db->Execute( $sql, $bindings );
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::get
|
|
*/
|
|
public function get( $sql, $bindings = array() )
|
|
{
|
|
$this->sql = $sql;
|
|
$this->signal( 'sql_exec', $this );
|
|
|
|
return $this->db->GetAll( $sql, $bindings );
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getRow
|
|
*/
|
|
public function getRow( $sql, $bindings = array() )
|
|
{
|
|
$this->sql = $sql;
|
|
$this->signal( 'sql_exec', $this );
|
|
|
|
return $this->db->GetRow( $sql, $bindings );
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getCol
|
|
*/
|
|
public function getCol( $sql, $bindings = array() )
|
|
{
|
|
$this->sql = $sql;
|
|
$this->signal( 'sql_exec', $this );
|
|
|
|
return $this->db->GetCol( $sql, $bindings );
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getAssoc
|
|
*/
|
|
public function getAssoc( $sql, $bindings = array() )
|
|
{
|
|
$this->sql = $sql;
|
|
|
|
$this->signal( 'sql_exec', $this );
|
|
|
|
$rows = $this->db->GetAll( $sql, $bindings );
|
|
|
|
if ( !$rows ) return array();
|
|
|
|
$assoc = array();
|
|
|
|
foreach ( $rows as $row ) {
|
|
if ( empty( $row ) ) continue;
|
|
|
|
$key = array_shift( $row );
|
|
switch ( count( $row ) ) {
|
|
case 0:
|
|
$value = $key;
|
|
break;
|
|
case 1:
|
|
$value = reset( $row );
|
|
break;
|
|
default:
|
|
$value = $row;
|
|
}
|
|
|
|
$assoc[$key] = $value;
|
|
}
|
|
|
|
return $assoc;
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getAssocRow
|
|
*/
|
|
public function getAssocRow($sql, $bindings = array())
|
|
{
|
|
$this->sql = $sql;
|
|
$this->signal( 'sql_exec', $this );
|
|
|
|
return $this->db->GetAssocRow( $sql, $bindings );
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getCell
|
|
*/
|
|
public function getCell( $sql, $bindings = array(), $noSignal = NULL )
|
|
{
|
|
$this->sql = $sql;
|
|
|
|
if ( !$noSignal ) $this->signal( 'sql_exec', $this );
|
|
|
|
return $this->db->GetOne( $sql, $bindings );
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getCursor
|
|
*/
|
|
public function getCursor( $sql, $bindings = array() )
|
|
{
|
|
return $this->db->GetCursor( $sql, $bindings );
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getInsertID
|
|
*/
|
|
public function getInsertID()
|
|
{
|
|
return $this->db->getInsertID();
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getAffectedRows
|
|
*/
|
|
public function getAffectedRows()
|
|
{
|
|
return $this->db->Affected_Rows();
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getDatabase
|
|
*/
|
|
public function getDatabase()
|
|
{
|
|
return $this->db;
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::startTransaction
|
|
*/
|
|
public function startTransaction()
|
|
{
|
|
$this->db->StartTrans();
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::commit
|
|
*/
|
|
public function commit()
|
|
{
|
|
$this->db->CommitTrans();
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::rollback
|
|
*/
|
|
public function rollback()
|
|
{
|
|
$this->db->FailTrans();
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::close.
|
|
*/
|
|
public function close()
|
|
{
|
|
$this->db->close();
|
|
}
|
|
|
|
/**
|
|
* Sets initialization code for connection.
|
|
*
|
|
* @param callable $code
|
|
*/
|
|
public function setInitCode($code) {
|
|
$this->db->setInitCode($code);
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::setOption
|
|
*/
|
|
public function setOption( $optionKey, $optionValue ) {
|
|
if ( method_exists( $this->db, $optionKey ) ) {
|
|
call_user_func( array( $this->db, $optionKey ), $optionValue );
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/**
|
|
* @see Adapter::getDatabaseServerVersion
|
|
*/
|
|
public function getDatabaseServerVersion()
|
|
{
|
|
return $this->db->DatabaseServerVersion();
|
|
}
|
|
}
|