blob: 59028ed9c81cc49e41d549367abf16651d510bb3 [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 Aditya19725142012-04-04 23:46:23 +070048 $dsnstring = ( ! empty($config['dsn'])) ? $config['dsn'] : FALSE;
Taufan Adityaf4c6c9b2012-04-04 23:24:09 +070049 $pdodriver = ( ! empty($config['pdodriver'])) ? $config['pdodriver'] : FALSE;
50 $failover = ( ! empty($config['failover'])) ? $config['failover'] : FALSE;
Taufan Adityaa8a2e332012-03-29 03:56:46 +070051
Taufan Aditya19725142012-04-04 23:46:23 +070052 $dsn = $config['dbdriver'].'://'.$config['username'].':'.$config['password']
Taufan Aditya655a89f2012-03-29 03:00:56 +070053 .'@'.$config['hostname'].'/'.$config['database'];
54
Taufan Adityaf4c6c9b2012-04-04 23:24:09 +070055 // Build the parameter
Taufan Adityaa8a2e332012-03-29 03:56:46 +070056 $other_params = array_slice($config, 6);
Taufan Aditya19725142012-04-04 23:46:23 +070057 if ($dsnstring) $other_params['dsn'] = $dsnstring;
Taufan Adityaf4c6c9b2012-04-04 23:24:09 +070058 if ($pdodriver) $other_params['pdodriver'] = $pdodriver;
59 if ($failover) $other_params['failover'] = $failover;
Taufan Aditya655a89f2012-03-29 03:00:56 +070060
Taufan Adityaee2f5d02012-03-30 06:29:11 +070061 return $dsn.'?'.http_build_query($other_params);
Taufan Adityaa8a2e332012-03-29 03:56:46 +070062 }
63
Taufan Adityaee2f5d02012-03-30 06:29:11 +070064 /**
65 * Return a database config array
66 *
67 * @see ./config
68 * @param string Driver based configuration
69 * @return array
70 */
71 public static function config($driver)
72 {
73 $dir = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR;
74
75 return include($dir.'config'.DIRECTORY_SEPARATOR.$driver.'.php');
76 }
77
78 /**
79 * Main DB method wrapper
80 *
81 * @param string Group or DSN string
82 * @param bool
83 * @return object
84 */
Taufan Adityaa8a2e332012-03-29 03:56:46 +070085 public static function DB($group, $query_builder = FALSE)
86 {
87 include_once(BASEPATH.'database/DB.php');
88
89 try
90 {
91 $db = DB($group, $query_builder);
92 }
93 catch (Exception $e)
94 {
95 throw new InvalidArgumentException($e->getMessage());
96 }
97
98 return $db;
Taufan Aditya655a89f2012-03-29 03:00:56 +070099 }
100}