alter trigger
authorchriskl <chriskl>
Wed, 30 Jul 2003 07:02:29 +0000 (07:02 +0000)
committerchriskl <chriskl>
Wed, 30 Jul 2003 07:02:29 +0000 (07:02 +0000)
BUGS
HISTORY
classes/database/BaseDB.php
classes/database/Postgres73.php
lang/english.php
lang/recoded/english.php
triggers.php

diff --git a/BUGS b/BUGS
index c86a990dfcff2d29aa3fba7531c4844660dff47e..3f58bd1b445c06035103db49af01a34cac68c1db 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -2,4 +2,8 @@
 * Create trigger screen doesn't save fields if it fails creating trigger
 * XML output can't use field names as tag names...
 * Backport findObject to pre-7.3
+* Add db comments everywhere
+* Add owner everywhere
+* Proper use of "opbutton" class everywhere
+* Cancel/OK buttons everywhere
 
diff --git a/HISTORY b/HISTORY
index 45789511491e0333cf1dd51ef0ccaa54c74f1926..48bd449e96c72b0979c132e7d85253b01303423e 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -13,6 +13,7 @@ Version 3.1
 * Find object feature
 * Support for domains in 7.3 and domain constraints in 7.4
 * Add/drop users to/from groups
+* Alter (rename) triggers
 
 Version 3.0
 -----------
index 9a779c30c44cb25695a7b68166fcc790f285bbe0..7ae5ad10d0e9819c773e0265879eeaa81667cf9c 100644 (file)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: BaseDB.php,v 1.20 2003/07/29 09:07:09 chriskl Exp $
+ * $Id: BaseDB.php,v 1.21 2003/07/30 07:02:30 chriskl Exp $
  */
 
 include_once('classes/database/ADODB_base.php');
@@ -199,6 +199,7 @@ class BaseDB extends ADODB_base {
        function hasSRFs() { return false; }
        function hasDomains() { return false; }
        function hasDomainConstraints() { return false; }
+       function hasAlterTrigger() { return false; }
 
 }
 
index ab0979a9ba2e18ff8167fcfe1b0f39490ae9fedd..f458424360076d67cb99b5a079c508520df3f5a1 100644 (file)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres73.php,v 1.51 2003/07/29 09:07:09 chriskl Exp $
+ * $Id: Postgres73.php,v 1.52 2003/07/30 07:02:30 chriskl Exp $
  */
 
 // @@@ THOUGHT: What about inherits? ie. use of ONLY???
@@ -433,6 +433,25 @@ class Postgres73 extends Postgres72 {
                return $this->selectSet($sql);
        }
 
+       /**
+        * Grabs a single trigger
+        * @param $table The name of a table whose triggers to retrieve
+        * @param $trigger The name of the trigger to retrieve
+        * @return A recordset
+        */
+       function &getTrigger($table, $trigger) {
+               $this->clean($table);
+               $this->clean($trigger);
+
+               $sql = "SELECT * FROM pg_catalog.pg_trigger t, pg_catalog.pg_class c
+                                       WHERE t.tgrelid=c.oid
+                                       AND c.relname='{$table}'
+                                       AND t.tgname='{$trigger}'
+                                       AND c.relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$this->_schema}')";
+
+               return $this->selectSet($sql);
+       }
+
        /**
         * Grabs a list of triggers on a table
         * @param $table The name of a table whose triggers to retrieve
@@ -457,6 +476,23 @@ class Postgres73 extends Postgres72 {
 
                return $this->selectSet($sql);
        }
+       
+       /**
+        * Alters a trigger
+        * @param $table The name of the table containing the trigger
+        * @param $trigger The name of the trigger to alter
+        * @param $name The new name for the trigger
+        * @return 0 success
+        */
+       function alterTrigger($table, $trigger, $name) {
+               $this->fieldClean($table);
+               $this->fieldClean($trigger);
+               $this->fieldClean($name);
+               
+               $sql = "ALTER TRIGGER \"{$trigger}\" ON \"{$table}\" RENAME TO \"{$name}\"";
+               
+               return $this->execute($sql);
+       }       
 
        // Function functions
 
@@ -1016,6 +1052,7 @@ class Postgres73 extends Postgres72 {
        function hasDropBehavior() { return true; }
        function hasDropColumn() { return true; }
        function hasDomains() { return true; }
+       function hasAlterTrigger() { return true; }
 
 }
 
index 55beca4dafa32aa0f0380040c058a6f37151f200..030d7f2d0242c66fd82480802ff910a99abae281 100755 (executable)
@@ -4,7 +4,7 @@
         * English language file for phpPgAdmin.  Use this as a basis
         * for new translations.
         *
-        * $Id: english.php,v 1.87 2003/07/30 03:26:27 chriskl Exp $
+        * $Id: english.php,v 1.88 2003/07/30 07:02:30 chriskl Exp $
         */
 
        // Language and character set
        $lang['strconfdroptrigger'] = 'Are you sure you want to drop the trigger "%s" on "%s"?';
        $lang['strtriggerdropped'] = 'Trigger dropped.';
        $lang['strtriggerdroppedbad'] = 'Trigger drop failed.';
+       $lang['strtriggeraltered'] = 'Trigger altered.';
+       $lang['strtriggeralteredbad'] = 'Trigger alter failed.';
 
        // Types
        $lang['strtype'] = 'Type';
