71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
//go:build mysql
|
|
// +build mysql
|
|
|
|
package mysql
|
|
|
|
import (
|
|
"database/sql"
|
|
"strings"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
t "github.com/tinode/chat/server/store/types"
|
|
)
|
|
|
|
func (a *adapter) ThirdPartyConfig(group string, keys ...string) (map[string]string, error) {
|
|
db := a.registryDB
|
|
if db == nil {
|
|
db = a.db
|
|
}
|
|
if db == nil {
|
|
return nil, t.ErrInternal
|
|
}
|
|
group = strings.TrimSpace(group)
|
|
if group == "" {
|
|
return nil, t.ErrMalformed
|
|
}
|
|
|
|
ctx, cancel := a.getContext()
|
|
if cancel != nil {
|
|
defer cancel()
|
|
}
|
|
|
|
rows := []struct {
|
|
Key string `db:"key"`
|
|
Value string `db:"value"`
|
|
}{}
|
|
var err error
|
|
if len(keys) == 0 {
|
|
err = db.SelectContext(ctx, &rows, `SELECT `+"`key`"+`, value FROM hg_sys_config
|
|
WHERE `+"`group`"+`=? AND status=1`, group)
|
|
} else {
|
|
normalized := make([]string, 0, len(keys))
|
|
for _, key := range keys {
|
|
if key = strings.TrimSpace(key); key != "" {
|
|
normalized = append(normalized, key)
|
|
}
|
|
}
|
|
if len(normalized) == 0 {
|
|
return map[string]string{}, nil
|
|
}
|
|
query, args, inErr := sqlx.In(`SELECT `+"`key`"+`, value FROM hg_sys_config
|
|
WHERE `+"`group`"+`=? AND status=1 AND `+"`key`"+` IN (?)`, group, normalized)
|
|
if inErr != nil {
|
|
return nil, inErr
|
|
}
|
|
query = db.Rebind(query)
|
|
err = db.SelectContext(ctx, &rows, query, args...)
|
|
}
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
return map[string]string{}, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
result := make(map[string]string, len(rows))
|
|
for _, row := range rows {
|
|
result[row.Key] = row.Value
|
|
}
|
|
return result, nil
|
|
}
|