public static void DoFreeContent(IReaderCtx ctx, ulong id, int cfgId) { var readerCtx = (DBReaderCtx)ctx; var tr = readerCtx.GetTransaction(); var dict = new ODBDictionary <TKey, TValue>(tr, ODBDictionaryConfiguration.Get(cfgId), id); dict.FreeContent(ctx, cfgId); }
TKey ByteArrayToKey(ByteBuffer data) { var reader = new ByteBufferReader(data); IReaderCtx ctx = null; if (_keyHandler.NeedsCtx()) { ctx = new DBReaderCtx(_tr, reader); } return(_keyReader(reader, ctx)); }
TValue ByteArrayToValue(ByteBuffer data) { var reader = new ByteBufferReader(data); IReaderCtx ctx = null; if (_valueHandler.NeedsCtx()) { ctx = new DBReaderCtx(_tr, reader); } return(_valueReader(reader, ctx)); }
TKey CurrentToKey() { Span <byte> buffer = stackalloc byte[512]; var reader = new SpanReader(_keyValueTr.GetKey(ref MemoryMarshal.GetReference(buffer), buffer.Length).Slice(_prefix.Length)); IReaderCtx ctx = null; if (_keyHandler.NeedsCtx()) { ctx = new DBReaderCtx(_tr); } return(_keyReader(ref reader, ctx)); }
public bool FreeContentInNativeObject(IReaderCtx readerCtx) { var reader = readerCtx.Reader(); var tableId = reader.ReadVUInt32(); var tableVersion = reader.ReadVUInt32(); var tableInfo = _owner.TablesInfo.FindById(tableId); if (tableInfo == null) { throw new BTDBException($"Unknown TypeId {tableId} of inline object"); } var freeContentTuple = tableInfo.GetFreeContent(tableVersion); var readerWithFree = (DBReaderWithFreeInfoCtx)readerCtx; freeContentTuple.Item2(this, null, reader, readerWithFree.DictIds, readerWithFree.Oids); return(freeContentTuple.Item1); }
public object ReadInlineObject(IReaderCtx readerCtx) { var reader = readerCtx.Reader(); var tableId = reader.ReadVUInt32(); var tableVersion = reader.ReadVUInt32(); var tableInfo = _owner.TablesInfo.FindById(tableId); if (tableInfo == null) { throw new BTDBException($"Unknown TypeId {tableId} of inline object"); } EnsureClientTypeNotNull(tableInfo); var obj = tableInfo.Creator(this, null); readerCtx.RegisterObject(obj); tableInfo.GetLoader(tableVersion)(this, null, reader, obj); readerCtx.ReadObjectDone(); return(obj); }
void FreeContent(IReaderCtx readerCtx, int cfgId) { var config = ODBDictionaryConfiguration.Get(cfgId); var ctx = (DBReaderWithFreeInfoCtx)readerCtx; if (config.FreeContent == null) { var method = ILBuilder.Instance.NewMethod <FreeContentFun>($"IDictFinder_Cfg_{cfgId}"); var ilGenerator = method.Generator; var readerLoc = ilGenerator.DeclareLocal(typeof(IReaderCtx)); ilGenerator .Ldarg(0) .Ldarg(2) // ReSharper disable once ObjectCreationAsStatement .Newobj(() => new DBReaderWithFreeInfoCtx(null, null)) .Stloc(readerLoc); var readerOrCtx = _valueHandler.NeedsCtx() ? (Action <IILGen>?)(il => il.Ldloc(readerLoc)) : null; _valueHandler.FreeContent(ilGenerator, il => il.Ldarg(1), readerOrCtx); ilGenerator.Ret(); config.FreeContent = method.Create(); } var findIDictAction = (FreeContentFun)config.FreeContent; long prevProtectionCounter = 0; long pos = 0; while (true) { if (pos == 0) { if (!_keyValueTr.FindFirstKey(_prefix)) { break; } } else { if (_keyValueTr.CursorMovedCounter != prevProtectionCounter) { if (!_keyValueTr.SetKeyIndex(_prefix, pos)) { break; } } else { if (!_keyValueTr.FindNextKey(_prefix)) { break; } } } prevProtectionCounter = _keyValueTr.CursorMovedCounter; var valueBytes = _keyValueTr.GetValue(); var valueReader = new SpanReader(valueBytes); findIDictAction(ctx.GetTransaction(), ref valueReader, ctx.DictIds); pos++; } }
void FreeContent(IReaderCtx readerCtx, int cfgId) { var config = ODBDictionaryConfiguration.Get(cfgId); var ctx = (DBReaderWithFreeInfoCtx)readerCtx; if (config.FreeContent == null) { var method = ILBuilder.Instance .NewMethod <Action <IInternalObjectDBTransaction, AbstractBufferedReader, IList <ulong> > >( $"IDictFinder_Cfg_{cfgId}"); var ilGenerator = method.Generator; var readerLoc = ilGenerator.DeclareLocal(typeof(IReaderCtx)); ilGenerator .Ldarg(0) .Ldarg(1) .Ldarg(2) // ReSharper disable once ObjectCreationAsStatement .Newobj(() => new DBReaderWithFreeInfoCtx(null, null, null)) .Stloc(readerLoc); Action <IILGen> readerOrCtx; if (_valueHandler.NeedsCtx()) { readerOrCtx = il => il.Ldloc(readerLoc); } else { readerOrCtx = il => il.Ldarg(1); } _valueHandler.FreeContent(ilGenerator, readerOrCtx); ilGenerator.Ret(); config.FreeContent = method.Create(); } var findIDictAction = (Action <IInternalObjectDBTransaction, AbstractBufferedReader, IList <ulong> >)config.FreeContent; long prevProtectionCounter = 0; long pos = 0; while (true) { _keyValueTrProtector.Start(); if (pos == 0) { _keyValueTr.SetKeyPrefix(_prefix); if (!_keyValueTr.FindFirstKey()) { break; } } else { if (_keyValueTrProtector.WasInterupted(prevProtectionCounter)) { _keyValueTr.SetKeyPrefix(_prefix); if (!_keyValueTr.SetKeyIndex(pos)) { break; } } else { if (!_keyValueTr.FindNextKey()) { break; } } } prevProtectionCounter = _keyValueTrProtector.ProtectionCounter; var valueBytes = _keyValueTr.GetValueAsByteArray(); var valueReader = new ByteArrayReader(valueBytes); findIDictAction(ctx.GetTransaction(), valueReader, ctx.DictIds); pos++; } }
public static IIndirect <T> LoadImpl(ref SpanReader reader, IReaderCtx readerCtx) { var oid = reader.ReadVInt64(); return(new DBIndirect <T>(((IDBReaderCtx)readerCtx).GetTransaction(), (ulong)oid)); }