From 44a61e27c08ccb4d5922367187c801c9f63d7153 Mon Sep 17 00:00:00 2001 From: chriskl Date: Wed, 30 Jul 2003 07:02:29 +0000 Subject: [PATCH] alter trigger --- BUGS | 4 ++ HISTORY | 1 + classes/database/BaseDB.php | 3 +- classes/database/Postgres73.php | 39 ++++++++++++++++++- lang/english.php | 4 +- lang/recoded/english.php | 4 +- triggers.php | 69 ++++++++++++++++++++++++++++++--- 7 files changed, 115 insertions(+), 9 deletions(-) diff --git a/BUGS b/BUGS index c86a990d..3f58bd1b 100644 --- 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 45789511..48bd449e 100644 --- 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 ----------- diff --git a/classes/database/BaseDB.php b/classes/database/BaseDB.php index 9a779c30..7ae5ad10 100644 --- a/classes/database/BaseDB.php +++ b/classes/database/BaseDB.php @@ -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; } } diff --git a/classes/database/Postgres73.php b/classes/database/Postgres73.php index ab0979a9..f4584243 100644 --- a/classes/database/Postgres73.php +++ b/classes/database/Postgres73.php @@ -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; } } diff --git a/lang/english.php b/lang/english.php index 55beca4d..030d7f2d 100755 --- a/lang/english.php +++ b/lang/english.php @@ -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 @@ -394,6 +394,8 @@ $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'; diff --git a/lang/recoded/english.php b/lang/recoded/english.php index 8ddb716b..606cf045 100644 --- a/lang/recoded/english.php +++ b/lang/recoded/english.php @@ -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 @@ -394,6 +394,8 @@ $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'; diff --git a/triggers.php b/triggers.php index 858a334d..3a781614 100644 --- a/triggers.php +++ b/triggers.php @@ -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 @@ -13,6 +13,53 @@ $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 "

", $misc->printVal($_REQUEST['database']), ": {$lang['strtriggers']}: ", $misc->printVal($_REQUEST['trigger']), ": {$lang['stralter']}

\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 "
\n"; + echo "\n"; + echo "\n"; + echo "
{$lang['strname']}"; + echo "_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name']), "\" />\n"; + echo "
\n"; + echo "

\n"; + echo "\n"; + echo "\n"; + echo $misc->form; + echo "\n"; + echo "

\n"; + echo "
\n"; + } + else echo "

{$lang['strnodata']}

\n"; + } + /** * Show confirmation of drop and perform actual drop */ @@ -150,7 +197,7 @@ if ($triggers->recordCount() > 0) { echo "\n"; echo ""; - echo "\n"; + echo "\n"; $i = 0; while (!$triggers->EOF) { @@ -162,9 +209,14 @@ echo $misc->printVal($triggers->f[$data->tgFields['tgdef']]); else echo $misc->printVal($localData->getTriggerDef($triggers->f)); - echo "\n\n"; + echo "\n"; + if ($data->hasAlterTrigger()) { + echo "\n"; + } + echo "\n"; + echo "\n"; $triggers->moveNext(); $i++; @@ -182,6 +234,13 @@ $misc->printBody(); switch ($action) { + case 'alter': + if (isset($_POST['alter'])) doSaveAlter(); + else doDefault(); + break; + case 'confirm_alter': + doAlter(); + break; case 'save_create': doSaveCreate(); break; -- 2.39.5
{$lang['strname']}{$lang['strdefinition']}{$lang['stractions']}hasAlterTrigger() ? 2 : 1), "\">{$lang['stractions']}"; - echo "href}&trigger=", urlencode( $triggers->f[$data->tgFields['tgname']]), - "&table=", urlencode($_REQUEST['table']), "\">{$lang['strdrop']}
href}&trigger=", urlencode($triggers->f[$data->tgFields['tgname']]), + "&table=", urlencode($_REQUEST['table']), "\">{$lang['stralter']}href}&trigger=", urlencode($triggers->f[$data->tgFields['tgname']]), + "&table=", urlencode($_REQUEST['table']), "\">{$lang['strdrop']}