Beispiel #1
0
        public void Default()
        {
            DataRowComparer <DataRow> c1 = DataRowComparer.Default;
            DataRowComparer <DataRow> c2 = DataRowComparer.Default;

            Assert.Same(c1, c2);
        }
        public void GetHashCodeWithVersions()
        {
            DataSet   ds = new DataSet();
            DataTable dt = new DataTable("MyTable");

            ds.Tables.Add(dt);
            dt.Columns.Add("col1");
            dt.Columns.Add("col2");
            DataRow r1 = dt.Rows.Add(new object [] { "foo", "bar" });
            DataRow r2 = dt.Rows.Add(new object [] { "foo", "bar" });

            ds.AcceptChanges();
            DataRowComparer <DataRow> c = DataRowComparer.Default;

            Assert.IsTrue(c.GetHashCode(r1) == c.GetHashCode(r2), "#1");

            /*
             * // LAMESPEC: .NET fails here
             * r2 ["col2"] = "baz";
             * r2.AcceptChanges ();
             * Assert.IsFalse (c.GetHashCode (r1) == c.GetHashCode (r2), "#2");
             * ds.AcceptChanges (); // now r2 original value is "baz"
             * r2 ["col2"] = "bar";
             * Assert.IsFalse (c.GetHashCode (r1) == c.GetHashCode (r2), "#3");
             * // LAMESPEC: .NET fails here
             * DataRow r3 = dt.Rows.Add (new object [] {"foo", "baz"});
             * Assert.IsFalse (c.GetHashCode (r1) == c.GetHashCode (r3), "#4");
             */
        }
Beispiel #3
0
        public void Equals_Rows_Deleted()
        {
            DataRowComparer <DataRow> c = DataRowComparer.Default;

            DataTable dtA = new DataTable("tableA");

            dtA.Columns.Add("col1", typeof(int));
            dtA.Columns.Add("col2", typeof(string));
            dtA.Columns.Add("col3", typeof(DateTime));
            DataRow r1 = dtA.Rows.Add(3, "bar", new DateTime(2008, 5, 7));
            DataRow r2 = dtA.Rows.Add(3, "bar", new DateTime(2008, 5, 7));

            r1.Delete();

            // left row deleted
            try
            {
                c.Equals(r1, r2);
                Assert.True(false, "#A1");
            }
            catch (RowNotInTableException ex)
            {
                Assert.Equal(typeof(RowNotInTableException), ex.GetType());
                Assert.Null(ex.InnerException);
                Assert.NotNull(ex.Message);
            }

            // right row deleted
            try
            {
                c.Equals(r2, r1);
                Assert.True(false, "#B1");
            }
            catch (RowNotInTableException ex)
            {
                Assert.Equal(typeof(RowNotInTableException), ex.GetType());
                Assert.Null(ex.InnerException);
                Assert.NotNull(ex.Message);
            }

            r2.Delete();

            // both rows deleted
            try
            {
                c.Equals(r2, r1);
                Assert.True(false, "#C1");
            }
            catch (RowNotInTableException ex)
            {
                Assert.Equal(typeof(RowNotInTableException), ex.GetType());
                Assert.Null(ex.InnerException);
                Assert.NotNull(ex.Message);
            }
        }
        public void GetHashCode_Row_Null()
        {
            DataRowComparer <DataRow> c = DataRowComparer.Default;

            try {
                c.GetHashCode(null);
                Assert.Fail("#1");
            } catch (ArgumentNullException ex) {
                Assert.AreEqual(typeof(ArgumentNullException), ex.GetType(), "#2");
                Assert.IsNull(ex.InnerException, "#3");
                Assert.IsNotNull(ex.Message, "#4");
                Assert.AreEqual("row", ex.ParamName, "#5");
            }
        }
Beispiel #5
0
        public void GetHashCodeWithVersions()
        {
            DataSet   ds = new DataSet();
            DataTable dt = new DataTable("MyTable");

            ds.Tables.Add(dt);
            dt.Columns.Add("col1");
            dt.Columns.Add("col2");
            DataRow r1 = dt.Rows.Add(new object[] { "foo", "bar" });
            DataRow r2 = dt.Rows.Add(new object[] { "foo", "bar" });

            ds.AcceptChanges();
            DataRowComparer <DataRow> c = DataRowComparer.Default;

            Assert.True(c.GetHashCode(r1) == c.GetHashCode(r2), "#1");
        }
