------------------------------------------------------ getMerged() retrieves a lower level val for a given key and returns a merged val, based on the configured merge operator.
(key, val []byte, segStart int, base *segmentStack, readOptions ReadOptions)
| 119 | // getMerged() retrieves a lower level val for a given key and returns |
| 120 | // a merged val, based on the configured merge operator. |
| 121 | func (ss *segmentStack) getMerged(key, val []byte, segStart int, |
| 122 | base *segmentStack, readOptions ReadOptions) ([]byte, error) { |
| 123 | var mo MergeOperator |
| 124 | if ss.options != nil { |
| 125 | mo = ss.options.MergeOperator |
| 126 | } |
| 127 | if mo == nil { |
| 128 | return nil, ErrMergeOperatorNil |
| 129 | } |
| 130 | |
| 131 | vLower, err := ss.get(key, segStart, base, readOptions) |
| 132 | if err != nil { |
| 133 | return nil, err |
| 134 | } |
| 135 | |
| 136 | vMerged, ok := mo.FullMerge(key, vLower, [][]byte{val}) |
| 137 | if !ok { |
| 138 | return nil, ErrMergeOperatorFullMergeFailed |
| 139 | } |
| 140 | |
| 141 | return vMerged, nil |
| 142 | } |
| 143 | |
| 144 | // ------------------------------------------------------ |
| 145 |