when rh expresssion is null or DBNull always return false
authorKonstantin Triger <kostat@mono-cvs.ximian.com>
Wed, 23 Jan 2008 10:27:43 +0000 (10:27 -0000)
committerKonstantin Triger <kostat@mono-cvs.ximian.com>
Wed, 23 Jan 2008 10:27:43 +0000 (10:27 -0000)
svn path=/trunk/mcs/; revision=93637

mcs/class/System.Data/Mono.Data.SqlExpressions/ChangeLog
mcs/class/System.Data/Mono.Data.SqlExpressions/Like.cs
mcs/class/System.Data/Test/Mono.Data.SqlExpressions/DataColumnExpressionTest.cs

index 4b02f9dc28e932141058cbf50f11ffe87d6b2361..3cac7740b6e7efdafbf72b34869e07f3e118dd8c 100644 (file)
@@ -1,3 +1,7 @@
+2008-01-23 Konstantin Triger <kostat@mainsoft.com>
+
+       * Like.cs: when rh expresssion is null or DBNull always return false.
+
 2007-12-24 Konstantin Triger <kostat@mainsoft.com>
 
        * Parser.jay, StringFunctions.cs, Like.cs: add support for string concat.
index 7197d2e42bd446c5c7019fc06cca38604ac46cc2..95e16cba861963c893d46ca540b7307e6a547238 100644 (file)
@@ -63,8 +63,8 @@ namespace Mono.Data.SqlExpressions {
                override public object Eval (DataRow row)
                {
                        object o = expr.Eval (row);
-                       if (o == DBNull.Value)
-                               return o;
+                       if (o == null || o == DBNull.Value)
+                               return false;
                        string str = (string)o;
                        bool openStart, openEnd;
                        string pattern = (string) _pattern.Eval (row);
index 898fba9f4bc5e9148f4c8a97d98eedf854e67a1a..1bd3c4542fa7eca66af8771df31f1bf468376dec 100644 (file)
@@ -22,6 +22,19 @@ namespace Monotests_Mono.Data.SqlExpressions
                        table.Rows.Add (row);
                        Assert.AreEqual (0, (int)table.Rows[0][2], "#1");
                }
+               
+               [Test]
+               public void TestDataColumnLikeExpr ()
+               {
+                       DataTable dt = new DataTable ();
+                       dt.Columns.Add ("c1");
+                       dt.Rows.Add (new string [] { null });
+                       dt.Rows.Add (new string [] { "xax" });
+                       dt.Columns.Add ("c2", typeof (bool), "c1 LIKE '%a%'");
+                       Assert.IsFalse ((bool) dt.Rows [0] [1]);
+                       Assert.IsTrue ((bool) dt.Rows [1] [1]);
+               }
+               
                [Test]
                public void TestDataColumnExpr0Literal ()
                {