Make process screen report information in a way that makes sense in postgres 9.2
authorRobert Treat <rob@xzilla.net>
Fri, 24 May 2013 22:01:19 +0000 (18:01 -0400)
committerRobert Treat <rob@xzilla.net>
Fri, 24 May 2013 22:01:19 +0000 (18:01 -0400)
Also add in the waiting option, making it work back to at least 8.1

classes/database/Postgres.php
classes/database/Postgres81.php
database.php
lang/english.php

index cba4cd6ed1a14bbf75da7b37dc9923ba42368b80..73ea2af86b6a093fdd81dd528e81c952951e317a 100755 (executable)
@@ -7198,12 +7198,14 @@ class Postgres extends ADODB_base {
         */
        function getProcesses($database = null) {
                if ($database === null)
-                       $sql = "SELECT datname, usename, pid, query, query_start
+                       $sql = "SELECT datname, usename, pid, waiting, state_change as query_start,
+                  case when state='idle in transaction' then '<IDLE> in transaction' when state = 'idle' then '<IDLE>' else query end as query 
                                FROM pg_catalog.pg_stat_activity
                                ORDER BY datname, usename, pid";
                else {
                        $this->clean($database);
-                       $sql = "SELECT datname, usename, pid, query, query_start
+                       $sql = "SELECT datname, usename, pid, waiting, state_change as query_start,
+                  case when state='idle in transaction' then '<IDLE> in transaction' when state = 'idle' then '<IDLE>' else query end as query 
                                FROM pg_catalog.pg_stat_activity
                                WHERE datname='{$database}'
                                ORDER BY usename, pid";
index f3ec6d18d8cffc656c1ff3c55abff3fb2ee91367..70d40b822002e76c97aecda613cac0d3506524c7 100644 (file)
@@ -226,6 +226,30 @@ class Postgres81 extends Postgres82 {
                return $status;
        }
 
+       /**
+        * Returns all available process information.
+        * @param $database (optional) Find only connections to specified database
+        * @return A recordset
+        */
+       function getProcesses($database = null) {
+               if ($database === null)
+                       $sql = "SELECT datname, usename, procpid AS pid, current_query AS query, query_start, 
+                  case when (select count(*) from pg_locks where pid=pg_stat_activity.procpid and granted is false) > 0 then 't' else 'f' end as waiting  
+                               FROM pg_catalog.pg_stat_activity
+                               ORDER BY datname, usename, procpid";
+               else {
+                       $this->clean($database);
+                       $sql = "SELECT datname, usename, procpid AS pid, current_query AS query, query_start
+                    case when (select count(*) from pg_locks where pid=pg_stat_activity.procpid and granted is false) > 0 then 't' else 'f' end as waiting 
+                               FROM pg_catalog.pg_stat_activity
+                               WHERE datname='{$database}'
+                               ORDER BY usename, procpid";
+               }
+
+               $rc = $this->selectSet($sql);
+
+               return $rc;
+       }
 
        // Tablespace functions
        
index bb22ab5200d876363078777a904b1eff5c07f2fb..db45594f0cd28c8a097b156e43d4f2c55491e783 100755 (executable)
                                'title' => $lang['strprocess'],
                                'field' => field('pid'),
                        ),
+            'blocked' => array(
+                'title' => $lang['strblocked'],
+                'field' => field('waiting'),
+            ),
                        'query' => array(
                                'title' => $lang['strsql'],
                                'field' => field('query'),
index 7f1e7e79d9880bb2652f38e92d211ce6cc2dd26a..c232a7524708777e0f30c400fae0eed114d08391 100644 (file)
        $lang['strvariables'] = 'Variables';
        $lang['strprocess'] = 'Process';
        $lang['strprocesses'] = 'Processes';
+       $lang['strblocked'] = 'Blocked';
        $lang['strsetting'] = 'Setting';
        $lang['streditsql'] = 'Edit SQL';
        $lang['strruntime'] = 'Total runtime: %s ms';