LEFT JOIN pg_catalog.pg_user pu ON (pn.nspowner = pu.usesysid)
{$where}
ORDER BY nspname";
-
+
return $this->selectSet($sql);
}
function getSchemaByName($schema) {
$this->clean($schema);
$sql = "
- SELECT nspname, nspowner, nspacl,
+ SELECT nspname, nspowner, r.rolname AS ownername, nspacl,
pg_catalog.obj_description(pn.oid, 'pg_namespace') as nspcomment
FROM pg_catalog.pg_namespace pn
+ LEFT JOIN pg_authid as r ON pn.nspowner = r.oid
WHERE nspname='{$schema}'";
return $this->selectSet($sql);
}
* Updates a schema.
* @param $schemaname The name of the schema to drop
* @param $comment The new comment for this schema
+ * @param $owner The new owner for this schema
* @return 0 success
*/
- function updateSchema($schemaname, $comment, $name) {
+ function updateSchema($schemaname, $comment, $name, $owner) {
$this->fieldClean($schemaname);
$this->fieldClean($name);
+ $this->fieldClean($owner);
$this->clean($comment);
$status = $this->beginTransaction();
}
}
+ $schema_rs = $this->getSchemaByName($schemaname);
+ /* Only if the owner change */
+ if ($schema_rs->fields['ownername'] != $owner) {
+ $sql = "ALTER SCHEMA \"{$schemaname}\" OWNER TO \"{$owner}\"";
+ $status = $this->execute($sql);
+ if ($status != 0) {
+ $this->rollbackTransaction();
+ return -1;
+ }
+ }
+
return $this->endTransaction();
}
// superuser only function.
$sql = "ALTER TABLE \"{$this->_schema}\".\"{$tblrs->fields['relname']}\" OWNER TO \"{$owner}\"";
- return $this->execute($sql);
- }
+ return $this->execute($sql);
+ }
return 0;
}
$this->fieldClean($table);
$sql = "DELETE FROM \"{$this->_schema}\".\"{$table}\"";
-
+
return $this->execute($sql);
}
$this->clean($comment);
$schema = $this->schema();
-
+
if ($length == '')
$sql = "ALTER TABLE {$schema}\"{$table}\" ADD COLUMN \"{$column}\" {$type}";
else {
function setColumnNull($table, $column, $state) {
$this->fieldClean($table);
$this->fieldClean($column);
-
+
$sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" " . (($state) ? 'DROP' : 'SET') . " NOT NULL";
return $this->execute($sql);
function hasAlterColumnType() { return true; }
function hasAlterDatabaseOwner() { return true; }
function hasAlterDatabaseRename() { return true; }
+ function hasAlterSchemaOwner() { return true; }
function hasAlterSequenceOwner() { return true; }
function hasAlterSequenceProps() { return true; }
function hasAlterTableOwner() { return true; }
function hasAlterColumnType() { return false; }
function hasAlterDatabaseOwner() { return false; }
+ function hasAlterSchemaOwner() { return false; }
function hasFunctionAlterOwner() { return false; }
function hasNamedParams() { return false; }
function hasSignals() { return false; }
return $this->selectSet($sql);
}
+ // Schema functions
+
+ /**
+ * Return all information relating to a schema
+ * @param $schema The name of the schema
+ * @return Schema information
+ */
+ function getSchemaByName($schema) {
+ $this->clean($schema);
+ $sql = "
+ SELECT nspname, nspowner, u.usename AS ownername, nspacl,
+ pg_catalog.obj_description(pn.oid, 'pg_namespace') as nspcomment
+ FROM pg_catalog.pg_namespace pn
+ LEFT JOIN pg_shadow as u ON pn.nspowner = u.usesysid
+ WHERE nspname='{$schema}'";
+ return $this->selectSet($sql);
+ }
+
// Table functions
/**
function _alterTable($tblrs, $name, $owner, $schema, $comment, $tablespace) {
/* $schema not supported in pg80- */
-
+
// Comment
$this->clean($comment);
$status = $this->setComment('TABLE', '', $tblrs->fields['relname'], $comment);
if (!isset($_POST['comment'])) $_POST['comment'] = $schema->fields['nspcomment'];
if (!isset($_POST['schema'])) $_POST['schema'] = $_REQUEST['schema'];
if (!isset($_POST['name'])) $_POST['name'] = $_REQUEST['schema'];
+ if (!isset($_POST['owner'])) $_POST['owner'] = $schema->fields['ownername'];
echo "<form action=\"schemas.php\" method=\"post\">\n";
echo "<table>\n";
htmlspecialchars($_POST['name']), "\" />\n";
echo "\t\t</td>\n";
echo "\t</tr>\n";
+
+ if ($data->hasAlterSchemaOwner()) {
+ $users = $data->getUsers();
+ echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n";
+ echo "<td class=\"data2\"><select name=\"owner\">";
+ while (!$users->EOF) {
+ $uname = $users->fields['usename'];
+ echo "<option value=\"", htmlspecialchars($uname), "\"",
+ ($uname == $_POST['owner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n";
+ $users->moveNext();
+ }
+ echo "</select></td></tr>\n";
+ }
+
echo "\t<tr>\n";
echo "\t\t<th class=\"data\">{$lang['strcomment']}</th>\n";
echo "\t\t<td class=\"data1\"><textarea cols=\"32\" rows=\"3\"name=\"comment\">", htmlspecialchars($_POST['comment']), "</textarea></td>\n";
function doSaveAlter($msg = '') {
global $data, $misc, $lang, $_reload_browser;
- $status = $data->updateSchema($_POST['schema'], $_POST['comment'], $_POST['name']);
+ $status = $data->updateSchema($_POST['schema'], $_POST['comment'], $_POST['name'], $_POST['owner']);
if ($status == 0) {
$_reload_browser = true;
doDefault($lang['strschemaaltered']);
doDefault($lang['strspecifyschematodrop']);
exit();
}
-
+
if ($confirm) {
$misc->printTrail('schema');
$misc->printTitle($lang['strdrop'],'pg.schema.drop');
echo "<tr><td><label for=\"sd_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"sd_clean\" name=\"sd_clean\" /></td>\n</tr>\n";
echo "<tr><td><label for=\"sd_oids\">{$lang['stroids']}</label></td><td><input type=\"checkbox\" id=\"sd_oids\" name=\"sd_oids\" /></td>\n</tr>\n";
echo "</table>\n";
-
+
echo "<h3>{$lang['stroptions']}</h3>\n";
echo "<p><input type=\"radio\" id=\"output1\" name=\"output\" value=\"show\" checked=\"checked\" /><label for=\"output1\">{$lang['strshow']}</label>\n";
echo "<br/><input type=\"radio\" id=\"output2\" name=\"output\" value=\"download\" /><label for=\"output2\">{$lang['strdownload']}</label>\n";