From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 4385893883 for ; Tue, 20 Feb 2024 13:47:47 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1C7B56DB4 for ; Tue, 20 Feb 2024 13:47:17 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Tue, 20 Feb 2024 13:47:16 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 4EA4843F9C for ; Tue, 20 Feb 2024 13:47:16 +0100 (CET) Date: Tue, 20 Feb 2024 13:47:15 +0100 From: Stoiko Ivanov To: Dominik Csapak Cc: pmg-devel@lists.proxmox.com Message-ID: <20240220134715.2535fbc4@rosa.proxmox.com> In-Reply-To: <20240209125440.2572239-6-d.csapak@proxmox.com> References: <20240209125440.2572239-1-d.csapak@proxmox.com> <20240209125440.2572239-6-d.csapak@proxmox.com> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.085 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: Re: [pmg-devel] [PATCH pmg-api 05/12] add objectgroup attributes and/invert X-BeenThere: pmg-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Mail Gateway development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Feb 2024 12:47:47 -0000 forgot one point in my last reply (or hid it behind the question of why running transactions for selects): On Fri, 9 Feb 2024 13:54:29 +0100 Dominik Csapak wrote: >..snip.. > > +sub load_group_attributes { > + my ($self, $og) = @_; > + > + my $attribute_sth = $self->{dbh}->prepare("SELECT * FROM Objectgroup_Attributes WHERE Objectgroup_ID = ?"); > + $attribute_sth->execute($og->{id}); > + > + while (my $ref = $attribute_sth->fetchrow_hashref()) { > + $og->{and} = $ref->{value} if $ref->{name} eq 'and'; > + $og->{invert} = $ref->{value} if $ref->{name} eq 'invert'; > + } > +} > + > sub load_objectgroups { > my ($self, $class, $id) = @_; > > @@ -259,34 +319,47 @@ sub load_objectgroups { > > defined($class) || die "undefined object class"; > > - if (!(defined($id))) { > - $sth = $self->{dbh}->prepare( > - "SELECT * FROM Objectgroup where Class = ? ORDER BY name"); > - $sth->execute($class); > - > - } else { > - $sth = $self->{dbh}->prepare( > - "SELECT * FROM Objectgroup where Class like ? and id = ? " . > - "order by name"); > - $sth->execute($class,$id); > - } > + $self->{dbh}->begin_work; > > my $arr_og = (); > - while (my $ref = $sth->fetchrow_hashref()) { > - my $og = PMG::RuleDB::Group->new($ref->{name}, $ref->{info}, > - $ref->{class}); > - $og->{id} = $ref->{id}; > > - if ($class eq 'action') { > - my $objects = $self->load_group_objects($og->{id}); > - my $obj = @$objects[0]; > - defined($obj) || die "undefined action object: ERROR"; > - $og->{action} = $obj; > + eval { > + if (!(defined($id))) { > + $sth = $self->{dbh}->prepare( > + "SELECT * FROM Objectgroup where Class = ? ORDER BY name"); > + $sth->execute($class); > + > + } else { > + $sth = $self->{dbh}->prepare( > + "SELECT * FROM Objectgroup where Class like ? and id = ? " . > + "order by name"); > + $sth->execute($class,$id); > } > - push @$arr_og, $og; > - } > > - $sth->finish(); > + while (my $ref = $sth->fetchrow_hashref()) { > + my $og = PMG::RuleDB::Group->new($ref->{name}, $ref->{info}, > + $ref->{class}); > + $og->{id} = $ref->{id}; > + > + if ($class eq 'action') { > + my $objects = $self->load_group_objects($og->{id}); > + my $obj = @$objects[0]; > + defined($obj) || die "undefined action object: ERROR"; > + $og->{action} = $obj; > + } else { > + $self->load_group_attributes($og); > + } > + push @$arr_og, $og; > + } > + > + $sth->finish(); > + }; > + > + my $err = $@; > + > + $self->{dbh}->rollback; the rollback here is unconditional (not that I think it would ever do something) > + > + die $err if $err; also can be dropped, if we drop the eval+transaction block > > return $arr_og; > }