Beispiel #6
0
        public SetVerificationGrammar Columns(Action <DataRowComparer> configuration)
        {
            var comparer = new DataRowComparer();

            configuration(comparer);

            var comparison = new ObjectComparison <DataRow>(c =>
            {
                var table = _dataSource(c);
                return(table.ToRows().ToArray());
            });

            comparison.AddMatches(comparer.Matches);

            return(new SetVerificationGrammar(_title, _leafName, comparison));
        }
Beispiel #7
0
        public void GetHashCode_Row_Null()
        {
            DataRowComparer <DataRow> c = DataRowComparer.Default;

            try
            {
                c.GetHashCode(null);
                Assert.True(false, "#1");
            }
            catch (ArgumentNullException ex)
            {
                Assert.Equal(typeof(ArgumentNullException), ex.GetType());
                Assert.Null(ex.InnerException);
                Assert.NotNull(ex.Message);
                Assert.Equal("row", ex.ParamName);
            }
        }
Beispiel #8
0
        public SetVerificationGrammar Columns(Action <IDataRowComparer> action)
        {
            var comparer = new DataRowComparer();

            action(comparer);

            var grammar = new SetVerificationGrammar(_leafName, _title, comparer)
            {
                Description = _description
            };

            if (_dataSource != null)
            {
                grammar.Before((step, context) => { context.CurrentObject = _dataSource(context).Rows; });
            }

            return(grammar);
        }
Beispiel #9
0
        public void Equals_Rows_Detached()
        {
            DataRowComparer <DataRow> c = DataRowComparer.Default;

            DataTable dt = new DataTable("tableA");

            dt.Columns.Add("col1", typeof(int));
            dt.Columns.Add("col2", typeof(string));
            dt.Columns.Add("col3", typeof(DateTime));
            DataRow r1 = dt.Rows.Add(3, "bar", new DateTime(2008, 5, 7));
            DataRow r2 = dt.NewRow();

            r2.ItemArray = new object[] { 3, "bar", new DateTime(2008, 5, 7) };
            DataRow r3 = dt.NewRow();

            r3.ItemArray = new object[] { 3, "bar", new DateTime(2008, 5, 7) };

            // left row detached
            Assert.True(c.Equals(r2, r1), "#A1");
            r1["col1"] = 4;
            Assert.False(c.Equals(r2, r1), "#A2");
            r1["col1"] = 3;
            Assert.True(c.Equals(r2, r1), "#A3");

            // right row detached
            Assert.True(c.Equals(r1, r2), "#B1");
            r1["col2"] = "baz";
            Assert.False(c.Equals(r1, r2), "#B2");
            r1["col2"] = "bar";
            Assert.True(c.Equals(r1, r2), "#B3");

            // both rows detached
            Assert.True(c.Equals(r2, r3), "#C1");
            r2["col3"] = new DateTime(2008, 6, 7);
            Assert.False(c.Equals(r2, r3), "#C2");
            r2["col3"] = new DateTime(2008, 5, 7);
            Assert.True(c.Equals(r2, r3), "#C3");
        }
