From 06eaf7232e9a920468c0f8d74dcf2fe8b555501c Mon Sep 17 00:00:00 2001
From: Daniel Baumann <daniel.baumann@progress-linux.org>
Date: Sat, 13 Apr 2024 14:24:36 +0200
Subject: Adding upstream version 1:10.11.6.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
---
 scripts/sys_schema/functions/format_bytes.sql | 84 +++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)
 create mode 100644 scripts/sys_schema/functions/format_bytes.sql

(limited to 'scripts/sys_schema/functions/format_bytes.sql')

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 ;
-- 
cgit v1.2.3

