diff options
Diffstat (limited to 'scripts/sys_schema/functions/quote_identifier.sql')
-rw-r--r-- | scripts/sys_schema/functions/quote_identifier.sql | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/scripts/sys_schema/functions/quote_identifier.sql b/scripts/sys_schema/functions/quote_identifier.sql new file mode 100644 index 00000000..b661e5c7 --- /dev/null +++ b/scripts/sys_schema/functions/quote_identifier.sql @@ -0,0 +1,71 @@ +-- Copyright (c) 2016, 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 quote_identifier; + +DELIMITER $$ + +-- https://dev.mysql.com/doc/refman/5.7/en/identifiers.html +-- Maximum supported length for any of the current identifiers in 5.7.5+ is 256 characters. +-- Before that, user variables could have any length. +-- +-- Based on Paul Dubois' suggestion in Bug #78823/Bug #22011361. +CREATE DEFINER='mariadb.sys'@'localhost' FUNCTION quote_identifier(in_identifier TEXT) + RETURNS TEXT CHARSET UTF8 + COMMENT ' + Description + ----------- + + Takes an unquoted identifier (schema name, table name, etc.) and + returns the identifier quoted with backticks. + + Parameters + ----------- + + in_identifier (TEXT): + The identifier to quote. + + Returns + ----------- + + TEXT + + Example + ----------- + + mysql> SELECT sys.quote_identifier(''my_identifier'') AS Identifier; + +-----------------+ + | Identifier | + +-----------------+ + | `my_identifier` | + +-----------------+ + 1 row in set (0.00 sec) + + mysql> SELECT sys.quote_identifier(''my`idenfier'') AS Identifier; + +----------------+ + | Identifier | + +----------------+ + | `my``idenfier` | + +----------------+ + 1 row in set (0.00 sec) + ' + SQL SECURITY INVOKER + DETERMINISTIC + NO SQL +BEGIN + RETURN CONCAT('`', REPLACE(in_identifier, '`', '``'), '`'); +END$$ + +DELIMITER ; |