It would be nice to support multiple inserts in a single statement, especially non-blocking.
Maybe something like this?
my @values = [ [ 'cat', 1 ], [ 'dog', 2 ] ];
$abstract->insert( 'pets' => { -values=>\@values } );
my @keys = [ 'name', 'rank' ];
$abstract->insert( 'pets' => { -keys=> \@keys, -values=>\@values } );
my @keyvalues = [ { name=>'cat', rank=>1 }, { name=>'dog', rank=>2 } ];
$abstract->insert( 'pets' => { -keyvalues=>\@keyvalues } );
Then backend something like this?
sub _insert_HASHREF {
my ($self, $data) = @_;
if ( ref $$data{'-keyvalues'} eq 'ARRAY' ) {
$$data{'-keys'}=[ sort keys %{ $$data{'-keyvalues'}[0] } ];
$$data{'-values'} = [ map {
my $keyvalues=$_;
[ map { $$keyvalues{ $_ } } @{ $$data{'-keys'} } ]
} @{ $$data{'-keyvalues'} } ];
}
return $self->SUPER::_insert_HASHREF($data) if ref $$data{'-values'} ne 'ARRAY';
my @fields = @{$$data{'-keys'}};
my ( @all_bind, @all_values);
foreach my $rec (@{ $$data{'-values'} }) {
my @values;
foreach my $value (@$rec) {
my ($values, @bind) = $self->_insert_value(undef, $value);
push @values, $values;
push @all_bind, @bind;
}
push @all_values, \@values;
}
my $sql = ( exists $$data{'-keys'} ? "( ".join(", ", @fields )." ) ":'' ).
$self->_sqlcase('values').
join(',', map{ " ( ".join(", ", @$_)." )" } @all_values );
return ($sql, @all_bind);
}
It would be nice to support multiple inserts in a single statement, especially non-blocking.
Maybe something like this?
Then backend something like this?