* A class that implements the DB interface for Postgres\r
* Note: This class uses ADODB and returns RecordSets.\r
*\r
- * $Id: Postgres71.php,v 1.8 2002/05/01 09:37:30 chriskl Exp $\r
+ * $Id: Postgres71.php,v 1.9 2002/07/11 06:02:57 chriskl Exp $\r
*/\r
\r
// @@@ THOUGHT: What about inherits? ie. use of ONLY???\r
function hasTypes() { return true; }\r
function hasAggregates() { return true; }\r
function hasRules() { return true; }\r
+ function hasSchemas() { return false; }\r
\r
}\r
\r
--- /dev/null
+<?php\r
+\r
+/**\r
+ * A class that implements the DB interface for Postgres\r
+ * Note: This class uses ADODB and returns RecordSets.\r
+ *\r
+ * $Id: Postgres73.php,v 1.1 2002/07/11 06:02:57 chriskl Exp $\r
+ */\r
+\r
+// @@@ THOUGHT: What about inherits? ie. use of ONLY???\r
+\r
+include_once('../classes/database/Postgres71.php');\r
+\r
+class Postgres73 extends Postgres71 {\r
+\r
+ var $nspFields = array('nspname' => 'nspname', 'nspowner' => 'nspowner');\r
+\r
+ // Store the current schema\r
+ var $_schema = 'public';\r
+\r
+ // @@ Should we bother querying for this?\r
+ var $_lastSystemOID = 16568;\r
+\r
+ function Postgres73($host, $port, $database, $user, $password) {\r
+ $this->Postgres71($host, $port, $database, $user, $password);\r
+ }\r
+\r
+ // Schema functions\r
+ \r
+ /**\r
+ * Sets the current schema search path\r
+ * @param $path An array of schemas in required search order\r
+ * @return 0 success\r
+ * @return -1 Array not passed\r
+ * @return -2 Array must contain at least one item\r
+ */\r
+ function setSearchPath($paths) {\r
+ if (!is_array($paths)) return -1;\r
+ elseif (sizeof($paths) == 0) return -2;\r
+ $this->arrayClean($paths);\r
+ \r
+ $sql = 'SET SEARCH_PATH="' . implode('"', $paths) . '"';\r
+ \r
+ return $this->execute($sql);\r
+ } \r
+ \r
+ /**\r
+ * Return all schemas in the current database\r
+ * @return All schemas, sorted alphabetically - but with PUBLIC first (if it exists)\r
+ */\r
+ function &getSchemas() {\r
+ if (!$this->_showSystem) $and = "AND nspname NOT LIKE 'pg_%' ";\r
+ else $and = '';\r
+ $sql = "SELECT nspname, nspowner FROM pg_namespace WHERE nspname = 'public'\r
+ UNION ALL\r
+ SELECT nspname, nspowner FROM pg_namespace WHERE nspname != 'public' {$and}ORDER BY nspname";\r
+ \r
+ return $this->selectSet($sql);\r
+ }\r
+ \r
+ /**\r
+ * Return all information relating to a schema\r
+ * @param $schema The name of the schema\r
+ * @return Schema information\r
+ */\r
+ function &getSchemaByName($schema) {\r
+ $this->clean($schema);\r
+ $sql = "SELECT * FROM pg_namespace WHERE nspname='{$schema}'";\r
+ return $this->selectRow($sql);\r
+ }\r
+\r
+ /**\r
+ * Creates a new schema.\r
+ * @param $schemaname The name of the schema to create\r
+ * @param $authorization (optional) The username to create the schema for.\r
+ * @param $authorization (optional) If omitted, defaults to current user.\r
+ * @return 0 success\r
+ */\r
+ function createSchema($schemaname, $authorization = '') {\r
+ $this->clean($schemaname);\r
+ $this->clean($authorization);\r
+ \r
+ $sql = "CREATE SCHEMA \"{$schemaname}\"";\r
+ if ($authorization != '') $sql .= " AUTHORIZATION \"{$authorization}\"";\r
+ \r
+ return $this->execute($sql);\r
+ }\r
+ \r
+ /**\r
+ * Drops a schema.\r
+ * @param $schemaname The name of the schema to drop\r
+ * @return 0 success\r
+ */\r
+ function dropSchema($schemaname) {\r
+ $this->clean($schemaname);\r
+ \r
+ $sql = "DROP SCHEMA \"{$schemaname}\"";\r
+ \r
+ return $this->execute($sql);\r
+ }\r
+\r
+ // Table functions\r
+\r
+ /**\r
+ * Return all tables in current database\r
+ * @return All tables, sorted alphabetically \r
+ */\r
+ function &getTables() {\r
+ $sql = "SELECT tablename, tableowner FROM pg_tables ORDER BY tablename";\r
+ return $this->selectSet($sql);\r
+ }\r
+\r
+ /**\r
+ * Return all information relating to a table\r
+ * @param $table The name of the table\r
+ * @return Table information\r
+ */\r
+ function &getTableByName($table) {\r
+ $this->clean($table);\r
+ $sql = "SELECT * FROM pg_class WHERE relname='{$table}'";\r
+ return $this->selectRow($sql);\r
+ }\r
+\r
+ /**\r
+ * Sets whether or not a column can contain NULLs\r
+ * @param $table The table that contains the column\r
+ * @param $column The column to alter\r
+ * @param $state True to set null, false to set not null\r
+ * @return 0 success\r
+ * @return -1 attempt to set not null, but column contains nulls\r
+ * @return -2 transaction error\r
+ * @return -3 lock error\r
+ * @return -4 update error\r
+ */\r
+ function setColumnNull($table, $column, $state) {\r
+ $this->clean($table);\r
+ $this->clean($column);\r
+\r
+ $sql = "ALTER TABLE \"{$table}\" ALTER COLUMN \"{$column}\" " . (($state) ? 'DROP' : 'SET') . " NOT NULL";\r
+\r
+ return $this->execute($sql);\r
+ }\r
+\r
+ // View functions\r
+ \r
+ /**\r
+ * Returns a list of all views in the database\r
+ * @return All views\r
+ */\r
+ function getViews() {\r
+ if (!$this->_showSystem)\r
+ $where = "WHERE viewname NOT LIKE 'pg_%'";\r
+ else $where = '';\r
+ \r
+ $sql = "SELECT viewname, viewowner FROM pg_views {$where} ORDER BY viewname";\r
+\r
+ return $this->selectSet($sql);\r
+ }\r
+\r
+ // Operator functions\r
+ \r
+ /**\r
+ * Returns a list of all operators in the database\r
+ * @return All operators\r
+ */\r
+ function getOperators() {\r
+ if (!$this->_showSystem)\r
+ $where = "WHERE po.oid > '{$this->_lastSystemOID}'::oid";\r
+ else $where = '';\r
+ \r
+ $sql = "\r
+ SELECT\r
+ po.oid,\r
+ po.oprname,\r
+ (SELECT typname FROM pg_type pt WHERE pt.oid=po.oprleft) AS oprleftname,\r
+ (SELECT typname FROM pg_type pt WHERE pt.oid=po.oprright) AS oprrightname,\r
+ (SELECT typname FROM pg_type pt WHERE pt.oid=po.oprresult) AS resultname\r
+ FROM\r
+ pg_operator po\r
+ {$where} \r
+ ORDER BY\r
+ po.oprname, po.oid\r
+ ";\r
+\r
+ return $this->selectSet($sql);\r
+ }\r
+ \r
+ // Capabilities\r
+ function hasSchemas() { return true; }\r
+\r
+}\r
+\r
+?>
\ No newline at end of file
/**\r
* Main object browser\r
*\r
- * $Id: browser.php,v 1.6 2002/05/15 09:57:55 chriskl Exp $\r
+ * $Id: browser.php,v 1.7 2002/07/11 06:02:57 chriskl Exp $\r
*/\r
\r
// Include application functions\r
while (!$databases->EOF) {\r
$node = $tree->add_folder($root, htmlspecialchars($databases->f[$data->dbFields['dbname']]), \r
'database.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
- if ($data->hasTables())\r
- $tree->add_document($node, $strTables, 'tables.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/tables.gif");\r
- if ($data->hasViews())\r
- $tree->add_document($node, $strViews, 'views.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/views.gif");\r
-/* if ($data->hasTriggers())\r
- $tree->add_document($node, $strTriggers, 'triggers.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
- if ($data->hasRules())\r
- $tree->add_document($node, $strRules, 'rules.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));*/\r
- if ($data->hasSequences())\r
- $tree->add_document($node, $strSequences, 'sequences.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/sequences.gif");\r
- if ($data->hasFunctions())\r
- $tree->add_document($node, $strFunctions, 'functions.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/functions.gif");\r
- if ($data->hasOperators())\r
- $tree->add_document($node, $strOperators, 'operators.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
- if ($data->hasTypes())\r
- $tree->add_document($node, $strTypes, 'types.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
- if ($data->hasAggregates())\r
- $tree->add_document($node, $strAggregates, 'aggregates.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
+ if ($data->hasSchemas()) {\r
+ $schemas = &$data->getSchemas();\r
+ while (!$schemas->EOF) {\r
+ $schemanode = $tree->add_folder($node, htmlspecialchars($schemas->f[$data->nspFields['nspname']]), \r
+ 'schema.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]) . '&schema=' . \r
+ urlencode($schemas->f[$data->nspFields['nspname']])); \r
+ if ($data->hasTables())\r
+ $tree->add_document($schemanode, $strTables, 'tables.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/tables.gif");\r
+ if ($data->hasViews())\r
+ $tree->add_document($schemanode, $strViews, 'views.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/views.gif");\r
+ /* if ($data->hasTriggers())\r
+ $tree->add_document($node, $strTriggers, 'triggers.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
+ if ($data->hasRules())\r
+ $tree->add_document($node, $strRules, 'rules.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));*/\r
+ if ($data->hasSequences())\r
+ $tree->add_document($schemanode, $strSequences, 'sequences.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/sequences.gif");\r
+ if ($data->hasFunctions())\r
+ $tree->add_document($schemanode, $strFunctions, 'functions.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/functions.gif");\r
+ if ($data->hasOperators())\r
+ $tree->add_document($schemanode, $strOperators, 'operators.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
+ if ($data->hasTypes())\r
+ $tree->add_document($schemanode, $strTypes, 'types.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
+ if ($data->hasAggregates())\r
+ $tree->add_document($schemanode, $strAggregates, 'aggregates.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
+ $schemas->moveNext();\r
+ }\r
+ }\r
+ // Database doesn't support schemas\r
+ else {\r
+ if ($data->hasTables())\r
+ $tree->add_document($node, $strTables, 'tables.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/tables.gif");\r
+ if ($data->hasViews())\r
+ $tree->add_document($node, $strViews, 'views.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/views.gif");\r
+ /* if ($data->hasTriggers())\r
+ $tree->add_document($node, $strTriggers, 'triggers.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
+ if ($data->hasRules())\r
+ $tree->add_document($node, $strRules, 'rules.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));*/\r
+ if ($data->hasSequences())\r
+ $tree->add_document($node, $strSequences, 'sequences.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/sequences.gif");\r
+ if ($data->hasFunctions())\r
+ $tree->add_document($node, $strFunctions, 'functions.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]), "../images/themes/{$guiTheme}/functions.gif");\r
+ if ($data->hasOperators())\r
+ $tree->add_document($node, $strOperators, 'operators.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
+ if ($data->hasTypes())\r
+ $tree->add_document($node, $strTypes, 'types.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
+ if ($data->hasAggregates())\r
+ $tree->add_document($node, $strAggregates, 'aggregates.php?database=' . urlencode($databases->f[$data->dbFields['dbname']]));\r
+ }\r
$databases->moveNext();\r
}\r
\r