Beispiel #10
0
        public void Equals()
        {
            DataRowComparer <DataRow> c = DataRowComparer.Default;

            DataTable dtA = new DataTable("tableA");

            dtA.Columns.Add("col1", typeof(int));
            dtA.Columns.Add("col2", typeof(string));
            dtA.Columns.Add("col3", typeof(DateTime));
            DataRow r1 = dtA.Rows.Add(3, "bar", new DateTime(2008, 5, 7));
            DataRow r2 = dtA.Rows.Add(3, "bar", new DateTime(2008, 5, 7));

            Assert.True(c.Equals(r1, r2), "#A1");
            r1["col1"] = 4;
            Assert.False(c.Equals(r1, r2), "#A2");
            r1["col1"] = 3;
            Assert.True(c.Equals(r1, r2), "#A3");

            r1["col2"] = null;
            Assert.False(c.Equals(r1, r2), "#B1");
            r2["col2"] = null;
            Assert.True(c.Equals(r1, r2), "#B2");
            r1["col2"] = "bar";
            Assert.False(c.Equals(r1, r2), "#B3");
            r2["col2"] = "bar";
            Assert.True(c.Equals(r1, r2), "#B4");

            r1["col3"] = DBNull.Value;
            Assert.False(c.Equals(r1, r2), "#C1");
            r2["col3"] = DBNull.Value;
            Assert.True(c.Equals(r1, r2), "#C2");
            r1["col3"] = new DateTime(2008, 5, 7);
            Assert.False(c.Equals(r1, r2), "#C3");
            r2["col3"] = new DateTime(2008, 5, 7);
            Assert.True(c.Equals(r1, r2), "#C4");

            Assert.False(c.Equals(r1, null), "#D1");
            Assert.False(c.Equals(null, r1), "#D2");
            Assert.True(c.Equals(null, null), "#D3");

            // rows do not have to share the same parent

            DataTable dtB = new DataTable("tableB");

            dtB.Columns.Add("colB1", typeof(int));
            dtB.Columns.Add("colB2", typeof(string));
            dtB.Columns.Add("colB3", typeof(DateTime));

            DataRow r3 = dtB.Rows.Add(3, "bar", new DateTime(2008, 5, 7));

            Assert.True(c.Equals(r1, r3), "#E1");
            r1["col1"] = 4;
            Assert.False(c.Equals(r1, r3), "#E2");
            r1["col1"] = 3;
            Assert.True(c.Equals(r1, r3), "#E3");

            // difference in rowstate is ignored

            r1.AcceptChanges();

            Assert.True(c.Equals(r1, r2), "#G1");
            r1["col1"] = 4;
            Assert.False(c.Equals(r1, r2), "#G2");
            r1["col1"] = 3;
            Assert.True(c.Equals(r1, r2), "#G3");

            // rows have different number of columns

            DataTable dtC = new DataTable("tableC");

            dtC.Columns.Add("colC1", typeof(int));
            dtC.Columns.Add("colC2", typeof(string));

            DataRow r4 = dtC.Rows.Add(3, "bar");

            Assert.False(c.Equals(r1, r4), "#H1");
            r1["col3"] = DBNull.Value;
            Assert.False(c.Equals(r1, r4), "#H2");
        }
        private Business.Rules.MethodResult CompareData(MigrationStatus migrationStatus, List<string>keys, List<string> updateCommands)
        {
            Business.Rules.MethodResult overallResult = new Business.Rules.MethodResult();
            bool needsTic = migrationStatus.PersistentProperties[0].PropertyType == typeof(string) ? true : false;
            string compareSelect = this.GetCompareSelect(migrationStatus);

            foreach (object key in keys)
            {
                string keyString = key.ToString();
                if(needsTic == true)
                {
                    keyString = "'" + keyString + "'";
                }

                DataTable sqlServerDataTable = this.GetSqlServerData(compareSelect, keyString);
                DataTable mySqlDataTable = this.GetMySqlData(compareSelect, keyString);

                if (mySqlDataTable.Rows.Count == 0)
                {
                    overallResult.Success = false;
                    overallResult.Message += "Missing " + migrationStatus.KeyFieldName + " = " + keyString;
                    this.SaveError(migrationStatus.TableName, "Update " + migrationStatus.TableName + " set Transferred = 0 where " + migrationStatus.KeyFieldName + " = " + keyString);
                    continue;
                }

                if (sqlServerDataTable.Rows[0].ItemArray.SequenceEqual(mySqlDataTable.Rows[0].ItemArray) == false)
                {
                    DataRowComparer dataRowComparer = new DataRowComparer(migrationStatus);
                    DataTableReader sqlServerDataTableReader = new DataTableReader(sqlServerDataTable);
                    sqlServerDataTableReader.Read();
                    DataTableReader mySqlDataTableReader = new DataTableReader(mySqlDataTable);
                    mySqlDataTableReader.Read();
                    Business.Rules.MethodResult result = dataRowComparer.Compare(sqlServerDataTableReader, mySqlDataTableReader);
                    if(result.Success == false)
                    {
                        updateCommands.Add(result.Message);
                    }
                }
            }
            return overallResult;
        }