/// <summary> /// /// </summary> /// <param name="docSpaceId"></param> /// <param name="internalId"></param> /// <param name="tran"></param> void RemoveDocumentInternal(long docSpaceId, int internalId, string externalId, DBreeze.Transactions.Transaction tran) { string docTable = DocumentsStorageTablesPrefix + "d" + docSpaceId.ToString(); tran.SynchronizeTables(docTable, DocumentsStorageTablesPrefix + "p"); //Getting document using internalID var dt = tran.InsertTable<int>(docTable, 1, 0); //document table var vt = tran.InsertTable<int>(docTable, 3, 0); //Version table Key vt.ValuesLazyLoadingIsOn = false; if (!String.IsNullOrEmpty(externalId)) //Getting internalId via external { var et = tran.InsertTable<int>(docTable, 2, 0); //ExternalId to InternalId relation internalId = et.Select<string, int>(externalId).Value; } if (internalId == 0) return; //No such document //Iterating through all versions of the document foreach (var vtRow in vt.SelectBackwardFromTo<byte[], byte> ( internalId.To_4_bytes_array_BigEndian().ConcatMany(int.MaxValue.To_4_bytes_array_BigEndian(), int.MaxValue.To_4_bytes_array_BigEndian()), true, internalId.To_4_bytes_array_BigEndian().ConcatMany(int.MinValue.To_4_bytes_array_BigEndian(), int.MinValue.To_4_bytes_array_BigEndian()), true , true )) { if (vtRow.Value == 0) { //Including the last one into processing list with the value 1 (to be deleted) tran.Insert<byte[], byte>(DocumentsStorageTablesPrefix + "p", docSpaceId.To_8_bytes_array_BigEndian().Concat(vtRow.Key.Substring(8, 4)), 1); } break; } }