public void CanParentheses() { var values = new NamedValues(); values.AddValue("A", 3); values.AddValue("B", 5); var matcher = new WhereClauseMatcher("A=99 AND (B=4 OR B=5)"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsFalse(matcher.Match(values)); matcher = new WhereClauseMatcher("A=99 AND B=4 OR B=5"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("(A=3)"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("(((A=3)))"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsTrue(matcher.Match(values)); }
public void CanCompareInequality() { var values = new NamedValues(); values.AddValue("foo", "foo"); values.AddValue("bar", "bar"); Assert.IsTrue(new WhereClauseMatcher("0 < 1").Match(values)); Assert.IsTrue(new WhereClauseMatcher("0.999 < 0.9999").Match(values)); Assert.IsFalse(new WhereClauseMatcher("3 < 3").Match(values)); Assert.IsTrue(new WhereClauseMatcher("3 <= 3").Match(values)); Assert.IsTrue(new WhereClauseMatcher("5 <= 5.0").Match(values)); Assert.IsTrue(new WhereClauseMatcher("5 < 5.00000001").Match(values)); Assert.IsTrue(new WhereClauseMatcher("0.9999999998 <> 0.9999999999").Match(values)); Assert.IsTrue(new WhereClauseMatcher("false < true").Match(values)); Assert.IsTrue(new WhereClauseMatcher("false <> true").Match(values)); Assert.IsTrue(new WhereClauseMatcher("true >= false").Match(values)); Assert.IsTrue(new WhereClauseMatcher("'foo' <> 'bar'").Match(values)); Assert.IsFalse(new WhereClauseMatcher("'foo' < 'bar'").Match(values)); Assert.IsTrue(new WhereClauseMatcher("'foo' >= 'bar'").Match(values)); Assert.IsTrue(new WhereClauseMatcher("foo <> bar").Match(values)); Assert.IsFalse(new WhereClauseMatcher("foo < bar").Match(values)); Assert.IsTrue(new WhereClauseMatcher("foo >= bar").Match(values)); Assert.IsTrue(new WhereClauseMatcher("NULL <> NULL").Match(values)); Assert.IsFalse(new WhereClauseMatcher("NULL = NULL").Match(values)); Assert.IsFalse(new WhereClauseMatcher("123 = NULL").Match(values)); Assert.IsFalse(new WhereClauseMatcher("NULL = 123").Match(values)); }
public void RegressionTestCOM264() { // https://issuetracker02.eggits.net/browse/COM-264 "RuleID_1 = 3" failed because of the underbar in "Rule_ID" var values = new NamedValues(); values.AddValue("RuleID_1", 3); var matcher = new WhereClauseMatcher("RuleID_1 = 3"); Assert.IsTrue(matcher.Match(values)); }
public void CanMatchEmptyString() { var values = new NamedValues(); values.AddValue("Empty", string.Empty); values.AddValue("OneBlank", " "); values.AddValue("JustNull", DBNull.Value); Assert.IsTrue(new WhereClauseMatcher("Empty = ''").Match(values)); Assert.IsFalse(new WhereClauseMatcher("Empty = ' '").Match(values)); Assert.IsFalse(new WhereClauseMatcher("Empty IS NULL").Match(values)); Assert.IsFalse(new WhereClauseMatcher("OneBlank = ''").Match(values)); Assert.IsTrue(new WhereClauseMatcher("OneBlank = ' '").Match(values)); Assert.IsFalse(new WhereClauseMatcher("OneBlank IS NULL").Match(values)); Assert.IsFalse(new WhereClauseMatcher("JustNull = ''").Match(values)); Assert.IsTrue(new WhereClauseMatcher("JustNull IS NULL").Match(values)); }
public void CanCompareAcrossNumericTypes() { var values = new NamedValues(); values.AddValue("short", (short)123); values.AddValue("int", 123); values.AddValue("long", (long)123); values.AddValue("uint", (uint)123); values.AddValue("float", (float)123.0); values.AddValue("double", 123.0); var matcher = new WhereClauseMatcher( "short = 123 AND int = 123 AND long = 123 AND uint = 123 AND float = 123 AND double = 123"); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("short = int AND int = long AND short = long"); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("int = uint"); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("float = 123 AND double = 123 AND float = double"); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("short = float AND float = int AND int = double"); Assert.IsTrue(matcher.Match(values)); }
public void CanNullEqualsNull() { // In a database, NULL = NULL is false. // Ensure we match this interpretation. var values = new NamedValues(); values.AddValue("TheValueNull", null); values.AddValue("DatabaseNull", DBNull.Value); Assert.IsFalse(new WhereClauseMatcher("NULL = NULL").Match(values)); Assert.IsTrue(new WhereClauseMatcher("NULL IS NULL").Match(values)); Assert.IsFalse(new WhereClauseMatcher("0 IS NULL").Match(values)); Assert.IsTrue(new WhereClauseMatcher("0 IS NOT NULL").Match(values)); Assert.IsTrue(new WhereClauseMatcher("TheValueNull IS NULL").Match(values)); Assert.IsTrue(new WhereClauseMatcher("DatabaseNull IS NULL").Match(values)); Assert.IsFalse(new WhereClauseMatcher("TheValueNull = DatabaseNull").Match(values)); Assert.IsFalse(new WhereClauseMatcher("TheValueNull = TheValueNull").Match(values)); Assert.IsFalse(new WhereClauseMatcher("DatabaseNull = DatabaseNull").Match(values)); }
public void CanIsNullAndNotNull() { var values = new NamedValues(); values.AddValue("A", "abc"); values.AddValue("B", 1.23); values.AddValue("C", 123); values.AddValue("D", DBNull.Value); values.AddValue("E", null); Assert.IsFalse(new WhereClauseMatcher("A IS NULL").Match(values)); Assert.IsFalse(new WhereClauseMatcher("B IS NULL").Match(values)); Assert.IsFalse(new WhereClauseMatcher("C IS NULL").Match(values)); Assert.IsTrue(new WhereClauseMatcher("D IS NULL").Match(values)); Assert.IsTrue(new WhereClauseMatcher("E IS NULL").Match(values)); Assert.IsTrue(new WhereClauseMatcher("A IS NOT NULL").Match(values)); Assert.IsTrue(new WhereClauseMatcher("NOT A IS NULL").Match(values)); var matcher = new WhereClauseMatcher( "A IS NOT NULL AND B IS NOT NULL AND C IS NOT NULL AND D IS NULL AND E IS NULL"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher( "NOT A IS NULL AND NOT B IS NULL AND NOT C IS NULL AND NOT D IS NOT NULL AND NOT E IS NOT NULL"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("E = NULL"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsFalse(matcher.Match(values)); }
public void CanIsInAndNotIn() { var values = new NamedValues(); values.AddValue("x", 42); var matcher = new WhereClauseMatcher("x IN (41, 42, 43)"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("x NOT IN (41, 42, 43)"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsFalse(matcher.Match(values)); }
public void BasicTests() { var values = new NamedValues(); values.AddValue("A", "a"); values.AddValue("B", "b"); values.AddValue("C", "c"); values.AddValue("ONE", 1); values.AddValue("TWO", 2); values.AddValue("PI", 3.14159); values.AddValue("X", DBNull.Value); values.AddValue("Y", null); var matcher = new WhereClauseMatcher("ONE = 1"); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("ONE = 1.0"); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("PI = 3"); Assert.IsFalse(matcher.Match(values)); matcher = new WhereClauseMatcher("PI = 3.141591"); Assert.IsFalse(matcher.Match(values)); matcher = new WhereClauseMatcher("PI = 3.141590"); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("A in ('a','b')"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsTrue(matcher.Match(values)); matcher = new WhereClauseMatcher("A = 'x' AND NOT B IN ('a','b','c') OR A = 'a' AND B IS NOT NULL"); Console.WriteLine(@"Clause: ""{0}""", matcher.Clause); Console.WriteLine(@"Engine: {0}", GetDump(matcher)); Assert.IsTrue(matcher.Match(values)); // Treat both C# null and DBNull.Value as NULL: Assert.IsTrue(new WhereClauseMatcher("X is NULL").Match(values)); Assert.IsTrue(new WhereClauseMatcher("Y is NULL").Match(values)); }