Hi,

Fixed RM #2315 : Sorting by size is broken.

Removed the pg_size_pretty function from query for the collection and
introduced the client side function to convert size into human readable
format. So, the sorting issue is fixed as the algorithm will get the actual
value of size instead of formatted value.


Thanks,
Khushboo
diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
index 761f757..858171e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
@@ -842,6 +842,13 @@ class DatabaseView(PGChildNodeView):
         if not status:
             return internal_server_error(errormsg=res)
 
+        if not did:
+            # Whether the column needs prettify at the client side or not
+            if 'columns' in res:
+                for col in res['columns']:
+                    if col['name'] in ['Size', 'Size of temporary files']:
+                        col['can_prettify'] = True
+
         return make_json_response(
             data=res,
             status=200
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
index e118cab..d15c7ce 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
@@ -2913,6 +2913,13 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
                     conn=self.conn, schema_name=schema_name
                 )
             )
+
+            # Whether the column needs prettify at the client side or not
+            if 'columns' in res:
+                for col in res['columns']:
+                    if col['name'] in ['Size']:
+                        col['can_prettify'] = True
+
         else:
             # For Individual table stats
 
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py
index 6d8680d..e4064f7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py
@@ -978,6 +978,12 @@ class IndexesView(PGChildNodeView):
                 )
             )
 
+            # Whether the column needs prettify at the client side or not
+            if 'columns' in res:
+                for col in res['columns']:
+                    if col['name'] in ['Size']:
+                        col['can_prettify'] = True
+
         if not status:
             return internal_server_error(errormsg=res)
 
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index/sql/default/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index/sql/default/coll_stats.sql
index bca2d09..6cade6f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index/sql/default/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index/sql/default/coll_stats.sql
@@ -3,7 +3,7 @@ SELECT
     idx_scan AS {{ conn|qtIdent(_('Index scans')) }},
     idx_tup_read AS {{ conn|qtIdent(_('Index tuples read')) }},
     idx_tup_fetch AS {{ conn|qtIdent(_('Index tuples fetched')) }},
-    pg_size_pretty(pg_relation_size(indexrelid)) AS {{ conn|qtIdent(_('Size')) }}
+    pg_relation_size(indexrelid) AS {{ conn|qtIdent(_('Size')) }}
 FROM
     pg_stat_all_indexes stat
     JOIN pg_class cls ON cls.oid=indexrelid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/default/coll_table_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/default/coll_table_stats.sql
index ee3ffa3..63a6826 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/default/coll_table_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/default/coll_table_stats.sql
@@ -14,12 +14,12 @@ SELECT
     autovacuum_count AS {{ conn|qtIdent(_('Autovacuum counter')) }},
     analyze_count AS {{ conn|qtIdent(_('Analyze counter')) }},
     autoanalyze_count AS {{ conn|qtIdent(_('Autoanalyze counter')) }},
-    pg_size_pretty(pg_relation_size(st.relid)
+    pg_relation_size(st.relid)
         + CASE WHEN cl.reltoastrelid = 0 THEN 0 ELSE pg_relation_size(cl.reltoastrelid)
         + COALESCE((SELECT SUM(pg_relation_size(indexrelid))
                         FROM pg_index WHERE indrelid=cl.reltoastrelid)::int8, 0) END
         + COALESCE((SELECT SUM(pg_relation_size(indexrelid))
-                        FROM pg_index WHERE indrelid=st.relid)::int8, 0)) AS {{ conn|qtIdent(_('Size')) }}
+                        FROM pg_index WHERE indrelid=st.relid)::int8, 0) AS {{ conn|qtIdent(_('Size')) }}
 FROM
     pg_stat_all_tables st
 JOIN
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/stats.sql
index e0c7e6b..5a40841 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/stats.sql
@@ -17,11 +17,11 @@ SELECT
     slave.confl_bufferpin AS {{ conn|qtIdent(_('Bufferpin conflicts')) }},
     slave.confl_deadlock AS {{ conn|qtIdent(_('Deadlock conflicts')) }},
     temp_files AS {{ conn|qtIdent(_("Temporary files")) }},
-    pg_size_pretty(temp_bytes) AS {{ conn|qtIdent(_("Size of temporary files")) }},
+    {% if not did %}temp_bytes{% else %}pg_size_pretty(temp_bytes){% endif %} AS {{ conn|qtIdent(_("Size of temporary files")) }},
     deadlocks AS {{ conn|qtIdent(_("Deadlocks")) }},
     blk_read_time AS {{ conn|qtIdent(_("Block read time")) }},
     blk_write_time AS {{ conn|qtIdent(_("Block write time")) }},
