Load DB classes based on support
Reorganized db class loading, improvements to settings class.
This commit is contained in:
parent
9707d708cb
commit
120b526293
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
|||||||
# Ignore the stupid .DS_Store files
|
# Ignore the stupid .DS_Store files
|
||||||
*.DS_Store
|
*.DS_Store
|
||||||
|
settings.json
|
||||||
|
errors.txt
|
||||||
|
|
||||||
|
111
src/common/db_pdo.php
Normal file
111
src/common/db_pdo.php
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* OpenSQLManager
|
||||||
|
*
|
||||||
|
* Free Database manager for Open Source Databases
|
||||||
|
*
|
||||||
|
* @author Timothy J. Warren
|
||||||
|
* @copyright Copyright (c) 2012
|
||||||
|
* @link https://github.com/aviat4ion/OpenSQLManager
|
||||||
|
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base Database class
|
||||||
|
*
|
||||||
|
* Extends PDO to simplify cross-database issues
|
||||||
|
*/
|
||||||
|
class DB_PDO extends PDO {
|
||||||
|
|
||||||
|
protected $statement;
|
||||||
|
|
||||||
|
function __construct($dsn, $username=NULL, $password=NULL, $driver_options=array())
|
||||||
|
{
|
||||||
|
parent::__construct($dsn, $username, $password, $driver_options);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simplifies prepared statements for database queries
|
||||||
|
*
|
||||||
|
* @param string $sql
|
||||||
|
* @param array $data
|
||||||
|
* @return mixed PDOStatement / FALSE
|
||||||
|
*/
|
||||||
|
function prepare_query($sql, $data)
|
||||||
|
{
|
||||||
|
// Prepare the sql
|
||||||
|
$query = $this->prepare($sql);
|
||||||
|
|
||||||
|
if( ! is_like_array($query))
|
||||||
|
{
|
||||||
|
$this->get_last_error();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the statement in the class variable for easy later access
|
||||||
|
$this->statement =& $query;
|
||||||
|
|
||||||
|
|
||||||
|
if( ! is_like_array($data))
|
||||||
|
{
|
||||||
|
trigger_error("Invalid data argument");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bind the parameters
|
||||||
|
foreach($data as $k => $value)
|
||||||
|
{
|
||||||
|
$res = $query->bindValue($k, $value);
|
||||||
|
|
||||||
|
if( ! $res)
|
||||||
|
{
|
||||||
|
trigger_error("Parameter not successfully bound");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retreives the data from a select query
|
||||||
|
*
|
||||||
|
* @param PDOStatement $statement
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function get_query_data($statement)
|
||||||
|
{
|
||||||
|
// Execute the query
|
||||||
|
$statement->execute();
|
||||||
|
|
||||||
|
// Return the data array fetched
|
||||||
|
return $statement->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns number of rows affected by an INSERT, UPDATE, DELETE type query
|
||||||
|
*
|
||||||
|
* @param PDOStatement $statement
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
function get_rows_changed($statement)
|
||||||
|
{
|
||||||
|
// Execute the query
|
||||||
|
$statement->execute();
|
||||||
|
|
||||||
|
// Return number of rows affected
|
||||||
|
return $statement->rowCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// End of db_pdo.php
|
@ -39,6 +39,12 @@ class Settings {
|
|||||||
$this->current = json_decode(file_get_contents($path));
|
$this->current = json_decode(file_get_contents($path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add the DB object under the settings if it doesn't already exist
|
||||||
|
if( ! isset($this->current->dbs))
|
||||||
|
{
|
||||||
|
$this->current->dbs = new stdClass();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -48,7 +54,39 @@ class Settings {
|
|||||||
*/
|
*/
|
||||||
function __destruct()
|
function __destruct()
|
||||||
{
|
{
|
||||||
file_put_contents(json_encode($this->current), BASE_DIR.'/settings.json');
|
file_put_contents(BASE_DIR.'/settings.json', json_encode($this->current));
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic method to simplify isset checking for config options
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @return $mixed
|
||||||
|
*/
|
||||||
|
function __get($key)
|
||||||
|
{
|
||||||
|
return (isset($this->current->{$key})) ? $this->current->{$key} : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic method to simplify setting config options
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @param mixed $val
|
||||||
|
*/
|
||||||
|
function __set($key, $val)
|
||||||
|
{
|
||||||
|
//Don't allow direct db config changes
|
||||||
|
if($key == "dbs")
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->current->{$key} = $val;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -56,14 +94,38 @@ class Settings {
|
|||||||
/**
|
/**
|
||||||
* Add a database connection
|
* Add a database connection
|
||||||
*
|
*
|
||||||
* @param string $type
|
* @param string $name
|
||||||
* @param string $host
|
* @param array $params
|
||||||
* @param string $user
|
|
||||||
* @param string $pass
|
|
||||||
*/
|
*/
|
||||||
function add_db($type, $host, $user, $pass)
|
function add_db($name, $params)
|
||||||
{
|
{
|
||||||
|
if(empty($this->current->dbs->{$name}))
|
||||||
|
{
|
||||||
|
$this->current->dbs->{$name} = $params;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a database connection
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
*/
|
||||||
|
function remove_db($name)
|
||||||
|
{
|
||||||
|
if( ! isset($this->current->dbs->{$name}))
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the db name from the object
|
||||||
|
unset($this->current->dbs->{$name});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// End of settings.php
|
// End of settings.php
|
@ -12,12 +12,6 @@
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
// Test for support
|
|
||||||
if( ! function_exists('ibase_connect'))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Firebird Database class
|
* Firebird Database class
|
||||||
*
|
*
|
||||||
|
@ -12,12 +12,6 @@
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
// Test for support
|
|
||||||
if( ! in_array('mysql', pdo_drivers()))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MySQL specific class
|
* MySQL specific class
|
||||||
*
|
*
|
||||||
@ -27,7 +21,9 @@ class MySQL extends DB_PDO {
|
|||||||
|
|
||||||
function __construct($dsn, $username=null, $password=null, $options=array())
|
function __construct($dsn, $username=null, $password=null, $options=array())
|
||||||
{
|
{
|
||||||
parent::__construct($dsn, $username, $password, $options);
|
parent::__construct("mysql:$dsn", $username, $password, $options);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -12,12 +12,6 @@
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
// Test for support
|
|
||||||
if( ! in_array('odbc', pdo_drivers()))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ODBC Database Driver
|
* ODBC Database Driver
|
||||||
*
|
*
|
||||||
@ -29,7 +23,7 @@ class ODBC extends DB_PDO {
|
|||||||
|
|
||||||
function __construct($dsn, $username=null, $password=null, $options=array())
|
function __construct($dsn, $username=null, $password=null, $options=array())
|
||||||
{
|
{
|
||||||
parent::__construct($dsn, $username, $password, $options);
|
parent::__construct("odbc:$dsn", $username, $password, $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,12 +12,6 @@
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
// Test for support
|
|
||||||
if( ! in_array('pgsql', pdo_drivers()))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PostgreSQL specifc class
|
* PostgreSQL specifc class
|
||||||
*
|
*
|
||||||
@ -27,7 +21,7 @@ class pgSQL extends DB_PDO {
|
|||||||
|
|
||||||
function __construct($dsn, $username=null, $password=null, $options=array())
|
function __construct($dsn, $username=null, $password=null, $options=array())
|
||||||
{
|
{
|
||||||
parent::__construct($dsn, $username, $password, $options);
|
parent::__construct("pgsql:$dsn", $username, $password, $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -12,12 +12,6 @@
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
// Test for support
|
|
||||||
if( ! in_array('sqlite', pdo_drivers()))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SQLite specific class
|
* SQLite specific class
|
||||||
*
|
*
|
||||||
@ -25,9 +19,25 @@ if( ! in_array('sqlite', pdo_drivers()))
|
|||||||
*/
|
*/
|
||||||
class SQLite extends DB_PDO {
|
class SQLite extends DB_PDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static function to simply creating dsn for the current database driver
|
||||||
|
*
|
||||||
|
* @return SQLite object
|
||||||
|
*/
|
||||||
|
static function connect()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open SQLite Database
|
||||||
|
*
|
||||||
|
* @param string $dsn
|
||||||
|
*/
|
||||||
function __construct($dsn)
|
function __construct($dsn)
|
||||||
{
|
{
|
||||||
parent::__construct($dsn);
|
// DSN is simply `sqlite:/path/to/db`
|
||||||
|
parent::__construct("sqlite:{$dsn}");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -37,7 +47,23 @@ class SQLite extends DB_PDO {
|
|||||||
*/
|
*/
|
||||||
function truncate($table)
|
function truncate($table)
|
||||||
{
|
{
|
||||||
|
// SQLite has a TRUNCATE optimization,
|
||||||
|
// but no support for the actual command.
|
||||||
|
$sql = "DELETE FROM {$table}";
|
||||||
|
$this->query($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an sqlite database file
|
||||||
|
*
|
||||||
|
* @param $path
|
||||||
|
*/
|
||||||
|
function create_db($path)
|
||||||
|
{
|
||||||
|
// Create the file if it doesn't exist
|
||||||
|
if( ! file_exists($path))
|
||||||
|
{
|
||||||
|
touch($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -10,9 +10,9 @@
|
|||||||
* @license http://philsturgeon.co.uk/code/dbad-license
|
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bootstrap file
|
* Bootstrap file
|
||||||
*
|
*
|
||||||
* Initializes parent window and starts the GTK event loop
|
* Initializes parent window and starts the GTK event loop
|
||||||
@ -20,8 +20,17 @@
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Suppress errors that php-gtk puts out
|
||||||
error_reporting(-1 & ~(E_STRICT | E_DEPRECATED));
|
error_reporting(-1 & ~(E_STRICT | E_DEPRECATED));
|
||||||
|
|
||||||
|
// Set the stupid timezone so PHP shuts up.
|
||||||
|
date_default_timezone_set('GMT');
|
||||||
|
|
||||||
|
// Set the current directory as the base for included files
|
||||||
|
define('BASE_DIR', dirname(__FILE__));
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log fatal errors
|
* Log fatal errors
|
||||||
*/
|
*/
|
||||||
@ -42,14 +51,24 @@ function log_fatal()
|
|||||||
|
|
||||||
register_shutdown_function('log_fatal');
|
register_shutdown_function('log_fatal');
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
// Make sure php-gtk works
|
// Make sure php-gtk works
|
||||||
if ( ! class_exists('gtk'))
|
if ( ! class_exists('gtk'))
|
||||||
{
|
{
|
||||||
die("Please load the php-gtk2 module in your php.ini\r\n");
|
trigger_error("PHP-gtk not found. Please load the php-gtk2 module in your php.ini", E_USER_ERROR);
|
||||||
|
|
||||||
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the stupid timezone so PHP shuts up.
|
// Make sure pdo exists
|
||||||
date_default_timezone_set('GMT');
|
if( ! class_exists('pdo'))
|
||||||
|
{
|
||||||
|
trigger_error("PHP support for PDO is required.", E_USER_ERROR);
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
// Bulk loading wrapper workaround for PHP < 5.4
|
// Bulk loading wrapper workaround for PHP < 5.4
|
||||||
function do_include($path)
|
function do_include($path)
|
||||||
@ -57,16 +76,35 @@ function do_include($path)
|
|||||||
require_once($path);
|
require_once($path);
|
||||||
}
|
}
|
||||||
|
|
||||||
define('BASE_DIR', dirname(__FILE__));
|
|
||||||
|
|
||||||
// Load modules
|
|
||||||
// Load everything so that we don't have to do requires later
|
// Load everything so that we don't have to do requires later
|
||||||
{
|
{
|
||||||
array_map('do_include', glob(BASE_DIR . "/common/*.php"));
|
array_map('do_include', glob(BASE_DIR . "/common/*.php"));
|
||||||
array_map('do_include', glob(BASE_DIR . "/databases/*.php"));
|
|
||||||
array_map('do_include', glob(BASE_DIR . "/windows/*.php"));
|
array_map('do_include', glob(BASE_DIR . "/windows/*.php"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Load db classes based on capability
|
||||||
|
$path = BASE_DIR . "/databases/";
|
||||||
|
|
||||||
|
foreach(pdo_drivers() as $d)
|
||||||
|
{
|
||||||
|
$file = "{$path}{$d}.php";
|
||||||
|
|
||||||
|
if(is_file($file))
|
||||||
|
{
|
||||||
|
require_once($file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load Firebird if there is support
|
||||||
|
if(function_exists('ibase_connect'))
|
||||||
|
{
|
||||||
|
require_once("{$path}firebird.php");
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
// Create the main window
|
// Create the main window
|
||||||
$wnd = new Main();
|
$wnd = new Main();
|
||||||
|
|
||||||
|
@ -17,13 +17,15 @@
|
|||||||
*/
|
*/
|
||||||
class Add_DB extends GtkWindow {
|
class Add_DB extends GtkWindow {
|
||||||
|
|
||||||
var $conn, $dbtype, $host, $user, $password, $database;
|
var $conn, $dbtype, $host, $user, $password, $database, $settings;
|
||||||
|
|
||||||
function __construct()
|
function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
|
||||||
$this->set_title("OpenSQLManager - Add Database Connection");
|
$this->settings = new Settings();
|
||||||
|
|
||||||
|
$this->set_title("Add Database Connection");
|
||||||
|
|
||||||
// Add the Vbox, and show the window
|
// Add the Vbox, and show the window
|
||||||
$this->add($this->_layout());
|
$this->add($this->_layout());
|
||||||
@ -114,6 +116,11 @@ class Add_DB extends GtkWindow {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace default capitalization with something that looks better.
|
||||||
|
$d = str_replace("sql", "SQL", $d);
|
||||||
|
$d = str_ireplace("pg", "Postgre", $d);
|
||||||
|
$d = ucfirst($d);
|
||||||
|
|
||||||
$drivers[] = $d;
|
$drivers[] = $d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user