-
Notifications
You must be signed in to change notification settings - Fork 0
/
tables.go
69 lines (57 loc) · 1.88 KB
/
tables.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
Copyright 2021 Erigon contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package kv
type CmpFunc func(k1, k2, v1, v2 []byte) int
type TableCfg map[string]TableCfgItem
type Bucket string
type DBI uint
type TableFlags uint
const (
Default TableFlags = 0x00
ReverseKey TableFlags = 0x02
DupSort TableFlags = 0x04
IntegerKey TableFlags = 0x08
IntegerDup TableFlags = 0x20
ReverseDup TableFlags = 0x40
)
const (
Sequence = "Sequence" // tbl_name -> seq_u64
)
var DefaultTableCfg = TableCfg{
Sequence: {},
}
func MergeTableCfg(cfgs ...TableCfg) TableCfg {
res := make(TableCfg)
for _, cfg := range cfgs {
for k, v := range cfg {
res[k] = v
}
}
return res
}
type TableCfgItem struct {
Flags TableFlags
// AutoDupSortKeysConversion - enables some keys transformation - to change db layout without changing app code.
// Use it wisely - it helps to do experiments with DB format faster, but better reduce amount of Magic in app.
// If good DB format found, push app code to accept this format and then disable this property.
AutoDupSortKeysConversion bool
IsDeprecated bool
DBI DBI
// DupFromLen - if user provide key of this length, then next transformation applied:
// v = append(k[DupToLen:], v...)
// k = k[:DupToLen]
// And opposite at retrieval
// Works only if AutoDupSortKeysConversion enabled
DupFromLen int
DupToLen int
}