Dimedis-Sql
view release on metacpan or search on metacpan
lib/Dimedis/Sql.pm view on Meta::CPAN
"only the undef value allowed for serial columns"
if defined $data_href->{$col} and
not $self->{serial_write};
} elsif ( $type eq 'date') {
# GROBER Datumsformatcheck
croak "$exc:check_data_types\t".
"illegal date: $col=$data_href->{$col}"
if $data_href->{$col} and
$data_href->{$col} !~
/^\d\d\d\d\d\d\d\d\d\d:\d\d:\d\d$/;
} elsif ( $type eq 'blob' or $type eq 'clob' ) {
$blob_found = 1 if exists $data_href->{$col};
}
}
croak "$exc:check_data_types\tblob/clob handling only with serial column"
if $action eq 'insert' and $blob_found and
(not $serial_found or
not exists $data_href->{$serial_found});
return $serial_found;
}
# INSERT -------------------------------------------------------------
sub insert {
my $self = shift;
my %par = @_;
$par{type} ||= $self->{type_href}->{$par{table}}; # wenn undef, globales Type Hash holen
# Parametercheck
croak "$exc:insert\tmissing table" unless defined $par{table};
croak "$exc:insert\tmissing data" unless defined $par{data};
$self->check_data_types (
$par{type}, $par{data}, 'insert'
);
# Hier kein UTF8 Upgrading, wird beim späteren
# $self->do ( sql => ... ) gemacht. Die Werte
# in Data sind noch nicht unbedingt die finalen
# Werte (z.B. bei Blobs können hier Filenamen
# drin stehen, die an dieser Stelle also noch
# nicht zu UTF8 gewandelt werden dürfen).
# Driver-Methode aufrufen
my $serial;
eval {
$serial = $self->db_insert (\%par);
};
croak "$exc:insert\t$@" if $@;
return $serial;
}
# UPDATE -------------------------------------------------------------
sub update {
my $self = shift;
my %par = @_;
$par{type} ||= $self->{type_href}->{$par{table}}; # wenn undef, globales Type Hash holen
$par{params} ||= []; # wenn undef, leeres Listref draus machen
# Parametercheck
croak "$exc:insert\tmissing table" unless defined $par{table};
croak "$exc:insert\tmissing data" unless defined $par{data};
croak "$exc:insert\tmissing where" unless defined $par{where};
my $serial_found = $self->check_data_types (
$par{type}, $par{data}, 'update'
);
croak "$exc:insert\tserial in update not allowed" if $serial_found;
# ggf. UTF8 Konvertierung vornehmen
if ( $self->{utf8} ) {
foreach my $p ( $par{where}, @{$par{params}} ) {
utf8::upgrade($p);
}
}
# Kein UTF8 Upgrading auf %{$data}, wird beim späteren
# $self->do ( sql => ... ) gemacht. Die Werte
# in %{$data} sind noch nicht unbedingt die finalen
# Werte (z.B. bei Blobs können hier Filenamen
# drin stehen, die an dieser Stelle also noch
# nicht zu UTF8 gewandelt werden dürfen).
# Driver-Methode aufrufen
my $modified;
eval {
$modified = $self->db_update (\%par);
};
croak "$exc:update\t$@" if $@;
return $modified;
}
# BLOB_READ ----------------------------------------------------------
sub blob_read {
my $self = shift;
my %par = @_;
$par{params} ||= []; # wenn undef, leeres Listref draus machen
# Parametercheck
croak "$exc:blob_read\tmissing table" unless defined $par{table};
croak "$exc:blob_read\tmissing where" unless defined $par{where};
croak "$exc:blob_read\tmissing col" unless defined $par{col};
croak "$exc:blob_read\tgot filehandle and filename parameter"
if defined $par{filehandle} and defined $par{filename};
# ggf. UTF8 Konvertierung vornehmen
( run in 0.935 second using v1.01-cache-2.11-cpan-39bf76dae61 )