1 // Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com>
2 // All rights reserved.
4 // Use of this source code is governed by a BSD-style license that can be
5 // found in the LICENSE file.
10 "github.com/syndtr/goleveldb/leveldb/filter"
11 "github.com/syndtr/goleveldb/leveldb/opt"
14 func dupOptions(o *opt.Options) *opt.Options {
15 newo := &opt.Options{}
20 newo.Strict = opt.DefaultStrict
25 func (s *session) setOptions(o *opt.Options) {
27 // Alternative filters.
28 if filters := o.GetAltFilters(); len(filters) > 0 {
29 no.AltFilters = make([]filter.Filter, len(filters))
30 for i, filter := range filters {
31 no.AltFilters[i] = &iFilter{filter}
35 s.icmp = &iComparer{o.GetComparer()}
38 if filter := o.GetFilter(); filter != nil {
39 no.Filter = &iFilter{filter}
42 s.o = &cachedOptions{Options: no}
46 const optCachedLevel = 7
48 type cachedOptions struct {
51 compactionExpandLimit []int
52 compactionGPOverlaps []int
53 compactionSourceLimit []int
54 compactionTableSize []int
55 compactionTotalSize []int64
58 func (co *cachedOptions) cache() {
59 co.compactionExpandLimit = make([]int, optCachedLevel)
60 co.compactionGPOverlaps = make([]int, optCachedLevel)
61 co.compactionSourceLimit = make([]int, optCachedLevel)
62 co.compactionTableSize = make([]int, optCachedLevel)
63 co.compactionTotalSize = make([]int64, optCachedLevel)
65 for level := 0; level < optCachedLevel; level++ {
66 co.compactionExpandLimit[level] = co.Options.GetCompactionExpandLimit(level)
67 co.compactionGPOverlaps[level] = co.Options.GetCompactionGPOverlaps(level)
68 co.compactionSourceLimit[level] = co.Options.GetCompactionSourceLimit(level)
69 co.compactionTableSize[level] = co.Options.GetCompactionTableSize(level)
70 co.compactionTotalSize[level] = co.Options.GetCompactionTotalSize(level)
74 func (co *cachedOptions) GetCompactionExpandLimit(level int) int {
75 if level < optCachedLevel {
76 return co.compactionExpandLimit[level]
78 return co.Options.GetCompactionExpandLimit(level)
81 func (co *cachedOptions) GetCompactionGPOverlaps(level int) int {
82 if level < optCachedLevel {
83 return co.compactionGPOverlaps[level]
85 return co.Options.GetCompactionGPOverlaps(level)
88 func (co *cachedOptions) GetCompactionSourceLimit(level int) int {
89 if level < optCachedLevel {
90 return co.compactionSourceLimit[level]
92 return co.Options.GetCompactionSourceLimit(level)
95 func (co *cachedOptions) GetCompactionTableSize(level int) int {
96 if level < optCachedLevel {
97 return co.compactionTableSize[level]
99 return co.Options.GetCompactionTableSize(level)
102 func (co *cachedOptions) GetCompactionTotalSize(level int) int64 {
103 if level < optCachedLevel {
104 return co.compactionTotalSize[level]
106 return co.Options.GetCompactionTotalSize(level)