1- -- Copyright (c) 2014, 2015 , Oracle and/or its affiliates. All rights reserved.
1+ -- Copyright (c) 2014, 2016 , Oracle and/or its affiliates. All rights reserved.
22--
33-- This program is free software; you can redistribute it and/or modify
44-- it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@ DROP FUNCTION IF EXISTS format_path;
1818DELIMITER $$
1919
2020CREATE DEFINER= ' root' @' localhost' FUNCTION format_path (
21- path VARCHAR (512 )
21+ in_path VARCHAR (512 )
2222 )
2323 RETURNS VARCHAR (512 ) CHARSET UTF8
2424 COMMENT '
@@ -68,30 +68,41 @@ BEGIN
6868 DECLARE v_path VARCHAR (512 );
6969 DECLARE v_undo_dir VARCHAR (1024 );
7070
71+ DECLARE path_separator CHAR (1 ) DEFAULT ' /' ;
72+
73+ IF @@global .version_compile_os LIKE ' win%' THEN
74+ SET path_separator = ' \\ ' ;
75+ END IF;
76+
7177 -- OSX hides /private/ in variables, but Performance Schema does not
72- IF path LIKE ' /private/%'
73- THEN SET v_path = REPLACE(path , ' /private' , ' ' );
74- ELSE SET v_path = path ;
78+ IF in_path LIKE ' /private/%' THEN
79+ SET v_path = REPLACE(in_path, ' /private' , ' ' );
80+ ELSE
81+ SET v_path = in_path;
7582 END IF;
7683
7784 -- @@global.innodb_undo_directory is only set when separate undo logs are used
78- SET v_undo_dir = IFNULL((SELECT VARIABLE_NAME FROM information_schema .GLOBAL_VARIABLES WHERE VARIABLE_NAME = ' innodb_undo_directory' ), ' ' );
79-
80- IF v_path IS NULL THEN RETURN NULL ;
81- ELSEIF v_path LIKE CONCAT(@@global .datadir , ' %' ) ESCAPE ' |' THEN
82- RETURN REPLACE(REPLACE(REPLACE(v_path, @@global .datadir , ' @@datadir/' ), ' \\\\ ' , ' ' ), ' \\ ' , ' /' );
83- ELSEIF v_path LIKE CONCAT(@@global .tmpdir , ' %' ) ESCAPE ' |' THEN
84- RETURN REPLACE(REPLACE(REPLACE(v_path, @@global .tmpdir , ' @@tmpdir/' ), ' \\\\ ' , ' ' ), ' \\ ' , ' /' );
85- ELSEIF v_path LIKE CONCAT(@@global .slave_load_tmpdir , ' %' ) ESCAPE ' |' THEN
86- RETURN REPLACE(REPLACE(REPLACE(v_path, @@global .slave_load_tmpdir , ' @@slave_load_tmpdir/' ), ' \\\\ ' , ' ' ), ' \\ ' , ' /' );
87- ELSEIF v_path LIKE CONCAT(@@global .innodb_data_home_dir , ' %' ) ESCAPE ' |' THEN
88- RETURN REPLACE(REPLACE(REPLACE(v_path, @@global .innodb_data_home_dir , ' @@innodb_data_home_dir/' ), ' \\\\ ' , ' ' ), ' \\ ' , ' /' );
89- ELSEIF v_path LIKE CONCAT(@@global .innodb_log_group_home_dir , ' %' ) ESCAPE ' |' THEN
90- RETURN REPLACE(REPLACE(REPLACE(v_path, @@global .innodb_log_group_home_dir , ' @@innodb_log_group_home_dir/' ), ' \\\\ ' , ' ' ), ' \\ ' , ' /' );
91- ELSEIF v_path LIKE CONCAT(v_undo_dir, ' %' ) ESCAPE ' |' THEN
92- RETURN REPLACE(REPLACE(REPLACE(v_path, v_undo_dir, ' @@innodb_undo_directory/' ), ' \\\\ ' , ' ' ), ' \\ ' , ' /' );
93- ELSE RETURN v_path;
85+ SET v_undo_dir = IFNULL((SELECT VARIABLE_VALUE FROM information_schema .GLOBAL_VARIABLES WHERE VARIABLE_NAME = ' innodb_undo_directory' ), ' ' );
86+
87+ IF v_path IS NULL THEN
88+ RETURN NULL ;
89+ ELSEIF v_path LIKE CONCAT(@@global .datadir , IF(SUBSTRING (@@global .datadir , - 1 ) = path_separator, ' %' , CONCAT(path_separator, ' %' ))) ESCAPE ' |' THEN
90+ SET v_path = REPLACE(v_path, @@global .datadir , CONCAT(' @@datadir' , IF(SUBSTRING (@@global .datadir , - 1 ) = path_separator, path_separator, ' ' )));
91+ ELSEIF v_path LIKE CONCAT(@@global .tmpdir , IF(SUBSTRING (@@global .tmpdir , - 1 ) = path_separator, ' %' , CONCAT(path_separator, ' %' ))) ESCAPE ' |' THEN
92+ SET v_path = REPLACE(v_path, @@global .tmpdir , CONCAT(' @@tmpdir' , IF(SUBSTRING (@@global .tmpdir , - 1 ) = path_separator, path_separator, ' ' )));
93+ ELSEIF v_path LIKE CONCAT(@@global .slave_load_tmpdir , IF(SUBSTRING (@@global .slave_load_tmpdir , - 1 ) = path_separator, ' %' , CONCAT(path_separator, ' %' ))) ESCAPE ' |' THEN
94+ SET v_path = REPLACE(v_path, @@global .slave_load_tmpdir , CONCAT(' @@slave_load_tmpdir' , IF(SUBSTRING (@@global .slave_load_tmpdir , - 1 ) = path_separator, path_separator, ' ' )));
95+ ELSEIF v_path LIKE CONCAT(@@global .innodb_data_home_dir , IF(SUBSTRING (@@global .innodb_data_home_dir , - 1 ) = path_separator, ' %' , CONCAT(path_separator, ' %' ))) ESCAPE ' |' THEN
96+ SET v_path = REPLACE(v_path, @@global .innodb_data_home_dir , CONCAT(' @@innodb_data_home_dir' , IF(SUBSTRING (@@global .innodb_data_home_dir , - 1 ) = path_separator, path_separator, ' ' )));
97+ ELSEIF v_path LIKE CONCAT(@@global .innodb_log_group_home_dir , IF(SUBSTRING (@@global .innodb_log_group_home_dir , - 1 ) = path_separator, ' %' , CONCAT(path_separator, ' %' ))) ESCAPE ' |' THEN
98+ SET v_path = REPLACE(v_path, @@global .innodb_log_group_home_dir , CONCAT(' @@innodb_log_group_home_dir' , IF(SUBSTRING (@@global .innodb_log_group_home_dir , - 1 ) = path_separator, path_separator, ' ' )));
99+ ELSEIF v_path LIKE CONCAT(v_undo_dir, IF(SUBSTRING (v_undo_dir, - 1 ) = path_separator, ' %' , CONCAT(path_separator, ' %' ))) ESCAPE ' |' THEN
100+ SET v_path = REPLACE(v_path, v_undo_dir, CONCAT(' @@innodb_undo_directory' , IF(SUBSTRING (v_undo_dir, - 1 ) = path_separator, path_separator, ' ' )));
101+ ELSEIF v_path LIKE CONCAT(@@global .basedir , IF(SUBSTRING (@@global .basedir , - 1 ) = path_separator, ' %' , CONCAT(path_separator, ' %' ))) ESCAPE ' |' THEN
102+ SET v_path = REPLACE(v_path, @@global .basedir , CONCAT(' @@basedir' , IF(SUBSTRING (@@global .basedir , - 1 ) = path_separator, path_separator, ' ' )));
94103 END IF;
104+
105+ RETURN v_path;
95106END$$
96107
97108DELIMITER ;
0 commit comments