PT-1707 Updated DSNParser in all apps

This commit is contained in:
Carlos Salguero
2019-10-29 08:53:26 -03:00
parent a97e24be71
commit e656274493
23 changed files with 520 additions and 37 deletions

View File

@@ -2379,7 +2379,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2546,6 +2546,7 @@ sub get_dbh {
if ( $cxn_string =~ m/mysql/i ) { if ( $cxn_string =~ m/mysql/i ) {
my $sql; my $sql;
if ( my ($charset) = $cxn_string =~ m/charset=([\w]+)/ ) { if ( my ($charset) = $cxn_string =~ m/charset=([\w]+)/ ) {
$sql = qq{/*!40101 SET NAMES "$charset"*/}; $sql = qq{/*!40101 SET NAMES "$charset"*/};
PTDEBUG && _d($dbh, $sql); PTDEBUG && _d($dbh, $sql);
@@ -2586,6 +2587,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -1945,7 +1945,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2153,6 +2153,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -2289,7 +2289,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2497,6 +2497,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -766,7 +766,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -974,6 +974,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -177,7 +177,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -385,6 +385,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -1441,7 +1441,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -1649,6 +1649,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -2742,7 +2742,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2882,7 +2882,7 @@ sub get_dbh {
my $dbh; my $dbh;
my $tries = 2; my $tries = 2;
while ( !$dbh && $tries-- ) { while ( !$dbh && $tries-- ) {
PTDEBUG && _d($cxn_string, ' ', $user, ' ', $pass, PTDEBUG && _d($cxn_string, ' ', $user, ' ', $pass,
join(', ', map { "$_=>$defaults->{$_}" } keys %$defaults )); join(', ', map { "$_=>$defaults->{$_}" } keys %$defaults ));
$dbh = eval { DBI->connect($cxn_string, $user, $pass, $defaults) }; $dbh = eval { DBI->connect($cxn_string, $user, $pass, $defaults) };
@@ -2950,6 +2950,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,
@@ -3058,7 +3080,7 @@ sub set_vars {
} }
} }
return; return;
} }
sub _d { sub _d {

View File

@@ -187,7 +187,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -395,6 +395,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -1949,7 +1949,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2157,6 +2157,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -2407,6 +2407,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -855,7 +855,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -1063,6 +1063,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -1221,7 +1221,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -1361,7 +1361,7 @@ sub get_dbh {
my $dbh; my $dbh;
my $tries = 2; my $tries = 2;
while ( !$dbh && $tries-- ) { while ( !$dbh && $tries-- ) {
PTDEBUG && _d($cxn_string, ' ', $user, ' ', $pass, PTDEBUG && _d($cxn_string, ' ', $user, ' ', $pass,
join(', ', map { "$_=>$defaults->{$_}" } keys %$defaults )); join(', ', map { "$_=>$defaults->{$_}" } keys %$defaults ));
$dbh = eval { DBI->connect($cxn_string, $user, $pass, $defaults) }; $dbh = eval { DBI->connect($cxn_string, $user, $pass, $defaults) };
@@ -1429,6 +1429,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,
@@ -1537,7 +1559,7 @@ sub set_vars {
} }
} }
return; return;
} }
sub _d { sub _d {

View File

@@ -1942,7 +1942,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2150,6 +2150,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -1877,7 +1877,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2085,6 +2085,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -2288,7 +2288,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2496,6 +2496,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -1477,7 +1477,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -1685,6 +1685,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -2110,7 +2110,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2137,7 +2137,6 @@ sub parse {
} }
} }
$self->{dsn_props} = \%final_props;
return \%final_props; return \%final_props;
} }
@@ -2319,18 +2318,26 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
if ($self->{dsn_props}->{D} && $self->{dsn_props}->{t}) { my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
PTDEBUG && _d("DSN has a schema and table: $self->{dsn_props}->{D}.$self->{dsn_props}->{t}"); if ($EVAL_ERROR) {
PTDEBUG && _d("Trying to set the default charset for the connection"); die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
my (undef, $create_table) = eval { $dbh->selectrow_array("SHOW CREATE TABLE $self->{dsn_props}->{D}.$self->{dsn_props}->{t}") }; }
if ($create_table && $create_table =~ m/DEFAULT CHARSET=(\S+)\s*/) { if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
PTDEBUG && _d("Detected table's character set: $1"); if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
PTDEBUG && _d("Executing: SET NAMES '$1'"); $dbh->{mysql_enable_utf8} = 1;
$dbh->do("SET NAMES '$1'"); my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
} else { "Setting: SET NAMES $character_set_server";
PTDEBUG && _d("Cannot get the default character set for the table"); PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
} }
} }

