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