Skip to content
This repository was archived by the owner on Sep 10, 2021. It is now read-only.

Commit 2be8d79

Browse files
author
Jamie Snape
committed
Add support for socket connections to databases
1 parent b236905 commit 2be8d79

File tree

14 files changed

+251
-230
lines changed

14 files changed

+251
-230
lines changed

core/Bootstrap.php

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,28 +77,29 @@ protected function _initConfig()
7777
$configDatabase = new Zend_Config_Ini(DATABASE_CONFIG, $configGlobal->environment, true);
7878
if($configDatabase->database->type == 'pdo')
7979
{
80-
// Does the server PDO support MySQL?
81-
if(!defined('PDO::MYSQL_ATTR_USE_BUFFERED_QUERY'))
80+
if(empty($configDatabase->database->params->driver_options))
8281
{
83-
throw new Zend_Exception('It appears PDO is not setup to support MySQL. '.
84-
'Please check your PDO configuration.');
85-
}
86-
if(isset($configDatabase->database->params->driver_options))
87-
{
88-
$pdoParams = $configDatabase->database->params->driver_options->toArray();
82+
$driverOptions = array();
8983
}
9084
else
9185
{
92-
$pdoParams = array();
86+
$driverOptions = $configDatabase->database->params->driver_options->toArray();
9387
}
94-
$pdoParams[PDO::MYSQL_ATTR_USE_BUFFERED_QUERY] = true;
88+
$driverOptions[PDO::MYSQL_ATTR_USE_BUFFERED_QUERY] = true;
9589
$params = array(
96-
'host' => $configDatabase->database->params->host,
90+
'dbname' => $configDatabase->database->params->dbname,
9791
'username' => $configDatabase->database->params->username,
9892
'password' => $configDatabase->database->params->password,
99-
'dbname' => $configDatabase->database->params->dbname,
100-
'port' => $configDatabase->database->params->port,
101-
'driver_options' => $pdoParams);
93+
'driver_options' => $driverOptions);
94+
if(empty($configDatabase->database->params->unix_socket))
95+
{
96+
$params['host'] = $configDatabase->database->params->host;
97+
$params['port'] = $configDatabase->database->params->port;
98+
}
99+
else
100+
{
101+
$params['unix_socket'] = $configDatabase->database->params->unix_socket;
102+
}
102103
if($configGlobal->environment == 'production')
103104
{
104105
Zend_Loader::loadClass('ProductionDbProfiler', BASE_PATH . '/core/models/profiler');

core/configs/database.ini

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,29 @@ database.profiler = 0
44
database.adapter = PDO_MYSQL
55
database.params.host = localhost
66
database.params.port = 3306
7-
database.params.username = root
8-
database.params.password = set_your_password
7+
database.params.unix_socket =
98
database.params.dbname = midas
9+
database.params.username = root
10+
database.params.password =
1011

1112
[development]
1213
database.type = pdo
1314
database.profiler = 1
1415
database.adapter = PDO_MYSQL
1516
database.params.host = localhost
1617
database.params.port = 3306
17-
database.params.username = root
18-
database.params.password = set_your_password
18+
database.params.unix_socket =
1919
database.params.dbname = midas
20+
database.params.username = root
21+
database.params.password =
2022

2123
[testing]
2224
database.type = pdo
2325
database.profiler = 1
2426
database.adapter = PDO_MYSQL
2527
database.params.host = localhost
2628
database.params.port = 3306
27-
database.params.username = root
28-
database.params.password = set_your_password
29+
database.params.unix_socket =
2930
database.params.dbname = midas_test
31+
database.params.username = root
32+
database.params.password =

core/controllers/InstallController.php

Lines changed: 68 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -114,100 +114,76 @@ function step2Action()
114114
$form = $this->Form->Install->createDBForm($type);
115115
if($form->isValid($this->getRequest()->getPost()))
116116
{
117-
$databaseConfig = parse_ini_file(CORE_CONFIGS_PATH . '/database.ini', true);
117+
$configDatabase = parse_ini_file(CORE_CONFIGS_PATH . '/database.ini', true);
118118
require_once BASE_PATH . '/core/controllers/components/UpgradeComponent.php';
119119
$upgradeComponent = new UpgradeComponent();
120120
$upgradeComponent->dir = BASE_PATH . '/core/database/'.$type;
121121
$upgradeComponent->init = true;
122122
$sqlFile = $upgradeComponent->getNewestVersion(true);
123123
$sqlFile = BASE_PATH . '/core/database/'.$type.'/'.$sqlFile.'.sql';
124+
124125
if(!isset($sqlFile) || !file_exists($sqlFile))
125126
{
126127
throw new Zend_Exception('Unable to find sql file');
127128
}
128129

129-
switch($type)
130+
$dbtype = 'PDO_' . strtoupper($type);
131+
$version = str_replace('.sql', '', basename($sqlFile));
132+
133+
$configDatabase['production']['database.type'] = 'pdo';
134+
$configDatabase['production']['database.adapter'] = $dbtype;
135+
$configDatabase['production']['database.params.host'] = $form->getValue('host');
136+
$configDatabase['production']['database.params.port'] = $form->getValue('port');
137+
$configDatabase['production']['database.params.unix_socket'] = $form->getValue('unix_socket');
138+
$configDatabase['production']['database.params.dbname'] = $form->getValue('dbname');
139+
$configDatabase['production']['database.params.username'] = $form->getValue('username');
140+
$configDatabase['production']['database.params.password'] = $form->getValue('password');
141+
$configDatabase['production']['version'] = $version;
142+
143+
$configDatabase['development']['database.type'] = 'pdo';
144+
$configDatabase['development']['database.adapter'] = $dbtype;
145+
$configDatabase['development']['database.params.host'] = $form->getValue('host');
146+
$configDatabase['development']['database.params.port'] = $form->getValue('port');
147+
$configDatabase['development']['database.params.unix_socket'] = $form->getValue('unix_socket');
148+
$configDatabase['development']['database.params.dbname'] = $form->getValue('dbname');
149+
$configDatabase['development']['database.params.username'] = $form->getValue('username');
150+
$configDatabase['development']['database.params.password'] = $form->getValue('password');
151+
$configDatabase['development']['version'] = $version;
152+
153+
$driverOptions = array();
154+
$params = array(
155+
'dbname' => $form->getValue('dbname'),
156+
'username' => $form->getValue('username'),
157+
'password' => $form->getValue('password'),
158+
'driver_options' => $driverOptions);
159+
$unixsocket = $form->getValue('unix_socket');
160+
if($unixsocket)
130161
{
131-
case 'mysql':
132-
$this->Component->Utility->run_mysql_from_file($sqlFile,
133-
$form->getValue('host'), $form->getValue('username'), $form->getValue('password'), $form->getValue('dbname'), $form->getValue('port'));
134-
$params = array(
135-
'host' => $form->getValue('host'),
136-
'username' => $form->getValue('username'),
137-
'password' => $form->getValue('password'),
138-
'dbname' => $form->getValue('dbname'),
139-
'port' => $form->getValue('port'),
140-
);
141-
142-
$databaseConfig['production']['database.type'] = 'pdo';
143-
$databaseConfig['development']['database.type'] = 'pdo';
144-
$databaseConfig['production']['database.adapter'] = 'PDO_MYSQL';
145-
$databaseConfig['development']['database.adapter'] = 'PDO_MYSQL';
146-
$databaseConfig['production']['database.params.host'] = $form->getValue('host');
147-
$databaseConfig['development']['database.params.host'] = $form->getValue('host');
148-
$databaseConfig['production']['database.params.username'] = $form->getValue('username');
149-
$databaseConfig['development']['database.params.username'] = $form->getValue('username');
150-
$databaseConfig['production']['database.params.password'] = $form->getValue('password');
151-
$databaseConfig['development']['database.params.password'] = $form->getValue('password');
152-
$databaseConfig['production']['database.params.dbname'] = $form->getValue('dbname');
153-
$databaseConfig['development']['database.params.dbname'] = $form->getValue('dbname');
154-
$databaseConfig['development']['database.params.port'] = $form->getValue('port');
155-
$databaseConfig['production']['database.params.port'] = $form->getValue('port');
156-
157-
$db = Zend_Db::factory('PDO_MYSQL', $params);
158-
Zend_Db_Table::setDefaultAdapter($db);
159-
Zend_Registry::set('dbAdapter', $db);
160-
161-
$dbtype = 'PDO_MYSQL';
162-
break;
163-
case 'pgsql':
164-
$this->Component->Utility->run_pgsql_from_file($sqlFile,
165-
$form->getValue('host'), $form->getValue('username'), $form->getValue('password'), $form->getValue('dbname'), $form->getValue('port'));
166-
$params = array(
167-
'host' => $form->getValue('host'),
168-
'username' => $form->getValue('username'),
169-
'password' => $form->getValue('password'),
170-
'dbname' => $form->getValue('dbname'),
171-
'port' => $form->getValue('port'),
172-
);
173-
174-
$databaseConfig['production']['database.type'] = 'pdo';
175-
$databaseConfig['development']['database.type'] = 'pdo';
176-
$databaseConfig['production']['database.adapter'] = 'PDO_PGSQL';
177-
$databaseConfig['development']['database.adapter'] = 'PDO_PGSQL';
178-
$databaseConfig['production']['database.params.host'] = $form->getValue('host');
179-
$databaseConfig['development']['database.params.host'] = $form->getValue('host');
180-
$databaseConfig['production']['database.params.username'] = $form->getValue('username');
181-
$databaseConfig['development']['database.params.username'] = $form->getValue('username');
182-
$databaseConfig['production']['database.params.password'] = $form->getValue('password');
183-
$databaseConfig['development']['database.params.password'] = $form->getValue('password');
184-
$databaseConfig['production']['database.params.dbname'] = $form->getValue('dbname');
185-
$databaseConfig['development']['database.params.dbname'] = $form->getValue('dbname');
186-
$databaseConfig['development']['database.params.port'] = $form->getValue('port');
187-
$databaseConfig['production']['database.params.port'] = $form->getValue('port');
188-
189-
$db = Zend_Db::factory('PDO_PGSQL', $params);
190-
Zend_Db_Table::setDefaultAdapter($db);
191-
Zend_Registry::set('dbAdapter', $db);
192-
$dbtype = 'PDO_PGSQL';
193-
break;
194-
default:
195-
break;
162+
$params['unix_socket'] = $unixsocket;
196163
}
197-
$databaseConfig['production']['version'] = str_replace('.sql', '', basename($sqlFile));
198-
$databaseConfig['development']['version'] = str_replace('.sql', '', basename($sqlFile));
164+
else
165+
{
166+
$params['host'] = $form->getValue('host');
167+
$params['port'] = $form->getValue('port');
168+
}
169+
170+
$db = Zend_Db::factory($dbtype, $params);
171+
$this->Component->Utility->run_sql_from_file($db, $sqlFile);
172+
173+
Zend_Db_Table::setDefaultAdapter($db);
174+
Zend_Registry::set('dbAdapter', $db);
199175

200-
$this->Component->Utility->createInitFile(LOCAL_CONFIGS_PATH . '/database.local.ini', $databaseConfig);
176+
$this->Component->Utility->createInitFile(LOCAL_CONFIGS_PATH . '/database.local.ini', $configDatabase);
201177

202178
// Must generate and store our password salt before we create our first user
203-
$appConfig = parse_ini_file(CORE_CONFIGS_PATH . '/application.ini', true);
204-
$appConfig['global']['password.prefix'] = UtilityComponent::generateRandomString(32);
179+
$configApplication = parse_ini_file(CORE_CONFIGS_PATH . '/application.ini', true);
180+
$configApplication['global']['password.prefix'] = UtilityComponent::generateRandomString(32);
205181

206182
// Verify whether the user wants to use gravatars or not
207-
$appConfig['global']['gravatar'] = $form->getValue('gravatar');
183+
$configApplication['global']['gravatar'] = $form->getValue('gravatar');
208184

209185
// Save the new config
210-
$this->Component->Utility->createInitFile(LOCAL_CONFIGS_PATH . '/application.local.ini', $appConfig);
186+
$this->Component->Utility->createInitFile(LOCAL_CONFIGS_PATH . '/application.local.ini', $configApplication);
211187
$configGlobal = new Zend_Config_Ini(LOCAL_CONFIGS_PATH . '/application.local.ini', 'global', true);
212188
Zend_Registry::set('configGlobal', $configGlobal);
213189

@@ -268,6 +244,7 @@ function step3Action()
268244

269245
$this->view->form = $formArray;
270246
$this->view->databaseType = Zend_Registry::get('configDatabase')->database->adapter;
247+
271248
if($this->_request->isPost() && $form->isValid($this->getRequest()->getPost()))
272249
{
273250
$allModules = $this->Component->Utility->getAllModules();
@@ -279,6 +256,7 @@ function step3Action()
279256
unlink($configLocal);
280257
}
281258
}
259+
282260
$applicationConfig['global']['application.name'] = $form->getValue('name');
283261
$applicationConfig['global']['application.description'] = $form->getValue('description');
284262
$applicationConfig['global']['application.keywords'] = $form->getValue('keywords');
@@ -301,12 +279,23 @@ public function testconnectionAction()
301279
$this->_helper->viewRenderer->setNoRender();
302280
try
303281
{
304-
$db = Zend_Db::factory('PDO_' . strtoupper($this->_getParam('type')), array(
305-
'host' => $this->_getParam('host'),
306-
'port' => $this->_getParam('port'),
282+
$driverOptions = array();
283+
$params = array(
284+
'dbname' => $this->_getParam('dbname'),
307285
'username' => $this->_getParam('username'),
308286
'password' => $this->_getParam('password'),
309-
'dbname' => $this->_getParam('dbname')));
287+
'driver_options' => $driverOptions);
288+
$unixsocket = $this->_getParam('unix_socket');
289+
if($unixsocket)
290+
{
291+
$params['unix_socket'] = $this->_getParam('unix_socket');
292+
}
293+
else
294+
{
295+
$params['host'] = $this->_getParam('host');
296+
$params['port'] = $this->_getParam('port');
297+
}
298+
$db = Zend_Db::factory('PDO_' . strtoupper($this->_getParam('type')), $params);
310299
$tables = $db->listTables();
311300
if(count($tables) > 0)
312301
{
@@ -320,7 +309,7 @@ public function testconnectionAction()
320309
}
321310
catch(Zend_Exception $exception)
322311
{
323-
$return = array(false, 'Could not connect to the database server: ' . $exception->getMessage());
312+
$return = array(false, 'Could not connect to the database');
324313
}
325314
echo JsonComponent::encode($return);
326315
}

core/controllers/components/UpgradeComponent.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public function initUpgrade($module, $db, $dbtype)
5656
$this->dbtypeShort = 'pgsql';
5757
break;
5858
default:
59-
throw new Zend_Exception("Unknow database type");
59+
throw new Zend_Exception("Unknown database type");
6060
break;
6161
}
6262
$this->init = true;

