summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: dd47efc)
raw | patch | inline | side by side (parent: dd47efc)
author | janw <janw@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Tue, 22 Apr 2008 07:04:37 +0000 (07:04 +0000) | ||
committer | janw <janw@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Tue, 22 Apr 2008 07:04:37 +0000 (07:04 +0000) |
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@10597 594d385d-05f5-0310-b6e9-bd551577e9d8
gosa-si/modules/DBsqlite.pm | patch | blob | history |
index 420a5694988468d0bcfa60034f97a4f4047f81c7..e845ef6d0ce1d743d3ac247cabbe3f2cda15f13d 100644 (file)
my $prim_statement="";
if( 0 != @$primkeys ) { # more than one primkey exist in list
my @prim_list;
- foreach my $primkey (@$primkeys) {
- if( not exists $arg->{$primkey} ) {
- return (3, "primkey '$primkey' has no value for add_dbentry");
- }
- push(@prim_list, "$primkey='".$arg->{$primkey}."'");
- }
+ foreach my $primkey (@$primkeys) {
+ if($primkey eq 'id') {
+ # if primkey is id, fetch max id from table and give new job id= max(id)+1
+ my $sql_statement = "SELECT MAX(CAST(id AS INTEGER)) FROM $table";
+ my $max_id;
+ eval {
+ $max_id = @{ @{ $self->{dbh}->selectall_arrayref($sql_statement) }[0] }[0];
+ };
+ if($@) {
+ $self->{dbh}->do("ANALYZE");
+ eval {
+ $max_id = @{ @{ $self->{dbh}->selectall_arrayref($sql_statement) }[0] }[0];
+ };
+ if($@) {
+ &main::daemon_log("ERROR: $sql_statement failed with $@", 1);
+ }
+ }
+ my $id;
+ if( defined $max_id) {
+ $id = $max_id + 1;
+ } else {
+ $id = 1;
+ }
+ $arg->{id} = $id;
+ }
+ if( not exists $arg->{$primkey} ) {
+ return (3, "primkey '$primkey' has no value for add_dbentry");
+ }
+ push(@prim_list, "$primkey='".$arg->{$primkey}."'");
+ }
$prim_statement = "WHERE ".join(" AND ", @prim_list);
# check wether primkey is unique in table, otherwise return errorflag