diff --git a/src/Nethermind/Nethermind.Db.Rocks/ColumnsDb.cs b/src/Nethermind/Nethermind.Db.Rocks/ColumnsDb.cs index d5a240d1e96..5a83aa1483b 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/ColumnsDb.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/ColumnsDb.cs @@ -18,11 +18,14 @@ public class ColumnsDb : DbOnTheRocks, IColumnsDb where T : struct, Enum private readonly IDictionary _columnDbs = new Dictionary(); public ColumnsDb(string basePath, DbSettings settings, IDbConfig dbConfig, IRocksDbConfigFactory rocksDbConfigFactory, ILogManager logManager, IReadOnlyList keys, IntPtr? sharedCache = null) - : base(basePath, settings, dbConfig, rocksDbConfigFactory, logManager, GetEnumKeys(keys).Select(static (key) => key.ToString()).ToList(), sharedCache: sharedCache) + : this(basePath, settings, dbConfig, rocksDbConfigFactory, logManager, ResolveKeys(keys), sharedCache) { - keys = GetEnumKeys(keys); + } - foreach (T key in keys) + private ColumnsDb(string basePath, DbSettings settings, IDbConfig dbConfig, IRocksDbConfigFactory rocksDbConfigFactory, ILogManager logManager, (IReadOnlyList Keys, IList ColumnNames) keyInfo, IntPtr? sharedCache) + : base(basePath, settings, dbConfig, rocksDbConfigFactory, logManager, keyInfo.ColumnNames, sharedCache: sharedCache) + { + foreach (T key in keyInfo.Keys) { _columnDbs[key] = new ColumnDb(_db, this, key.ToString()!); } @@ -61,6 +64,14 @@ private static IReadOnlyList GetEnumKeys(IReadOnlyList keys) return keys; } + private static (IReadOnlyList Keys, IList ColumnNames) ResolveKeys(IReadOnlyList keys) + { + IReadOnlyList resolvedKeys = GetEnumKeys(keys); + IList columnNames = resolvedKeys.Select(static key => key.ToString()).ToList(); + + return (resolvedKeys, columnNames); + } + protected override void BuildOptions(IRocksDbConfig dbConfig, Options options, IntPtr? sharedCache, IMergeOperator? mergeOperator) { base.BuildOptions(dbConfig, options, sharedCache, mergeOperator);