full alter domain support for 7.4
authorchriskl <chriskl>
Fri, 1 Aug 2003 01:45:30 +0000 (01:45 +0000)
committerchriskl <chriskl>
Fri, 1 Aug 2003 01:45:30 +0000 (01:45 +0000)
HISTORY
TODO
classes/database/Postgres74.php
domains.php
lang/english.php
lang/recoded/english.php

diff --git a/HISTORY b/HISTORY
index f149247fdfdcd69581c935ac57099bec192cfbfd..cdbb53198020e407519c2471f48f1af3616b1e3a 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -11,7 +11,7 @@ Version 3.1
 * Allow granting privileges WITH GRANT OPTION for 7.4
 * Display new PostgreSQL 7.4 grant options and grantor in privileges
 * Find object feature
-* Support for domains in 7.3 and domain constraints in 7.4
+* Support for domains in 7.3 and domain constraints and alter domain in 7.4
 * Add/drop users to/from groups
 * Alter (rename) triggers
 * Pop-up SQL window from Mark Gibson
diff --git a/TODO b/TODO
index d379aa9915db32ba6977d3245100b83422640099..3e49d45c62df5f0d8d4b86681aaf11ecbb25106e 100644 (file)
--- a/TODO
+++ b/TODO
@@ -93,7 +93,7 @@ Languages
 Domains (7.3)
 -------------
 
-* Unimplemented.  They do appear as normal types though.
+* Done 
 
 Conversions (7.3)
 -----------------
index 5e144d231644ab90940f99040508c0aed3ca5862..9ce110130781264d578e16d1c26a3e8f767c5172 100644 (file)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres74.php,v 1.7 2003/07/31 08:28:03 chriskl Exp $
+ * $Id: Postgres74.php,v 1.8 2003/08/01 01:45:30 chriskl Exp $
  */
 
 include_once('classes/database/Postgres73.php');
