add ability to terminate backend processes for 8.4+
authorRobert Treat <robert@robert-treats-macbook.local>
Mon, 6 Jul 2009 00:13:42 +0000 (20:13 -0400)
committerRobert Treat <robert@robert-treats-macbook.local>
Mon, 6 Jul 2009 00:13:42 +0000 (20:13 -0400)
classes/database/Postgres.php
classes/database/Postgres74.php
classes/database/Postgres83.php
database.php
lang/english.php
lang/recoded/english.php

index 80c0e078645f8fb15e93500b8885e4c236330880..7f42dd892e8dd2ff39906fa8e677a197bdfe3029 100755 (executable)
@@ -6814,16 +6814,19 @@ class Postgres extends ADODB_base {
                // Clean
                $pid = (int)$pid;
 
-               if ($signal == 'CANCEL')
+               if ($signal == 'CANCEL') 
                        $sql = "SELECT pg_catalog.pg_cancel_backend({$pid}) AS val";
-               else
+               elseif ($signal == 'KILL')  
+                       $sql = "SELECT pg_catalog.pg_terminate_backend({$pid}) AS val";
+               else    
                        return -1;
+               
 
                // Execute the query
                $val = $this->selectField($sql, 'val');
 
-               if ($val === -1) return -1;
-               elseif ($val == '1') return 0;
+               if ($val === 'f') return -1;
+               elseif ($val === 't') return 0;
                else return -1;
        }
 
@@ -7558,7 +7561,7 @@ class Postgres extends ADODB_base {
        function hasRoles() { return true; }
        function hasServerAdminFuncs() { return true; }
        function hasSharedComments() { return true; }
-       function hasSignals() { return true; }
+       function hasQueryCancel() { return true; }
        function hasStatsCollector() { return true; }
        function hasTablespaces() { return true; }
        function hasUserAndDbVariables() { return true; }
@@ -7571,6 +7574,7 @@ class Postgres extends ADODB_base {
        function hasAlterDatabase() { return $this->hasAlterDatabaseRename(); }
        function hasForeignKeysInfo() { return $this->hasConstraintsInfo(); }
        function hasMagicTypes() { return true; }
+       function hasQueryKill() { return true; }
        
 }
 ?>
index 894e1a0cd649f931c098f8bce2573f0aa5a37d2f..b0955b3c6a82f41063988558cf547d215e28c646 100644 (file)
@@ -341,7 +341,7 @@ class Postgres74 extends Postgres80 {
        function hasAlterSchemaOwner() { return false; }
        function hasFunctionAlterOwner() { return false; }
        function hasNamedParams() { return false; }
-       function hasSignals() { return false; }
+       function hasQueryCancel() { return false; }
        function hasTablespaces() { return false; }
        function hasMagicTypes() { return false; }
 }
index 3f5734ca927b8ab0ff78e4245b3169889106599b..cc399dc547c5fb31dc7fe3a0660815c8ff68383d 100644 (file)
@@ -57,6 +57,7 @@ class Postgres83 extends Postgres {
        }
 
        function hasAutovacuumSysTable() { return true; }
+       function hasQueryKill() { return false; }
 
 }
 
index 789ef23a62027806f91fffbe52501b7f12918732..d98a6190852eddaeead84e3d5753145ace517191 100755 (executable)
                        ),
                );
 
-               if ($data->hasSignals()) {
-                       $columns['actions'] = array('title' => $lang['stractions']);
+               // Build possible actions for our process list
+               $columns['actions'] = array('title' => $lang['stractions']);
                        
-                       $actions = array(
-                               'cancel' => array(
-                                       'title' => $lang['strcancel'],
-                                       'url'   => "database.php?action=signal&amp;signal=CANCEL&amp;{$misc->href}&amp;",
-                                       'vars'  => array('procpid' => 'procpid')
-                               )
-                       );
-               }
-               else $actions = array();
-               
+               $actions = array(
+                       'cancel' => array(
+                               'title' => $lang['strcancel'],
+                               'url'   => "database.php?action=signal&amp;signal=CANCEL&amp;{$misc->href}&amp;",
+                               'vars'  => array('procpid' => 'procpid')
+                       ),
+                       'kill' => array(
+                               'title' => $lang['strkill'],
+                               'url'   => "database.php?action=signal&amp;signal=KILL&amp;{$misc->href}&amp;",
+                               'vars'  => array('procpid' => 'procpid')
+                       )
+               );
+       
+               // Remove actions where not supported
+               if (!$data->hasQueryKill()) unset($actions['kill']);
+               if (!$data->hasQueryCancel()) unset($actions['cancel']);
+
+               if (count($actions) == 0) unset($columns['actions']);
+       
                // Remove query start time for <7.4
                if (!isset($processes->fields['query_start'])) unset($columns['start_time']);
 
index 015787101bd52d026d7591488f0a2352b7a6a4a0..db9a0d66a34f4b8d82537088195810b886c94ed7 100644 (file)
@@ -60,6 +60,7 @@
        $lang['stralter'] = 'Alter';
        $lang['strok'] = 'OK';
        $lang['strcancel'] = 'Cancel';
+       $lang['strkill'] = 'Kill';
        $lang['strac'] = 'Enable AutoComplete';
        $lang['strsave'] = 'Save';
        $lang['strreset'] = 'Reset';
index d3c9020176b7bdedbbffc7cf366c6e8ce8187284..7357470afb9ab0df5b48d150aed2d02a3c59c58c 100644 (file)
@@ -60,6 +60,7 @@
        $lang['stralter'] = 'Alter';
        $lang['strok'] = 'OK';
        $lang['strcancel'] = 'Cancel';
+       $lang['strkill'] = 'Kill';
        $lang['strac'] = 'Enable AutoComplete';
        $lang['strsave'] = 'Save';
        $lang['strreset'] = 'Reset';