[PATCH 1/3] testbot: Add support for more collection filter types.

Francois Gouget fgouget at codeweavers.com
Mon Jan 22 22:32:30 CST 2018


By default filters still return the rows where the specified field is
equal to one of the specified values. But now they can also be set to
return rows where the field is smaller, greater, different or like one
of the specified values.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 testbot/lib/ObjectModel/Collection.pm |  6 +++---
 testbot/lib/ObjectModel/DBIBackEnd.pm | 23 +++++++++++++++++++++--
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/testbot/lib/ObjectModel/Collection.pm b/testbot/lib/ObjectModel/Collection.pm
index a9ec9958..86dee057 100644
--- a/testbot/lib/ObjectModel/Collection.pm
+++ b/testbot/lib/ObjectModel/Collection.pm
@@ -656,11 +656,11 @@ sub DeleteAll($)
   return undef;
 }
 
-sub AddFilter($$$)
+sub AddFilter($$$;$)
 {
-  my ($self, $PropertyName, $Value) = @_;
+  my ($self, $PropertyName, $Values, $Type) = @_;
 
-  $self->{Filters}{$PropertyName} = $Value;
+  $self->{Filters}{$PropertyName} = [($Type || "="), $Values];
 }
 
 sub GetFilters($)
diff --git a/testbot/lib/ObjectModel/DBIBackEnd.pm b/testbot/lib/ObjectModel/DBIBackEnd.pm
index 0594951b..565d4a8e 100644
--- a/testbot/lib/ObjectModel/DBIBackEnd.pm
+++ b/testbot/lib/ObjectModel/DBIBackEnd.pm
@@ -179,6 +179,16 @@ sub BuildFieldList($$)
   return $Fields;
 }
 
+my %_AllowedFilterTypes = (
+  "="    => 1,
+  "<>"   => 1,
+  "<"    => 1,
+  "<="   => 1,
+  ">"    => 1,
+  ">="   => 1,
+  "LIKE" => 1,
+);
+
 sub LoadCollection($$)
 {
   my ($self, $Collection) = @_;
@@ -202,7 +212,16 @@ sub LoadCollection($$)
       $Where .= " AND ";
     }
     my $PropertyDescriptor = $Collection->GetPropertyDescriptorByName($FilterProperty);
-    my $FilterValues = $Filters->{$FilterProperty};
+    my ($FilterType, $FilterValues) = @{$Filters->{$FilterProperty}};
+    if (!$_AllowedFilterTypes{$FilterType})
+    {
+      die "unknown '$FilterType' filter type";
+    }
+    if (!@$FilterValues)
+    {
+      die "no values for the '$FilterType' filter";
+    }
+
     if (@$FilterValues != 1)
     {
       $Where .= "(";
@@ -220,7 +239,7 @@ sub LoadCollection($$)
       }
       foreach my $ColName (@{$PropertyDescriptor->GetColNames()})
       {
-        $Where .= "$ColName = ?";
+        $Where .= "$ColName $FilterType ?";
         $Data[@Data] = $self->ToDb($ColValue, $PropertyDescriptor);
       }
     }
-- 
2.15.1




More information about the wine-devel mailing list