added command with interactive dialog
Some checks failed
ci / plugin-ci (push) Has been cancelled

This commit is contained in:
Felipe M 2024-08-08 15:52:29 +02:00
parent 09c4f13f2c
commit 2d962d18d2
Signed by: fmartingr
GPG key ID: CCFBC5637D4000A8
16 changed files with 520 additions and 89 deletions

79
server/sqlstore/store.go Normal file
View file

@ -0,0 +1,79 @@
package sqlstore
import (
"database/sql"
sq "github.com/Masterminds/squirrel"
"github.com/jmoiron/sqlx"
"github.com/mattermost/mattermost/server/public/model"
)
type Source interface {
GetMasterDB() (*sql.DB, error)
GetReplicaDB() (*sql.DB, error)
DriverName() string
}
type Logger interface {
Error(message string, keyValuePairs ...interface{})
Warn(message string, keyValuePairs ...interface{})
Info(message string, keyValuePairs ...interface{})
Debug(message string, keyValuePairs ...interface{})
}
type SQLStore struct {
src Source
master *sqlx.DB
replica *sqlx.DB
masterBuilder sq.StatementBuilderType
replicaBuilder sq.StatementBuilderType
logger Logger
}
// New constructs a new instance of SQLStore.
func New(src Source, logger Logger) (*SQLStore, error) {
var master, replica *sqlx.DB
masterDB, err := src.GetMasterDB()
if err != nil {
return nil, err
}
master = sqlx.NewDb(masterDB, src.DriverName())
replicaDB, err := src.GetReplicaDB()
if err != nil {
return nil, err
}
replica = sqlx.NewDb(replicaDB, src.DriverName())
masterBuilder := sq.StatementBuilder.PlaceholderFormat(sq.Question)
if src.DriverName() == model.DatabaseDriverPostgres {
masterBuilder = masterBuilder.PlaceholderFormat(sq.Dollar)
}
if src.DriverName() == model.DatabaseDriverMysql {
master.MapperFunc(func(s string) string { return s })
}
masterBuilder = masterBuilder.RunWith(master)
replicaBuilder := sq.StatementBuilder.PlaceholderFormat(sq.Question)
if src.DriverName() == model.DatabaseDriverPostgres {
replicaBuilder = replicaBuilder.PlaceholderFormat(sq.Dollar)
}
if src.DriverName() == model.DatabaseDriverMysql {
replica.MapperFunc(func(s string) string { return s })
}
replicaBuilder = replicaBuilder.RunWith(replica)
return &SQLStore{
src,
master,
replica,
masterBuilder,
replicaBuilder,
logger,
}, nil
}