index 8ddb716bd2886372c76b5541ac9cd6c4bd297c9b..606cf0451eda1cd040d4d9124d0a9544450471dc 100644 (file)
@@ -4,7 +4,7 @@
         * English language file for phpPgAdmin.  Use this as a basis
         * for new translations.
         *
-        * $Id: english.php,v 1.39 2003/07/30 03:26:27 chriskl Exp $
+        * $Id: english.php,v 1.40 2003/07/30 07:02:31 chriskl Exp $
         */
 
        // Language and character set
        $lang['strconfdroptrigger'] = 'Are you sure you want to drop the trigger &quot;%s&quot; on &quot;%s&quot;?';
        $lang['strtriggerdropped'] = 'Trigger dropped.';
        $lang['strtriggerdroppedbad'] = 'Trigger drop failed.';
+       $lang['strtriggeraltered'] = 'Trigger altered.';
+       $lang['strtriggeralteredbad'] = 'Trigger alter failed.';
 
        // Types
        $lang['strtype'] = 'Type';
index 858a334d44033677290fb6b3d08c229b9698dffd..3a781614c313dd7b57ee316dd8659796a1826be5 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * List triggers on a table
         *
-        * $Id: triggers.php,v 1.15 2003/06/17 00:39:43 chriskl Exp $
+        * $Id: triggers.php,v 1.16 2003/07/30 07:02:29 chriskl Exp $
         */
 
        // Include application functions
        $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : '';
        $PHP_SELF = $_SERVER['PHP_SELF'];
 
+       /** 
+        * Function to save after altering a trigger
+        */
+       function doSaveAlter() {
+               global $localData, $lang;
+               
+               $status = $localData->alterTrigger($_POST['table'], $_POST['trigger'], $_POST['name']);
+               if ($status == 0)
+                       doDefault($lang['strtriggeraltered']);
+               else
+                       doAlter($lang['strtriggeralteredbad']);
+       }
+
+       /**
+        * Function to allow altering of a trigger
+        */
+       function doAlter($msg = '') {
+               global $data, $localData, $misc;
+               global $PHP_SELF, $lang;
+               
+               echo "<h2>", $misc->printVal($_REQUEST['database']), ": {$lang['strtriggers']}: ", $misc->printVal($_REQUEST['trigger']), ": {$lang['stralter']}</h2>\n";
+               $misc->printMsg($msg);
+               
+               $triggerdata = &$localData->getTrigger($_REQUEST['table'], $_REQUEST['trigger']);
+               
+               if ($triggerdata->recordCount() > 0) {
+                       
+                       if (!isset($_POST['name'])) $_POST['name'] = $triggerdata->f[$data->tgFields['tgname']];
+                       
+                       echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
+                       echo "<table>\n";
+                       echo "<tr><th class=\"data\">{$lang['strname']}</th>\n";
+                       echo "<td class=\"data1\">";
+                       echo "<input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", 
+                               htmlspecialchars($_POST['name']), "\" />\n";
+                       echo "</table>\n";
+                       echo "<p><input type=\"hidden\" name=\"action\" value=\"alter\" />\n";
+                       echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n";
+                       echo "<input type=\"hidden\" name=\"trigger\" value=\"", htmlspecialchars($_REQUEST['trigger']), "\" />\n";
+                       echo $misc->form;
+                       echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['strok']}\" />\n";
+                       echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
+                       echo "</form>\n";
+               }
+               else echo "<p>{$lang['strnodata']}</p>\n";
+       }
+       
        /**
         * Show confirmation of drop and perform actual drop
         */
                if ($triggers->recordCount() > 0) {
                        echo "<table>\n";
                        echo "<tr><th class=\"data\">{$lang['strname']}</th><th class=\"data\">{$lang['strdefinition']}</th>";
-                       echo "<th class=\"data\">{$lang['stractions']}</th>\n";
+                       echo "<th class=\"data\" colspan=\"", ($data->hasAlterTrigger() ? 2 : 1), "\">{$lang['stractions']}</th>\n";
                        $i = 0;
 
                        while (!$triggers->EOF) {
                                        echo $misc->printVal($triggers->f[$data->tgFields['tgdef']]);
                                else 
                                        echo $misc->printVal($localData->getTriggerDef($triggers->f));
-                               echo "</td>\n<td class=\"data{$id}\">";
-                               echo "<a href=\"$PHP_SELF?action=confirm_drop&{$misc->href}&trigger=", urlencode( $triggers->f[$data->tgFields['tgname']]),
-                                       "&table=", urlencode($_REQUEST['table']), "\">{$lang['strdrop']}</td></tr>\n";
+                               echo "</td>\n";                         
+                               if ($data->hasAlterTrigger()) {
+                                       echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=confirm_alter&{$misc->href}&trigger=", urlencode($triggers->f[$data->tgFields['tgname']]),
+                                               "&table=", urlencode($_REQUEST['table']), "\">{$lang['stralter']}</td>\n";
+                               }
+                               echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=confirm_drop&{$misc->href}&trigger=", urlencode($triggers->f[$data->tgFields['tgname']]),
+                                       "&table=", urlencode($_REQUEST['table']), "\">{$lang['strdrop']}</td>\n";
+                               echo "</tr>\n";
 
                                $triggers->moveNext();
                                $i++;
        $misc->printBody();
 
        switch ($action) {
+               case 'alter':
+                       if (isset($_POST['alter'])) doSaveAlter();
+                       else doDefault();
+                       break;
+               case 'confirm_alter':
+                       doAlter();
+                       break;
                case 'save_create':
                        doSaveCreate();
                        break;