@@ -12,7 +12,7 @@ include_once('classes/database/Postgres73.php');
 class Postgres74 extends Postgres73 {
 
        // Last oid assigned to a system object
-       var $_lastSystemOID = 16974;
+       var $_lastSystemOID = 17137;
 
        // Max object name length
        var $_maxNameLen = 63;
@@ -33,7 +33,6 @@ class Postgres74 extends Postgres73 {
                $this->Postgres73($host, $port, $database, $user, $password);
        }
 
-
        // Trigger functions
        
        /**
@@ -128,7 +127,7 @@ class Postgres74 extends Postgres73 {
 
        /**
         * Adds a check constraint to a domain
-        * @param $table The table to which to add the check
+        * @param $domain The domain to which to add the check
         * @param $definition The definition of the check
         * @param $name (optional) The name to give the check, otherwise default name is assigned
         * @return 0 success
@@ -144,6 +143,64 @@ class Postgres74 extends Postgres73 {
                return $this->execute($sql);
        }
        
+       /**
+        * Alters a domain
+        * @param $domain The domain to alter
+        * @param $domdefault The domain default
+        * @param $domnotnull True for NOT NULL, false otherwise
+        * @param $domowner The domain owner
+        * @return 0 success
+        * @return -1 transaction error
+        * @return -2 default error
+        * @return -3 not null error
+        * @return -4 owner error
+        */
+       function alterDomain($domain, $domdefault, $domnotnull, $domowner) {
+               $this->fieldClean($domain);
+               $this->fieldClean($domowner);
+               
+               $status = $this->beginTransaction();
+               if ($status != 0) {
+                       $this->rollbackTransaction();
+                       return -1;
+               }
+               
+               // Default
+               if ($domdefault == '')
+                       $sql = "ALTER DOMAIN \"{$domain}\" DROP DEFAULT";
+               else
+                       $sql = "ALTER DOMAIN \"{$domain}\" SET DEFAULT {$domdefault}";
+               
+               $status = $this->execute($sql);
+               if ($status != 0) {
+                       $this->rollbackTransaction();
+                       return -2;
+               }
+               
+               // NOT NULL
+               if ($domnotnull)
+                       $sql = "ALTER DOMAIN \"{$domain}\" SET NOT NULL";
+               else
+                       $sql = "ALTER DOMAIN \"{$domain}\" DROP NOT NULL";
+
+               $status = $this->execute($sql);
+               if ($status != 0) {
+                       $this->rollbackTransaction();
+                       return -3;
+               }
+               
+               // Owner
+               $sql = "ALTER DOMAIN \"{$domain}\" OWNER TO \"{$domowner}\"";
+
+               $status = $this->execute($sql);
+               if ($status != 0) {
+                       $this->rollbackTransaction();
+                       return -4;
+               }
+               
+               return $this->endTransaction();
+       }       
+        
        // Capabilities
        function hasGrantOption() { return true; }
        function hasDomainConstraints() { return true; }
index 901b84289671f631e87ad78d39de10b89e8a31bb..84bfa546c8699830b6b9dbb4ca54bd8f1efde65f 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * Manage domains in a database
         *
-        * $Id: domains.php,v 1.2 2003/07/31 08:28:03 chriskl Exp $
+        * $Id: domains.php,v 1.3 2003/08/01 01:45:30 chriskl Exp $
         */
 
        // Include application functions
        $PHP_SELF = $_SERVER['PHP_SELF'];
        
        /** 
-        * Function to save after editing a domain
+        * Function to save after altering a domain
         */
-       function doSaveEdit() {
+       function doSaveAlter() {
                global $localData, $lang;
                
-               $status = $localData->setDomain($_POST['domain'], $_POST['formDefinition']);
+               $status = $localData->alterDomain($_POST['domain'], $_POST['domdefault'], 
+                       isset($_POST['domnotnull']), $_POST['domowner']);
                if ($status == 0)
-                       doProperties($lang['strdomainupdated']);
+                       doProperties($lang['strdomainaltered']);
                else
-                       doEdit($lang['strdomainupdatedbad']);
+                       doAlter($lang['strdomainalteredbad']);
+       }
+
+       /**
+        * Allow altering a domain
+        */
+       function doAlter($msg = '') {
+               global $data, $localData, $misc;
+               global $PHP_SELF, $lang;
+       
+               echo "<h2>", $misc->printVal($_REQUEST['database']), ": {$lang['strdomains']}: ", $misc->printVal($_REQUEST['domain']), ": {$lang['stralter']}</h2>\n";
+               $misc->printMsg($msg);
+               
+               // Fetch domain info
+               $domaindata = &$localData->getDomain($_REQUEST['domain']);
+               // Fetch all users
+               $users = &$data->getUsers();
+               
+               if ($domaindata->recordCount() > 0) {
+                       if (!isset($_POST['domname'])) {                                
+                               $_POST['domtype'] = $domaindata->f['domtype'];
+                               $_POST['domdefault'] = $domaindata->f['domdef'];
+                               $domaindata->f['domnotnull'] = $data->phpBool($domaindata->f['domnotnull']);
+                               if ($domaindata->f['domnotnull']) $_POST['domnotnull'] = 'on';
+                               $_POST['domowner'] = $domaindata->f['domowner'];
+                       }
+                       
+                       // Display domain info
+                       echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
+                       echo "<table>\n";
+                       echo "<tr><th class=\"data\" width=\"70\">{$lang['strname']}</th>\n";
+                       echo "<td class=\"data1\">", $misc->printVal($domaindata->f['domname']), "</td></tr>\n";
+                       echo "<tr><th class=\"data\">{$lang['strtype']}</th>\n";
+                       echo "<td class=\"data1\">", $misc->printVal($domaindata->f['domtype']), "</td></tr>\n";
+                       echo "<tr><th class=\"data\">{$lang['strnotnull']}</th>\n";
+                       echo "<td class=\"data1\"><input type=\"checkbox\" name=\"domnotnull\"", (isset($_POST['domnotnull']) ? ' checked' : ''), " /></td></tr>\n";
+                       echo "<tr><th class=\"data\">{$lang['strdefault']}</th>\n";
+                       echo "<td class=\"data1\"><input name=\"domdefault\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", 
+                               htmlspecialchars($_POST['domdefault']), "\" /></td></tr>\n";
+                       echo "<tr><th class=\"data\">{$lang['strowner']}</th>\n";
+                       echo "<td class=\"data1\"><select name=\"domowner\">";
+                       while (!$users->EOF) {
+                               $uname = $users->f[$data->uFields['uname']];
+                               echo "<option value=\"", htmlspecialchars($uname), "\"",
+                                       ($uname == $_POST['domowner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n";
+                               $users->moveNext();
+                       }
+                       echo "</select></td></tr>\n";                           
+                       echo "</table>\n";
+                       echo "<p><input type=\"hidden\" name=\"action\" value=\"save_alter\" />\n";
+                       echo "<input type=\"hidden\" name=\"domain\" value=\"", htmlspecialchars($_REQUEST['domain']), "\" />\n";
+                       echo $misc->form;
+                       echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n";
+                       echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
+                       echo "</form>\n";
+               }
+               else echo "<p>{$lang['strnodata']}</p>\n";
        }
        
        /**
                        echo "<td class=\"data1\">", ($domaindata->f['domnotnull'] ? 'NOT NULL' : ''), "</td></tr>\n";
                        echo "<tr><th class=\"data\">{$lang['strdefault']}</th>\n";
                        echo "<td class=\"data1\">", $misc->printVal($domaindata->f['domdef']), "</td></tr>\n";
+                       echo "<tr><th class=\"data\">{$lang['strowner']}</th>\n";
+                       echo "<td class=\"data1\">", $misc->printVal($domaindata->f['domowner']), "</td></tr>\n";
                        echo "</table>\n";
                        
                        // Display domain constraints
                }
                else echo "<p>{$lang['strnodata']}</p>\n";
                
-               echo "<p><a class=\"navlink\" href=\"$PHP_SELF?{$misc->href}\">{$lang['strshowalldomains']}</a> |\n";
+               echo "<p><a class=\"navlink\" href=\"$PHP_SELF?{$misc->href}\">{$lang['strshowalldomains']}</a>\n";
                if ($data->hasDomainConstraints()) {
-                       echo "<a class=\"navlink\" href=\"{$PHP_SELF}?action=add_check&{$misc->href}&domain=", urlencode($_REQUEST['domain']),
-                               "\">{$lang['straddcheck']}</a> |\n";
+                       echo "| <a class=\"navlink\" href=\"{$PHP_SELF}?action=add_check&{$misc->href}&domain=", urlencode($_REQUEST['domain']),
+                               "\">{$lang['straddcheck']}</a>\n";
+                       echo "| <a class=\"navlink\" href=\"$PHP_SELF?action=alter&{$misc->href}&domain=", 
+                               urlencode($_REQUEST['domain']), "\">{$lang['stralter']}</a>\n";
                }
-               echo "<a class=\"navlink\" href=\"$PHP_SELF?action=edit&{$misc->href}&domain=", 
-                       urlencode($_REQUEST['domain']), "\">{$lang['stredit']}</a></p>\n";
+               echo "</p>\n";
        }
        
        /**
                case 'confirm_drop':
                        doDrop(true);
                        break;                  
-               case 'save_edit':
-                       doSaveEdit();
+               case 'save_alter':
+                       if (isset($_POST['alter'])) doSaveAlter();
+                       else doProperties();
                        break;
-               case 'edit':
-                       doEdit();
+               case 'alter':
+                       doAlter();
                        break;
                case 'properties':
                        doProperties();
index 2a5d985c25d35e89507705dc99eff952f6462b85..d6f1d13e332a1bfcdd20ea491a01733feeee0ea9 100755 (executable)
@@ -4,13 +4,14 @@
         * English language file for phpPgAdmin.  Use this as a basis
         * for new translations.
         *
-        * $Id: english.php,v 1.89 2003/07/31 08:39:03 chriskl Exp $
+        * $Id: english.php,v 1.90 2003/08/01 01:45:30 chriskl Exp $
         */
 
        // Language and character set
        $lang['applang'] = 'English';
        $lang['appcharset'] = 'ISO-8859-1';
        $lang['applocale'] = 'en_US';
+       $lang['appdbencoding'] = 'SQL_ASCII';
 
        // Welcome  
        $lang['strintro'] = 'Welcome to phpPgAdmin.';
        $lang['strdomainneedsname'] = 'You must give a name for your domain.';
        $lang['strdomaincreated'] = 'Domain created.';
        $lang['strdomaincreatedbad'] = 'Failed to create domain.';      
+       $lang['strdomainaltered'] = 'Domain altered.';
+       $lang['strdomainalteredbad'] = 'Failed to alter domain.';       
 
        // Miscellaneous
        $lang['strtopbar'] = '%s running on %s:%s -- You are logged in as user "%s", %s';
index 81b8b6ca0327a0e71434cd598f1e2e64f995a17b..bb324d2d3885d2b35528746b7afe5992b91c13d0 100644 (file)
@@ -4,13 +4,14 @@
         * English language file for phpPgAdmin.  Use this as a basis
         * for new translations.
         *
-        * $Id: english.php,v 1.41 2003/07/31 08:39:03 chriskl Exp $
+        * $Id: english.php,v 1.42 2003/08/01 01:45:30 chriskl Exp $
         */
 
        // Language and character set
        $lang['applang'] = 'English';
        $lang['appcharset'] = 'ISO-8859-1';
        $lang['applocale'] = 'en_US';
+       $lang['appdbencoding'] = 'SQL_ASCII';
 
        // Welcome  
        $lang['strintro'] = 'Welcome to phpPgAdmin.';
        $lang['strdomainneedsname'] = 'You must give a name for your domain.';
        $lang['strdomaincreated'] = 'Domain created.';
        $lang['strdomaincreatedbad'] = 'Failed to create domain.';      
+       $lang['strdomainaltered'] = 'Domain altered.';
+       $lang['strdomainalteredbad'] = 'Failed to alter domain.';       
 
        // Miscellaneous
        $lang['strtopbar'] = '%s running on %s:%s -- You are logged in as user &quot;%s&quot;, %s';