--- /dev/null
+<?php
+
+class IPF_Command_DB
+{
+ public $command = 'db';
+ public $description = 'Database console';
+
+ public function run($args=null)
+ {
+ $db = IPF_ORM_Manager::getInstance()->connectionParameters(IPF::get('database', IPF::get('dsn')));
+
+ if ($db['scheme'] === 'mysql') {
+ IPF_Shell::call('mysql',
+ '-h'.$db['host'],
+ '-u'.$db['username'],
+ '-p'.$db['password'],
+ $db['database']);
+ } else {
+ print 'Do not know how to connect to "'.$db['scheme'].'" database.';
+ }
+ }
+}
+
if (!($adapter instanceof PDO))
throw new IPF_ORM_Exception("First argument should be an instance of PDO");
$driverName = $adapter->getAttribute(PDO::ATTR_DRIVER_NAME);
- } else if (is_array($adapter)) {
- if (!count($adapter))
- throw new IPF_ORM_Exception('Empty data source name given.');
-
- if (array_key_exists('database', $adapter)) {
- $adapter['dsn'] = $this->makeDsnForPDO($adapter['driver'], $adapter['host'], @$adapter['port'], $adapter['database']);
- } else {
- $adapter = array(
- 'dsn' => urldecode($adapter[0]),
- 'username' => (isset($adapter[1])) ? urldecode($adapter[1]) : null,
- 'password' => (isset($adapter[2])) ? urldecode($adapter[2]) : null,
- );
- }
-
- $e = explode(':', $adapter['dsn']);
- $driverName = $e[0] !== 'uri' ? $e[0] : 'odbc';
} else {
- $adapter = $this->parseDsn($adapter);
- $adapter['username'] = $adapter['user'];
- $adapter['password'] = $adapter['pass'];
+ $adapter = $this->connectionParameters($adapter);
$driverName = $adapter['scheme'];
}
return $this->_connections[$name];
}
+ public function connectionParameters($adapter)
+ {
+ if (is_array($adapter)) {
+ if (!count($adapter))
+ throw new IPF_ORM_Exception('Empty data source name given.');
+
+ if (array_key_exists('database', $adapter)) {
+ $adapter['dsn'] = $this->makeDsnForPDO($adapter['driver'], $adapter['host'], @$adapter['port'], $adapter['database']);
+ $adapter['scheme'] = $adapter['driver'];
+ return $adapter;
+ } else {
+ $dsn = urldecode($adapter[0]);
+ $result = $this->parseDsn($dsn);
+ $result['username'] = (isset($adapter[1])) ? urldecode($adapter[1]) : null;
+ $result['password'] = (isset($adapter[2])) ? urldecode($adapter[2]) : null;
+ return $result;
+ }
+ } else {
+ $result = $this->parseDsn($adapter);
+ $result['username'] = $result['user'];
+ $result['password'] = $result['pass'];
+ return $result;
+ }
+ }
+
public function parsePdoDsn($dsn)
{
$parts = array();
--- /dev/null
+<?php
+
+class IPF_Shell
+{
+ public static function call()
+ {
+ return self::callv(func_get_args());
+ }
+
+ public static function callv($command)
+ {
+ $str = '';
+ foreach ($command as $part) {
+ $str .= escapeshellarg($part) . ' ';
+ }
+ $descriptorspec = array(
+ 0 => STDIN,
+ 1 => STDOUT,
+ 2 => STDERR
+ );
+ $process = proc_open($str, $descriptorspec, $pipes);
+ proc_close($process);
+ }
+}
+