private void CheckUniqueIndexConstraint(string record) { var columnValues = record.Split('#'); var mongoDB = new MongoDBAcess(DatabaseName); var indexFiles = TableUtils.GetIndexFiles(DatabaseName, TableName); foreach (var file in indexFiles) { if (file.IsUnique) { var createKeyOfUqIndex = ""; var pk = ""; for (int idx = 0; idx < ColumnsInfo.Count; idx++) { if (file.IndexColumns.Exists(elem => elem == ColumnsInfo[idx].ColumnName)) { createKeyOfUqIndex += columnValues[idx] + '#'; } if (ColumnsInfo[idx].PK) { pk = columnValues[idx] + "#"; } } createKeyOfUqIndex = createKeyOfUqIndex.Remove(createKeyOfUqIndex.Length - 1); pk = pk.Remove(pk.Length - 1); MongoDB.InsertKVIntoCollection(file.IndexFileName, createKeyOfUqIndex, pk); } } }
private void IndexRecordsUnique(MongoDBAcess mongoDB) { List <KeyValuePair <string, string> > indexedContent = new List <KeyValuePair <string, string> >(); List <string> indexKeys = new List <string>(); for (int idx = 0; idx < RecordsSplit.Count(); idx++) { var indexKey = ""; foreach (var indexColumn in columns) { var columnValue = RecordsSplit[idx][ColumnsPositions.Find(elem => elem.Key == indexColumn).Value]; indexKey += columnValue + '#'; } indexKey = indexKey.Remove(indexKey.Length - 1); var recordPK = ""; foreach (var column in ColumnsInfo) { if (column.PK) { recordPK += RecordsSplit[idx][ColumnsPositions.Find(elem => elem.Key == column.ColumnName).Value] + '#'; } } recordPK = recordPK.Remove(recordPK.Length - 1); if (indexKeys.Exists(elem => elem == indexKey)) { throw new Exception("Could not create unique Index for table: " + TableName + " due to duplicate values in columns: " + columnsString); } else { indexKeys.Add(indexKey); indexedContent.Add(new KeyValuePair <string, string>(indexKey, recordPK)); } } try { foreach (var indexKeyValue in indexedContent) { mongoDB.InsertKVIntoCollection(indexName, indexKeyValue.Key, indexKeyValue.Value); } } catch (Exception) { throw new Exception("Could not index content for table: " + TableName); } }