Better connection testing

This commit is contained in:
Timothy Warren 2012-03-02 16:56:05 -05:00
parent 98ec8cd411
commit f0b6788a33
2 changed files with 57 additions and 8 deletions

View File

@ -324,6 +324,21 @@ SQL;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/**
* Method to emulate PDO->errorInfo / PDOStatement->errorInfo
*
* @return array
*/
public function errorInfo()
{
$code = ibase_errcode();
$msg = ibase_errmsg();
return array(0, $code, $msg);
}
// --------------------------------------------------------------------------
/** /**
* Bind a prepared query with arguments for executing * Bind a prepared query with arguments for executing
* *

View File

@ -247,6 +247,14 @@ class DB_Info_Widget extends GtkTable {
$params->port = $this->port->get_text(); $params->port = $this->port->get_text();
$params->file = $this->db_file->get_filename(); $params->file = $this->db_file->get_filename();
// Return early if a db type isn't selected.
// Better to bail out then crash because of
// silly user input.
if( empty($this->dbtype->get_active_text()))
{
return;
}
try try
{ {
$db = new Query_Builder($params); $db = new Query_Builder($params);
@ -266,6 +274,11 @@ class DB_Info_Widget extends GtkTable {
return; return;
} }
// Sometimes there's not an exception,
// check for an error so as not to
// give false positive connections
if(empty($db->errorInfo()))
{
$dialog = new GTKMessageDialog( $dialog = new GTKMessageDialog(
NULL, NULL,
Gtk::DIALOG_MODAL, Gtk::DIALOG_MODAL,
@ -273,6 +286,27 @@ class DB_Info_Widget extends GtkTable {
Gtk::BUTTONS_OK, Gtk::BUTTONS_OK,
"Successfully connected" "Successfully connected"
); );
}
else
{
$err = $db->errorInfo();
$msg = $err[count($err) - 1];
$code = $err[1];
$dialog = new GTKMessageDialog(
NULL,
Gtk::DIALOG_MODAL,
Gtk::MESSAGE_ERROR,
Gtk::BUTTONS_OK,
"Error connecting to database: \n\n" .
"Error # {$code}\n".
$msg
);
}
$dialog->run(); $dialog->run();
$dialog->destroy(); $dialog->destroy();
@ -301,7 +335,7 @@ class DB_Info_Widget extends GtkTable {
foreach($pdo_drivers as $d) foreach($pdo_drivers as $d)
{ {
// Skip sqlite2 as opposed to sqlite3 // Skip sqlite2 as opposed to sqlite3
if($d === 'sqlite2' && in_array('sqlite', $pdo_drivers)) if($d === 'sqlite2' && (in_array('sqlite', $pdo_drivers) || in_array('sqlite3', $pdo_drivers)))
{ {
continue; continue;
} }