-    pg_size_pretty(pg_database_size(db.datid)) AS {{ conn|qtIdent(_('Size')) }}
+    {% if not did %}pg_database_size(db.datid){% else %}pg_size_pretty(pg_database_size(db.datid)){% endif %} AS {{ conn|qtIdent(_('Size')) }}
 FROM
     pg_stat_database db
     LEFT JOIN pg_stat_database_conflicts slave ON db.datid=slave.datid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/stats.sql
index 82b52d0..20661eb 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/stats.sql
@@ -16,7 +16,7 @@ SELECT
     slave.confl_snapshot AS {{ conn|qtIdent(_('Snapshot conflicts')) }},
     slave.confl_bufferpin AS {{ conn|qtIdent(_('Bufferpin conflicts')) }},
     slave.confl_deadlock AS {{ conn|qtIdent(_('Deadlock conflicts')) }},
-    pg_size_pretty(pg_database_size(db.datid)) AS {{ conn|qtIdent(_('Size')) }}
+    {% if not did %}pg_database_size(db.datid){% else %}pg_size_pretty(pg_database_size(db.datid)){% endif %} AS {{ conn|qtIdent(_('Size')) }}
 FROM
     pg_stat_database db
     LEFT JOIN pg_stat_database_conflicts slave ON db.datid=slave.datid
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/__init__.py b/web/pgadmin/browser/server_groups/servers/tablespaces/__init__.py
index 86effed..88f92c8 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/__init__.py
@@ -589,6 +589,13 @@ class TablespaceView(PGChildNodeView):
         if not status:
             return internal_server_error(errormsg=res)
 
+        if not tsid:
+            # Whether the column needs prettify at the client side or not
+            if 'columns' in res:
+                for col in res['columns']:
+                    if col['name'] in ['Size']:
+                        col['can_prettify'] = True
+
         return make_json_response(
             data=res,
             status=200
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/stats.sql b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/stats.sql
index 3f91b02..485b3fc 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/stats.sql
@@ -3,7 +3,7 @@
 SELECT pg_size_pretty(pg_tablespace_size({{ tsid|qtLiteral }}::OID)) AS {{ conn|qtIdent(_('Size')) }}
 {% else %}
 SELECT ts.spcname AS {{ conn|qtIdent(_('Name')) }},
-    pg_size_pretty(pg_tablespace_size(ts.oid)) AS {{ conn|qtIdent(_('Size')) }}
+    pg_tablespace_size(ts.oid) AS {{ conn|qtIdent(_('Size')) }}
 FROM
     pg_catalog.pg_tablespace ts;
 {% endif %}
diff --git a/web/pgadmin/misc/statistics/static/js/statistics.js b/web/pgadmin/misc/statistics/static/js/statistics.js
index 1191b16..3337960 100644
--- a/web/pgadmin/misc/statistics/static/js/statistics.js
+++ b/web/pgadmin/misc/statistics/static/js/statistics.js
@@ -12,6 +12,29 @@ define([
     return pgBrowser.NodeStatistics;
   }
 
+  var SizeFormatter = Backgrid.SizeFormatter = function () {};
+  _.extend(SizeFormatter.prototype, {
+      /**
+         Takes a raw value from a model and returns the human readable formatted
+         string for display.
+
+         @member Backgrid.SizeFormatter
+         @param {*} rawData
+         @param {Backbone.Model} model Used for more complicated formatting
+         @return {*}
+      */
+      fromRaw: function (rawData, model) {
+         var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
+         if (rawData == 0) return 0;
+         var i = parseInt(Math.floor(Math.log(rawData) / Math.log(1024)));
+         if (i == 0) return rawData + ' ' + sizes[i];
+         return (rawData / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
+      },
+      toRaw: function (formattedData, model) {
+        return formattedData;
+      }
+  });
+
   var PGBooleanCell = Backgrid.Extension.SwitchCell.extend({
       defaults: _.extend({}, Backgrid.Extension.SwitchCell.prototype.defaults)
   }),
@@ -300,12 +323,17 @@ define([
 
       this.columns = [];
       for (var idx in columns) {
-        var c = columns[idx];
-        this.columns.push({
-          editable: false,
-          name: c['name'],
-          cell: typeCellMapper[c['type_code']] || 'string'
-        });
+        var c = columns[idx],
+            col = {
+            editable: false,
+            name: c['name'],
+            cell: typeCellMapper[c['type_code']] || 'string'
+           };
+           if ('can_prettify' in c && c['can_prettify']) {
+            col['formatter'] = SizeFormatter
+           }
+        this.columns.push(col);
+
       }
 
       this.collection.reset(rows);
-- 
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to