diff options
Diffstat (limited to 'scripts/sys_schema/functions/format_bytes.sql')
-rw-r--r-- | scripts/sys_schema/functions/format_bytes.sql | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/scripts/sys_schema/functions/format_bytes.sql b/scripts/sys_schema/functions/format_bytes.sql new file mode 100644 index 00000000..361aa39a --- /dev/null +++ b/scripts/sys_schema/functions/format_bytes.sql @@ -0,0 +1,84 @@ +-- Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; version 2 of the License. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +DROP FUNCTION IF EXISTS format_bytes; + +DELIMITER $$ + +CREATE DEFINER='mariadb.sys'@'localhost' FUNCTION format_bytes ( + -- We feed in and return TEXT here, as aggregates of + -- bytes can return numbers larger than BIGINT UNSIGNED + bytes TEXT + ) + RETURNS TEXT + COMMENT ' + Description + ----------- + + Takes a raw bytes value, and converts it to a human readable format. + + Parameters + ----------- + + bytes (TEXT): + A raw bytes value. + + Returns + ----------- + + TEXT + + Example + ----------- + + mysql> SELECT sys.format_bytes(2348723492723746) AS size; + +----------+ + | size | + +----------+ + | 2.09 PiB | + +----------+ + 1 row in set (0.00 sec) + + mysql> SELECT sys.format_bytes(2348723492723) AS size; + +----------+ + | size | + +----------+ + | 2.14 TiB | + +----------+ + 1 row in set (0.00 sec) + + mysql> SELECT sys.format_bytes(23487234) AS size; + +-----------+ + | size | + +-----------+ + | 22.40 MiB | + +-----------+ + 1 row in set (0.00 sec) + ' + SQL SECURITY INVOKER + DETERMINISTIC + NO SQL +BEGIN + IF bytes IS NULL THEN RETURN NULL; + ELSEIF bytes >= 1125899906842624 THEN RETURN CONCAT(ROUND(bytes / 1125899906842624, 2), ' PiB'); + ELSEIF bytes >= 1099511627776 THEN RETURN CONCAT(ROUND(bytes / 1099511627776, 2), ' TiB'); + ELSEIF bytes >= 1073741824 THEN RETURN CONCAT(ROUND(bytes / 1073741824, 2), ' GiB'); + ELSEIF bytes >= 1048576 THEN RETURN CONCAT(ROUND(bytes / 1048576, 2), ' MiB'); + ELSEIF bytes >= 1024 THEN RETURN CONCAT(ROUND(bytes / 1024, 2), ' KiB'); + ELSE RETURN CONCAT(ROUND(bytes, 0), ' bytes'); + END IF; +END$$ + +DELIMITER ; |