components/perl_modules/dbd-mysql/patches/05_31insertid.t.patch
author Vladimir Marek <Vladimir.Marek@oracle.com>
Wed, 27 Jul 2016 08:28:16 -0700
changeset 6541 e00afd505b4e
permissions -rw-r--r--
24384275 Make DBD::mysql use mysql 5.7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6541
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     1
https://rt.cpan.org/Public/Bug/Display.html?id=108000
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     2
https://bugs.mysql.com/bug.php?id=78778
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     3
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     4
The fix will be available in next DBD::mysql stable release
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     5
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     6
commit 85459c2f43243e41841180e554e4ef142d95d56b
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     7
Author: Michiel Beijen <[email protected]>
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     8
Date:   Mon Aug 1 08:10:33 2016 +0200
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     9
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    10
    $dbh->{mysql_insertid} is cleared after SELECT
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    11
    
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    12
    Apparently, on t/31insertid.t, there is one test that fails when
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    13
    compiled against libmysqlclient 5.7 or up; issuing a SELECT statement
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    14
    on the same database handle that previously executed an INSERT clears
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    15
    $dbh->{mysql_insertid}, while previously this was retained.
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    16
      (https://rt.cpan.org/Ticket/Display.html?id=108000)
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    17
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    18
--- a/Changes
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    19
+++ b/Changes
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    20
@@ -1,3 +1,10 @@
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    21
+2016-08-01 Patrick Galbraith, Michiel Beijen, DBI/DBD community (4.035_01)
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    22
+* Apparently, on t/31insertid.t, there is one test that fails when compiled
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    23
+  against libmysqlclient 5.7 or up; issuing a SELECT statement on the same
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    24
+  database handle that previously executed an INSERT clears
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    25
+  $dbh->{mysql_insertid}, while previously this was retained.
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    26
+  (https://rt.cpan.org/Ticket/Display.html?id=108000)
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    27
+
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    28
 2016-07-09 Patrick Galbraith, Michiel Beijen, DBI/DBD community (4.035)
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    29
 *  Add DBI back to configure_requires, fix by miyagawa.
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    30
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    31
diff --git a/lib/DBD/mysql.pm b/lib/DBD/mysql.pm
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    32
index 069e882..4830b9d 100644
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    33
--- a/lib/DBD/mysql.pm
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    34
+++ b/lib/DBD/mysql.pm
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    35
@@ -1733,10 +1733,14 @@ have impact on the I<max_length> attribute.
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    36
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    37
 =item mysql_insertid
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    38
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    39
-MySQL has the ability to choose unique key values automatically. If this
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    40
-happened, the new ID will be stored in this attribute. An alternative
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    41
-way for accessing this attribute is via $dbh->{'mysql_insertid'}.
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    42
-(Note we are using the $dbh in this case!)
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    43
+If the statement you executed performs an INSERT, and there is an AUTO_INCREMENT
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    44
+column in the table you inserted in, this attribute holds the value stored into
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    45
+the AUTO_INCREMENT column, if that value is automatically generated, by
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    46
+storing NULL or 0 or was specified as an explicit value.
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    47
+
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    48
+Typically, you'd access the value via $sth->{mysql_insertid}. The value can
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    49
+also be accessed via $dbh->{mysql_insertid} but this can easily
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    50
+produce incorrect results in case one database handle is shared.
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    51
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    52
 =item mysql_is_blob
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    53
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    54
diff --git a/t/31insertid.t b/t/31insertid.t
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    55
index 18a6d3b..f00c5a4 100644
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    56
--- a/t/31insertid.t
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    57
+++ b/t/31insertid.t
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    58
@@ -16,7 +16,7 @@ if ($@) {
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    59
     plan skip_all =>
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    60
         "no database connection";
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    61
 }
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    62
-plan tests => 18;
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    63
+plan tests => 19;
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    64
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    65
 ok $dbh->do('SET @@auto_increment_offset = 1');
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    66
 ok $dbh->do('SET @@auto_increment_increment = 1');
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    67
@@ -38,7 +38,8 @@ ok defined $sth;
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    68
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    69
 ok $sth->execute("Jochen");
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    70
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    71
-is $dbh->{'mysql_insertid'}, 1, "insert id == $dbh->{mysql_insertid}";
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    72
+is $sth->{mysql_insertid}, 1, "insert id == $sth->{mysql_insertid}";
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    73
+is $dbh->{mysql_insertid}, 1, "insert id == $dbh->{mysql_insertid}";
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    74
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    75
 ok $sth->execute("Patrick");
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    76
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    77
@@ -53,12 +54,15 @@ ok ($max_id= $sth2->fetch());
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    78
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    79
 ok defined $max_id;
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    80
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    81
-cmp_ok $sth->{'mysql_insertid'}, '==', $max_id->[0], "sth insert id $sth->{'mysql_insertid'} == max(id) $max_id->[0]  in dbd_mysql_t31";
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    82
-
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    83
-cmp_ok $dbh->{'mysql_insertid'}, '==', $max_id->[0], "dbh insert id $dbh->{'mysql_insertid'} == max(id) $max_id->[0] in dbd_mysql_t31";
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    84
+SKIP: {
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    85
+  skip 'using libmysqlclient 5.7 or up we now have an empty dbh insertid',
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    86
+    1, if $dbh->{mysql_clientversion} >= 50700;
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    87
+  cmp_ok $dbh->{mysql_insertid}, '==', $max_id->[0],
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    88
+    "dbh insert id $dbh->{'mysql_insertid'} == max(id) $max_id->[0] in dbd_mysql_t31";
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    89
+}
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    90
+cmp_ok $sth->{mysql_insertid}, '==', $max_id->[0],
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    91
+  "sth insert id $sth->{'mysql_insertid'} == max(id) $max_id->[0]  in dbd_mysql_t31";
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    92
 
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    93
 ok $sth->finish();
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    94
-
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    95
 ok $sth2->finish();
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    96
-
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    97
 ok $dbh->disconnect();
e00afd505b4e 24384275 Make DBD::mysql use mysql 5.7
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    98