View File

@@ -129,7 +129,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -337,6 +337,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -852,7 +852,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -1060,6 +1060,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -1946,7 +1946,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2154,6 +2154,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -1894,7 +1894,7 @@ sub parse {
foreach my $key ( keys %$opts ) { foreach my $key ( keys %$opts ) {
PTDEBUG && _d('Finding value for', $key); PTDEBUG && _d('Finding value for', $key);
$final_props{$key} = $given_props{$key}; $final_props{$key} = $given_props{$key};
if ( !defined $final_props{$key} if ( !defined $final_props{$key}
&& defined $prev->{$key} && $opts->{$key}->{copy} ) && defined $prev->{$key} && $opts->{$key}->{copy} )
{ {
$final_props{$key} = $prev->{$key}; $final_props{$key} = $prev->{$key};
@@ -2102,6 +2102,28 @@ sub get_dbh {
. ": $EVAL_ERROR"; . ": $EVAL_ERROR";
} }
} }
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
if ($EVAL_ERROR) {
die "Cannot get MySQL version: $EVAL_ERROR";
}
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
if ($EVAL_ERROR) {
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
}
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
$dbh->{mysql_enable_utf8} = 1;
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
"Setting: SET NAMES $character_set_server";
PTDEBUG && _d($msg);
eval { $dbh->do("SET NAMES 'utf8mb4'") };
if ($EVAL_ERROR) {
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
}
}
}
PTDEBUG && _d('DBH info: ', PTDEBUG && _d('DBH info: ',
$dbh, $dbh,

View File

@@ -263,7 +263,13 @@ sub find_slave_hosts {
sub _find_slaves_by_processlist { sub _find_slaves_by_processlist {
my ( $self, $dsn_parser, $dbh, $dsn ) = @_; my ( $self, $dsn_parser, $dbh, $dsn ) = @_;
my @connected_slaves = $self->get_connected_slaves($dbh);
my @slaves = $self->_process_slaves_list($dsn_parser, $dsn, \@connected_slaves);
return @slaves;
}
sub _process_slaves_list {
my ($self, $dsn_parser, $dsn, $connected_slaves) = @_;
my @slaves = map { my @slaves = map {
my $slave = $dsn_parser->parse("h=$_", $dsn); my $slave = $dsn_parser->parse("h=$_", $dsn);
$slave->{source} = 'processlist'; $slave->{source} = 'processlist';
@@ -275,8 +281,11 @@ sub _find_slaves_by_processlist {
if ( $host eq 'localhost' ) { if ( $host eq 'localhost' ) {
$host = '127.0.0.1'; # Replication never uses sockets. $host = '127.0.0.1'; # Replication never uses sockets.
} }
if ($host =~ m/::/) {
$host = '['.$host.']';
}
$host; $host;
} $self->get_connected_slaves($dbh); } @$connected_slaves;
return @slaves; return @slaves;
} }

View File

@@ -335,7 +335,6 @@ $res = $ms->wait_for_master(
slave_dbh => $slaves[0], slave_dbh => $slaves[0],
timeout => 10, timeout => 10,
); );
warn "res->{result}: $res->{result}";
ok($res->{result} >= 0, 'Wait was successful'); ok($res->{result} >= 0, 'Wait was successful');
@@ -868,6 +867,33 @@ SKIP: {
$sb->stop_sandbox(qw(chan_master1 chan_master2 chan_slave1)); $sb->stop_sandbox(qw(chan_master1 chan_master2 chan_slave1));
} }
my $connected_slaves = [
{
command => 'Binlog Dump',
db => undef,
host => '2001:db8:1::242:ac11:3:53902',
id => 7,
info => undef,
rows_examined => 0,
rows_sent => 0,
state => 'Master has sent all binlog to slave; waiting for more updates',
time => 80,
user => 'root'
},
];
my @g = $ms->_process_slaves_list ($dp, $dsn, $connected_slaves);
is (
scalar @g,
1,
"1 slave (IPv6) detected",
);
is (
$g[0]->{h},
"[2001:db8:1::242:ac11:3]",
"Brackets were added to IPv6 detected slave host",
);
# ############################################################################# # #############################################################################
# Done. # Done.
# ############################################################################# # #############################################################################