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) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 86DA6947FE for ; Thu, 22 Feb 2024 13:41:08 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7248787F4 for ; Thu, 22 Feb 2024 13:41:08 +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)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Thu, 22 Feb 2024 13:41:07 +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 7B2EA44B0A for ; Thu, 22 Feb 2024 13:41:07 +0100 (CET) From: Stoiko Ivanov To: pmg-devel@lists.proxmox.com Date: Thu, 22 Feb 2024 13:40:51 +0100 Message-Id: <20240222124051.324714-3-s.ivanov@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240222124051.324714-1-s.ivanov@proxmox.com> References: <20240222124051.324714-1-s.ivanov@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.084 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 - URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [dbtools.pm, objectgroup.id, ruledb.pm, cluster.pm, object.id] Subject: [pmg-devel] [PATCH pmg-api 2/2] database: use foreign keys for rule and object group attributes 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: Thu, 22 Feb 2024 12:41:08 -0000 the change is small, reduces code and lets the task of referential integrity to postgresql Signed-off-by: Stoiko Ivanov --- src/PMG/Cluster.pm | 2 -- src/PMG/DBTools.pm | 6 ++---- src/PMG/RuleDB.pm | 6 ------ 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/PMG/Cluster.pm b/src/PMG/Cluster.pm index f468618..17ba44d 100644 --- a/src/PMG/Cluster.pm +++ b/src/PMG/Cluster.pm @@ -529,14 +529,12 @@ sub sync_ruledb_from_master { $ldb->do("DELETE FROM Rule"); $ldb->do("DELETE FROM RuleGroup"); $ldb->do("DELETE FROM ObjectGroup"); $ldb->do("DELETE FROM Object"); $ldb->do("DELETE FROM Attribut"); - $ldb->do("DELETE FROM Objectgroup_Attributes"); - $ldb->do("DELETE FROM Rule_Attributes"); eval { $rdb->begin_work; # read a consistent snapshot $rdb->do("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE"); diff --git a/src/PMG/DBTools.pm b/src/PMG/DBTools.pm index 3e814dc..6112566 100644 --- a/src/PMG/DBTools.pm +++ b/src/PMG/DBTools.pm @@ -294,25 +294,25 @@ my $userprefs_ctablecmd = <<__EOD; CREATE INDEX UserPrefs_MTime_Index ON UserPrefs (MTime); __EOD my $rule_attributes_cmd = <<__EOD; CREATE TABLE Rule_Attributes ( - Rule_ID INTEGER NOT NULL, + Rule_ID INTEGER NOT NULL REFERENCES Rule (ID) ON DELETE CASCADE, Name VARCHAR(20) NOT NULL, Value BYTEA NULL, PRIMARY KEY (Rule_ID, Name) ); CREATE INDEX Rule_Attributes_Rule_ID_Index ON Rule_Attributes(Rule_ID); __EOD my $object_group_attributes_cmd = <<__EOD; CREATE TABLE Objectgroup_Attributes ( - Objectgroup_ID INTEGER NOT NULL, + Objectgroup_ID INTEGER NOT NULL REFERENCES Objectgroup (ID) ON DELETE CASCADE, Name VARCHAR(20) NOT NULL, Value BYTEA NULL, PRIMARY KEY (Objectgroup_ID, Name) ); CREATE INDEX Objectgroup_Attributes_Objectgroup_ID_Index ON Objectgroup_Attributes(Objectgroup_ID); @@ -632,14 +632,12 @@ sub init_ruledb { my $glids = "SELECT object.ID FROM Object, Objectgroup WHERE " . "objectgroup_id = objectgroup.id and class = 'greylist'"; $dbh->do( "DELETE FROM Rule;" ." DELETE FROM RuleGroup;" - ." DELETE FROM Rule_Attributes;" - ." DELETE FROM Objectgroup_Attributes;" ." DELETE FROM Attribut WHERE Object_ID NOT IN ($glids);" ." DELETE FROM Object WHERE ID NOT IN ($glids);" ." DELETE FROM Objectgroup WHERE class != 'greylist';" ); } diff --git a/src/PMG/RuleDB.pm b/src/PMG/RuleDB.pm index e5fe56e..315f79b 100644 --- a/src/PMG/RuleDB.pm +++ b/src/PMG/RuleDB.pm @@ -273,15 +273,12 @@ sub delete_group { $self->{dbh}->do("DELETE FROM ObjectGroup " . "WHERE ID = ?", undef, $groupid); $self->{dbh}->do("DELETE FROM RuleGroup " . "WHERE Objectgroup_ID = ?", undef, $groupid); - $self->{dbh}->do("DELETE FROM Objectgroup_Attributes " . - "WHERE Objectgroup_ID = ?", undef, $groupid); - $sth = $self->{dbh}->prepare("SELECT * FROM Object " . "where Objectgroup_ID = ?"); $sth->execute($groupid); while (my $ref = $sth->fetchrow_hashref()) { $self->{dbh}->do("DELETE FROM Attribut " . @@ -769,15 +766,12 @@ sub delete_rule { $self->{dbh}->begin_work; $self->{dbh}->do("DELETE FROM Rule " . "WHERE ID = ?", undef, $ruleid); $self->{dbh}->do("DELETE FROM RuleGroup " . "WHERE Rule_ID = ?", undef, $ruleid); - $self->{dbh}->do("DELETE FROM Rule_Attributes " . - "WHERE Rule_ID = ?", undef, $ruleid); - $self->{dbh}->commit; }; if (my $err = $@) { $self->{dbh}->rollback; syslog('err', $err); return undef; -- 2.39.2