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

@ -321,6 +321,21 @@ SQL;
return "'".str_replace("'", "''", $str)."'"; return "'".str_replace("'", "''", $str)."'";
} }
// --------------------------------------------------------------------------
/**
* Method to emulate PDO->errorInfo / PDOStatement->errorInfo
*
* @return array
*/
public function errorInfo()
{
$code = ibase_errcode();
$msg = ibase_errmsg();
return array(0, $code, $msg);
}
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------

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,13 +274,39 @@ class DB_Info_Widget extends GtkTable {
return; return;
} }
$dialog = new GTKMessageDialog( // Sometimes there's not an exception,
NULL, // check for an error so as not to
Gtk::DIALOG_MODAL, // give false positive connections
Gtk::MESSAGE_INFO, if(empty($db->errorInfo()))
Gtk::BUTTONS_OK, {
"Successfully connected" $dialog = new GTKMessageDialog(
); NULL,
Gtk::DIALOG_MODAL,
Gtk::MESSAGE_INFO,
Gtk::BUTTONS_OK,
"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;
} }