/// <summary> /// /// </summary> /// <param name="internalId"></param> /// <returns></returns> void GetListOfDocumentVersionsInternal(long docSpaceId, int internalId, DBreeze.Transactions.Transaction tran, List<int> res) { string DocTableName = DocumentsStorageTablesPrefix + "d" + docSpaceId.ToString(); var vt = tran.SelectTable<int>(DocTableName, 3, 0); foreach (var row in vt.SelectForwardFromTo<byte[], byte>( internalId.To_4_bytes_array_BigEndian().ConcatMany(int.MinValue.To_4_bytes_array_BigEndian(), int.MinValue.To_4_bytes_array_BigEndian()), true, internalId.To_4_bytes_array_BigEndian().ConcatMany(int.MaxValue.To_4_bytes_array_BigEndian(), int.MaxValue.To_4_bytes_array_BigEndian()), true )) { res.Add(row.Key.Substring(8,4).To_Int32_BigEndian()); } }
/// <summary> /// Function to be used inside of internal transaction /// </summary> /// <param name="tran"></param> /// <param name="documentSpace"></param> /// <returns></returns> public long InTran_GetDocumentSpaceId(DBreeze.Transactions.Transaction tran, string documentSpace) { var mt = tran.SelectTable<int>(DocumentsStorageTablesPrefix + "m", 1, 0); var docSpaceId = mt.Select<string, long>(documentSpace).Value; return docSpaceId; }
/// <summary> /// /// </summary> /// <param name="docSpaceId"></param> /// <param name="internalId"></param> /// <param name="includeContent"></param> /// <param name="includeSearchables"></param> /// <param name="tran"></param> /// <returns></returns> Document GetDocById(long docSpaceId, int internalId, bool includeContent, bool includeSearchables, DBreeze.Transactions.Transaction tran) { try { if (docSpaceId < 1 || internalId < 1) return null; //No such document string docTable = DocumentsStorageTablesPrefix + "d" + docSpaceId.ToString(); //Getting latest document correct version string DocTableName = DocumentsStorageTablesPrefix + "d" + docSpaceId.ToString(); var vt = tran.SelectTable<int>(DocTableName, 3, 0); int sequentialId = 0; foreach (var row1 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 )) { if (row1.Value == 1) //Document is completely deleted break; //Getting the latest version of the document index sequentialId = row1.Key.Substring(8, 4).To_Int32_BigEndian(); break; } if (sequentialId == 0) return null; //Probably Doc is deleted //Getting document using internalID var dt = tran.SelectTable<int>(docTable, 1, 0); //document table dt.ValuesLazyLoadingIsOn = false; var row = dt.Select<int, byte[]>(sequentialId); if (!row.Exists) return null; //No such document return RetrieveDocument(includeContent, includeSearchables, dt, row); } catch (Exception ex) { throw ex; } }