core/controllers/components/UtilityComponent.php

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -354,15 +354,8 @@ public static function safedelete($filename)
354354
}
355355

356356
/** Function to run a SQL script */
357-
static function run_query_from_file($adapter, $sqlfile, $host, $username, $password, $dbname, $port)
357+
static function run_sql_from_file($db, $sqlfile)
358358
{
359-
$db = Zend_Db::factory($adapter, array(
360-
'host' => $host,
361-
'port' => $port,
362-
'username' => $username,
363-
'password' => $password,
364-
'dbname' => $dbname));
365-
366359
try
367360
{
368361
$db->getConnection();
@@ -399,18 +392,6 @@ static function run_query_from_file($adapter, $sqlfile, $host, $username, $passw
399392
return true;
400393
}
401394

402-
/** Function to run a MySQL script */
403-
static function run_mysql_from_file($sqlfile, $host, $username, $password, $dbname, $port)
404-
{
405-
return self::run_query_from_file('PDO_MYSQL', $sqlfile, $host, $username, $password, $dbname, $port);
406-
}
407-
408-
/** Function to run a PostgreSQL script */
409-
static function run_pgsql_from_file($sqlfile, $host, $username, $password, $dbname, $port)
410-
{
411-
return self::run_query_from_file('PDO_PGSQL', $sqlfile, $host, $username, $password, $dbname, $port);
412-
}
413-
414395
/** Get the data directory */
415396
public static function getDataDirectory($subdir = '')
416397
{
@@ -501,28 +482,43 @@ public function installModule($moduleName)
501482

502483
try
503484
{
504-
switch(Zend_Registry::get('configDatabase')->database->adapter)
485+
$configDatabase = Zend_Registry::get('configDatabase');
486+
if(empty($configDatabase->database->params->driver_options))
487+
{
488+
$driverOptions = array();
489+
}
490+
else
491+
{
492+
$driverOptions = $configDatabase->database->params->driver_options->toArray();
493+
}
494+
$params = array(
495+
'dbname' => $configDatabase->database->params->dbname,
496+
'username' => $configDatabase->database->params->username,
497+
'password' => $configDatabase->database->params->password,
498+
'driver_options' => $driverOptions);
499+
if(empty($configDatabase->database->params->unix_socket))
500+
{
501+
$params['host'] = $configDatabase->database->params->host;
502+
$params['port'] = $configDatabase->database->params->port;
503+
}
504+
else
505+
{
506+
$params['unix_socket'] = $configDatabase->database->params->unix_socket;
507+
}
508+
$db = Zend_Db::factory($configDatabase->database->adapter, $params);
509+
510+
switch($configDatabase->database->adapter)
505511
{
506512
case 'PDO_MYSQL':
507513
if(file_exists(BASE_PATH.'/modules/'.$moduleName.'/database/mysql/'.$version.'.sql'))
508514
{
509-
$this->run_mysql_from_file(BASE_PATH.'/modules/'.$moduleName.'/database/mysql/'.$version.'.sql',
510-
Zend_Registry::get('configDatabase')->database->params->host,
511-
Zend_Registry::get('configDatabase')->database->params->username,
512-
Zend_Registry::get('configDatabase')->database->params->password,
513-
Zend_Registry::get('configDatabase')->database->params->dbname,
514-
Zend_Registry::get('configDatabase')->database->params->port);
515+
$this->run_sql_from_file($db, BASE_PATH.'/modules/'.$moduleName.'/database/mysql/'.$version.'.sql');
515516
}
516517
break;
517518
case 'PDO_PGSQL':
518519
if(file_exists(BASE_PATH.'/modules/'.$moduleName.'/database/pgsql/'.$version.'.sql'))
519520
{
520-
$this->run_pgsql_from_file(BASE_PATH.'/modules/'.$moduleName.'/database/pgsql/'.$version.'.sql',
521-
Zend_Registry::get('configDatabase')->database->params->host,
522-
Zend_Registry::get('configDatabase')->database->params->username,
523-
Zend_Registry::get('configDatabase')->database->params->password,
524-
Zend_Registry::get('configDatabase')->database->params->dbname,
525-
Zend_Registry::get('configDatabase')->database->params->port);
521+
$this->run_sql_from_file($db, BASE_PATH.'/modules/'.$moduleName.'/database/pgsql/'.$version.'.sql');
526522
}
527523
break;
528524
default:

0 commit comments

Comments
 (0)