public void RowEqualityComparer_Equals_False() { RowEqualityComparer comparer = new RowEqualityComparer(); var testTable = base.GetTable(); var rows = testTable.Fetch(1, 2); Assert.AreEqual(2, rows.Count); var equals = comparer.Equals(rows.First(), rows.Last()); Assert.IsFalse(equals); }
public void RowEqualityComparer_Equals_True() { RowEqualityComparer comparer = new RowEqualityComparer(); var testTable = base.GetTable(); var row = testTable.Fetch(1); Assert.IsNotNull(row); var equals = comparer.Equals(row, row); Assert.IsTrue(equals); }
public void CanEqualValues() { Assert.IsTrue(RowEqualityComparer.EqualValues(null, null)); Assert.IsTrue(RowEqualityComparer.EqualValues(DBNull.Value, DBNull.Value)); Assert.IsTrue(RowEqualityComparer.EqualValues(DBNull.Value, null)); Assert.IsTrue(RowEqualityComparer.EqualValues("ha", "ha")); Assert.IsTrue(RowEqualityComparer.EqualValues(12.6m, 12.6m)); Assert.IsTrue(RowEqualityComparer.EqualValues( new DateTime(2009, 12, 25, 11, 48, 33).AddMilliseconds(983), new DateTime(2009, 12, 25, 11, 48, 33).AddMilliseconds(983))); Assert.IsFalse(RowEqualityComparer.EqualValues(null, "ha")); Assert.IsFalse(RowEqualityComparer.EqualValues("haaa", null)); Assert.IsFalse(RowEqualityComparer.EqualValues(12.6m, 12.6)); Assert.IsFalse(RowEqualityComparer.EqualValues("12.7", 12.7)); Assert.IsFalse(RowEqualityComparer.EqualValues("15.4", 15.4m)); Assert.IsFalse(RowEqualityComparer.EqualValues(12f, 12m)); Assert.IsFalse(RowEqualityComparer.EqualValues( new DateTime(2009, 12, 25, 11, 48, 33).AddMilliseconds(983), new DateTime(2009, 12, 25, 11, 48, 33).AddMilliseconds(777))); }
public override Resultset Get(QueryContext queryContext, object[] parameters) { if (ChildNodes.Count != 2) throw new InvalidOperationException(); Resultset rs1 = null; Resultset rs2 = null; Iterator.Invoke(new Action[] { () => rs1 = ChildNodes[0].Get(queryContext, parameters), () => rs2 = ChildNodes[1].Get(queryContext, parameters) }); if (!rs1.RowType.RowTypeEquals(rs2.RowType)) throw new ESQLException(Properties.Resources.IncorrectSubqueries); RowType.TypeInfo[] typeInfo = new RowType.TypeInfo[rs1.RowType.Fields.Length]; for (int k = 0; k < typeInfo.Length; k++) if (_type == ConnectorType.ComplexUnion) typeInfo[k] = rs1.RowType.Fields[k]; else typeInfo[k] = new RowType.TypeInfo(k, rs1.RowType.Fields[k], rs2.RowType.Fields[k]); DemandProcessingContext context; if (_type == ConnectorType.Union && _allTag) { context = new DataConcateContext(rs1, rs2); return new Resultset(new RowType(typeInfo), context); } else { if (_allTag) throw new NotImplementedException(); Resultset rs = new Resultset(new RowType(typeInfo), null); IEqualityComparer<Row> comp; if (_type == ConnectorType.ComplexUnion) comp = new RowEqualityComplexComparer(); else comp = new RowEqualityComparer(); HashSet<Row> set1 = new HashSet<Row>(comp); HashSet<Row> set2 = new HashSet<Row>(comp); Iterator.Invoke(new Action[] { () => { while (rs1.Begin != null) set1.Add(rs1.Dequeue()); }, () => { while (rs2.Begin != null) set2.Add(rs2.Dequeue()); }}); switch (_type) { case ConnectorType.Union: case ConnectorType.ComplexUnion: set1.UnionWith(set2); break; case ConnectorType.Except: set1.ExceptWith(set2); break; case ConnectorType.Intersect: set1.IntersectWith(set2); break; } foreach (Row row in set1) rs.Enqueue(row); return rs; } }