private DuplicatesGroupResponse ConvertServerEntityToClientEntity(EntitySchemaQuery esq, List <EntityDuplicatesGroup> entityGroups) { DuplicatesGroupResponse result = new DuplicatesGroupResponse() { Groups = new Collection <EntityClientDuplicatesGroup>() }; Dictionary <string, string> serverToClientColumnNameMap = GetQueryColumns(esq); foreach (EntityDuplicatesGroup groupItem in entityGroups) { EntityCollection convertedEntities = QueryExtension.GetEntityCollection(groupItem.Duplicates, serverToClientColumnNameMap); EntityClientDuplicatesGroup clientGroup = new EntityClientDuplicatesGroup() { GroupId = groupItem.GroupId, Rows = convertedEntities }; result.Groups.Add(clientGroup); } if (result.Groups.Any()) { Dictionary <string, object> columnConfig = QueryExtension.GetColumnConfig(esq, serverToClientColumnNameMap); result.RowConfig = columnConfig; } result.Groups.OrderBy(group => group.GroupId); return(result); }
/// <inheritdoc cref="IBulkDeduplicationManager.GetDuplicateEntitiesGroups"/> public BulkDuplicatesGroupResponse GetDuplicateEntitiesGroups(string entityName, string[] columns, int clientOffset, int clientCount) { var response = new BulkDuplicatesGroupResponse { Groups = new Collection <BulkEntityClientDuplicatesGroup>() }; int totalCountFromBpm = 0; var offset = clientOffset; var esq = GetDuplicateEntitiesEsq(entityName); var serverToClientColumnNameMap = GetServerToClientColumnNameMap(columns, esq); for (int i = 0; i < MaxFetchPages; i++) { var duplicateRecordGroups = FetchDuplicatesFromService(entityName, offset, clientCount); if (duplicateRecordGroups == null) { break; } var duplicatesCount = duplicateRecordGroups.Sum(x => x.Count()); offset += duplicatesCount; foreach (var duplicateRecords in duplicateRecordGroups) { Guid groupId = duplicateRecords.Key; var duplicateEntities = GetDuplicateEntities(esq, serverToClientColumnNameMap, duplicateRecords.ToList()); var group = response.Groups.Find(x => x.GroupId == groupId); if (group == null) { group = new BulkEntityClientDuplicatesGroup { GroupId = groupId, Rows = new EntityCollection() }; response.Groups.Add(group); } int missingRecords = clientCount - totalCountFromBpm; int skippedRecords = duplicateEntities.Count - missingRecords; totalCountFromBpm += duplicateEntities.Count; response.NextOffset = offset - skippedRecords; group.Rows.AddRange(duplicateEntities.Take(missingRecords)); } if (duplicatesCount < clientCount || totalCountFromBpm >= clientCount) { break; } } if (response.Groups.IsEmpty()) { return(null); } AddIsUniqueColumn(esq); response.RowConfig = QueryExtension.GetColumnConfig(esq, serverToClientColumnNameMap); response.TotalCountRecords = response.Groups.Sum(x => x.Rows.Count); return(response); }
/// <inheritdoc cref="IBulkDeduplicationManager.GetGroupsOfDuplicates"/> public BulkDuplicatesGroupResponse GetGroupsOfDuplicates(string entityName, string[] columns, int offset, int count, int topDuplicatesPerGroup) { var response = new BulkDuplicatesGroupResponse { Groups = new Collection <BulkEntityClientDuplicatesGroup>() }; var esq = GetDuplicateEntitiesEsq(entityName); var serverToClientColumnNameMap = GetServerToClientColumnNameMap(columns, esq); var serviceGroupOffset = offset; var serviceGroupCount = count; for (int i = 0; i < MaxFetchPages; i++) { var duplicateGroupsInfo = FetchGroupOfDuplicatesFromService(entityName, serviceGroupOffset, serviceGroupCount, topDuplicatesPerGroup); foreach (var duplicateGroup in duplicateGroupsInfo) { var duplicateGroupResponse = GetDuplicatesGroupResponse(duplicateGroup, esq, serverToClientColumnNameMap); if (duplicateGroupResponse == null) { continue; } response.Groups.Add(duplicateGroupResponse); } var allRowsFetchedFromService = duplicateGroupsInfo.Count < serviceGroupCount; if (allRowsFetchedFromService) { serviceGroupOffset = -1; break; } serviceGroupOffset += serviceGroupCount; serviceGroupCount = count - response.Groups.Count; var requestedRowsCountFetched = response.Groups.Count >= count; if (requestedRowsCountFetched) { break; } } AddIsUniqueColumn(esq); response.RowConfig = QueryExtension.GetColumnConfig(esq, serverToClientColumnNameMap); response.NextOffset = serviceGroupOffset; return(response); }
private SelectQueryResponse GetVisaData(Select entitiesSelect) { Dictionary <string, string> serverToClientColumnNameMap = GetColumnNameMap(entitiesSelect); var collection = new EntityCollection(_userConnection, _baseVisaSchema); using (DBExecutor dbExecutor = _userConnection.EnsureDBConnection()) { using (IDataReader dataReader = entitiesSelect.ExecuteReader(dbExecutor)) { collection.Load(dataReader); } } var convertedEntities = QueryExtension.GetEntityCollection(collection, serverToClientColumnNameMap); Dictionary <string, object> config = QueryExtension.GetColumnConfig(_baseVisaESQ, serverToClientColumnNameMap); SelectQueryResponse response = new SelectQueryResponse { Rows = convertedEntities, RowsAffected = convertedEntities.Count, RowConfig = config }; return(response); }
public SelectQueryResponse GetEntities(RequestOptions requestOptions) { Select selectFromProviders = GetSelectFromProviders(); if (selectFromProviders == null) { return(new SelectQueryResponse { Rows = null, RowsAffected = 0, RowConfig = null }); } Select entitiesSelect = WrapSelect(selectFromProviders); ApplyOptions(ref entitiesSelect, requestOptions); Dictionary <string, string> serverToClientColumnNameMap = GetColumnNameMap(entitiesSelect); CoreEntitySchema baseVisaSchema = GetExtendedBaseVisaEntitySchema(); EntitySchemaQuery baseVisaESQ = GetExtendedBaseVisaESQ(baseVisaSchema); Terrasoft.Core.Entities.EntityCollection collection = new Terrasoft.Core.Entities.EntityCollection(_userConnection, baseVisaSchema); using (DBExecutor dbExecutor = _userConnection.EnsureDBConnection()) { using (IDataReader dataReader = entitiesSelect.ExecuteReader(dbExecutor)) { collection.Load(dataReader); } } var convertedEntities = QueryExtension.GetEntityCollection(collection, serverToClientColumnNameMap); Dictionary <string, object> config = QueryExtension.GetColumnConfig(baseVisaESQ, serverToClientColumnNameMap); SelectQueryResponse response = new SelectQueryResponse { Rows = convertedEntities, RowsAffected = convertedEntities.Count, RowConfig = config }; return(response); }