Francois Gouget : testbot/orm: Fix multi-column key support in Item::Compare().

Alexandre Julliard julliard at winehq.org
Mon Jun 6 15:05:09 CDT 2022


Module: tools
Branch: master
Commit: 4a9e60c2ce8626b618241663d3fd697d155857a8
URL:    https://source.winehq.org/git/tools.git/?a=commit;h=4a9e60c2ce8626b618241663d3fd697d155857a8

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Fri Jun  3 19:22:51 2022 +0200

testbot/orm: Fix multi-column key support in Item::Compare().

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 testbot/lib/ObjectModel/Item.pm | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/testbot/lib/ObjectModel/Item.pm b/testbot/lib/ObjectModel/Item.pm
index 7d36ffa..0b1da92 100644
--- a/testbot/lib/ObjectModel/Item.pm
+++ b/testbot/lib/ObjectModel/Item.pm
@@ -422,22 +422,27 @@ sub Compare($$)
     {
       my $ColName = $ColNames->[0];
       my $ColType = $PropertyDescriptor->GetType();
-      return ($ColType eq "N" or $ColType eq "S" or $ColType eq "DT") ?
-             $self->{ColValues}{$ColName} <=> $B->{ColValues}{$ColName} :
-             $self->{ColValues}{$ColName} cmp $B->{ColValues}{$ColName};
+      my $Cmp = ($ColType eq "N" or $ColType eq "S" or $ColType eq "DT") ?
+                $self->{ColValues}{$ColName} <=> $B->{ColValues}{$ColName} :
+                $self->{ColValues}{$ColName} cmp $B->{ColValues}{$ColName};
+      return $Cmp if ($Cmp);
     }
-    if ($PropertyDescriptor->GetClass() eq "Enum")
+    elsif ($PropertyDescriptor->GetClass() eq "Enum")
     {
       my $ColName = $ColNames->[0];
-      return $self->{ColValues}{$ColName} cmp $B->{ColValues}{$ColName};
-    }
-
-    # A Detailref cannot be a key so this is an Itemref
-    foreach my $ColName (@$ColNames)
-    {
       my $Cmp = $self->{ColValues}{$ColName} cmp $B->{ColValues}{$ColName};
       return $Cmp if ($Cmp);
     }
+    else
+    {
+      # A Detailref cannot be a key so this is an Itemref. Note that its
+      # underlying column types are unknown so treat them as strings.
+      foreach my $ColName (@$ColNames)
+      {
+        my $Cmp = $self->{ColValues}{$ColName} cmp $B->{ColValues}{$ColName};
+        return $Cmp if ($Cmp);
+      }
+    }
   }
   return 0;
 }




More information about the wine-cvs mailing list