static private BuildKeyForTableVersions ( uint tableId, uint tableVersion ) : byte[] | ||
tableId | uint | |
tableVersion | uint | |
return | byte[] |
void PersistTableInfo(TableInfo tableInfo) { _keyValueTrProtector.Start(); if (tableInfo.LastPersistedVersion != tableInfo.ClientTypeVersion) { if (tableInfo.LastPersistedVersion <= 0) { _keyValueTr.SetKeyPrefix(ObjectDB.TableNamesPrefix); if (_keyValueTr.CreateKey(BuildKeyFromOid(tableInfo.Id))) { using (var writer = new KeyValueDBValueWriter(_keyValueTr)) { writer.WriteString(tableInfo.Name); } } } _keyValueTr.SetKeyPrefix(ObjectDB.TableVersionsPrefix); if (_keyValueTr.CreateKey(TableInfo.BuildKeyForTableVersions(tableInfo.Id, tableInfo.ClientTypeVersion))) { var tableVersionInfo = tableInfo.ClientTableVersionInfo; using (var writer = new KeyValueDBValueWriter(_keyValueTr)) { tableVersionInfo.Save(writer); } } } if (tableInfo.NeedStoreSingletonOid) { _keyValueTr.SetKeyPrefix(ObjectDB.TableSingletonsPrefix); _keyValueTr.CreateOrUpdateKeyValue(BuildKeyFromOid(tableInfo.Id), BuildKeyFromOid((ulong)tableInfo.SingletonOid)); } }
TableVersionInfo ITableInfoResolver.LoadTableVersionInfo(uint id, uint version, string tableName) { using (var tr = _keyValueDB.StartTransaction()) { tr.SetKeyPrefix(TableVersionsPrefix); var key = TableInfo.BuildKeyForTableVersions(id, version); if (!tr.FindExactKey(key)) { throw new BTDBException($"Missing TableVersionInfo Id:{id} Version:{version}"); } return(TableVersionInfo.Load(new KeyValueDBValueReader(tr), _objectDB.FieldHandlerFactory, tableName)); } }
uint ITableInfoResolver.GetLastPersistedVersion(uint id) { using (var tr = _keyValueDB.StartTransaction()) { tr.SetKeyPrefix(TableVersionsPrefix); var key = TableInfo.BuildKeyForTableVersions(id, uint.MaxValue); if (tr.Find(ByteBuffer.NewSync(key)) == FindResult.NotFound) { return(0); } var key2 = tr.GetKeyAsByteArray(); var ofs = PackUnpack.LengthVUInt(id); if (key2.Length < ofs) { return(0); } if (BitArrayManipulation.CompareByteArray(key, ofs, key2, ofs) != 0) { return(0); } return(checked ((uint)PackUnpack.UnpackVUInt(key2, ref ofs))); } }