blob: 43a0d391f30f6d0f39de13988c11a3c3fb65b522 [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);
48
49 if ( ! empty($config['dsn']))
Taufan Aditya655a89f2012-03-29 03:00:56 +070050 {
Taufan Adityaa8a2e332012-03-29 03:56:46 +070051 $dsn = $config['dsn'];
Taufan Aditya655a89f2012-03-29 03:00:56 +070052 }
53 else
54 {
Taufan Aditya655a89f2012-03-29 03:00:56 +070055 $dsn = $config['dbdriver'].'://'.$config['username'].':'.$config['password']
56 .'@'.$config['hostname'].'/'.$config['database'];
57
58 }
59
Taufan Adityaa8a2e332012-03-29 03:56:46 +070060 $other_params = array_slice($config, 6);
Taufan Aditya655a89f2012-03-29 03:00:56 +070061
Taufan Adityaee2f5d02012-03-30 06:29:11 +070062 return $dsn.'?'.http_build_query($other_params);
Taufan Adityaa8a2e332012-03-29 03:56:46 +070063 }
64
Taufan Adityaee2f5d02012-03-30 06:29:11 +070065 /**
66 * Return a database config array
67 *
68 * @see ./config
69 * @param string Driver based configuration
70 * @return array
71 */
72 public static function config($driver)
73 {
74 $dir = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR;
75
76 return include($dir.'config'.DIRECTORY_SEPARATOR.$driver.'.php');
77 }
78
79 /**
80 * Main DB method wrapper
81 *
82 * @param string Group or DSN string
83 * @param bool
84 * @return object
85 */
Taufan Adityaa8a2e332012-03-29 03:56:46 +070086 public static function DB($group, $query_builder = FALSE)
87 {
88 include_once(BASEPATH.'database/DB.php');
89
90 try
91 {
92 $db = DB($group, $query_builder);
93 }
94 catch (Exception $e)
95 {
96 throw new InvalidArgumentException($e->getMessage());
97 }
98
99 return $db;
Taufan Aditya655a89f2012-03-29 03:00:56 +0700100 }
101}