mirror of
https://github.com/Mibew/design.git
synced 2025-01-22 18:10:33 +03:00
Removed global variables from the Database class constructor and updated tests for the Database class
This commit is contained in:
parent
4db2ce5175
commit
0861fd73d2
@ -22,16 +22,19 @@ class DatabaseTest extends PHPUnit_Framework_TestCase {
|
||||
$this->object = Database::getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tears down the fixture, for example, closes a network connection.
|
||||
* This method is called after a test is executed.
|
||||
*/
|
||||
protected function tearDown() {
|
||||
$this->object->__destruct();
|
||||
}
|
||||
|
||||
public static function setUpBeforeClass() {
|
||||
global $mysqlhost, $mysqllogin, $mysqlpass, $mysqldb;
|
||||
global $mysqlhost, $mysqllogin, $mysqlpass, $mysqldb, $dbencoding,
|
||||
$mysqlprefix, $use_persistent_connection, $force_charset_in_connection;
|
||||
Database::initialize(
|
||||
$mysqlhost,
|
||||
$mysqllogin,
|
||||
$mysqlpass,
|
||||
$use_persistent_connection,
|
||||
$mysqldb,
|
||||
$mysqlprefix,
|
||||
$force_charset_in_connection,
|
||||
$dbencoding
|
||||
);
|
||||
$dbh = new PDO(
|
||||
"mysql:host={$mysqlhost};dbname={$mysqldb}",
|
||||
$mysqllogin,
|
||||
@ -53,6 +56,7 @@ class DatabaseTest extends PHPUnit_Framework_TestCase {
|
||||
);
|
||||
$dbh->exec("DROP TABLE phpunit_test_only");
|
||||
$dbh = NULL;
|
||||
Database::destroy();
|
||||
}
|
||||
|
||||
public function testGetInstance() {
|
||||
@ -61,6 +65,22 @@ class DatabaseTest extends PHPUnit_Framework_TestCase {
|
||||
$anotherDatabaseInstance = NULL;
|
||||
}
|
||||
|
||||
public function testErrorInfo() {
|
||||
$this->object->throwExeptions(true);
|
||||
$this->assertFalse($this->object->errorInfo());
|
||||
try{
|
||||
$this->object->query("SOME_FAKE_QUERY");
|
||||
$this->fail('Exception must be thrown!');
|
||||
} catch(Exception $e) {
|
||||
$errorInfo = $this->object->errorInfo();
|
||||
$this->assertEquals('42000', $errorInfo[0]);
|
||||
$this->assertEquals(1064, $errorInfo[1]);
|
||||
}
|
||||
$this->object->query("SELECT 'test_value'");
|
||||
$errorInfo = $this->object->errorInfo();
|
||||
$this->assertEquals('00000', $errorInfo[0]);
|
||||
}
|
||||
|
||||
public function testQuery() {
|
||||
global $mysqlprefix;
|
||||
|
||||
@ -141,22 +161,6 @@ class DatabaseTest extends PHPUnit_Framework_TestCase {
|
||||
$this->assertEquals($mysqlprefix.'test', $result['field_name']);
|
||||
}
|
||||
|
||||
public function testErrorInfo() {
|
||||
$this->object->throwExeptions(true);
|
||||
$this->assertFalse($this->object->errorInfo());
|
||||
try{
|
||||
$this->object->query("SOME_FAKE_QUERY");
|
||||
$this->fail('Exception must be thrown!');
|
||||
} catch(Exception $e) {
|
||||
$errorInfo = $this->object->errorInfo();
|
||||
$this->assertEquals('42000', $errorInfo[0]);
|
||||
$this->assertEquals(1064, $errorInfo[1]);
|
||||
}
|
||||
$this->object->query("SELECT 'test_value'");
|
||||
$errorInfo = $this->object->errorInfo();
|
||||
$this->assertEquals('00000', $errorInfo[0]);
|
||||
}
|
||||
|
||||
public function testInsertedId() {
|
||||
$this->object->query("INSERT INTO phpunit_test_only (id) VALUES (NULL)");
|
||||
$actual_id = $this->object->insertedId();
|
||||
|
@ -111,80 +111,98 @@ Class Database{
|
||||
protected $throwExceptions = false;
|
||||
|
||||
/**
|
||||
* Get instance of Database class. If no instance exists, creates new instance.
|
||||
* Get instance of Database class.
|
||||
*
|
||||
* If no instance exists, creates new instance.
|
||||
* Use Database::initialize() before try to get an instance. If database was not initilize coorectly triggers an
|
||||
* error with E_USER_ERROR level.
|
||||
*
|
||||
* @return Database
|
||||
* @see Database::initialize()
|
||||
*/
|
||||
public static function getInstance(){
|
||||
if (is_null(self::$instance)) {
|
||||
self::$instance = new Database();
|
||||
trigger_error('Database was not initialized correctly', E_USER_ERROR);
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy internal database object
|
||||
*/
|
||||
public static function destroy(){
|
||||
if (! is_null(self::$instance)) {
|
||||
self::$instance->__destruct();
|
||||
self::$instance = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize database.
|
||||
*
|
||||
* Set internal database and connectionproperties. Create Database object. Create PDO object and store it in the
|
||||
* Database object.
|
||||
*
|
||||
* @param string $host Database host.
|
||||
* @param string $user Database user name.
|
||||
* @param string $pass Database for user with $name password.
|
||||
* @param boolean $use_pconn Control use persistent connection to the database or not.
|
||||
* @param string $db Database name.
|
||||
* @param string $prefix Database tables prefix
|
||||
* @param boolean $force_charset Control force charset in conection or not.
|
||||
* @param string $encoding Contains connection encoding. Using only if $force_charset = true.
|
||||
*/
|
||||
public static function initialize($host, $user, $pass, $use_pconn, $db, $prefix, $force_charset = false, $encoding = 'utf8') {
|
||||
// Check PDO
|
||||
if (! extension_loaded('PDO')) {
|
||||
throw new Exception('PDO extension is not loaded');
|
||||
}
|
||||
|
||||
if (! extension_loaded('pdo_mysql')) {
|
||||
throw new Exception('pdo_mysql extension is not loaded');
|
||||
}
|
||||
|
||||
// Check if initialization
|
||||
if (! is_null(self::$instance)) {
|
||||
throw new Exception('Database already initialized');
|
||||
}
|
||||
|
||||
// Create database instance
|
||||
$instance = new Database();
|
||||
// Set database and connection properties
|
||||
$instance->dbHost = $host;
|
||||
$instance->dbLogin = $user;
|
||||
$instance->dbPass = $pass;
|
||||
$instance->dbName = $db;
|
||||
$instance->dbEncoding = $encoding;
|
||||
$instance->tablesPrefix = $prefix;
|
||||
$instance->forceCharsetInConnection = $force_charset;
|
||||
$instance->usePersistentConnection = $use_pconn;
|
||||
|
||||
// Create PDO object
|
||||
$instance->dbh = new PDO(
|
||||
"mysql:host={$instance->dbHost};dbname={$instance->dbName}",
|
||||
$instance->dbLogin,
|
||||
$instance->dbPass
|
||||
);
|
||||
|
||||
if ($instance->forceCharsetInConnection) {
|
||||
$instance->dbh->exec("SET NAMES ".$instance->dbh->quote($instance->dbEncoding));
|
||||
}
|
||||
|
||||
// Store instance
|
||||
self::$instance = $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Forbid clone objects
|
||||
*/
|
||||
private final function __clone() {}
|
||||
|
||||
/**
|
||||
* Database class constructor. Set internal database and connection
|
||||
* properties. Create PDO object and store it in the Database object.
|
||||
*
|
||||
* @global string $mysqlhost Contains mysql host. defined in
|
||||
* libs/config.php
|
||||
* @global string $mysqllogin Contains mysql login. Defined in
|
||||
* libs/config.php
|
||||
* @global string $mysqlpass Contains mysql password. Defined in
|
||||
* libs/config.php
|
||||
* @global string $mysqldb Contains mysql database name. Defined in
|
||||
* libs/config.php
|
||||
* @global string $dbencoding Contains connection encoding. Defined in
|
||||
* libs/config.php
|
||||
* @global string $mysqlprefix Contains mysql tables prefix. Defined in
|
||||
* libs/config.php
|
||||
* @global boolean $force_charset_in_connection Control force charset in
|
||||
* conection or not. Defined in libs/config.php
|
||||
* @global boolean $use_persistent_connection Control use persistent
|
||||
* connection to the database or not. Defined in libs/config.php
|
||||
* Forbid external object creation
|
||||
*/
|
||||
protected function __construct(){
|
||||
global $mysqlhost, $mysqllogin, $mysqlpass, $mysqldb, $dbencoding,
|
||||
$mysqlprefix, $force_charset_in_connection, $use_persistent_connection;
|
||||
try{
|
||||
if (! extension_loaded('PDO')) {
|
||||
throw new Exception('PDO extension is not loaded');
|
||||
}
|
||||
|
||||
if (! extension_loaded('pdo_mysql')) {
|
||||
throw new Exception('pdo_mysql extension is not loaded');
|
||||
}
|
||||
|
||||
// Set database and connection properties
|
||||
$this->dbHost = $mysqlhost;
|
||||
$this->dbLogin = $mysqllogin;
|
||||
$this->dbPass = $mysqlpass;
|
||||
$this->dbName = $mysqldb;
|
||||
$this->dbEncoding = $dbencoding;
|
||||
$this->tablesPrefix = $mysqlprefix;
|
||||
$this->forceCharsetInConnection = $force_charset_in_connection;
|
||||
$this->usePersistentConnection = $use_persistent_connection;
|
||||
|
||||
// Create PDO object
|
||||
$this->dbh = new PDO(
|
||||
"mysql:host={$this->dbHost};dbname={$this->dbName}",
|
||||
$this->dbLogin,
|
||||
$this->dbPass
|
||||
);
|
||||
|
||||
if ($this->forceCharsetInConnection) {
|
||||
$this->dbh->exec("SET NAMES ".$this->dbh->quote($this->dbEncoding));
|
||||
}
|
||||
|
||||
} catch(Exception $e) {
|
||||
$this->handleError($e);
|
||||
}
|
||||
}
|
||||
protected function __construct() {}
|
||||
|
||||
/**
|
||||
* Handles errors
|
||||
|
@ -26,6 +26,18 @@ require_once(dirname(__FILE__) . '/classes/settings.php');
|
||||
$version = '1.6.5';
|
||||
$jsver = "165";
|
||||
|
||||
// Initialize the database
|
||||
Database::initialize(
|
||||
$mysqlhost,
|
||||
$mysqllogin,
|
||||
$mysqlpass,
|
||||
$use_persistent_connection,
|
||||
$mysqldb,
|
||||
$mysqlprefix,
|
||||
$force_charset_in_connection,
|
||||
$dbencoding
|
||||
);
|
||||
|
||||
function myiconv($in_enc, $out_enc, $string)
|
||||
{
|
||||
global $_utf8win1251, $_win1251utf8;
|
||||
|
Loading…
Reference in New Issue
Block a user