Skip to content

Commit 157edff

Browse files
authored
feat: support to select database (#27)
* update dep * support to get databases and tables * feat(dbserver): support dynamic database selection - Introduce getClientWithDatabase method to allow querying specific databases - Implement dbNameCache to store and retrieve database names - Update Query method to use getClientWithDatabase with query-specific key - Modify getClient to use getClientWithDatabase with default database --------- Co-authored-by: Rick <[email protected]>
1 parent f9cd174 commit 157edff

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

pkg/data_query.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727

2828
func (s *dbserver) Query(ctx context.Context, query *server.DataQuery) (result *server.DataQueryResult, err error) {
2929
var db *gorm.DB
30-
if db, err = s.getClient(ctx); err != nil {
30+
if db, err = s.getClientWithDatabase(ctx, query.Key); err != nil {
3131
return
3232
}
3333

pkg/server.go

+17-8
Original file line numberDiff line numberDiff line change
@@ -94,32 +94,41 @@ func createDB(user, password, address, database, driver string) (db *gorm.DB, er
9494
}
9595

9696
var dbCache map[string]*gorm.DB = make(map[string]*gorm.DB)
97+
var dbNameCache map[string]string = make(map[string]string)
9798

98-
func (s *dbserver) getClient(ctx context.Context) (db *gorm.DB, err error) {
99+
func (s *dbserver) getClientWithDatabase(ctx context.Context, dbName string) (db *gorm.DB, err error) {
99100
store := remote.GetStoreFromContext(ctx)
100101
if store == nil {
101102
err = errors.New("no connect to database")
102103
} else {
103-
var ok bool
104-
if db, ok = dbCache[store.Name]; ok && db != nil {
105-
return
104+
database := dbName
105+
if database == "" {
106+
if v, ok := store.Properties["database"]; ok && v != "" {
107+
database = v
108+
}
106109
}
107110

108-
database := "atest"
109111
driver := "mysql"
110-
if v, ok := store.Properties["database"]; ok && v != "" {
111-
database = v
112-
}
113112
if v, ok := store.Properties["driver"]; ok && v != "" {
114113
driver = v
115114
}
116115

116+
var ok bool
117+
if db, ok = dbCache[store.Name]; ok && db != nil && dbNameCache[store.Name] == database {
118+
return
119+
}
120+
117121
if db, err = createDB(store.Username, store.Password, store.URL, database, driver); err == nil {
118122
dbCache[store.Name] = db
123+
dbNameCache[store.Name] = database
119124
}
120125
}
121126
return
122127
}
128+
func (s *dbserver) getClient(ctx context.Context) (db *gorm.DB, err error) {
129+
db, err = s.getClientWithDatabase(ctx, "")
130+
return
131+
}
123132

124133
func (s *dbserver) ListTestSuite(ctx context.Context, _ *server.Empty) (suites *remote.TestSuites, err error) {
125134
items := make([]*TestSuite, 0)

0 commit comments

Comments
 (0)