mysql-server/scripts/sys_schema/functions/ps_is_instrument_default_timed.sql
2025-03-05 14:31:37 +07:00

81 lines
2.5 KiB
SQL

-- Copyright (c) 2014, 2024, Oracle and/or its affiliates.
--
-- 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 ps_is_instrument_default_timed;
DELIMITER $$
CREATE DEFINER='mysql.sys'@'localhost' FUNCTION ps_is_instrument_default_timed (
in_instrument VARCHAR(128)
)
RETURNS ENUM('YES', 'NO')
COMMENT '
Description
-----------
Returns whether an instrument is timed by default in this version of MySQL.
Parameters
-----------
in_instrument VARCHAR(128):
The instrument to check.
Returns
-----------
ENUM(\'YES\', \'NO\')
Example
-----------
mysql> SELECT sys.ps_is_instrument_default_timed(\'statement/sql/select\');
+------------------------------------------------------------+
| sys.ps_is_instrument_default_timed(\'statement/sql/select\') |
+------------------------------------------------------------+
| YES |
+------------------------------------------------------------+
1 row in set (0.00 sec)
'
SQL SECURITY INVOKER
DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE v_timed ENUM('YES', 'NO');
IF (in_instrument LIKE 'stage/%') THEN
BEGIN
-- Stages are timed by default if the progress property is set.
SET v_timed = (SELECT
IF(find_in_set("progress", PROPERTIES) != 0, 'YES', 'NO')
FROM performance_schema.setup_instruments
WHERE NAME = in_instrument);
SET v_timed = IFNULL(v_timed, 'NO');
END;
ELSE
-- Mutex, rwlock, prlock, sxlock, cond are not timed by default
-- Memory instruments are never timed.
SET v_timed = IF(in_instrument LIKE 'wait/synch/%'
OR in_instrument LIKE 'memory/%'
,
'NO',
'YES'
);
END IF;
RETURN v_timed;
END$$
DELIMITER ;