summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Treat2009-07-06 00:13:42 +0000
committerRobert Treat2009-07-06 00:13:42 +0000
commitfa11cd60083b96a5bb8b4fd96c01f60369e55d8e (patch)
tree25934074d38e59ab0e31ef8567802a5d6d77ef3f
parentc36a6741dd28d263bcc53ba31de1ef03f76bb86a (diff)
add ability to terminate backend processes for 8.4+
-rwxr-xr-xclasses/database/Postgres.php14
-rw-r--r--classes/database/Postgres74.php2
-rw-r--r--classes/database/Postgres83.php1
-rwxr-xr-xdatabase.php33
-rw-r--r--lang/english.php1
-rw-r--r--lang/recoded/english.php1
6 files changed, 34 insertions, 18 deletions
diff --git a/classes/database/Postgres.php b/classes/database/Postgres.php
index 80c0e078..7f42dd89 100755
--- a/classes/database/Postgres.php
+++ b/classes/database/Postgres.php
@@ -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; }
}
?>
diff --git a/classes/database/Postgres74.php b/classes/database/Postgres74.php
index 894e1a0c..b0955b3c 100644
--- a/classes/database/Postgres74.php
+++ b/classes/database/Postgres74.php
@@ -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; }
}
diff --git a/classes/database/Postgres83.php b/classes/database/Postgres83.php
index 3f5734ca..cc399dc5 100644
--- a/classes/database/Postgres83.php
+++ b/classes/database/Postgres83.php
@@ -57,6 +57,7 @@ class Postgres83 extends Postgres {
}
function hasAutovacuumSysTable() { return true; }
+ function hasQueryKill() { return false; }
}
diff --git a/database.php b/database.php
index 789ef23a..d98a6190 100755
--- a/database.php
+++ b/database.php
@@ -444,19 +444,28 @@
),
);
- 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&signal=CANCEL&{$misc->href}&",
- 'vars' => array('procpid' => 'procpid')
- )
- );
- }
- else $actions = array();
-
+ $actions = array(
+ 'cancel' => array(
+ 'title' => $lang['strcancel'],
+ 'url' => "database.php?action=signal&signal=CANCEL&{$misc->href}&",
+ 'vars' => array('procpid' => 'procpid')
+ ),
+ 'kill' => array(
+ 'title' => $lang['strkill'],
+ 'url' => "database.php?action=signal&signal=KILL&{$misc->href}&",
+ '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']);
diff --git a/lang/english.php b/lang/english.php
index 01578710..db9a0d66 100644
--- a/lang/english.php
+++ b/lang/english.php
@@ -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';
diff --git a/lang/recoded/english.php b/lang/recoded/english.php
index d3c90201..7357470a 100644
--- a/lang/recoded/english.php
+++ b/lang/recoded/english.php
@@ -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';