From 1b1bf430b85d74c3a3f0c7b26e7d90226e17d89a Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sun, 12 Jan 2020 20:50:14 +0100 Subject: [PATCH] tolerate old pcre versions without PCRE2_EXTENDED_MORE flag --- mysql-test/main/func_regexp_pcre.result | 7 +++++-- mysql-test/main/func_regexp_pcre.test | 5 +++-- sql/sys_vars.cc | 11 +++++++++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/mysql-test/main/func_regexp_pcre.result b/mysql-test/main/func_regexp_pcre.result index fd255ec5e8c..5443450d5a1 100644 --- a/mysql-test/main/func_regexp_pcre.result +++ b/mysql-test/main/func_regexp_pcre.result @@ -819,8 +819,11 @@ SET default_regex_flags=DEFAULT; SELECT 'Aq' RLIKE 'A\\q'; ERROR 42000: Regex error 'unrecognized character follows \ at offset 2' SET default_regex_flags='EXTRA'; -SELECT 'Aq' RLIKE 'A\\q'; -ERROR 42000: Regex error 'unrecognized character follows \ at offset 2' +SELECT 'A' RLIKE 'B'; +'A' RLIKE 'B' +0 +Warnings: +Warning 1105 PCRE2 doesn't support the EXTRA flag. Ignored. SET default_regex_flags=DEFAULT; SELECT 'a\nb\nc' RLIKE '^b$'; 'a\nb\nc' RLIKE '^b$' diff --git a/mysql-test/main/func_regexp_pcre.test b/mysql-test/main/func_regexp_pcre.test index 01419e24fcd..32ca12876a4 100644 --- a/mysql-test/main/func_regexp_pcre.test +++ b/mysql-test/main/func_regexp_pcre.test @@ -384,9 +384,10 @@ SET default_regex_flags=DEFAULT; --error ER_REGEXP_ERROR SELECT 'Aq' RLIKE 'A\\q'; + SET default_regex_flags='EXTRA'; ---error ER_REGEXP_ERROR -SELECT 'Aq' RLIKE 'A\\q'; +SELECT 'A' RLIKE 'B'; + SET default_regex_flags=DEFAULT; SELECT 'a\nb\nc' RLIKE '^b$'; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 0d035d002c4..de476042a80 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -5992,6 +5992,11 @@ static Sys_var_set Sys_log_disabled_statements( DEFAULT(LOG_DISABLE_SP), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_has_super)); +#define NOT_SUPPORTED_YET -2 +#ifndef PCRE2_EXTENDED_MORE +#define PCRE2_EXTENDED_MORE NOT_SUPPORTED_YET +#endif + static const char *default_regex_flags_names[]= { "DOTALL", // (?s) . matches anything including NL @@ -6024,9 +6029,11 @@ int default_regex_flags_pcre(THD *thd) { if (default_regex_flags_to_pcre[i] < 0) { + const char *msg= default_regex_flags_to_pcre[i] == NOT_SUPPORTED_YET + ? "Your version of PCRE2 does not support the %s flag. Ignored." + : "PCRE2 doesn't support the %s flag. Ignored."; push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, - ER_UNKNOWN_ERROR, - "PCRE2 doens't support the EXTRA flag. Ignored."); + ER_UNKNOWN_ERROR, msg, default_regex_flags_names[i]); continue; } res|= default_regex_flags_to_pcre[i];