Browse Source

* Fixed case-insensitive filtering on filters like *blah*

git-svn-id: trunk@21252 -
joost 13 years ago
parent
commit
a5bfcb026d
2 changed files with 49 additions and 4 deletions
  1. 1 1
      packages/fcl-db/src/dbase/dbf_prscore.pas
  2. 48 3
      packages/fcl-db/tests/testdbbasics.pas

+ 1 - 1
packages/fcl-db/src/dbase/dbf_prscore.pas

@@ -1679,7 +1679,7 @@ begin
         str0 := AnsiStrUpper(Args[0]);
         str1 := AnsiStrUpper(Args[1]+1);
         setlength(str1, arg1len-2);
-        match := AnsiPos(str0, str1) = 0;
+        match := AnsiPos(str1, str0) <> 0;
       end else begin
         arg0len := StrLen(Args[0]);
         // at least length without asterisk

+ 48 - 3
packages/fcl-db/tests/testdbbasics.pas

@@ -1132,15 +1132,60 @@ begin
   with DBConnector.GetNDataset(15) do
     begin
     Open;
-    //FilterOptions := [foNoPartialCompare];
-    //FilterOptions := [];
-    Filter := '(name=''*Name3'')';
+    Filter := '(name=''TestName3'')';
     Filtered := True;
     CheckFalse(EOF);
     CheckEquals(3,FieldByName('ID').asinteger);
     CheckEquals('TestName3',FieldByName('NAME').asstring);
     next;
     CheckTrue(EOF);
+
+    // Check partial compare
+    Filter := '(name=''*Name5'')';
+    CheckFalse(EOF);
+    CheckEquals(5,FieldByName('ID').asinteger);
+    CheckEquals('TestName5',FieldByName('NAME').asstring);
+    next;
+    CheckTrue(EOF);
+
+    // Check case-sensitivity
+    Filter := '(name=''*name3'')';
+    first;
+    CheckTrue(EOF);
+
+    FilterOptions:=[foCaseInsensitive];
+    Filter := '(name=''testname3'')';
+    first;
+    CheckFalse(EOF);
+    CheckEquals(3,FieldByName('ID').asinteger);
+    CheckEquals('TestName3',FieldByName('NAME').asstring);
+    next;
+    CheckTrue(EOF);
+
+    // Check case-insensitive partial compare
+    Filter := '(name=''*name3'')';
+    first;
+    CheckFalse(EOF);
+    CheckEquals(3,FieldByName('ID').asinteger);
+    CheckEquals('TestName3',FieldByName('NAME').asstring);
+    next;
+    CheckTrue(EOF);
+
+    Filter := '(name=''*name*'')';
+    first;
+    CheckFalse(EOF);
+    CheckEquals(1,FieldByName('ID').asinteger);
+    CheckEquals('TestName1',FieldByName('NAME').asstring);
+    next;
+    CheckFalse(EOF);
+    CheckEquals(2,FieldByName('ID').asinteger);
+    CheckEquals('TestName2',FieldByName('NAME').asstring);
+
+    Filter := '(name=''*neme*'')';
+    first;
+    CheckTrue(EOF);
+
+
     Close;
     end;
 end;