@@ -27,28 +27,33 @@ import (
2727type InspectDatabaseOption = options.Option [inspectDatabaseConfig ]
2828
2929type inspectDatabaseConfig struct {
30- statRecorder func ([]byte , common.StorageSize ) bool
31- isMeta func ([]byte ) bool
32- statsTransformer func ([][]string ) [][]string
30+ statRecorders [] func ([]byte , common.StorageSize ) bool
31+ isMetas [] func ([]byte ) bool
32+ statsTransformers [] func ([][]string ) [][]string
3333}
3434
3535func (c inspectDatabaseConfig ) recordStat (key []byte , size common.StorageSize ) bool {
36- if r := c .statRecorder ; r != nil {
37- return r (key , size )
36+ matched := false
37+ for _ , f := range c .statRecorders {
38+ if f (key , size ) {
39+ matched = true
40+ }
3841 }
39- return false
42+ return matched
4043}
4144
4245func (c inspectDatabaseConfig ) isMetadata (key []byte ) bool {
43- if m := c .isMeta ; m != nil {
44- return m (key )
46+ for _ , f := range c .isMetas {
47+ if f (key ) {
48+ return true
49+ }
4550 }
4651 return false
4752}
4853
4954func (c inspectDatabaseConfig ) transformStats (stats [][]string ) [][]string {
50- if f := c . statsTransformer ; f != nil {
51- return f (stats )
55+ for _ , f := range c . statsTransformers {
56+ stats = f (stats )
5257 }
5358 return stats
5459}
@@ -63,7 +68,7 @@ func newInspectOpt(fn func(*inspectDatabaseConfig)) InspectDatabaseOption {
6368// stopping further matches.
6469func WithDatabaseStatRecorder (rec func (key []byte , size common.StorageSize ) bool ) InspectDatabaseOption {
6570 return newInspectOpt (func (c * inspectDatabaseConfig ) {
66- c .statRecorder = rec
71+ c .statRecorders = append ( c . statRecorders , rec )
6772 })
6873}
6974
@@ -75,7 +80,7 @@ type DatabaseStat = stat
7580// being counted with the metadata statistic i.f.f. the function returns true.
7681func WithDatabaseMetadataKeys (isMetadata func (key []byte ) bool ) InspectDatabaseOption {
7782 return newInspectOpt (func (c * inspectDatabaseConfig ) {
78- c .isMeta = isMetadata
83+ c .isMetas = append ( c . isMetas , isMetadata )
7984 })
8085}
8186
@@ -85,6 +90,6 @@ func WithDatabaseMetadataKeys(isMetadata func(key []byte) bool) InspectDatabaseO
8590// Each row contains 4 columns: database, category, size and count.
8691func WithDatabaseStatsTransformer (transform func (rows [][]string ) [][]string ) InspectDatabaseOption {
8792 return newInspectOpt (func (c * inspectDatabaseConfig ) {
88- c .statsTransformer = transform
93+ c .statsTransformers = append ( c . statsTransformers , transform )
8994 })
9095}
0 commit comments