Code

Recreated automatic id assignment.
authorjanw <janw@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 22 Apr 2008 07:04:37 +0000 (07:04 +0000)
committerjanw <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

index 420a5694988468d0bcfa60034f97a4f4047f81c7..e845ef6d0ce1d743d3ac247cabbe3f2cda15f13d 100644 (file)
@@ -84,12 +84,36 @@ sub add_dbentry {
     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