예제 #1
0
        private bool FoundIn(RecordSetShim sqlResult, string tblKey, NodeRecordHash d7n)
        {
            foreach (var row in sqlResult)
            {
                if (row[tblKey].ToInt() == d7n.dbID)
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #2
0
        public async Task <RecordSetShim> QueryRS
            (string sqlQuery)
        {
            var rs = new RecordSetShim();

            await FillList(rs, r =>
            {
                var row = new ResultRow();

                for (int i = 0; i < r.FieldCount; i++)
                {
                    row.Add(r.GetName(i), r[i]);
                }

                return(row);
            },
                           sqlQuery);

            return(rs);
        }
예제 #3
0
        private async Task <RecordSetShim> Shimify(DbDataReader readr)
        {
            var shim     = new RecordSetShim();
            var colCount = readr.FieldCount;

            while (await readr.ReadAsync())
            {
                var row = new ResultRow();

                for (int j = 0; j < colCount; j++)
                {
                    var key = readr.GetName(j);
                    var val = await readr.GetFieldValueAsync <object>(j);

                    row.Add(key, val);
                }

                shim.Add(row);
            }
            return(shim);
        }
예제 #4
0
        private bool ApplyChangesToRepo(RecordSetShim sqlResult,
                                        IEnumerable <NodeRecordHash> nodeRecHashes,
                                        IMapOverride overrider)
        {
            //Info_n("Applying changes to repo...", "");

            var tblKey = DbColAttribute.Key <T>()?.Property?.Name;

            if (tblKey.IsBlank())
            {
                return(Error_n($"DbCol (IsKey=true) attribute missing from ‹{typeof(T).Name}›", ""));
            }

            if (_deleteIfNotInSqlDB)
            {
                foreach (var d7n in nodeRecHashes)
                {
                    if (!FoundIn(sqlResult, tblKey, d7n))
                    {
                        _writr.DeleteLater(_writr[d7n.nid]);
                    }
                }
            }

            var hashField = D7HashFieldAttribute.FindIn <T>();

            foreach (var row in sqlResult)
            {
                var tweakdRow = TweakSqlRow(row);
                var dbRecID   = tweakdRow.AsInt(tblKey);
                var dbRowSha1 = _serialr.SHA1(tweakdRow);
                var repoNode  = new T();
                var d7RecHash = nodeRecHashes.FirstOrDefault(x => x.dbID == dbRecID);


                if (d7RecHash != null)
                {
                    repoNode = _writr[d7RecHash.nid];
                    if (repoNode == null)
                    {
                        return(Error_n("Nid found in hash-json BUT NOT in repo-json.", "You may need to clear/reload the repo."));
                    }
                }

                if (dbRowSha1 != d7RecHash?.sha1)
                {
                    if (!MapValues(overrider, tweakdRow, repoNode))
                    {
                        return(false);
                    }

                    hashField?.ModelProperty?
                    .SetValue(repoNode, dbRowSha1, null);
                }

                if (d7RecHash == null)
                {
                    _writr.AddLater(repoNode);
                }
            }
            return(true);
        }