blob: c30e6d2e626e36694f5fec728955985b96a6a9f8 [file] [log] [blame]
Taufan Aditya655a89f2012-03-29 03:00:56 +07001<?php
2
3class Mock_Database_DB {
4
Taufan Adityaee2f5d02012-03-30 06:29:11 +07005 /**
6 * @var array DB configuration
7 */
Taufan Aditya655a89f2012-03-29 03:00:56 +07008 private $config = array();
9
10 /**
11 * Prepare database configuration skeleton
12 *
13 * @param array DB configuration to set
14 * @return void
15 */
16 public function __construct($config = array())
17 {
Taufan Aditya655a89f2012-03-29 03:00:56 +070018 $this->config = $config;
19 }
20
Taufan Adityaee2f5d02012-03-30 06:29:11 +070021 /**
22 * Build DSN connection string for DB driver instantiate process
23 *
24 * @param string Group name
25 * @return string DSN Connection string
26 */
Taufan Adityaa8a2e332012-03-29 03:56:46 +070027 public function set_dsn($group = 'default')
Taufan Aditya655a89f2012-03-29 03:00:56 +070028 {
29 if ( ! isset($this->config[$group]))
30 {
31 throw new InvalidArgumentException('Group '.$group.' not exists');
32 }
33
Taufan Adityaa8a2e332012-03-29 03:56:46 +070034 $params = array(
35 'dbprefix' => '',
36 'pconnect' => FALSE,
Taufan Adityaee2f5d02012-03-30 06:29:11 +070037 'db_debug' => FALSE,
Taufan Adityaa8a2e332012-03-29 03:56:46 +070038 'cache_on' => FALSE,
39 'cachedir' => '',
40 'char_set' => 'utf8',
41 'dbcollat' => 'utf8_general_ci',
42 'swap_pre' => '',
43 'autoinit' => TRUE,
44 'stricton' => FALSE,
Taufan Adityaa8a2e332012-03-29 03:56:46 +070045 );
46
47 $config = array_merge($this->config[$group], $params);
Taufan Adityaf4c6c9b2012-04-04 23:24:09 +070048 $pdodriver = ( ! empty($config['pdodriver'])) ? $config['pdodriver'] : FALSE;
49 $failover = ( ! empty($config['failover'])) ? $config['failover'] : FALSE;
Taufan Adityaa8a2e332012-03-29 03:56:46 +070050
51 if ( ! empty($config['dsn']))
Taufan Aditya655a89f2012-03-29 03:00:56 +070052 {
Taufan Adityaa8a2e332012-03-29 03:56:46 +070053 $dsn = $config['dsn'];
Taufan Aditya655a89f2012-03-29 03:00:56 +070054 }
55 else
56 {
Taufan Aditya655a89f2012-03-29 03:00:56 +070057 $dsn = $config['dbdriver'].'://'.$config['username'].':'.$config['password']
58 .'@'.$config['hostname'].'/'.$config['database'];
59
60 }
61
Taufan Adityaf4c6c9b2012-04-04 23:24:09 +070062 // Build the parameter
Taufan Adityaa8a2e332012-03-29 03:56:46 +070063 $other_params = array_slice($config, 6);
Taufan Adityaf4c6c9b2012-04-04 23:24:09 +070064 $other_params['dsn'] = $dsn;
65 if ($pdodriver) $other_params['pdodriver'] = $pdodriver;
66 if ($failover) $other_params['failover'] = $failover;
Taufan Aditya655a89f2012-03-29 03:00:56 +070067
Taufan Adityaee2f5d02012-03-30 06:29:11 +070068 return $dsn.'?'.http_build_query($other_params);
Taufan Adityaa8a2e332012-03-29 03:56:46 +070069 }
70
Taufan Adityaee2f5d02012-03-30 06:29:11 +070071 /**
72 * Return a database config array
73 *
74 * @see ./config
75 * @param string Driver based configuration
76 * @return array
77 */
78 public static function config($driver)
79 {
80 $dir = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR;
81
82 return include($dir.'config'.DIRECTORY_SEPARATOR.$driver.'.php');
83 }
84
85 /**
86 * Main DB method wrapper
87 *
88 * @param string Group or DSN string
89 * @param bool
90 * @return object
91 */
Taufan Adityaa8a2e332012-03-29 03:56:46 +070092 public static function DB($group, $query_builder = FALSE)
93 {
94 include_once(BASEPATH.'database/DB.php');
95
96 try
97 {
98 $db = DB($group, $query_builder);
99 }
100 catch (Exception $e)
101 {
102 throw new InvalidArgumentException($e->getMessage());
103 }
104
105 return $db;
Taufan Aditya655a89f2012-03-29 03:00:56 +0700106 }
107}