Beispiel #1
0
        public static void SetPartialMatches(DAL mergeDB, MergeTableCommandBuilder cmdBldr)
        {
            List <string> matchSources = new List <string>();

            if (cmdBldr.DoNaturalMatch)
            {
                matchSources.Add("SELECT MergeRowID, NaturalMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                                 " WHERE NaturalMatch IS NOT NULL AND MatchRowID IS NULL");
                //matchSources.Add("SELECT MergeRowID, NaturalMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                //    " WHERE NaturalMatch IS NOT NULL AND (NaturalMatch != RowIDMatch OR NaturalMatch != GUIDMatch)");
            }
            if (cmdBldr.DoKeyMatch)
            {
                matchSources.Add("SELECT MergeRowID, RowIDMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                                 " WHERE RowIDMatch IS NOT NULL AND MatchRowID IS NULL");
            }
            if (cmdBldr.DoGUIDMatch)
            {
                matchSources.Add("SELECT MergeRowID, GUIDMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                                 " WHERE GUIDMatch IS NOT NULL AND MatchRowID IS NULL");
            }

            string selectPartialMatches = "SELECT MergeRowID, group_concat(PartialMatch, ',') AS PartialMatch FROM ( " +
                                          string.Join(" UNION ", matchSources.ToArray()) + " ) GROUP BY MergeRowID;";

            List <MergeObject> partialMatchs = mergeDB.Query <MergeObject>(selectPartialMatches, (object[])null).ToList();

            foreach (MergeObject mRec in partialMatchs)
            {
                mergeDB.Execute($"UPDATE {cmdBldr.MergeTableName} SET PartialMatch = @p1 WHERE MergeRowID = @p2;",
                                mRec.PartialMatch, mRec.MergeRowID);
            }
        }
Beispiel #2
0
        public static void SetMasterRowVersion(DAL master, MergeTableCommandBuilder cmdBldr)
        {
            string setMasterRowVersion = "UPDATE " + cmdBldr.MergeTableName + " SET MasterRowVersion = " +
                                         "(SELECT RowVersion FROM " + cmdBldr.ClientTableName + " AS client WHERE client.RowID = MatchRowID);";

            master.Execute(setMasterRowVersion);
        }
Beispiel #3
0
        public static void ProcessMergeTable(DAL master,
                                             MergeTableCommandBuilder commandBuider,
                                             IEnumerable <ComponentFile> components,
                                             IMergeLog log)
        {
            log?.PostStatus("Processing " + commandBuider.MergeTableName);

            //run various comparisons
            ProcessComparisons(master, commandBuider);

            //ProcessInvalidMatchs(mergeDB, commandBuider);
            ProcessFullMatchs(master, commandBuider);
            SetPartialMatches(master, commandBuider);

            IdentifySiblingRecords(master, commandBuider);
            FindNaturalSiblingMatches(master, commandBuider);

            if (commandBuider.HasRowVersion)
            {
                SetMasterRowVersion(master, commandBuider);//master row version is used to determine which file has the changes in the case where the master can update the component.
            }

            if (commandBuider.MergeNewFromMaster)
            {
                ProcessMasterNew(master, commandBuider, components);//add merge records for records that are new on the master side
            }
        }
Beispiel #4
0
        public static void ProcessComparisons(DAL master, MergeTableCommandBuilder cmdBldr)
        {
            if (cmdBldr.DoKeyMatch)
            {
                foreach (MergeObject item in master.Query <MergeObject>(cmdBldr.SelectRowIDMatches).ToList())
                {
                    master.Execute($"UPDATE {cmdBldr.MergeTableName} SET RowIDMatch = @p1 WHERE MergeRowID = @p2;",
                                   item.RowIDMatch, item.MergeRowID);
                }
            }

            if (cmdBldr.DoNaturalMatch)
            {
                foreach (MergeObject mRec in master.Query <MergeObject>(cmdBldr.SelectNaturalMatches).ToList())
                {
                    master.Execute($"UPDATE {cmdBldr.MergeTableName} SET NaturalMatch = @p1 WHERE MergeRowID = @p2;",
                                   mRec.NaturalMatch, mRec.MergeRowID);
                }
            }

            if (cmdBldr.HasGUIDKey)
            {
                var rowIDLookUp = new Dictionary <Guid, long>();
                foreach (var pair in master.Query <GuidRowID>($"Select {cmdBldr.ClientGUIDFieldName} AS Guid, {cmdBldr.ClientPrimaryKey.Name} AS RecID FROM main.{cmdBldr.ClientTableName} WHERE {cmdBldr.ClientGUIDFieldName} IS NOT NULL AND {cmdBldr.ClientGUIDFieldName} NOT LIKE '';", (object[])null))
                {
                    var guid = pair.Guid;
                    if (guid != Guid.Empty)
                    {
                        rowIDLookUp.Add(guid, pair.RecID);
                    }
                }

                foreach (var mrgRec in master.Query <GuidRowID>($"Select MergeRowID AS RecID, ComponentRowGUID AS Guid FROM {cmdBldr.MergeTableName} WHERE ComponentRowGUID IS NOT NULL;"))
                {
                    try
                    {
                        if (rowIDLookUp.ContainsKey(mrgRec.Guid))
                        {
                            var match = rowIDLookUp[mrgRec.Guid];

                            string setGuidMatch = $"UPDATE {cmdBldr.MergeTableName} SET GUIDMatch = {match} WHERE MergeRowID = {mrgRec.RecID};";
                            master.Execute(setGuidMatch);
                        }
                    }
                    catch { continue; }
                }

                //List <MergeObject> guidMatches = master.Query<MergeObject>(cmdBldr.SelectGUIDMatches);
                //this._workInCurrentJob += guidMatches.Count;
                //string setGuidMatch = "UPDATE " + cmdBldr.MergeTableName + " SET GUIDMatch = ? WHERE MergeRowID = ?;";
                //foreach (MergeObject mRec in guidMatches)
                //{
                //    CheckWorkerStatus();
                //    master.Execute(setGuidMatch, mRec.GUIDMatch, mRec.MergeRowID);
                //    this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
                //}
            }
        }
Beispiel #5
0
 public static void ProcessMasterNew(DAL master, MergeTableCommandBuilder cmdBldr, IEnumerable <ComponentFile> components)
 {
     foreach (ComponentFile comp in components)
     {
         foreach (MergeObject mRec in master.Query <MergeObject>(cmdBldr.SelectMissingMatches(comp), (object[])null))
         {
             master.Execute($"INSERT INTO {cmdBldr.MergeTableName} (MatchRowID, ComponentID) VALUES (@p1,@p2);",
                            mRec.MatchRowID, comp.Component_CN);
         }
     }
 }
Beispiel #6
0
        //private void ProcessMissingRecords(DAL mergeDB, MergeTableCommandBuilder commandBuider)
        //{
        //    //check records in master against records in merge table, for missing matches
        //    //create merge record where component row id and component GUID is null
        //    List<MergeObject> missing = mergeDB.Query<MergeObject>(
        //            commandBuider.MissingRecords);

        //    this._workInCurrentJob += missing.Count;
        //    this.NotifyProgressChanged(this._progressInCurrentJob, false, "Processing Missing Records", null);

        //    string insertMissingCommand = String.Format("INSERT INTO Merge{0} (RowIDMatch, IsDeleted) VALUES (?, 1);", commandBuider.ClientTableName);
        //    foreach (MergeObject item in missing)
        //    {
        //        CheckWorkerStatus();
        //        mergeDB.Execute(insertMissingCommand, item.RowIDMatch);
        //        this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
        //    }
        //}

        public static void ProcessFullMatchs(DAL master, MergeTableCommandBuilder cmdBldr)
        {
            List <MergeObject> matches = master.Query <MergeObject>(cmdBldr.SelectFullMatches).ToList();

            string setMatches = $"UPDATE {cmdBldr.MergeTableName} SET MatchRowID = @p1 WHERE MergeRowID = @p2;";

            foreach (MergeObject item in matches)
            {
                master.Execute(setMatches, cmdBldr.GetMatchRowID(item), item.MergeRowID);
            }
        }
Beispiel #7
0
        public static void FindNaturalSiblingMatches(DAL mergeDB, MergeTableCommandBuilder cmdBldr)
        {
            List <MergeObject> naturalSiblings = mergeDB.Query <MergeObject>(
                "SELECT CompoundNaturalKey, NaturalSiblings FROM (" +
                "SELECT CompoundNaturalKey, group_concat(MergeRowID, ',') as NaturalSiblings, count(1) as size FROM " + cmdBldr.MergeTableName +
                " GROUP BY CompoundNaturalKey) WHERE size > 1;", (object[])null).ToList();

            string setNaturalSiblings = "UPDATE " + cmdBldr.MergeTableName + " SET NaturalSiblings = @p1 WHERE CompoundNaturalKey = @p2;";

            foreach (MergeObject groups in naturalSiblings)
            {
                mergeDB.Execute(setNaturalSiblings, groups.NaturalSiblings, groups.CompoundNaturalKey);
            }
        }
Beispiel #8
0
        public static void IdentifySiblingRecords(DAL master, MergeTableCommandBuilder cmdBldr)
        {
            List <string> matchSources = new List <string>();

            if (cmdBldr.DoNaturalMatch)
            {
                matchSources.Add("SELECT MergeRowID, NaturalMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                                 " WHERE NaturalMatch IS NOT NULL");
            }
            if (cmdBldr.DoKeyMatch)
            {
                matchSources.Add("SELECT MergeRowID, RowIDMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                                 " WHERE RowIDMatch IS NOT NULL");
            }
            if (cmdBldr.DoGUIDMatch)
            {
                matchSources.Add("SELECT MergeRowID, GUIDMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                                 " WHERE GUIDMatch IS NOT NULL");
            }

            string selectSiblings = "SELECT SiblingRecords FROM (SELECT PartialMatch , group_concat(MergeRowID, ',') as SiblingRecords, count(1) as size FROM ( " +
                                    string.Join(" UNION ", matchSources.ToArray()) + " )  GROUP BY PartialMatch) where size > 1;";

            var    siblingsGroups    = master.Query <MergeObject>(selectSiblings).ToArray();
            string setSiblingsformat = "UPDATE " + cmdBldr.MergeTableName + " SET SiblingRecords = ifnull(SiblingRecords, '') || @p1  WHERE MergeRowID in ({0});";

            foreach (MergeObject mRec in siblingsGroups)
            {
                string setSiblings = String.Format(setSiblingsformat, mRec.SiblingRecords);
                master.Execute(setSiblings, mRec.SiblingRecords);
            }

            //List<MergeObject> matchConflicts = master.Query<MergeObject>(cmdBldr.SelectSiblingRecords);

            //this._workInCurrentJob += matchConflicts.Count;
            //this.NotifyProgressChanged(this._progressInCurrentJob, false, "Processing Duplicate Match Conflicts", null);

            //string setMatchConflicts = "UPDATE " + cmdBldr.MergeTableName + " SET SiblingRecords = ? WHERE PartialMatch IS NOT NULL;";
            //foreach(MergeObject item in matchConflicts)
            //{
            //    CheckWorkerStatus();
            //    master.Execute(setMatchConflicts, item.SiblingRecords, item.PartialMatch);
            //    this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
            //}
        }
        private void ProcessMergeTable(DAL mergeDB, MergeTableCommandBuilder commandBuider)
        {
            this.NotifyProgressChanged(this._progressInCurrentJob, false, "Processing " + commandBuider.MergeTableName, null);

            //run various comparisons
            ProcessComparisons(mergeDB, commandBuider);

            //ProcessInvalidMatchs(mergeDB, commandBuider);
            ProcessFullMatchs(mergeDB, commandBuider);
            SetPartialMatches(mergeDB, commandBuider);

            IdentifySiblingRecords(mergeDB, commandBuider);
            FindNaturalSiblingMatches(mergeDB, commandBuider);
            //set match row id on valid matches

            //if (commandBuider.RecordsUniqueAccrossComponents)
            //{
            //    ProcessCrossComponentConflicts(mergeDB, commandBuider);
            //    IdentifySiblingRecords(mergeDB, commandBuider);
            //}
            if (commandBuider.HasRowVersion)
            {
                SetMasterRowVersion(mergeDB, commandBuider);
            }
            //if (commandBuider.MergeNewFromComponent)
            //{
            //    SetIncomingPlaceholder(mergeDB, commandBuider);
            //}
            if (commandBuider.MergeNewFromMaster)
            {
                ProcessMasterNew(mergeDB, commandBuider);
            }
        }
 public List<MergeObject> ListMatches(MergeTableCommandBuilder cmdBldr)
 {
     return this.MasterDB.Query<MergeObject>("SELECT * FROM " + cmdBldr.MergeTableName + " WHERE " + cmdBldr.FindMatchesBase + ";");
 }
 public List<MergeObject> ListConflicts(MergeTableCommandBuilder cmdBldr)
 {
     return this.MasterDB.Query<MergeObject>("SELECT * FROM " + cmdBldr.MergeTableName + cmdBldr.FindConflictsFilter + ";");
 }
 private void ResetComponentRowVersion(ComponentFileVM comp, long componentRowID, MergeTableCommandBuilder commBldr)
 {
     comp.Database.Execute("UPDATE " + commBldr.ClientTableName + " SET RowVersion = 0 WHERE RowID = ?;", componentRowID);
 }
 public long CountUpdateActions(MergeTableCommandBuilder cmdBldr)
 {
     return Master.GetRowCount(cmdBldr.MergeTableName, "WHERE " + cmdBldr.FindMatchesBase);
 }
 public ViewDataLink(MergeTableCommandBuilder bldr)
 {
     this.CmdBldr = bldr;
 }
        //private void ProcessExistingMasterRecordsWithoutGuids(DAL mergeDB, MergeTableCommandBuilder commandBuider)
        //{
        //    List<MergeObject> matchs = mergeDB.Query<MergeObject>(
        //        commandBuider.SelectNaturalAndCNMatches);
        //    this._progressInCurrentJob = 0;
        //    this._workInCurrentJob = matchs.Count + 1;
        //    this.NotifyProgressChanged(this._progressInCurrentJob, false, "Processing Records Without GUIDs", null);
        //    String updateCommand = "UPDATE " + commandBuider.MergeTableName + " SET MasterRowID = ?, MasterRowVersion = ?  WHERE MergeRowID = ?;";
        //    foreach (MergeObject c in matchs)
        //    {
        //        CheckWorkerStatus();
        //        mergeDB.Execute(updateCommand, c.MasterRowID, c.MasterRowVersion, c.MergeRowID);
        //        this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
        //    }
        //}
        //private void ProcessExistingRecords(DAL mergeDB, MergeTableCommandBuilder commandBuider)
        //{
        //    //match records in master with records in component and set Master row id
        //    List<MergeObject> matches = mergeDB.Query<MergeObject>(
        //        commandBuider.SelectGUIDMatches);
        //    this._progressInCurrentJob = 0;
        //    this._workInCurrentJob = matches.Count + 1;
        //    this.NotifyProgressChanged(this._progressInCurrentJob, false, "Processing Existing Records", null);
        //    String updateCommand = String.Format("UPDATE {0} SET MasterRowID = ?, MasterRowVersion = ? WHERE MergeRowID = ?;", commandBuider.MergeTableName);
        //    foreach (MergeObject item in matches)
        //    {
        //        CheckWorkerStatus();
        //        mergeDB.Execute(updateCommand, item.MasterRowID, item.MasterRowVersion, item.MergeRowID);
        //        this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
        //    }
        //}
        //private void ProcessCrossComponentConflicts(DAL mergeDB, MergeTableCommandBuilder commandBuider)
        //{
        //    //check other merge records to see if there are any conflicts with other records being merged
        //    List<MergeObject> matches = mergeDB.Query<MergeObject>(
        //       commandBuider.NaturalCrossComponentConflictsCommand);
        //    this._workInCurrentJob += matches.Count;
        //    this.NotifyProgressChanged(this._progressInCurrentJob, false, "Processing  Cross Component Conflicts", null);
        //    String updateCommand = "UPDATE " + commandBuider.MergeTableName + " SET ComponentConflict = ? WHERE MergeRowID = ?;";
        //    foreach (MergeObject c in matches)
        //    {
        //        CheckWorkerStatus();
        //        mergeDB.Execute(updateCommand, c.ComponentConflict, c.MergeRowID);
        //        this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
        //    }
        //}
        private void FindNaturalSiblingMatches(DAL mergeDB, MergeTableCommandBuilder cmdBldr)
        {
            List<MergeObject> naturalSiblings = mergeDB.Query<MergeObject>(
                "SELECT CompoundNaturalKey, NaturalSiblings FROM (" +
                "SELECT CompoundNaturalKey, group_concat(MergeRowID, ',') as NaturalSiblings, count(1) as size FROM " + cmdBldr.MergeTableName +
                " GROUP BY CompoundNaturalKey) WHERE size > 1;");

            string setNaturalSiblings = "UPDATE " + cmdBldr.MergeTableName + " SET NaturalSiblings = ? WHERE CompoundNaturalKey = ?;";
            foreach (MergeObject groups in naturalSiblings)
            {
                mergeDB.Execute(setNaturalSiblings, groups.NaturalSiblings, groups.CompoundNaturalKey);
            }
        }
        private void SetMasterRowVersion(DAL master, MergeTableCommandBuilder cmdBldr)
        {
            string setMasterRowVersion = "UPDATE " + cmdBldr.MergeTableName + " SET MasterRowVersion = " +
                "(SELECT RowVersion FROM " + cmdBldr.ClientTableName + " AS client WHERE client.RowID = MatchRowID);";

            master.Execute(setMasterRowVersion);
        }
        private void SetPartialMatches(DAL mergeDB, MergeTableCommandBuilder cmdBldr)
        {
            List<string> matchSources = new List<string>();
            if (cmdBldr.DoNaturalMatch)
            {
                matchSources.Add("SELECT MergeRowID, NaturalMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                    " WHERE NaturalMatch IS NOT NULL AND MatchRowID IS NULL");
                //matchSources.Add("SELECT MergeRowID, NaturalMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                //    " WHERE NaturalMatch IS NOT NULL AND (NaturalMatch != RowIDMatch OR NaturalMatch != GUIDMatch)");
            }
            if (cmdBldr.DoKeyMatch)
            {
                matchSources.Add("SELECT MergeRowID, RowIDMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                    " WHERE RowIDMatch IS NOT NULL AND MatchRowID IS NULL");
            }
            if (cmdBldr.DoGUIDMatch)
            {
                matchSources.Add("SELECT MergeRowID, GUIDMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                    " WHERE GUIDMatch IS NOT NULL AND MatchRowID IS NULL");
            }

            string selectPartialMatches = "SELECT MergeRowID, group_concat(PartialMatch, ',') AS PartialMatch FROM ( " +
                string.Join(" UNION ", matchSources.ToArray()) + " ) GROUP BY MergeRowID;";

            List<MergeObject> partialMatchs = mergeDB.Query<MergeObject>(selectPartialMatches);
            string setPartialMatch = "UPDATE " + cmdBldr.MergeTableName + " SET PartialMatch = ? WHERE MergeRowID = ?;";
            foreach (MergeObject mRec in partialMatchs)
            {
                mergeDB.Execute(setPartialMatch, mRec.PartialMatch, mRec.MergeRowID);
            }
        }
        //private void ProcessInvalidMatchs(DAL master, MergeTableCommandBuilder cmdBldr)
        //{
        //    string setConflict = "UPDATE " + cmdBldr.MergeTableName +
        //        " SET MatchConflict = 'invalid match' " +
        //        "WHERE MergeRowID IN (" + cmdBldr.SelectInvalidMatchs +");";
        //    master.Execute(setConflict);
        //}
        private void IdentifySiblingRecords(DAL master, MergeTableCommandBuilder cmdBldr)
        {
            List<string> matchSources = new List<string>();
            if (cmdBldr.DoNaturalMatch)
            {
                matchSources.Add("SELECT MergeRowID, NaturalMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                    " WHERE NaturalMatch IS NOT NULL");
            }
            if (cmdBldr.DoKeyMatch)
            {
                matchSources.Add("SELECT MergeRowID, RowIDMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                    " WHERE RowIDMatch IS NOT NULL");
            }
            if (cmdBldr.DoGUIDMatch)
            {
                matchSources.Add("SELECT MergeRowID, GUIDMatch AS PartialMatch FROM " + cmdBldr.MergeTableName +
                    " WHERE GUIDMatch IS NOT NULL");
            }

            string selectSiblings = "SELECT SiblingRecords FROM (SELECT PartialMatch , group_concat(MergeRowID, ',') as SiblingRecords, count(1) as size FROM ( " +
                string.Join(" UNION ", matchSources.ToArray()) + " )  GROUP BY PartialMatch) where size > 1;";

            List<MergeObject> siblingsGroups = master.Query<MergeObject>(selectSiblings);
            string setSiblingsformat = "UPDATE " + cmdBldr.MergeTableName + " SET SiblingRecords = ifnull(SiblingRecords, '') || ?  WHERE MergeRowID in ({0});";
            foreach (MergeObject mRec in siblingsGroups)
            {
                string setSiblings = String.Format(setSiblingsformat, mRec.SiblingRecords);
                master.Execute(setSiblings, mRec.SiblingRecords);
            }

            //List<MergeObject> matchConflicts = master.Query<MergeObject>(cmdBldr.SelectSiblingRecords);

            //this._workInCurrentJob += matchConflicts.Count;
            //this.NotifyProgressChanged(this._progressInCurrentJob, false, "Processing Duplicate Match Conflicts", null);

            //string setMatchConflicts = "UPDATE " + cmdBldr.MergeTableName + " SET SiblingRecords = ? WHERE PartialMatch IS NOT NULL;";
            //foreach(MergeObject item in matchConflicts)
            //{
            //    CheckWorkerStatus();
            //    master.Execute(setMatchConflicts, item.SiblingRecords, item.PartialMatch);
            //    this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
            //}
        }
 //public long CountUpdateComponentActions(MergeTableCommandBuilder cmdBldr)
 //{
 //    return Master.GetRowCount(cmdBldr.MergeTableName, cmdBldr.FindMasterToCompUpdates);
 //}
 public long CountAddRecordActions(MergeTableCommandBuilder cmdBldr)
 {
     return Master.GetRowCount(cmdBldr.MergeTableName, cmdBldr.FindNewRecords);
 }
        private void MakeMergeTable(MergeTableCommandBuilder table)
        {
            this.CheckWorkerStatus();
            StartJob("Create " + table.MergeTableName);

            MasterDB.Execute("DROP TABLE IF EXISTS " + table.MergeTableName + ";");
            MasterDB.Execute(table.MakeMergeTableCommand);

            EndJob();
        }
        public void PullNew(MergeTableCommandBuilder cmdBldr, ComponentFileVM comp)
        {
            StartJob("Pull New From " + cmdBldr.ClientTableName);
            List<MergeObject> mergeRecords = cmdBldr.ListNewRecords(Master, comp);

            foreach (MergeObject mRec in mergeRecords)
            {
                CheckWorkerStatus();
                DataObject newFromComp = cmdBldr.ReadSingleRow(comp.Database, mRec.ComponentRowID.Value);
                Master.Insert(newFromComp, OnConflictOption.Fail);
                this.ResetComponentRowVersion(comp, mRec.ComponentRowID.Value, cmdBldr);
            }

            EndJob();
        }
        private void PopulateMergeTable(DAL masterDB, MergeTableCommandBuilder table, ComponentFileVM comp)
        {
            CheckWorkerStatus();

            masterDB.Execute(table.GetPopulateMergeTableCommand(comp));
            masterDB.Execute(table.GetPopulateDeletedRecordsCommand(comp));
        }
 private void ResetRowVersion(ComponentFileVM comp, long masterRowID, long componentRowID, MergeTableCommandBuilder commBldr)
 {
     Master.Execute("UPDATE " + commBldr.ClientTableName + " SET RowVersion = 0 WHERE RowID = ?;", masterRowID);
     ResetComponentRowVersion(comp, componentRowID, commBldr);
 }
        //private void ProcessMasterConflicts(DAL mergeDB, MergeTableCommandBuilder commandBuider)
        //{
        //    //check merge records agains master table for conflicts
        //    List<MergeObject> conflicts = mergeDB.Query<MergeObject>(
        //        commandBuider.MasterConflicts);
        //    this._progressInCurrentJob = 0;
        //    this._workInCurrentJob = conflicts.Count + 1;
        //    this.NotifyProgressChanged(this._progressInCurrentJob, false, "Processing Master Conflicts", null);
        //    String updateCommand = String.Format("UPDATE {0} SET MasterConflict = ? WHERE MergeRowID = ?;", commandBuider.MergeTableName);
        //    foreach (MergeObject item in conflicts)
        //    {
        //        CheckWorkerStatus();
        //        mergeDB.Execute(updateCommand, item.MasterConflict, item.MergeRowID);
        //        this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
        //    }
        //}
        private void ProcessComparisons(DAL master, MergeTableCommandBuilder cmdBldr)
        {
            if (cmdBldr.DoKeyMatch)
            {
                List<MergeObject> keyMatches = master.Query<MergeObject>(cmdBldr.SelectRowIDMatches);
                this._workInCurrentJob += keyMatches.Count;
                string setKeyMatch = "UPDATE " + cmdBldr.MergeTableName + " SET RowIDMatch = ? WHERE MergeRowID = ?;";
                foreach (MergeObject item in keyMatches)
                {
                    CheckWorkerStatus();
                    master.Execute(setKeyMatch, item.RowIDMatch, item.MergeRowID);
                    this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
                }
            }

            if (cmdBldr.DoNaturalMatch)
            {
                List<MergeObject> natMatches = master.Query<MergeObject>(cmdBldr.SelectNaturalMatches);
                this._workInCurrentJob += natMatches.Count;
                string setNatMatch = "UPDATE " + cmdBldr.MergeTableName + " SET NaturalMatch = ? WHERE MergeRowID = ?;";
                foreach (MergeObject mRec in natMatches)
                {
                    CheckWorkerStatus();
                    master.Execute(setNatMatch, mRec.NaturalMatch, mRec.MergeRowID);
                    this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
                }
            }

            if (cmdBldr.HasGUIDKey)
            {
                List<MergeObject> guidMatches = master.Query<MergeObject>(cmdBldr.SelectGUIDMatches);
                this._workInCurrentJob += guidMatches.Count;
                string setGuidMatch = "UPDATE " + cmdBldr.MergeTableName + " SET GUIDMatch = ? WHERE MergeRowID = ?;";
                foreach (MergeObject mRec in guidMatches)
                {
                    CheckWorkerStatus();
                    master.Execute(setGuidMatch, mRec.GUIDMatch, mRec.MergeRowID);
                    this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
                }
            }
        }
 public List<MergeObject> ListDeleted(MergeTableCommandBuilder cmdBldr)
 {
     return this.MasterDB.Query<MergeObject>("SELECT * FROM " + cmdBldr.MergeTableName + " WHERE IsDeleted = 1;");
 }
        //private void ProcessMissingRecords(DAL mergeDB, MergeTableCommandBuilder commandBuider)
        //{
        //    //check records in master against records in merge table, for missing matches
        //    //create merge record where component row id and component GUID is null
        //    List<MergeObject> missing = mergeDB.Query<MergeObject>(
        //            commandBuider.MissingRecords);
        //    this._workInCurrentJob += missing.Count;
        //    this.NotifyProgressChanged(this._progressInCurrentJob, false, "Processing Missing Records", null);
        //    string insertMissingCommand = String.Format("INSERT INTO Merge{0} (RowIDMatch, IsDeleted) VALUES (?, 1);", commandBuider.ClientTableName);
        //    foreach (MergeObject item in missing)
        //    {
        //        CheckWorkerStatus();
        //        mergeDB.Execute(insertMissingCommand, item.RowIDMatch);
        //        this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
        //    }
        //}
        private void ProcessFullMatchs(DAL master, MergeTableCommandBuilder cmdBldr)
        {
            List<MergeObject> matches = master.Query<MergeObject>(cmdBldr.SelectFullMatches);

            this._workInCurrentJob += matches.Count;

            string setMatches = "UPDATE " + cmdBldr.MergeTableName + " SET MatchRowID = ? WHERE MergeRowID = ?;";
            foreach (MergeObject item in matches)
            {
                CheckWorkerStatus();
                master.Execute(setMatches, cmdBldr.GetMatchRowID(item), item.MergeRowID);
                this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
            }
        }
 public List<MergeObject> ListNew(MergeTableCommandBuilder cmdBldr)
 {
     return this.MasterDB.Query<MergeObject>("SELECT * FROM " + cmdBldr.MergeTableName + cmdBldr.FindNewRecords + ";");
 }
 //private void SetIncomingPlaceholder(DAL master, MergeTableCommandBuilder cmdBldr)
 //{
 //    List<MergeObject> incomming = master.Query<MergeObject>("SELECT * FROM " + cmdBldr.MergeTableName +
 //        " WHERE MatchRowID IS NULL AND MatchConflict IS NULL" +
 //        " GROUP BY " + String.Join(", ", cmdBldr.ClientUniqueFieldNames) +
 //        " ORDER BY ComponentID;");
 //    this._workInCurrentJob += incomming.Count;
 //    string setplaceHolder = "UPDATE " + cmdBldr.MergeTableName + " SET IncomingPlaceholder = ? WHERE MergeRowID = ?;";
 //    long placeHolderCounter = 0;
 //    foreach (MergeObject mRec in incomming)
 //    {
 //        CheckWorkerStatus();
 //        master.Execute(setplaceHolder, placeHolderCounter++, mRec.MergeRowID);
 //        this.NotifyProgressChanged(this._progressInCurrentJob++, false, null, null);
 //    }
 //}
 private void ProcessMasterNew(DAL master, MergeTableCommandBuilder cmdBldr)
 {
     foreach (ComponentFileVM comp in this.Components)
     {
         List<MergeObject> missingMatches = master.Query<MergeObject>(cmdBldr.SelectMissingMatches(comp));
         string insertMissingMatch = "INSERT INTO " + cmdBldr.MergeTableName + " (MatchRowID, ComponentID) " +
             "VALUES (?,?);";
         foreach (MergeObject mRec in missingMatches)
         {
             master.Execute(insertMissingMatch, mRec.MatchRowID, comp.Component_CN);
         }
     }
 }