private bool FoundIn(RecordSetShim sqlResult, string tblKey, NodeRecordHash d7n) { foreach (var row in sqlResult) { if (row[tblKey].ToInt() == d7n.dbID) { return(true); } } return(false); }
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); }
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); }
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); }