protected RocksDb(IntPtr handle, DbOptions dbOptions, ColumnFamilies columnFamilyOptions, Dictionary <string, ColumnFamilyHandleInternal> cfHandleMap = null) { this.Handle = handle; if (dbOptions != null) { References.Options = dbOptions.References; } if (columnFamilyOptions != null) { References.CfOptions = columnFamilyOptions.Select(cfd => cfd.Options.References).ToArray(); } this.columnFamilies = cfHandleMap; }
public static RocksDb OpenReadOnly(DbOptions options, string path, ColumnFamilies columnFamilies, bool errIfLogFileExists) { string[] cfnames = columnFamilies.Names.ToArray(); IntPtr[] cfoptions = columnFamilies.OptionHandles.ToArray(); IntPtr[] cfhandles = new IntPtr[cfnames.Length]; IntPtr db = Native.Instance.rocksdb_open_for_read_only_column_families(options.Handle, path, cfnames.Length, cfnames, cfoptions, cfhandles, errIfLogFileExists); var cfHandleMap = new Dictionary <string, ColumnFamilyHandleInternal>(); foreach (var pair in cfnames.Zip(cfhandles.Select(cfh => new ColumnFamilyHandleInternal(cfh)), (name, cfh) => new { Name = name, Handle = cfh })) { cfHandleMap.Add(pair.Name, pair.Handle); } return(new RocksDb(db, optionsReferences: options.References, cfOptionsRefs: columnFamilies.Select(cfd => cfd.Options.References).ToArray(), columnFamilies: cfHandleMap)); }