Example #1
0
        /// <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;
            }
        }