From db31bd1c26a3f1c10a7d2c3d366e896b7ceb4081 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Tue, 10 Apr 2012 18:51:29 -0400 Subject: [PATCH] Fix Firebird loading, miscellaneous SQL method improvements --- index.php | 2 +- nbproject/private/private.properties | 6 ++ nbproject/private/private.xml | 4 + nbproject/project.properties | 7 ++ nbproject/project.xml | 9 ++ sys/db/drivers/firebird/firebird_driver.php | 11 --- sys/db/drivers/firebird/firebird_result.php | 16 +++- sys/db/drivers/firebird/firebird_sql.php | 90 ++++++++++++++++---- sys/db/drivers/pgsql/pgsql_sql.php | 24 ++++++ sys/windows/widgets/db_info_widget.php | 2 +- sys/windows/widgets/db_tabs.php | 31 +------ tests/test_dbs/FB_TEST_DB.FDB | Bin 802816 -> 933888 bytes 12 files changed, 143 insertions(+), 59 deletions(-) create mode 100644 nbproject/private/private.properties create mode 100644 nbproject/private/private.xml create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml diff --git a/index.php b/index.php index f4cca98..c06d108 100644 --- a/index.php +++ b/index.php @@ -128,7 +128,7 @@ foreach(pdo_drivers() as $d) // Load Firebird if there is support if(function_exists('fbird_connect')) { - array_map('do_include', glob($path.'*.php')); + array_map('do_include', glob($path.'firebird/*.php')); } // -------------------------------------------------------------------------- diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 0000000..c8d3d05 --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1,6 @@ +auxiliary.org-netbeans-modules-php-editor.dbconn=jdbc:derby://localhost:1527/sample [app on APP] +copy.src.files=false +copy.src.target= +index.file=index.php +run.as=SCRIPT +url=http://localhost/OpenSQLManager/ diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..cc2c0e5 --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,4 @@ + + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..e2559b2 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,7 @@ +include.path=${php.global.include.path} +php.version=PHP_5 +source.encoding=UTF-8 +src.dir=. +tags.asp=false +tags.short=true +web.root=. diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..6d87a83 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,9 @@ + + + org.netbeans.modules.php.project + + + OpenSQLManager + + + diff --git a/sys/db/drivers/firebird/firebird_driver.php b/sys/db/drivers/firebird/firebird_driver.php index c5ca01d..4f8e93c 100644 --- a/sys/db/drivers/firebird/firebird_driver.php +++ b/sys/db/drivers/firebird/firebird_driver.php @@ -45,17 +45,6 @@ class firebird extends DB_PDO { // -------------------------------------------------------------------------- - /** - * Close the link to the database and any existing results - */ - public function __destruct() - { - @fbird_close(); - @fbird_free_result($this->statement); - } - - // -------------------------------------------------------------------------- - /** * Doesn't apply to Firebird */ diff --git a/sys/db/drivers/firebird/firebird_result.php b/sys/db/drivers/firebird/firebird_result.php index ea5a3f6..7d9cc6e 100644 --- a/sys/db/drivers/firebird/firebird_result.php +++ b/sys/db/drivers/firebird/firebird_result.php @@ -51,7 +51,7 @@ class Firebird_Result { switch($fetch_style) { case PDO::FETCH_OBJ: - return fbird_fetch_object($this->statement, IBASE_FETCH_BLOBS); + return fbird_fetch_object($this->statement, F_FETCH_BLOBS); break; case PDO::FETCH_NUM: @@ -85,6 +85,20 @@ class Firebird_Result { return $all; } + + // -------------------------------------------------------------------------- + + /** + * Emulate PDOStatement::fetchColumn + * + * @param int $colum_num + * @return mixed + */ + public function fetchColumn($column_num=0) + { + $row = $this->fetch(PDO::FETCH_NUM); + return $row[$column_num]; + } // -------------------------------------------------------------------------- diff --git a/sys/db/drivers/firebird/firebird_sql.php b/sys/db/drivers/firebird/firebird_sql.php index c7e6feb..4b4acab 100644 --- a/sys/db/drivers/firebird/firebird_sql.php +++ b/sys/db/drivers/firebird/firebird_sql.php @@ -232,10 +232,9 @@ class Firebird_SQL extends DB_SQL { public function table_list() { return <<settings->add_db($data['name'], $data); - if ( ! $res) + if ($res === FALSE) { error("Failed to add database - Connection information invalid"); } diff --git a/sys/windows/widgets/db_tabs.php b/sys/windows/widgets/db_tabs.php index 35c15a4..a59a164 100644 --- a/sys/windows/widgets/db_tabs.php +++ b/sys/windows/widgets/db_tabs.php @@ -123,7 +123,7 @@ class DB_tabs extends GTKNotebook { // 'Procedures' Tab { - self::_add_tab($conn, 'Procedures', 'Procedure name', 'get_procedures'); + self::_add_row_tab($conn, 'Procedures', 'get_procedures'); } // 'Functions' Tab @@ -289,7 +289,7 @@ class DB_tabs extends GTKNotebook { foreach($tab_data[$i] as $v) { $vals[] = ++$j; - $vals[] = $v; + $vals[] = trim($v); } call_user_func_array(array($tab_model, 'set'), $vals); @@ -308,32 +308,5 @@ class DB_tabs extends GTKNotebook { return; } - - /** - * Connects to a different database than the one currently in use - * - * @param type $view - * @param type $path - * @param type $column - * @param type $data - */ - public function _switch_db($view, $path, $column, $data=array()) - { - // Get the selected database - $new_db = $view->get(0); - - // Get existing connections - $conns = DB_REG::get_connections(); - - // Get connection info for existing connections - $conn_info = array(); - - foreach($conns as $c) - { - $conn_info[$c] = Settings::get_instance()->get_db($c); - } - - // @todo figure out how to single out the current db connection - } } // End of db_tabs.php diff --git a/tests/test_dbs/FB_TEST_DB.FDB b/tests/test_dbs/FB_TEST_DB.FDB index 5e0d1f241f3458d4fe3dd15983116aee3d76b42f..5045f8537a3b6b16c2ae50e6e7be3c7a15dc7af5 100755 GIT binary patch delta 23706 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�PnRwS5cZAe}GNML&UiRS|6cJf0zzp@5| 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 M`qlg$+)yX|e*}nE9RL6T delta 41779 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