1use strict;
2use warnings;
3
4use Test::More ;
5use DBI;
6use DBI::Const::GetInfoType;
7$|= 1;
8
9use vars qw($test_dsn $test_user $test_password $test_db);
10use lib 't', '.';
11require 'lib.pl';
12
13my $dbh;
14eval {$dbh= DBI->connect($test_dsn, $test_user, $test_password,
15                      { RaiseError => 1, PrintError => 1, AutoCommit => 0 });};
16
17if ($@) {
18  diag $@;
19  plan skip_all => "no database connection";
20}
21
22ok(defined $dbh, "Connected to database");
23
24for my $attribute ( qw(
25  mysql_clientinfo
26  mysql_clientversion
27  mysql_serverversion
28  mysql_hostinfo
29  mysql_serverinfo
30  mysql_stat
31  mysql_protoinfo
32) ) {
33  ok($dbh->{$attribute}, "Value of '$attribute'");
34  diag "$attribute is: ". $dbh->{$attribute};
35}
36
37my $sql_dbms_ver = $dbh->get_info($GetInfoType{SQL_DBMS_VER});
38ok($sql_dbms_ver, 'get_info SQL_DBMS_VER');
39diag "SQL_DBMS_VER is $sql_dbms_ver";
40
41my $driver_ver = $dbh->get_info($GetInfoType{SQL_DRIVER_VER});
42like(
43  $driver_ver,
44  qr/^\d{2}\.\d{2}\.\d{4}$/,
45  'get_info SQL_DRIVER_VER like dd.dd.dddd'
46);
47
48like($driver_ver, qr/^04\./, 'SQL_DRIVER_VER starts with "04." (update for 5.x)');
49
50# storage engine function is @@storage_engine in up to 5.5.03
51# at that version, @@default_storage_engine is introduced
52# http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_storage_engine
53# in MySQL Server 5.7.5 the old option is removed
54# http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_storage_engine
55
56my $storage_engine = $dbh->{mysql_serverversion} >= 50503 ? '@@default_storage_engine' : '@@storage_engine';
57my $result = $dbh->selectall_arrayref('select ' . $storage_engine);
58my $default_storage_engine = $result->[0]->[0] || 'unknown';
59diag "Default storage engine is: $default_storage_engine";
60
61my $info_hashref = $dbh->{mysql_dbd_stats};
62
63ok($dbh->disconnect(), 'Disconnected');
64
65# dbi docs state:
66# The username and password can also be specified using the attributes
67# Username and Password, in which case they take precedence over the $username
68# and $password parameters.
69# see https://rt.cpan.org/Ticket/Display.html?id=89835
70
71eval {$dbh= DBI->connect($test_dsn, $test_user, $test_password,
72   { RaiseError => 1, PrintError => 1, AutoCommit => 0,
73     Username => '4yZ73s9qeECdWi', Password => '64heUGwAsVoNqo' });};
74ok($@, 'Username and Password attributes override');
75
76eval {$dbh= DBI->connect($test_dsn, '4yZ73s9qeECdWi', '64heUGwAsVoNqo',
77   { RaiseError => 1, PrintError => 1, AutoCommit => 0,
78     Username => $test_user, Password => $test_password });};
79ok(!$@, 'Username and Password attributes override');
80
81done_testing;
82