Add row|statement level options to create trigger. Tested on 7.3/7.4.
authorxzilla <xzilla>
Thu, 14 Apr 2005 18:20:10 +0000 (18:20 +0000)
committerxzilla <xzilla>
Thu, 14 Apr 2005 18:20:10 +0000 (18:20 +0000)
HISTORY
classes/database/Postgres.php
classes/database/Postgres74.php
lang/english.php
lang/recoded/english.php
triggers.php

diff --git a/HISTORY b/HISTORY
index 9a1b76b244629e1d8684d72e40e885c85ec1951d..3f9da87776d041efb9d3b4b57215980cf901aafd 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -13,6 +13,7 @@ Features
   and SELECT results.
 * Add support for PostgreSQL 8.1devel
 * primary key and unique key at table creation (Andreas Huber)
+* Add row|statement level options to create trigger for >= 7.4 (Robert Treat)
   
 Bugs
 * Tree Icons are displayed middle instead of top
index 67cc8389d5b9f60b249e9c3f8bd46a495b6ac9af..4d8f03d692ec3f596e3589e160529e4bedab94c4 100755 (executable)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres.php,v 1.258 2005/03/26 10:47:03 chriskl Exp $
+ * $Id: Postgres.php,v 1.259 2005/04/14 18:20:12 xzilla Exp $
  */
 
 // @@@ THOUGHT: What about inherits? ie. use of ONLY???
@@ -32,6 +32,8 @@ class Postgres extends ADODB_base {
                'DELETE OR UPDATE', 'INSERT OR DELETE OR UPDATE');
        // When to execute the trigger  
        var $triggerExecTimes = array('BEFORE', 'AFTER');
+       // How often to execute the trigger     
+       var $triggerFrequency = array('ROW');
        // Foreign key stuff.  First element MUST be the default.
        var $fkactions = array('NO ACTION', 'RESTRICT', 'CASCADE', 'SET NULL', 'SET DEFAULT');
        var $fkmatches = array('MATCH SIMPLE', 'MATCH FULL');
