[PATCH] testbot: Always allow direct access to the table rows.
Francois Gouget
fgouget at codeweavers.com
Sun Mar 25 22:20:27 CDT 2018
So far it was always necessary to go through the hierarchies like Job
-> Step -> Task. Now it is possible to directly retrieve all the rows
in any table.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
testbot/lib/ObjectModel/DetailrefPropertyDescriptor.pm | 17 ++++++++++++++++-
testbot/lib/ObjectModel/Item.pm | 4 +---
testbot/lib/ObjectModel/PropertyDescriptor.pm | 1 +
testbot/lib/WineTestBot/Jobs.pm | 1 +
testbot/lib/WineTestBot/PendingPatchSets.pm | 1 +
testbot/lib/WineTestBot/PendingPatches.pm | 16 ++++++++++++++--
testbot/lib/WineTestBot/RecordGroups.pm | 1 +
testbot/lib/WineTestBot/Steps.pm | 16 +++++++++++-----
testbot/lib/WineTestBot/Tasks.pm | 14 ++++++++++++--
testbot/lib/WineTestBot/UserRoles.pm | 13 +++++++++++--
testbot/lib/WineTestBot/Users.pm | 1 +
11 files changed, 70 insertions(+), 15 deletions(-)
diff --git a/testbot/lib/ObjectModel/DetailrefPropertyDescriptor.pm b/testbot/lib/ObjectModel/DetailrefPropertyDescriptor.pm
index dbef8ac21..d60fe6395 100644
--- a/testbot/lib/ObjectModel/DetailrefPropertyDescriptor.pm
+++ b/testbot/lib/ObjectModel/DetailrefPropertyDescriptor.pm
@@ -29,7 +29,7 @@ use vars qw(@ISA @EXPORT);
require Exporter;
@ISA = qw(ObjectModel::PropertyDescriptor Exporter);
- at EXPORT = qw(&CreateDetailrefPropertyDescriptor);
+ at EXPORT = qw(&CreateDetailrefPropertyDescriptor &SetDetailrefKeyPrefix);
sub _initialize($$)
{
@@ -66,4 +66,19 @@ sub CreateDetailrefPropertyDescriptor($$$$$)
return ObjectModel::DetailrefPropertyDescriptor->new($Name, $DisplayName, $IsKey, $IsRequired, $Creator);
}
+sub SetDetailrefKeyPrefix($@)
+{
+ my $KeyPrefix = shift;
+ foreach my $PropertyDescriptor (@_)
+ {
+ if ($PropertyDescriptor->{IsKey})
+ {
+ # Defines the prefix to prepend to the field name when the key is
+ # inherited by a child object through a DetailrefPropertyDescriptor
+ # relation.
+ $PropertyDescriptor->{KeyPrefix} = $KeyPrefix;
+ }
+ }
+}
+
1;
diff --git a/testbot/lib/ObjectModel/Item.pm b/testbot/lib/ObjectModel/Item.pm
index 424826f23..201577c98 100644
--- a/testbot/lib/ObjectModel/Item.pm
+++ b/testbot/lib/ObjectModel/Item.pm
@@ -305,8 +305,6 @@ sub GetMasterKey($)
{
my ($self) = @_;
- my $ColNamePrefix = ref($self);
- $ColNamePrefix =~ s/.*://;
my @MasterColNames, my @MasterColValues;
if (defined($self->{MasterColNames}))
{
@@ -319,7 +317,7 @@ sub GetMasterKey($)
{
foreach my $ColName (@{$PropertyDescriptor->GetColNames()})
{
- push @MasterColNames, $ColNamePrefix . $ColName;
+ push @MasterColNames, $PropertyDescriptor->{KeyPrefix} . $ColName;
push @MasterColValues, $self->GetColValue($ColName);
}
}
diff --git a/testbot/lib/ObjectModel/PropertyDescriptor.pm b/testbot/lib/ObjectModel/PropertyDescriptor.pm
index 9c13b1ca2..583082e81 100644
--- a/testbot/lib/ObjectModel/PropertyDescriptor.pm
+++ b/testbot/lib/ObjectModel/PropertyDescriptor.pm
@@ -50,6 +50,7 @@ sub new($$$$$@)
IsKey => $IsKey,
IsRequired => $IsRequired,
Class => undef};
+ $self->{KeyPrefix} = "" if ($IsKey);
$self = bless $self, $class;
$self->_initialize(@_);
return $self;
diff --git a/testbot/lib/WineTestBot/Jobs.pm b/testbot/lib/WineTestBot/Jobs.pm
index bcbcae91f..f810b4f12 100644
--- a/testbot/lib/WineTestBot/Jobs.pm
+++ b/testbot/lib/WineTestBot/Jobs.pm
@@ -431,6 +431,7 @@ my @PropertyDescriptors = (
CreateItemrefPropertyDescriptor("Patch", "Submitted from patch", !1, !1, \&WineTestBot::Patches::CreatePatches, ["PatchId"]),
CreateDetailrefPropertyDescriptor("Steps", "Steps", !1, !1, \&CreateSteps),
);
+SetDetailrefKeyPrefix("Job", @PropertyDescriptors);
=pod
=over 12
diff --git a/testbot/lib/WineTestBot/PendingPatchSets.pm b/testbot/lib/WineTestBot/PendingPatchSets.pm
index 520fb653c..d51652221 100644
--- a/testbot/lib/WineTestBot/PendingPatchSets.pm
+++ b/testbot/lib/WineTestBot/PendingPatchSets.pm
@@ -180,6 +180,7 @@ my @PropertyDescriptors = (
CreateBasicPropertyDescriptor("TotalParts", "Expected number of parts in series", 1, 1, "N", 2),
CreateDetailrefPropertyDescriptor("Parts", "Parts received so far", !1, !1, \&CreatePendingPatches),
);
+SetDetailrefKeyPrefix("PendingPatchSet", @PropertyDescriptors);
=pod
=over 12
diff --git a/testbot/lib/WineTestBot/PendingPatches.pm b/testbot/lib/WineTestBot/PendingPatches.pm
index 053f7123d..281db60ef 100644
--- a/testbot/lib/WineTestBot/PendingPatches.pm
+++ b/testbot/lib/WineTestBot/PendingPatches.pm
@@ -69,13 +69,24 @@ my @PropertyDescriptors = (
CreateBasicPropertyDescriptor("No", "Part no", 1, 1, "N", 2),
CreateItemrefPropertyDescriptor("Patch", "Submitted via patch", !1, 1, \&WineTestBot::Patches::CreatePatches, ["PatchId"]),
);
+my @FlatPropertyDescriptors = (
+ CreateBasicPropertyDescriptor("PendingPatchSetEMail", "EMail of series author", 1, 1, "A", 40),
+ CreateBasicPropertyDescriptor("PendingPatchSetTotalParts", "Expected number of parts in series", 1, 1, "N", 2),
+ @PropertyDescriptors
+);
=pod
=over 12
=item C<CreatePendingPatches()>
-Creates a collection of PendingPatch objects.
+When given a PendingPatchSet object returns a collection containing the
+corresponding parts. In this case the PendingPatch objects don't store the
+key of their parent.
+
+If no PendingPatchSet object is specified all the table rows are returned and
+the PendingPatch objects have PendingPatchSetEMail and
+PendingPatchSetTotalParts properties.
=back
=cut
@@ -86,7 +97,8 @@ sub CreatePendingPatches(;$$)
return WineTestBot::PendingPatches->new(
"PendingPatches", "PendingPatches", "PendingPatch",
- \@PropertyDescriptors, $ScopeObject, $PendingPatchSet);
+ $PendingPatchSet ? \@PropertyDescriptors : \@FlatPropertyDescriptors,
+ $ScopeObject, $PendingPatchSet);
}
1;
diff --git a/testbot/lib/WineTestBot/RecordGroups.pm b/testbot/lib/WineTestBot/RecordGroups.pm
index 252545569..1e5dbbdd4 100644
--- a/testbot/lib/WineTestBot/RecordGroups.pm
+++ b/testbot/lib/WineTestBot/RecordGroups.pm
@@ -80,6 +80,7 @@ my @PropertyDescriptors = (
CreateBasicPropertyDescriptor("Timestamp", "Timestamp", !1, 1, "DT", 19),
CreateDetailrefPropertyDescriptor("Records", "Records", !1, !1, \&CreateRecords),
);
+SetDetailrefKeyPrefix("RecordGroup", @PropertyDescriptors);
=pod
=over 12
diff --git a/testbot/lib/WineTestBot/Steps.pm b/testbot/lib/WineTestBot/Steps.pm
index f91b70e3f..ef2b3872b 100644
--- a/testbot/lib/WineTestBot/Steps.pm
+++ b/testbot/lib/WineTestBot/Steps.pm
@@ -216,17 +216,22 @@ my @PropertyDescriptors = (
CreateBasicPropertyDescriptor("ReportSuccessfulTests", "Report successful tests (WINETEST_REPORT_SUCCESS)", !1, 1, "B", 1),
CreateDetailrefPropertyDescriptor("Tasks", "Tasks", !1, !1, \&CreateTasks),
);
+SetDetailrefKeyPrefix("Step", @PropertyDescriptors);
+my @FlatPropertyDescriptors = (
+ CreateBasicPropertyDescriptor("JobId", "Job id", 1, 1, "S", 5),
+ @PropertyDescriptors
+);
=pod
=over 12
=item C<CreateSteps()>
-Creates a collection containing the steps of the specified Job. In
-this case the Step objects don't store the key of their parent.
+When given a Job object returns a collection containing the corresponding
+steps. In this case the Step objects don't store the key of their parent.
-If no Job is specified all the table rows are returned and the
-Step objects have a JobId property.
+If no Job object is specified all the table rows are returned and the Step
+objects have a JobId property.
=back
=cut
@@ -236,7 +241,8 @@ sub CreateSteps(;$$)
my ($ScopeObject, $Job) = @_;
return WineTestBot::Steps->new("Steps", "Steps", "Step",
- \@PropertyDescriptors, $ScopeObject, $Job);
+ $Job ? \@PropertyDescriptors : \@FlatPropertyDescriptors,
+ $ScopeObject, $Job);
}
1;
diff --git a/testbot/lib/WineTestBot/Tasks.pm b/testbot/lib/WineTestBot/Tasks.pm
index dcc222b52..f16dfe201 100644
--- a/testbot/lib/WineTestBot/Tasks.pm
+++ b/testbot/lib/WineTestBot/Tasks.pm
@@ -233,13 +233,22 @@ my @PropertyDescriptors = (
CreateBasicPropertyDescriptor("Ended", "Execution ended", !1, !1, "DT", 19),
CreateBasicPropertyDescriptor("TestFailures", "Number of test failures", !1, !1, "N", 6),
);
+my @FlatPropertyDescriptors = (
+ CreateBasicPropertyDescriptor("JobId", "Job id", 1, 1, "S", 5),
+ CreateBasicPropertyDescriptor("StepNo", "Step no", 1, 1, "N", 2),
+ @PropertyDescriptors
+);
=pod
=over 12
=item C<CreateTasks()>
-Creates a collection of Patch objects.
+When given a Step object returns a collection containing the corresponding
+tasks. In this case the Task objects don't store the key of their parent.
+
+If no Step object is specified all the table rows are returned and the Task
+objects have JobId and StepNo properties.
=back
=cut
@@ -248,7 +257,8 @@ sub CreateTasks(;$$)
{
my ($ScopeObject, $Step) = @_;
return WineTestBot::Tasks->new("Tasks", "Tasks", "Task",
- \@PropertyDescriptors, $ScopeObject, $Step);
+ $Step ? \@PropertyDescriptors : \@FlatPropertyDescriptors,
+ $ScopeObject, $Step);
}
1;
diff --git a/testbot/lib/WineTestBot/UserRoles.pm b/testbot/lib/WineTestBot/UserRoles.pm
index 417baf994..972bdc0e9 100644
--- a/testbot/lib/WineTestBot/UserRoles.pm
+++ b/testbot/lib/WineTestBot/UserRoles.pm
@@ -62,13 +62,21 @@ sub CreateItem($)
my @PropertyDescriptors = (
CreateItemrefPropertyDescriptor("Role", "Role", 1, 1, \&CreateRoles, ["RoleName"]),
);
+my @FlatPropertyDescriptors = (
+ CreateBasicPropertyDescriptor("UserName", "Username", 1, 1, "A", 40),
+ @PropertyDescriptors
+);
=pod
=over 12
=item C<CreateUserRoles()>
-Creates a collection of UserRole objects.
+When given a User object returns a collection containing the corresponding
+roles. In this case the Role objects don't store the key of their parent.
+
+If no User object is specified all the table rows are returned and the UserRole
+objects have a UserName property.
=back
=cut
@@ -77,7 +85,8 @@ sub CreateUserRoles(;$$)
{
my ($ScopeObject, $User) = @_;
return WineTestBot::UserRoles->new("UserRoles", "UserRoles", "UserRole",
- \@PropertyDescriptors, $ScopeObject, $User);
+ $User ? \@PropertyDescriptors : \@FlatPropertyDescriptors,
+ $ScopeObject, $User);
}
1;
diff --git a/testbot/lib/WineTestBot/Users.pm b/testbot/lib/WineTestBot/Users.pm
index 95c7c2561..178b377b9 100644
--- a/testbot/lib/WineTestBot/Users.pm
+++ b/testbot/lib/WineTestBot/Users.pm
@@ -326,6 +326,7 @@ my @PropertyDescriptors = (
CreateBasicPropertyDescriptor("ResetCode", "Password reset code", !1, !1, "A", 32),
CreateDetailrefPropertyDescriptor("Roles", "Roles", !1, !1, \&CreateUserRoles),
);
+SetDetailrefKeyPrefix("User", @PropertyDescriptors);
=pod
=over 12
--
2.16.2
More information about the wine-devel
mailing list