diff --git a/lib/DSNParser.pm b/lib/DSNParser.pm index 5e6dff1d..b4816724 100644 --- a/lib/DSNParser.pm +++ b/lib/DSNParser.pm @@ -343,18 +343,6 @@ sub get_dbh { die "Error getting the current SQL_MODE: $EVAL_ERROR"; } - $sql = 'SET @@SQL_QUOTE_SHOW_CREATE = 1' - . '/*!40101, @@SQL_MODE=\'NO_AUTO_VALUE_ON_ZERO' - . ($sql_mode ? ",$sql_mode" : '') - . '\'*/'; - PTDEBUG && _d($dbh, $sql); - eval { $dbh->do($sql) }; - if ( $EVAL_ERROR ) { - die "Error setting SQL_QUOTE_SHOW_CREATE, SQL_MODE" - . ($sql_mode ? " and $sql_mode" : '') - . ": $EVAL_ERROR"; - } - # Set character set and binmode on STDOUT. if ( my ($charset) = $cxn_string =~ m/charset=([\w]+)/ ) { $sql = qq{/*!40101 SET NAMES "$charset"*/}; @@ -381,6 +369,20 @@ sub get_dbh { die "Error setting $var: $EVAL_ERROR"; } } + + # Do this after set-vars so a user-set sql_mode doesn't clobber it; See + # https://bugs.launchpad.net/percona-toolkit/+bug/1078887 + $sql = 'SET @@SQL_QUOTE_SHOW_CREATE = 1' + . '/*!40101, @@SQL_MODE=\'NO_AUTO_VALUE_ON_ZERO' + . ($sql_mode ? ",$sql_mode" : '') + . '\'*/'; + PTDEBUG && _d($dbh, $sql); + eval { $dbh->do($sql) }; + if ( $EVAL_ERROR ) { + die "Error setting SQL_QUOTE_SHOW_CREATE, SQL_MODE" + . ($sql_mode ? " and $sql_mode" : '') + . ": $EVAL_ERROR"; + } } PTDEBUG && _d('DBH info: ', diff --git a/t/lib/DSNParser.t b/t/lib/DSNParser.t index 7a8623bd..ed6af7c1 100644 --- a/t/lib/DSNParser.t +++ b/t/lib/DSNParser.t @@ -570,6 +570,24 @@ like( ); $dp->prop('set-vars', undef); +# ############################################################################# +# Bug 1078887: Don't clobber the sql_mode set by the script with set-vars +# https://bugs.launchpad.net/percona-toolkit/+bug/1078887 +# ############################################################################# + +$dp->prop('set-vars', "sql_mode=ANSI_QUOTES"); +my $sql_mode_dbh = $dp->get_dbh($dp->get_cxn_params($dsn), {}); + +my (undef, $sql_mode) = $sql_mode_dbh->selectrow_array(q{SHOW VARIABLES LIKE 'sql\_mode'}); + +like( + $sql_mode, + qr/NO_AUTO_VALUE_ON_ZERO/, + "Bug 1078887: --set-vars doesn't clover the sql_mode set by DSNParser" +); + +$sql_mode_dbh->disconnect(); + # ############################################################################# # LOAD DATA LOCAL INFILE broken in some platforms # https://bugs.launchpad.net/percona-toolkit/+bug/821715 @@ -610,3 +628,4 @@ SKIP: { # Done. # ############################################################################# done_testing; + \ No newline at end of file