11package config
22
3+ import "context"
4+
5+ type AccessListProvider func (ctx context.Context ) []AccessConfig
6+
7+ var accessListProviderMap = make (map [string ]AccessListProvider )
8+
9+ func RegAccessListProvider (name string , provider AccessListProvider ) {
10+ accessListProviderMap [name ] = provider
11+ }
12+
13+ type RequestListProvider func (ctx context.Context ) []Request
14+
15+ var requestListProviderMap = make (map [string ]RequestListProvider )
16+
17+ func RegRequestListProvider (name string , provider RequestListProvider ) {
18+ requestListProviderMap [name ] = provider
19+ }
20+
21+ type DbMetaProvider func (ctx context.Context ) []Table
22+
23+ var dbMetaProviderMap = make (map [string ]DbMetaProvider )
24+
25+ func RegDbMetaProvider (name string , provider DbMetaProvider ) {
26+ dbMetaProviderMap [name ] = provider
27+ }
28+
329type Config struct {
430 Access * Access
531
@@ -18,7 +44,11 @@ type Config struct {
1844
1945 DbMeta * DBMeta
2046
21- AccessList []AccessConfig // todo to access
47+ AccessListProvider string
48+ RequestListProvider string
49+ DbMetaProvider string
50+
51+ accessList []AccessConfig // todo to access
2252
2353 RequestConfig * RequestConfig
2454
@@ -28,6 +58,9 @@ type Config struct {
2858func New () * Config {
2959 a := & Config {}
3060 a .Access = NewAccess ()
61+ a .AccessListProvider = "db"
62+ a .RequestListProvider = "db"
63+ a .DbMetaProvider = "db"
3164
3265 a .MaxTreeWidth = 5
3366 a .MaxTreeDeep = 5
@@ -47,14 +80,30 @@ func (c *Config) Load() {
4780
4881 c .Access .accessConfigMap = make (map [string ]AccessConfig )
4982
50- for _ , access := range c . AccessList {
83+ ctx := context . Background ()
5184
52- name := access .Alias
53- if name == "" {
54- name = access .Name
85+ accessListProvider := accessListProviderMap [c .AccessListProvider ]
86+
87+ if accessListProvider != nil {
88+ c .accessList = accessListProvider (ctx )
89+ for _ , access := range c .accessList {
90+ name := access .Alias
91+ if name == "" {
92+ name = access .Name
93+ }
94+ c .Access .accessConfigMap [access .Alias ] = access
5595 }
96+ }
97+
98+ requestListProvider := requestListProviderMap [c .RequestListProvider ]
99+ if requestListProvider != nil {
100+ requestList := requestListProvider (ctx )
101+ c .RequestConfig = NewRequestConfig (requestList )
102+ }
56103
57- c .Access .accessConfigMap [access .Alias ] = access
104+ dbMetaProvider := dbMetaProviderMap [c .DbMetaProvider ]
105+ if dbMetaProvider != nil {
106+ c .DbMeta = NewDbMeta (dbMetaProvider (ctx ))
58107 }
59108
60109 c .queryConfig = & QueryConfig {
0 commit comments