示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 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)));
 }
示例#4
0
        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;
            }

        }