Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-Data-ObjectDriver for
openSUSE:Factory checked in at 2026-03-11 20:52:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Data-ObjectDriver (Old)
and /work/SRC/openSUSE:Factory/.perl-Data-ObjectDriver.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Data-ObjectDriver"
Wed Mar 11 20:52:25 2026 rev:11 rq:1338064 version:0.270.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-Data-ObjectDriver/perl-Data-ObjectDriver.changes
2025-10-22 12:18:50.317926584 +0200
+++
/work/SRC/openSUSE:Factory/.perl-Data-ObjectDriver.new.8177/perl-Data-ObjectDriver.changes
2026-03-11 20:52:57.092088877 +0100
@@ -1,0 +2,9 @@
+Fri Feb 13 06:15:46 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 0.270.0 (0.27)
+ see /usr/share/doc/packages/perl-Data-ObjectDriver/Changes
+
+ 0.27 2026-02-13T04:51:15Z
+ - Fix bulk_insert for binary values #61
+
+-------------------------------------------------------------------
Old:
----
Data-ObjectDriver-0.26.tar.gz
New:
----
Data-ObjectDriver-0.27.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Data-ObjectDriver.spec ++++++
--- /var/tmp/diff_new_pack.5rl2FL/_old 2026-03-11 20:52:57.704114125 +0100
+++ /var/tmp/diff_new_pack.5rl2FL/_new 2026-03-11 20:52:57.708114291 +0100
@@ -1,7 +1,7 @@
#
# spec file for package perl-Data-ObjectDriver
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,10 +18,10 @@
%define cpan_name Data-ObjectDriver
Name: perl-Data-ObjectDriver
-Version: 0.260.0
+Version: 0.270.0
Release: 0
-# 0.26 -> normalize -> 0.260.0
-%define cpan_version 0.26
+# 0.27 -> normalize -> 0.270.0
+%define cpan_version 0.27
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: Simple, transparent data interface, with caching
URL: https://metacpan.org/release/%{cpan_name}
@@ -35,6 +35,7 @@
BuildRequires: perl(Class::Data::Inheritable)
BuildRequires: perl(Class::Trigger)
BuildRequires: perl(DBI)
+BuildRequires: perl(Digest::SHA)
BuildRequires: perl(ExtUtils::MakeMaker) >= 6.59
BuildRequires: perl(Module::Build)
BuildRequires: perl(Module::Build::Tiny) >= 0.35
++++++ Data-ObjectDriver-0.26.tar.gz -> Data-ObjectDriver-0.27.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Data-ObjectDriver-0.26/Changes
new/Data-ObjectDriver-0.27/Changes
--- old/Data-ObjectDriver-0.26/Changes 2025-10-17 04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/Changes 2026-02-13 05:51:41.000000000 +0100
@@ -1,3 +1,6 @@
+0.27 2026-02-13T04:51:15Z
+ - Fix bulk_insert for binary values #61
+
0.26 2025-10-17T02:16:46Z
- Add an ability to accept subqueries with SQL objects #57 #59
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Data-ObjectDriver-0.26/MANIFEST
new/Data-ObjectDriver-0.27/MANIFEST
--- old/Data-ObjectDriver-0.26/MANIFEST 2025-10-17 04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/MANIFEST 2026-02-13 05:51:41.000000000 +0100
@@ -43,6 +43,7 @@
t/07-has-a.t
t/08-iterator.t
t/09-resultset.t
+t/10-resultset-blob.t
t/10-resultset-peek.t
t/11-sql-with-models.t
t/11-sql.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Data-ObjectDriver-0.26/META.json
new/Data-ObjectDriver-0.27/META.json
--- old/Data-ObjectDriver-0.26/META.json 2025-10-17 04:17:07.000000000
+0200
+++ new/Data-ObjectDriver-0.27/META.json 2026-02-13 05:51:41.000000000
+0100
@@ -120,11 +120,12 @@
"Class::Trigger" : "0",
"DBI" : "0",
"List::Util" : "0",
- "perl" : "5.006001"
+ "perl" : "5.008001"
}
},
"test" : {
"requires" : {
+ "Digest::SHA" : "0",
"Tie::IxHash" : "0",
"version" : "0"
}
@@ -133,7 +134,7 @@
"provides" : {
"Data::ObjectDriver" : {
"file" : "lib/Data/ObjectDriver.pm",
- "version" : "0.26"
+ "version" : "0.27"
},
"Data::ObjectDriver::BaseObject" : {
"file" : "lib/Data/ObjectDriver/BaseObject.pm"
@@ -226,7 +227,7 @@
"web" : "https://github.com/sixapart/data-objectdriver"
}
},
- "version" : "0.26",
+ "version" : "0.27",
"x_authority" : "cpan:SIXAPART",
"x_contributors" : [
"Adam Thomason <[email protected]>",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Data-ObjectDriver-0.26/META.yml
new/Data-ObjectDriver-0.27/META.yml
--- old/Data-ObjectDriver-0.26/META.yml 2025-10-17 04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/META.yml 2026-02-13 05:51:41.000000000 +0100
@@ -3,6 +3,7 @@
author:
- '& COPYRIGHT'
build_requires:
+ Digest::SHA: '0'
ExtUtils::MakeMaker: '6.59'
Test::Exception: '0'
Tie::IxHash: '0'
@@ -60,7 +61,7 @@
provides:
Data::ObjectDriver:
file: lib/Data/ObjectDriver.pm
- version: '0.26'
+ version: '0.27'
Data::ObjectDriver::BaseObject:
file: lib/Data/ObjectDriver/BaseObject.pm
Data::ObjectDriver::BaseView:
@@ -121,12 +122,12 @@
Class::Trigger: '0'
DBI: '0'
List::Util: '0'
- perl: '5.006001'
+ perl: '5.008001'
resources:
bugtracker: https://github.com/sixapart/data-objectdriver/issues
homepage: https://github.com/sixapart/data-objectdriver
repository: https://github.com/sixapart/data-objectdriver.git
-version: '0.26'
+version: '0.27'
x_authority: cpan:SIXAPART
x_contributors:
- 'Adam Thomason <[email protected]>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Data-ObjectDriver-0.26/cpanfile
new/Data-ObjectDriver-0.27/cpanfile
--- old/Data-ObjectDriver-0.26/cpanfile 2025-10-17 04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/cpanfile 2026-02-13 05:51:41.000000000 +0100
@@ -3,7 +3,7 @@
requires 'Class::Trigger';
requires 'DBI';
requires 'List::Util';
-requires 'perl', '5.006001';
+requires 'perl', '5.008001';
recommends 'Text::SimpleTable';
on configure => sub {
@@ -23,6 +23,7 @@
on test => sub {
requires 'version';
requires 'Tie::IxHash';
+ requires 'Digest::SHA';
};
feature 'test_sqlite', 'Test SQLite' => sub {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBD/MariaDB.pm
new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBD/MariaDB.pm
--- old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBD/MariaDB.pm
2025-10-17 04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBD/MariaDB.pm
2026-02-13 05:51:41.000000000 +0100
@@ -3,8 +3,59 @@
package Data::ObjectDriver::Driver::DBD::MariaDB;
use strict;
use warnings;
+use Carp;
use base qw( Data::ObjectDriver::Driver::DBD::mysql );
sub fetch_id { $_[3]->{mariadb_insertid} || $_[3]->{insertid} }
+sub bind_param_attributes {
+ my ($dbd, $data_type) = @_;
+ if ($data_type) {
+ if ($data_type eq 'blob') {
+ return DBI::SQL_BINARY;
+ } elsif ($data_type eq 'binchar') {
+ return DBI::SQL_BINARY;
+ }
+ }
+ return;
+}
+
+sub bulk_insert {
+ my $dbd = shift;
+ my $dbh = shift;
+ my $table = shift;
+
+ my $cols = shift;
+ my $rows_ref = shift;
+ my $attrs = shift || {};
+
+ croak "Usage bulk_insert(dbd, dbh, table, columnref, rowsref)"
+ unless (defined $dbd && defined $dbh && defined $table && defined
$cols &&
+ defined $rows_ref);
+
+ return 0e0 if (scalar(@{$rows_ref}) == 0);
+
+ my $sql = "INSERT INTO $table (" . join(',', @{$cols}) . ") VALUES\n";
+
+ my $one_data_row = "(" . (join ',', (('?') x @$cols)) . ")";
+ my $ph = join ",", (($one_data_row) x @$rows_ref);
+ $sql .= $ph;
+
+ # For now just write all data, at some point we need to lookup the
+ # maximum packet size for SQL
+
+ if (%$attrs) {
+ my $sth = $dbh->prepare($sql);
+ my $i = 1;
+ for my $row (@$rows_ref) {
+ for (my $j = 0; $j < @$cols; $j++) {
+ $sth->bind_param($i++, $row->[$j], $attrs->{$cols->[$j]});
+ }
+ }
+ $sth->execute;
+ } else {
+ return $dbh->do($sql, undef, map { @$_ } @$rows_ref);
+ }
+}
+
1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBD/Oracle.pm
new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBD/Oracle.pm
--- old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBD/Oracle.pm
2025-10-17 04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBD/Oracle.pm
2026-02-13 05:51:41.000000000 +0100
@@ -68,6 +68,7 @@
my $table = shift;
my $cols = shift;
my $rows_ref = shift;
+ my $attrs = shift || {};
my $sql = "INSERT INTO $table("
. join(',', @$cols)
@@ -76,7 +77,11 @@
. ")";
my $sth = $dbh->prepare($sql);
foreach my $row (@{ $rows_ref || []}) {
- $sth->execute(@$row);
+ my $i = 1;
+ for (my $j = 0; $j < @$cols; $j++) {
+ $sth->bind_param($i++, $row->[$j], $attrs->{$cols->[$j]});
+ }
+ $sth->execute;
}
return 1;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBD/Pg.pm
new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBD/Pg.pm
--- old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBD/Pg.pm
2025-10-17 04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBD/Pg.pm
2026-02-13 05:51:41.000000000 +0100
@@ -51,15 +51,33 @@
my $cols = shift;
my $rows_ref = shift;
+ my $attrs = shift || {};
- my $sql = "COPY $table (" . join(',', @{$cols}) . ') from stdin';
+ if (%$attrs) {
+ my $sql = "INSERT INTO $table (" . join(',', @{$cols}) . ") VALUES\n";
- $dbh->do($sql);
- foreach my $row (@{$rows_ref}) {
- my $line = join("\t", map {$_ || '\N'} @{$row});
- $dbh->pg_putline("$line\n");
+ my $one_data_row = "(" . (join ',', (('?') x @$cols)) . ")";
+ my $ph = join ",", (($one_data_row) x @$rows_ref);
+ $sql .= $ph;
+
+ my $sth = $dbh->prepare($sql);
+ my $i = 1;
+ for my $row (@$rows_ref) {
+ for (my $j = 0; $j < @$cols; $j++) {
+ $sth->bind_param($i++, $row->[$j], $attrs->{$cols->[$j]});
+ }
+ }
+ $sth->execute;
+ } else {
+ my $sql = "COPY $table (" . join(',', @{$cols}) . ') from stdin';
+
+ $dbh->do($sql);
+ foreach my $row (@{$rows_ref}) {
+ my $line = join("\t", map {$_ || '\N'} @{$row});
+ $dbh->pg_putline("$line\n");
+ }
+ return $dbh->pg_endcopy();
}
- return $dbh->pg_endcopy();
}
sub map_error_code {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBD/SQLite.pm
new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBD/SQLite.pm
--- old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBD/SQLite.pm
2025-10-17 04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBD/SQLite.pm
2026-02-13 05:51:41.000000000 +0100
@@ -46,13 +46,18 @@
my $cols = shift;
my $rows_ref = shift;
+ my $attrs = shift || {};
my $sql = "INSERT INTO $table(" . join(',', @{$cols}) . ") VALUES (" .
join(',', map {'?'} @{$cols}) . ")\n";
my $sth = $dbh->prepare($sql);
foreach my $row (@{$rows_ref}) {
- $sth->execute(@{$row});
+ my $i = 1;
+ for (my $j = 0; $j < @$cols; $j++) {
+ $sth->bind_param($i++, $row->[$j], $attrs->{$cols->[$j]});
+ }
+ $sth->execute;
}
# For now just write all data, at some point we need to lookup the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBI.pm
new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBI.pm
--- old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/Driver/DBI.pm
2025-10-17 04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/Driver/DBI.pm
2026-02-13 05:51:41.000000000 +0100
@@ -642,9 +642,19 @@
# pass this directly to the backend DBD
my $dbh = $driver->rw_handle($class->properties->{db});
my $tbl = $driver->table_for($class);
- my @db_cols = map {$dbd->db_column_name($tbl, $_) } @{$cols};
- return $dbd->bulk_insert($dbh, $tbl, \@db_cols, $data);
+ my @db_cols;
+ my %attrs;
+ my $col_defs = $class->properties->{column_defs};
+ for my $col (@$cols) {
+ my $db_col = $dbd->db_column_name($tbl, $col);
+ push @db_cols, $db_col;
+ my $type = $col_defs->{$col} || 'char';
+ my $attr = $dbd->bind_param_attributes($type) or next;
+ $attrs{$db_col} = $attr;
+ }
+
+ return $dbd->bulk_insert($dbh, $tbl, \@db_cols, $data, \%attrs);
}
sub begin_work {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/SQL.pm
new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/SQL.pm
--- old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver/SQL.pm 2025-10-17
04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver/SQL.pm 2026-02-13
05:51:41.000000000 +0100
@@ -707,6 +707,10 @@
Returns the SQL fully representing the SQL statement C<$sql>.
+=head2 C<$sql-E<gt>as_subquery($alias)>
+
+Returns a string representation of C<$sql> as a subquery. C<$alias> is
optional.
+
=head2 C<$sql-E<gt>as_sql_having()>
Returns the SQL representing the C<HAVING> portion of C<$sql>'s C<GROUP ...
@@ -725,6 +729,10 @@
Returns the SQL representing the aggregation clause of type C<$set> for the SQL
statement C<$sql>. Reasonable values of C<$set> are C<ORDER> and C<GROUP>.
+=head2 C<$sql-E<gt>as_escape()>
+
+Returns a string representing the C<ESCAPE> clause for C<LIKE> predicates.
+
=head1 DIAGNOSTICS
=over 4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver.pm
new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver.pm
--- old/Data-ObjectDriver-0.26/lib/Data/ObjectDriver.pm 2025-10-17
04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/lib/Data/ObjectDriver.pm 2026-02-13
05:51:41.000000000 +0100
@@ -11,7 +11,7 @@
__PACKAGE__->mk_accessors(qw( pk_generator txn_active ));
-our $VERSION = '0.26';
+our $VERSION = '0.27';
our $DEBUG = $ENV{DOD_DEBUG} || 0;
our $PROFILE = $ENV{DOD_PROFILE} || 0;
our $PROFILER;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Data-ObjectDriver-0.26/t/10-resultset-blob.t
new/Data-ObjectDriver-0.27/t/10-resultset-blob.t
--- old/Data-ObjectDriver-0.26/t/10-resultset-blob.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Data-ObjectDriver-0.27/t/10-resultset-blob.t 2026-02-13
05:51:41.000000000 +0100
@@ -0,0 +1,52 @@
+# $Id: 01-col-inheritance.t 989 2005-09-23 19:58:01Z btrott $
+
+use strict;
+use warnings;
+
+use lib 't/lib';
+
+$Data::ObjectDriver::DEBUG = 0;
+use Test::More;
+use DodTestUtil;
+BEGIN { eval { require Digest::SHA; 1 } or plan skip_all => 'requires
Digest::SHA' }
+
+BEGIN { DodTestUtil->check_driver }
+
+plan tests => 5;
+
+setup_dbs({
+ global => [ qw( wines ) ],
+});
+
+use Wine;
+use Storable;
+
+my $wine = Wine->new;
+$wine->name("Saumur Champigny, Le Grand Clos 2001");
+$wine->rating(4);
+
+## generate some binary data (SQL_BLOB / MEDIUMBLOB)
+my $binary = Digest::SHA::sha1("binary");
+$wine->content($binary);
+ok($wine->save, 'Object saved successfully');
+
+my $iter;
+
+$iter = Data::ObjectDriver::Iterator->new(sub {});
+my $wine_id = $wine->id;
+undef $wine;
+$wine = Wine->lookup($wine_id);
+
+ok $wine;
+ok $wine->content eq $binary;
+
+my @names = qw(Margaux Latour);
+Wine->bulk_insert([qw(name content)], [ map {[$_, Digest::SHA::sha1($_)]}
@names ]);
+
+for my $name (@names) {
+ my ($found) = Wine->search({name => $name});
+ ok $found->content eq Digest::SHA::sha1($name);
+}
+
+disconnect_all($wine);
+teardown_dbs(qw( global ));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Data-ObjectDriver-0.26/t/lib/DodTestUtil.pm
new/Data-ObjectDriver-0.27/t/lib/DodTestUtil.pm
--- old/Data-ObjectDriver-0.26/t/lib/DodTestUtil.pm 2025-10-17
04:17:07.000000000 +0200
+++ new/Data-ObjectDriver-0.27/t/lib/DodTestUtil.pm 2026-02-13
05:51:41.000000000 +0100
@@ -73,7 +73,8 @@
$dsn;
};
}
- if ($driver eq 'MySQL') {
+ {
+ no warnings 'redefine';
*Test::mysqld::wait_for_stop = sub {
my $self = shift;
local $?; # waitpid may change this value :/
++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.5rl2FL/_old 2026-03-11 20:52:57.916122873 +0100
+++ /var/tmp/diff_new_pack.5rl2FL/_new 2026-03-11 20:52:57.920123038 +0100
@@ -1,6 +1,6 @@
-mtime: 1760727701
-commit: eba70a31c550d4e8a6a66e44bf4bdd3796595d2e30884b309a0019adb2477af7
+mtime: 1770963346
+commit: fea4241f56dae3d347cecce218d7db24bfeb3e3cb6a1151dda50f5426e813ab5
url: https://src.opensuse.org/perl/perl-Data-ObjectDriver.git
-revision: eba70a31c550d4e8a6a66e44bf4bdd3796595d2e30884b309a0019adb2477af7
+revision: fea4241f56dae3d347cecce218d7db24bfeb3e3cb6a1151dda50f5426e813ab5
projectscmsync: https://src.opensuse.org/perl/_ObsPrj
++++++ build.specials.obscpio ++++++
++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 2026-03-09 19:31:24.000000000 +0100
@@ -0,0 +1 @@
+.osc