@@ -2962,7 +2964,7 @@ class Postgres extends ADODB_base {
         * @param $tgargs The function arguments
         * @return 0 success
         */
-       function createTrigger($tgname, $table, $tgproc, $tgtime, $tgevent, $tgargs) {
+       function createTrigger($tgname, $table, $tgproc, $tgtime, $tgevent, $tgfrequency, $tgargs) {
                $this->fieldClean($tgname);
                $this->fieldClean($table);
                $this->fieldClean($tgproc);
@@ -2970,7 +2972,7 @@ class Postgres extends ADODB_base {
                /* No Statement Level Triggers in PostgreSQL (by now) */
                $sql = "CREATE TRIGGER \"{$tgname}\" {$tgtime} 
                                {$tgevent} ON \"{$table}\"
-                               FOR EACH ROW EXECUTE PROCEDURE \"{$tgproc}\"({$tgargs})";
+                               FOR EACH {$tgfrequency} EXECUTE PROCEDURE \"{$tgproc}\"({$tgargs})";
                                
                return $this->execute($sql);
        }
index 39866623a67e63d7046adaff89a1255b1af3df87..0f259df93606c490569b54fe938d7e8c365beed7 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.41 2004/10/06 08:43:33 jollytoad Exp $
+ * $Id: Postgres74.php,v 1.42 2005/04/14 18:20:14 xzilla Exp $
  */
 
 include_once('./classes/database/Postgres73.php');
@@ -17,6 +17,9 @@ class Postgres74 extends Postgres73 {
        // Max object name length
        var $_maxNameLen = 63;
        
+       // How often to execute the trigger     
+       var $triggerFrequency = array('STATEMENT','ROW');
+
        /**
         * Constructor
         * @param $conn The database connection
index bb03a945526258dbad1dcc714bacf1d1b8c18d31..c800bffd66f5d1d8713946823690f5a030280908 100755 (executable)
@@ -4,7 +4,7 @@
         * English language file for phpPgAdmin.  Use this as a basis
         * for new translations.
         *
-        * $Id: english.php,v 1.172 2005/04/12 01:52:17 chriskl Exp $
+        * $Id: english.php,v 1.173 2005/04/14 18:20:15 xzilla Exp $
         */
 
        // Language and character set
        $lang['strtriggerdroppedbad'] = 'Trigger drop failed.';
        $lang['strtriggeraltered'] = 'Trigger altered.';
        $lang['strtriggeralteredbad'] = 'Trigger alteration failed.';
+       $lang['strfrequency'] = 'Frequency';
 
        // Types
        $lang['strtype'] = 'Type';
index a01a3317fcaaeb983e55801981929dcfc9a5e1bf..2bb015c58778a3c3682945240db80c156578a880 100644 (file)
@@ -4,7 +4,7 @@
         * English language file for phpPgAdmin.  Use this as a basis
         * for new translations.
         *
-        * $Id: english.php,v 1.124 2005/04/12 01:52:17 chriskl Exp $
+        * $Id: english.php,v 1.125 2005/04/14 18:20:15 xzilla Exp $
         */
 
        // Language and character set
        $lang['strtriggerdroppedbad'] = 'Trigger drop failed.';
        $lang['strtriggeraltered'] = 'Trigger altered.';
        $lang['strtriggeralteredbad'] = 'Trigger alteration failed.';
+       $lang['strfrequency'] = 'Frequency';
 
        // Types
        $lang['strtype'] = 'Type';
index 332b3283b644c922fac4909902c47f30f00da5ea..c88e97754e6d3fe7d299968b2d1b1e9e984f85ae 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * List triggers on a table
         *
-        * $Id: triggers.php,v 1.24 2004/09/28 13:09:31 jollytoad Exp $
+        * $Id: triggers.php,v 1.25 2005/04/14 18:20:10 xzilla Exp $
         */
 
        // Include application functions
                $sel2 = new XHTML_Select('formEvent');
                $sel2->set_data($data->triggerEvents);
                
+               /* Populate occurences */
+               $sel3 = new XHTML_Select('formFrequency');
+               $sel3->set_data($data->triggerFrequency);
+               
                echo "<form action=\"$PHP_SELF\" method=\"POST\">\n";
                echo "<table>\n";
-               echo "<tr><th colspan=\"2\" class=\"data\">{$lang['strname']}</th></tr>\n";
-               echo "<tr><td colspan=\"2\" class=\"data1\"><input type=\"text\" name=\"formTriggerName\" size=\"32\" /></td></tr>\n";
                echo "<tr>\n";
-               echo "    <th class=\"data\">{$lang['strwhen']}</th>\n";
+               echo "          <th class=\"data\">{$lang['strname']}</th>\n";
+               echo "          <th class=\"data\">{$lang['strwhen']}</th>\n";
+               echo "</tr>\n";
+               echo "<tr>\n";
+               echo "          <td class=\"data1\"> <input type=\"text\" name=\"formTriggerName\" size=\"32\" /></td>\n";
+               echo "          <td class=\"data1\"> ", $sel1->fetch(), "</td>\n";
+               echo "</tr>\n";
+               echo "<tr>\n";
                echo "    <th class=\"data\">{$lang['strevent']}</th>\n";
+               echo "    <th class=\"data\">{$lang['strfrequency']}</th>\n";
                echo "</tr>\n";
                echo "<tr>\n";
-               echo "     <td class=\"data1\">", $sel1->fetch(), "</td>\n";
-               echo "     <td class=\"data1\">", $sel2->fetch(), "</td>\n";
+               echo "     <td class=\"data1\"> ", $sel2->fetch(), "</td>\n";
+               echo "     <td class=\"data1\"> ", $sel3->fetch(), "</td>\n";
                echo "</tr>\n";
-               echo "<tr><th class=\"data\">{$lang['strfunction']}</th>\n";
-               echo "<th class=\"data\">{$lang['strarguments']}</th></tr>\n";
+               echo "<tr><th class=\"data\"> {$lang['strfunction']}</th>\n";
+               echo "<th class=\"data\"> {$lang['strarguments']}</th></tr>\n";
                echo "<tr><td class=\"data1\">", $sel0->fetch(), "</td>\n";
                echo "<td class=\"data1\">(<input type=\"text\" name=\"formTriggerArgs\" size=\"32\" />)</td>\n";
                echo "</tr></table>\n";
                else {           
                        $status = &$data->createTrigger($_POST['formTriggerName'], $_POST['table'],
                                        $_POST['formFunction'], $_POST['formExecTime'], $_POST['formEvent'],
-                                       $_POST['formTriggerArgs']);
+                                       $_POST['formFrequency'], $_POST['formTriggerArgs']);
                        if ($status == 0)
                                doDefault($lang['strtriggercreated']);
                        else