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;
 }
示例#2
0
        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));
        }