[Rt-commit] rt branch 5.0/validator-skip-deleted-with-contenthistory created. rt-5.0.2-61-g231b5a6422
BPS Git Server
git at git.bestpractical.com
Fri Feb 4 23:18:04 UTC 2022
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "rt".
The branch, 5.0/validator-skip-deleted-with-contenthistory has been created
at 231b5a642236ee303c285c9bbb7ff2df3c3686b8 (commit)
- Log -----------------------------------------------------------------
commit 231b5a642236ee303c285c9bbb7ff2df3c3686b8
Author: Brian Conry <bconry at bestpractical.com>
Date: Fri Feb 4 15:57:54 2022 -0600
No validator flagging of properly deleted attributes
Saved searches and dashboards are implemented as attributes, and
attributes are deleted from the database rather than being disabled.
This leaves some "dangling" references to them in the Transactions and
Attributes tables ('ContentHistory' records in Attributes).
These references are not issues and should not be flagged as such.
diff --git a/sbin/rt-validator.in b/sbin/rt-validator.in
index ac686af5d3..22c6555b8c 100644
--- a/sbin/rt-validator.in
+++ b/sbin/rt-validator.in
@@ -761,10 +761,44 @@ END
return $res;
};
+# Attributes are currently deleted rather than disabled, this leaves
+# dangling references, both in Transactions and in Attributes.
+# These are expected and should not be flagged.
+# So rather than try to create complicated joins to filter them out
+# in both places, we're going to create a list of the deleted
+# Attribute ids up front and create a NOT IN clause that can
+# be included where it is needed.
+my @deleted_attributes_binds;
+my $deleted_attributes_not_in = '';
+
+{
+ my $query = "SELECT DISTINCT s.objectid"
+ ." FROM ".m2t("Transaction")." s JOIN ".m2t("Attribute")." t"
+ ." ON ( s.objecttype = ? AND s.objectid = t.objectid AND t.name = ? )"
+ ." WHERE s.type = ?";
+
+ my $sth = execute_query( $query, 'RT::Attribute', 'ContentHistory', 'Delete' );
+
+ my @deleted_attributes;
+
+ while ( my ($deleted_attribute) = $sth->fetchrow_array ) {
+ push @deleted_attributes, $deleted_attribute;
+ }
+
+ while (@deleted_attributes) {
+ my @batch = splice( @deleted_attributes, 0, 1000 );
+ push @deleted_attributes_binds, @batch;
+
+ $deleted_attributes_not_in .= ' AND s.objectid NOT IN (' . join( ',', ('?') x @batch ) . ')';
+ }
+}
push @CHECKS, 'Transactions -> other' => sub {
my $res = 1;
foreach my $model ( @models ) {
+ # Attribute needs special handling because we actually
+ # delete rows out of it rather than just disabling them
+ next if $model eq 'Attribute';
$res *= check_integrity(
'Transactions', 'ObjectId' => m2t($model), 'id',
condition => 's.ObjectType = ?',
@@ -779,6 +813,20 @@ push @CHECKS, 'Transactions -> other' => sub {
},
);
}
+ # objecttype = Attribute
+ $res *= check_integrity(
+ 'Transactions', 'ObjectId' => m2t('Attribute'), 'id',
+ condition => 's.ObjectType = ?' . $deleted_attributes_not_in,
+ bind_values => [ 'RT::Attribute', @deleted_attributes_binds ],
+ action => sub {
+ my $id = shift;
+ return unless prompt(
+ 'Delete', "Found a transaction without object."
+ );
+
+ delete_record( 'Transactions', $id );
+ },
+ );
# type = CustomField
$res *= check_integrity(
'Transactions', 'Field' => 'CustomFields', 'id',
@@ -985,12 +1033,21 @@ push @CHECKS, Scrips => sub {
push @CHECKS, Attributes => sub {
my $res = 1;
foreach my $model ( @models ) {
+ # Attribute needs special handling because we actually
+ # delete rows out of it rather than just disabling them
+ next if $model eq 'Attribute';
$res *= check_integrity(
'Attributes', 'ObjectId' => m2t($model), 'id',
condition => 's.ObjectType = ?',
bind_values => [ "RT::$model" ],
);
}
+ # objecttype = Attribute
+ $res *= check_integrity(
+ 'Attributes', 'ObjectId' => m2t('Attribute'), 'id',
+ condition => 's.ObjectType = ?' . $deleted_attributes_not_in,
+ bind_values => [ 'RT::Attribute', @deleted_attributes_binds ],
+ );
return $res;
};
-----------------------------------------------------------------------
hooks/post-receive
--
rt
More information about the rt-commit
mailing list