From ba31522386e8f6973f13380c94e8c0490abf7afe Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 28 Jan 2005 10:49:13 -0800 Subject: [PATCH 1/3] Restore behavior of 4.1 that allowed any one argument to be passed to the server on Windows service startup, and not just --defaults-file=file. This appears to be an unnecessary limitation, but fixing that will require a larger refactoring of the Windows service installation and startup code. (Bug #7856) sql/mysqld.cc: Restore behavior from 4.1 of allowing any one parameter to the service on install, and not just --defaults-file=file. --- sql/mysqld.cc | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 9b39f51fc5b..a72481351ba 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3375,39 +3375,34 @@ int main(int argc, char **argv) return 0; } } - else if (argc >= 4) + else if (argc == 4 || argc == 5) { - const char *defaults_file = "--defaults-file"; - const char *service = "--local-service"; - char extra_opt[FN_REFLEN] = ""; + /* + This may seem strange, because we handle --local-service while + preserving 4.1's behavior of allowing any one other argument that is + passed to the service on startup. (The assumption is that this is + --defaults-file=file, but that was not enforced in 4.1, so we don't + enforce it here.) + */ + char *extra_opt= NULL; char *account_name = NULL; - char *option; int index; for (index = 3; index < argc; index++) { - option= argv[index]; - /* - Install an optional service with optional config file - mysqld --install-manual mysqldopt --defaults-file=c:\miguel\my.ini - */ - if (strncmp(option, defaults_file, strlen(defaults_file)) == 0) - { - strmov(extra_opt, option); - } - else - /* - Install an optional service as local service - mysqld --install-manual mysqldopt --local-service - */ - if (strncmp(option, service, strlen(service)) == 0) + if (strncmp(argv[index], "--local-service", 15) == 0) { account_name=(char*)malloc(27); strmov(account_name, "NT AUTHORITY\\LocalService\0"); } + else + { + extra_opt= argv[index]; + } } - if (!default_service_handling(argv, argv[2], argv[2], file_path, extra_opt, account_name)) - return 0; + if (argc != 5 || account_name) + if (!default_service_handling(argv, argv[2], argv[2], file_path, extra_opt, account_name)) + return 0; } else if (argc == 1 && Service.IsService(MYSQL_SERVICENAME)) { From 34df86478e807f18f3f34b4c114740feb5055a02 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 2 Feb 2005 19:41:33 -0800 Subject: [PATCH 2/3] Add --help to mysqld_safe. (Bug #7931) scripts/mysqld_safe.sh: Add --help switch --- scripts/mysqld_safe.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index d6ee11f226d..a8615ff2113 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -23,6 +23,29 @@ case "$1" in ;; esac +usage () { + cat < Date: Thu, 3 Feb 2005 16:14:02 -0800 Subject: [PATCH 3/3] Handle backslashes correctly in strings that also have doubled quotes when we are using the NO_BACKSLASH_ESCAPES SQL mode. (Bug #6368) mysql-test/t/sql_mode.test: Add regression test for Bug #6368 mysql-test/r/sql_mode.result: Add new results sql/sql_lex.cc: Handle NO_BACKSLASH_ESCAPES mode when copying string that also has escapes due to doubled quotes --- mysql-test/r/sql_mode.result | 14 ++++++++++++++ mysql-test/t/sql_mode.test | 10 ++++++++++ sql/sql_lex.cc | 3 ++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/sql_mode.result b/mysql-test/r/sql_mode.result index 5492a7a65fc..09adc48259c 100644 --- a/mysql-test/r/sql_mode.result +++ b/mysql-test/r/sql_mode.result @@ -386,4 +386,18 @@ p mask example 20 \\\\% \\\\% 20 \\\\% \\\\_ DROP TABLE t1; +SET @@SQL_MODE='NO_BACKSLASH_ESCAPES'; +SELECT 'a\\b', 'a\\\"b', 'a''\\b', 'a''\\\"b'; +a\\b a\\\"b a'\\b a'\\\"b +a\\b a\\\"b a'\\b a'\\\"b +SELECT "a\\b", "a\\\'b", "a""\\b", "a""\\\'b"; +a\\b a\\\'b a"\\b a"\\\'b +a\\b a\\\'b a"\\b a"\\\'b +SET @@SQL_MODE=''; +SELECT 'a\\b', 'a\\\"b', 'a''\\b', 'a''\\\"b'; +a\b a\"b a'\b a'\"b +a\b a\"b a'\b a'\"b +SELECT "a\\b", "a\\\'b", "a""\\b", "a""\\\'b"; +a\b a\'b a"\b a"\'b +a\b a\'b a"\b a"\'b SET @@SQL_MODE=@OLD_SQL_MODE; diff --git a/mysql-test/t/sql_mode.test b/mysql-test/t/sql_mode.test index fa5c6cb8a5b..e80752eb71b 100644 --- a/mysql-test/t/sql_mode.test +++ b/mysql-test/t/sql_mode.test @@ -174,4 +174,14 @@ order by masks.p, example; DROP TABLE t1; +# Bug #6368: Make sure backslashes mixed with doubled quotes are handled +# correctly in NO_BACKSLASH_ESCAPES mode +SET @@SQL_MODE='NO_BACKSLASH_ESCAPES'; +SELECT 'a\\b', 'a\\\"b', 'a''\\b', 'a''\\\"b'; +SELECT "a\\b", "a\\\'b", "a""\\b", "a""\\\'b"; + +SET @@SQL_MODE=''; +SELECT 'a\\b', 'a\\\"b', 'a''\\b', 'a''\\\"b'; +SELECT "a\\b", "a\\\'b", "a""\\b", "a""\\\'b"; + SET @@SQL_MODE=@OLD_SQL_MODE; diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 43e82ff57c9..7255b0aa64f 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -334,7 +334,8 @@ static char *get_text(LEX *lex) continue; } #endif - if (*str == '\\' && str+1 != end) + if (!(lex->thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES) && + *str == '\\' && str+1 != end) { switch(*++str) { case 'n':