// 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;
}
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; }
function hasAlterDatabase() { return $this->hasAlterDatabaseRename(); }
function hasForeignKeysInfo() { return $this->hasConstraintsInfo(); }
function hasMagicTypes() { return true; }
+ function hasQueryKill() { return true; }
}
?>
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; }
}
}
function hasAutovacuumSysTable() { return true; }
+ function hasQueryKill() { return false; }
}
),
);
- 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']);
$lang['stralter'] = 'Alter';
$lang['strok'] = 'OK';
$lang['strcancel'] = 'Cancel';
+ $lang['strkill'] = 'Kill';
$lang['strac'] = 'Enable AutoComplete';
$lang['strsave'] = 'Save';
$lang['strreset'] = 'Reset';
$lang['stralter'] = 'Alter';
$lang['strok'] = 'OK';
$lang['strcancel'] = 'Cancel';
+ $lang['strkill'] = 'Kill';
$lang['strac'] = 'Enable AutoComplete';
$lang['strsave'] = 'Save';
$lang['strreset'] = 'Reset';