Example #1
0
        public static void SaveImpl(IWriterCtx writerCtx, object obj)
        {
            var ind = obj as DBIndirect <T>;

            if (ind != null)
            {
                if (ind._transaction != null)
                {
                    if (((IDBWriterCtx)writerCtx).GetTransaction() != ind._transaction)
                    {
                        throw new BTDBException("Transaction does not match when saving nonmaterialized IIndirect");
                    }
                    writerCtx.Writer().WriteVInt64((long)ind._oid);
                    return;
                }
            }
            var ind2 = obj as IIndirect <T>;

            if (ind2 != null)
            {
                writerCtx.WriteNativeObjectPreventInline(ind2.Value);
                return;
            }
            writerCtx.WriteNativeObjectPreventInline(obj);
        }
Example #2
0
        ReadOnlySpan <byte> ValueToByteArray(TValue value, ref SpanWriter writer)
        {
            IWriterCtx ctx = null;

            if (_valueHandler.NeedsCtx())
            {
                ctx = new DBWriterCtx(_tr);
            }
            _valueWriter(value, ref writer, ctx);
            return(writer.GetPersistentSpanAndReset());
        }
Example #3
0
        public void WriteInlineObject(object @object, IWriterCtx writerCtx)
        {
            var ti = GetTableInfoFromType(@object.GetType());

            EnsureClientTypeNotNull(ti);
            IfNeededPersistTableInfo(ti);
            var writer = writerCtx.Writer();

            writer.WriteVUInt32(ti.Id);
            writer.WriteVUInt32(ti.ClientTypeVersion);
            ti.Saver(this, null, writer, @object);
        }
Example #4
0
        ByteBuffer KeyToByteArray(TKey key)
        {
            var        writer = new ByteBufferWriter();
            IWriterCtx ctx    = null;

            if (_keyHandler.NeedsCtx())
            {
                ctx = new DBWriterCtx(_tr, writer);
            }
            _keyWriter(key, writer, ctx);
            return(writer.Data);
        }
Example #5
0
        ReadOnlySpan <byte> KeyToByteArray(TKey key, ref SpanWriter writer)
        {
            writer.WriteBlock(_prefix);
            IWriterCtx ctx = null;

            if (_keyHandler.NeedsCtx())
            {
                ctx = new DBWriterCtx(_tr);
            }
            _keyWriter(key, ref writer, ctx);
            return(writer.GetPersistentSpanAndReset());
        }
Example #6
0
        ReadOnlySpan <byte> ValueToByteArray(TValue value)
        {
            var        writer = new SpanWriter();
            IWriterCtx ctx    = null;

            if (_valueHandler.NeedsCtx())
            {
                ctx = new DBWriterCtx(_tr);
            }
            _valueWriter(value, ref writer, ctx);
            return(writer.GetSpan());
        }
Example #7
0
        ByteBuffer ValueToByteArray(TValue value)
        {
            var        writer = new ByteBufferWriter();
            IWriterCtx ctx    = null;

            if (_valueHandler.NeedsCtx())
            {
                ctx = new DBWriterCtx(_tr, writer);
            }
            _valueWriter(value, writer, ctx);
            return(writer.Data);
        }
Example #8
0
        ReadOnlySpan <byte> KeyToByteArray(TKey key)
        {
            var        writer = new SpanWriter();
            IWriterCtx ctx    = null;

            if (_keyHandler.NeedsCtx())
            {
                ctx = new DBWriterCtx(_tr);
            }
            writer.WriteBlock(_prefix);
            _keyWriter(key, ref writer, ctx);
            return(writer.GetSpan());
        }
Example #9
0
        // ReSharper disable once UnusedMember.Global
        public static void DoSave(IWriterCtx ctx, IOrderedSet <TKey>?dictionary, int cfgId)
        {
            var writerCtx = (IDBWriterCtx)ctx;

            if (!(dictionary is ODBSet <TKey> goodDict))
            {
                var tr = writerCtx.GetTransaction();
                var id = tr.AllocateDictionaryId();
                goodDict = new ODBSet <TKey>(tr, (ODBDictionaryConfiguration)writerCtx.FindInstance(cfgId), id);
                if (dictionary != null)
                {
                    foreach (var pair in dictionary)
                    {
                        goodDict.Add(pair);
                    }
                }
            }
            ctx.Writer().WriteVUInt64(goodDict._id);
        }
Example #10
0
        public static void DoSave(ref SpanWriter writer, IWriterCtx ctx, IDictionary <TKey, TValue>?dictionary, int cfgId)
        {
            var writerCtx = (IDBWriterCtx)ctx;

            if (!(dictionary is ODBDictionary <TKey, TValue> goodDict))
            {
                var tr = writerCtx.GetTransaction();
                var id = tr.AllocateDictionaryId();
                goodDict = new ODBDictionary <TKey, TValue>(tr, ODBDictionaryConfiguration.Get(cfgId), id);
                if (dictionary != null)
                {
                    foreach (var pair in dictionary)
                    {
                        goodDict.Add(pair.Key, pair.Value);
                    }
                }
            }

            writer.WriteVUInt64(goodDict._id);
        }
Example #11
0
        public static void DoSave(IWriterCtx ctx, IDictionary <TKey, TValue> dictionary, int cfgId)
        {
            var dbctx    = (IDBWriterCtx)ctx;
            var goodDict = dictionary as ODBDictionary <TKey, TValue>;

            if (goodDict == null)
            {
                var tr = dbctx.GetTransaction();
                var id = tr.AllocateDictionaryId();
                goodDict = new ODBDictionary <TKey, TValue>(tr, (ODBDictionaryConfiguration)dbctx.FindInstance(cfgId), id);
                if (dictionary != null)
                {
                    foreach (var pair in dictionary)
                    {
                        goodDict.Add(pair.Key, pair.Value);
                    }
                }
            }
            ctx.Writer().WriteVUInt64(goodDict._id);
        }
Example #12
0
        public static void SaveImpl(ref SpanWriter writer, IWriterCtx writerCtx, object obj)
        {
            if (obj is DBIndirect <T> ind)
            {
                if (ind._transaction != null)
                {
                    if (((IDBWriterCtx)writerCtx).GetTransaction() != ind._transaction)
                    {
                        throw new BTDBException("Transaction does not match when saving nonmaterialized IIndirect");
                    }
                    writer.WriteVInt64((long)ind._oid);
                    return;
                }
            }

            if (obj is IIndirect <T> ind2)
            {
                writerCtx.WriteNativeObjectPreventInline(ref writer, ind2.Value);
                return;
            }
            writerCtx.WriteNativeObjectPreventInline(ref writer, obj);
        }