Replace remaining GetMaster() queries (#19545)
There are still some remaining which access the raw DB struct. There will be a separate PR to clean those up. ```release-note NONE ```
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
256427f7f9
Коммит
678c7d3b8c
2
Makefile
2
Makefile
@@ -275,7 +275,7 @@ i18n-check: ## Exit on empty translation strings and translation source strings
|
||||
|
||||
store-mocks: ## Creates mock files.
|
||||
$(GO) install github.com/vektra/mockery/...@v1.1.2
|
||||
$(GOBIN)/mockery -dir store -all -output store/storetest/mocks -note 'Regenerate this file using `make store-mocks`.'
|
||||
$(GOBIN)/mockery -dir store -name ".*Store" -output store/storetest/mocks -note 'Regenerate this file using `make store-mocks`.'
|
||||
|
||||
telemetry-mocks: ## Creates mock files.
|
||||
$(GO) install github.com/vektra/mockery/...@v1.1.2
|
||||
|
||||
@@ -124,10 +124,10 @@ func TestGetSidebarCategories(t *testing.T) {
|
||||
|
||||
// Temporarily renaming a table to force a DB error.
|
||||
sqlStore := mainHelper.GetSQLStore()
|
||||
_, err := sqlStore.GetMaster().Exec("ALTER TABLE SidebarCategories RENAME TO SidebarCategoriesTest")
|
||||
_, err := sqlStore.GetMasterX().Exec("ALTER TABLE SidebarCategories RENAME TO SidebarCategoriesTest")
|
||||
require.NoError(t, err)
|
||||
defer func() {
|
||||
_, err := sqlStore.GetMaster().Exec("ALTER TABLE SidebarCategoriesTest RENAME TO SidebarCategories")
|
||||
_, err := sqlStore.GetMasterX().Exec("ALTER TABLE SidebarCategoriesTest RENAME TO SidebarCategories")
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
|
||||
|
||||
@@ -126,12 +126,12 @@ func TestEnsureInstallationDate(t *testing.T) {
|
||||
for _, tc := range tt {
|
||||
t.Run(tc.Name, func(t *testing.T) {
|
||||
sqlStore := th.GetSqlStore()
|
||||
sqlStore.GetMaster().Exec("DELETE FROM Users")
|
||||
sqlStore.GetMasterX().Exec("DELETE FROM Users")
|
||||
|
||||
for _, createAt := range tc.UsersCreationDates {
|
||||
user := th.CreateUser()
|
||||
user.CreateAt = createAt
|
||||
sqlStore.GetMaster().Exec("UPDATE Users SET CreateAt = :CreateAt WHERE Id = :UserId", map[string]interface{}{"CreateAt": createAt, "UserId": user.Id})
|
||||
sqlStore.GetMasterX().Exec("UPDATE Users SET CreateAt = ? WHERE Id = ?", createAt, user.Id)
|
||||
}
|
||||
|
||||
if tc.PrevInstallationDate == nil {
|
||||
@@ -156,7 +156,7 @@ func TestEnsureInstallationDate(t *testing.T) {
|
||||
assert.True(t, *tc.ExpectedInstallationDate <= value && *tc.ExpectedInstallationDate+1000 >= value)
|
||||
}
|
||||
|
||||
sqlStore.GetMaster().Exec("DELETE FROM Users")
|
||||
sqlStore.GetMasterX().Exec("DELETE FROM Users")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -560,34 +560,34 @@ func (th *TestHelper) ConfigureInbucketMail() {
|
||||
|
||||
func (*TestHelper) ResetRoleMigration() {
|
||||
sqlStore := mainHelper.GetSQLStore()
|
||||
if _, err := sqlStore.GetMaster().Exec("DELETE from Roles"); err != nil {
|
||||
if _, err := sqlStore.GetMasterX().Exec("DELETE from Roles"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
mainHelper.GetClusterInterface().SendClearRoleCacheMessage()
|
||||
|
||||
if _, err := sqlStore.GetMaster().Exec("DELETE from Systems where Name = :Name", map[string]interface{}{"Name": model.AdvancedPermissionsMigrationKey}); err != nil {
|
||||
if _, err := sqlStore.GetMasterX().Exec("DELETE from Systems where Name = ?", model.AdvancedPermissionsMigrationKey); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func (*TestHelper) ResetEmojisMigration() {
|
||||
sqlStore := mainHelper.GetSQLStore()
|
||||
if _, err := sqlStore.GetMaster().Exec("UPDATE Roles SET Permissions=REPLACE(Permissions, ' create_emojis', '') WHERE builtin=True"); err != nil {
|
||||
if _, err := sqlStore.GetMasterX().Exec("UPDATE Roles SET Permissions=REPLACE(Permissions, ' create_emojis', '') WHERE builtin=True"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if _, err := sqlStore.GetMaster().Exec("UPDATE Roles SET Permissions=REPLACE(Permissions, ' delete_emojis', '') WHERE builtin=True"); err != nil {
|
||||
if _, err := sqlStore.GetMasterX().Exec("UPDATE Roles SET Permissions=REPLACE(Permissions, ' delete_emojis', '') WHERE builtin=True"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if _, err := sqlStore.GetMaster().Exec("UPDATE Roles SET Permissions=REPLACE(Permissions, ' delete_others_emojis', '') WHERE builtin=True"); err != nil {
|
||||
if _, err := sqlStore.GetMasterX().Exec("UPDATE Roles SET Permissions=REPLACE(Permissions, ' delete_others_emojis', '') WHERE builtin=True"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
mainHelper.GetClusterInterface().SendClearRoleCacheMessage()
|
||||
|
||||
if _, err := sqlStore.GetMaster().Exec("DELETE from Systems where Name = :Name", map[string]interface{}{"Name": EmojisPermissionsMigrationKey}); err != nil {
|
||||
if _, err := sqlStore.GetMasterX().Exec("DELETE from Systems where Name = ?", EmojisPermissionsMigrationKey); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,12 +41,13 @@ func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model
|
||||
store.GetMaster().Db = handle
|
||||
store.SetMasterX(handle)
|
||||
|
||||
wrapper := sqlstore.NewStoreTestWrapper(store)
|
||||
// Testing with a handful of stores
|
||||
storetest.TestPostStore(p.t, store, store)
|
||||
storetest.TestUserStore(p.t, store, store)
|
||||
storetest.TestPostStore(p.t, store, wrapper)
|
||||
storetest.TestUserStore(p.t, store, wrapper)
|
||||
storetest.TestTeamStore(p.t, store)
|
||||
storetest.TestChannelStore(p.t, store, store)
|
||||
storetest.TestBotStore(p.t, store, store)
|
||||
storetest.TestChannelStore(p.t, store, wrapper)
|
||||
storetest.TestBotStore(p.t, store, wrapper)
|
||||
|
||||
store.GetMaster().Db.Close()
|
||||
}
|
||||
|
||||
@@ -821,7 +821,8 @@ func TestCreatePost(t *testing.T) {
|
||||
|
||||
sqlStore := th.GetSqlStore()
|
||||
sql := fmt.Sprintf("select count(*) from Posts where Id = '%[1]s' or OriginalId = '%[1]s';", previewPost.Id)
|
||||
val, err2 := sqlStore.GetMaster().SelectInt(sql)
|
||||
var val int64
|
||||
err2 := sqlStore.GetMasterX().Get(&val, sql)
|
||||
require.NoError(t, err2)
|
||||
|
||||
require.EqualValues(t, int64(1), val)
|
||||
|
||||
@@ -927,11 +927,11 @@ func TestPermanentDeleteUser(t *testing.T) {
|
||||
})
|
||||
assert.Nil(t, err)
|
||||
|
||||
var bots1 []*model.Bot
|
||||
var bots2 []*model.Bot
|
||||
bots1 := []*model.Bot{}
|
||||
bots2 := []*model.Bot{}
|
||||
|
||||
sqlStore := mainHelper.GetSQLStore()
|
||||
_, err1 := sqlStore.GetMaster().Select(&bots1, "SELECT * FROM Bots")
|
||||
err1 := sqlStore.GetMasterX().Select(&bots1, "SELECT * FROM Bots")
|
||||
assert.NoError(t, err1)
|
||||
assert.Equal(t, 1, len(bots1))
|
||||
|
||||
@@ -942,7 +942,7 @@ func TestPermanentDeleteUser(t *testing.T) {
|
||||
err = th.App.PermanentDeleteUser(th.Context, retUser1)
|
||||
assert.Nil(t, err)
|
||||
|
||||
_, err1 = sqlStore.GetMaster().Select(&bots2, "SELECT * FROM Bots")
|
||||
err1 = sqlStore.GetMasterX().Select(&bots2, "SELECT * FROM Bots")
|
||||
assert.NoError(t, err1)
|
||||
assert.Equal(t, 0, len(bots2))
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ func StoreTestWithSqlStore(t *testing.T, f func(*testing.T, store.Store, storete
|
||||
if testing.Short() {
|
||||
t.SkipNow()
|
||||
}
|
||||
f(t, st.Store, st.SqlStore)
|
||||
f(t, st.Store, sqlstore.NewStoreTestWrapper(st.SqlStore))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ type relationalCheckConfig struct {
|
||||
}
|
||||
|
||||
func getOrphanedRecords(ss *SqlStore, cfg relationalCheckConfig) ([]model.OrphanedRecord, error) {
|
||||
var records []model.OrphanedRecord
|
||||
records := []model.OrphanedRecord{}
|
||||
|
||||
sub := ss.getQueryBuilder().
|
||||
Select("TRUE").
|
||||
@@ -54,8 +54,7 @@ func getOrphanedRecords(ss *SqlStore, cfg relationalCheckConfig) ([]model.Orphan
|
||||
|
||||
query, args, _ := main.ToSql()
|
||||
|
||||
_, err := ss.GetMaster().Select(&records, query, args...)
|
||||
|
||||
err := ss.GetMasterX().Select(&records, query, args...)
|
||||
return records, err
|
||||
}
|
||||
|
||||
|
||||
@@ -14,10 +14,32 @@ import (
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
|
||||
"github.com/mattermost/gorp"
|
||||
"github.com/mattermost/mattermost-server/v6/model"
|
||||
"github.com/mattermost/mattermost-server/v6/shared/mlog"
|
||||
"github.com/mattermost/mattermost-server/v6/store/storetest"
|
||||
)
|
||||
|
||||
type StoreTestWrapper struct {
|
||||
orig *SqlStore
|
||||
}
|
||||
|
||||
func NewStoreTestWrapper(orig *SqlStore) *StoreTestWrapper {
|
||||
return &StoreTestWrapper{orig}
|
||||
}
|
||||
|
||||
func (w *StoreTestWrapper) GetMaster() *gorp.DbMap {
|
||||
return w.orig.GetMaster()
|
||||
}
|
||||
|
||||
func (w *StoreTestWrapper) GetMasterX() storetest.SqlXExecutor {
|
||||
return w.orig.GetMasterX()
|
||||
}
|
||||
|
||||
func (w *StoreTestWrapper) DriverName() string {
|
||||
return w.orig.DriverName()
|
||||
}
|
||||
|
||||
// sqlxExecutor exposes sqlx operations. It is used to enable some internal store methods to
|
||||
// accept both transactions (*sqlxTxWrapper) and common db handlers (*sqlxDbWrapper).
|
||||
type sqlxExecutor interface {
|
||||
@@ -106,6 +128,18 @@ func (w *sqlxDBWrapper) Exec(query string, args ...interface{}) (sql.Result, err
|
||||
return w.ExecRaw(query, args...)
|
||||
}
|
||||
|
||||
func (w *sqlxDBWrapper) ExecNoTimeout(query string, args ...interface{}) (sql.Result, error) {
|
||||
query = w.DB.Rebind(query)
|
||||
|
||||
if w.trace {
|
||||
defer func(then time.Time) {
|
||||
printArgs(query, time.Since(then), args)
|
||||
}(time.Now())
|
||||
}
|
||||
|
||||
return w.DB.ExecContext(context.Background(), query, args...)
|
||||
}
|
||||
|
||||
// ExecRaw is like Exec but without any rebinding of params. You need to pass
|
||||
// the exact param types of your target database.
|
||||
func (w *sqlxDBWrapper) ExecRaw(query string, args ...interface{}) (sql.Result, error) {
|
||||
|
||||
@@ -354,7 +354,8 @@ func (ss *SqlStore) DriverName() string {
|
||||
}
|
||||
|
||||
func (ss *SqlStore) GetCurrentSchemaVersion() string {
|
||||
version, _ := ss.GetMaster().SelectStr("SELECT Value FROM Systems WHERE Name='Version'")
|
||||
var version string
|
||||
_ = ss.GetMasterX().Get(&version, "SELECT Value FROM Systems WHERE Name='Version'")
|
||||
return version
|
||||
}
|
||||
|
||||
@@ -540,7 +541,8 @@ func (ss *SqlStore) MarkSystemRanUnitTests() {
|
||||
|
||||
func (ss *SqlStore) DoesTableExist(tableName string) bool {
|
||||
if ss.DriverName() == model.DatabaseDriverPostgres {
|
||||
count, err := ss.GetMaster().SelectInt(
|
||||
var count int64
|
||||
err := ss.GetMasterX().Get(&count,
|
||||
`SELECT count(relname) FROM pg_class WHERE relname=$1`,
|
||||
strings.ToLower(tableName),
|
||||
)
|
||||
@@ -552,8 +554,8 @@ func (ss *SqlStore) DoesTableExist(tableName string) bool {
|
||||
return count > 0
|
||||
|
||||
} else if ss.DriverName() == model.DatabaseDriverMysql {
|
||||
|
||||
count, err := ss.GetMaster().SelectInt(
|
||||
var count int64
|
||||
err := ss.GetMasterX().Get(&count,
|
||||
`SELECT
|
||||
COUNT(0) AS table_exists
|
||||
FROM
|
||||
@@ -579,7 +581,8 @@ func (ss *SqlStore) DoesTableExist(tableName string) bool {
|
||||
|
||||
func (ss *SqlStore) DoesColumnExist(tableName string, columnName string) bool {
|
||||
if ss.DriverName() == model.DatabaseDriverPostgres {
|
||||
count, err := ss.GetMaster().SelectInt(
|
||||
var count int64
|
||||
err := ss.GetMasterX().Get(&count,
|
||||
`SELECT COUNT(0)
|
||||
FROM pg_attribute
|
||||
WHERE attrelid = $1::regclass
|
||||
@@ -600,8 +603,8 @@ func (ss *SqlStore) DoesColumnExist(tableName string, columnName string) bool {
|
||||
return count > 0
|
||||
|
||||
} else if ss.DriverName() == model.DatabaseDriverMysql {
|
||||
|
||||
count, err := ss.GetMaster().SelectInt(
|
||||
var count int64
|
||||
err := ss.GetMasterX().Get(&count,
|
||||
`SELECT
|
||||
COUNT(0) AS column_exists
|
||||
FROM
|
||||
@@ -628,7 +631,8 @@ func (ss *SqlStore) DoesColumnExist(tableName string, columnName string) bool {
|
||||
|
||||
func (ss *SqlStore) DoesTriggerExist(triggerName string) bool {
|
||||
if ss.DriverName() == model.DatabaseDriverPostgres {
|
||||
count, err := ss.GetMaster().SelectInt(`
|
||||
var count int64
|
||||
err := ss.GetMasterX().Get(&count, `
|
||||
SELECT
|
||||
COUNT(0)
|
||||
FROM
|
||||
@@ -644,7 +648,8 @@ func (ss *SqlStore) DoesTriggerExist(triggerName string) bool {
|
||||
return count > 0
|
||||
|
||||
} else if ss.DriverName() == model.DatabaseDriverMysql {
|
||||
count, err := ss.GetMaster().SelectInt(`
|
||||
var count int64
|
||||
err := ss.GetMasterX().Get(&count, `
|
||||
SELECT
|
||||
COUNT(0)
|
||||
FROM
|
||||
@@ -673,7 +678,7 @@ func (ss *SqlStore) CreateColumnIfNotExists(tableName string, columnName string,
|
||||
}
|
||||
|
||||
if ss.DriverName() == model.DatabaseDriverPostgres {
|
||||
_, err := ss.GetMaster().ExecNoTimeout("ALTER TABLE " + tableName + " ADD " + columnName + " " + postgresColType + " DEFAULT '" + defaultValue + "'")
|
||||
_, err := ss.GetMasterX().ExecNoTimeout("ALTER TABLE " + tableName + " ADD " + columnName + " " + postgresColType + " DEFAULT '" + defaultValue + "'")
|
||||
if err != nil {
|
||||
mlog.Fatal("Failed to create column", mlog.Err(err))
|
||||
}
|
||||
@@ -681,7 +686,7 @@ func (ss *SqlStore) CreateColumnIfNotExists(tableName string, columnName string,
|
||||
return true
|
||||
|
||||
} else if ss.DriverName() == model.DatabaseDriverMysql {
|
||||
_, err := ss.GetMaster().ExecNoTimeout("ALTER TABLE " + tableName + " ADD " + columnName + " " + mySqlColType + " DEFAULT '" + defaultValue + "'")
|
||||
_, err := ss.GetMasterX().ExecNoTimeout("ALTER TABLE " + tableName + " ADD " + columnName + " " + mySqlColType + " DEFAULT '" + defaultValue + "'")
|
||||
if err != nil {
|
||||
mlog.Fatal("Failed to create column", mlog.Err(err))
|
||||
}
|
||||
@@ -699,7 +704,7 @@ func (ss *SqlStore) RemoveTableIfExists(tableName string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
_, err := ss.GetMaster().ExecNoTimeout("DROP TABLE " + tableName)
|
||||
_, err := ss.GetMasterX().ExecNoTimeout("DROP TABLE " + tableName)
|
||||
if err != nil {
|
||||
mlog.Fatal("Failed to drop table", mlog.Err(err))
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ func StoreTestWithSqlStore(t *testing.T, f func(*testing.T, store.Store, storete
|
||||
if testing.Short() {
|
||||
t.SkipNow()
|
||||
}
|
||||
f(t, st.Store, st.SqlStore)
|
||||
f(t, st.Store, &StoreTestWrapper{st.SqlStore})
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -760,7 +760,7 @@ func TestExecNoTimeout(t *testing.T) {
|
||||
} else if sqlStore.DriverName() == model.DatabaseDriverPostgres {
|
||||
query = `SELECT pg_sleep(2);`
|
||||
}
|
||||
_, err := sqlStore.GetMaster().ExecNoTimeout(query)
|
||||
_, err := sqlStore.GetMasterX().ExecNoTimeout(query)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
@@ -781,6 +781,6 @@ func TestMySQLReadTimeout(t *testing.T) {
|
||||
store.initConnection()
|
||||
defer store.Close()
|
||||
|
||||
_, err = store.GetMaster().ExecNoTimeout(`SELECT SLEEP(3)`)
|
||||
_, err = store.GetMasterX().ExecNoTimeout(`SELECT SLEEP(3)`)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
@@ -323,10 +323,10 @@ func upgradeDatabaseToVersion34(sqlStore *SqlStore) {
|
||||
|
||||
func upgradeDatabaseToVersion35(sqlStore *SqlStore) {
|
||||
if shouldPerformUpgrade(sqlStore, Version340, Version350) {
|
||||
sqlStore.GetMaster().Exec("UPDATE TeamMembers SET Roles = 'team_user' WHERE Roles = ''")
|
||||
sqlStore.GetMaster().Exec("UPDATE TeamMembers SET Roles = 'team_user team_admin' WHERE Roles = 'admin'")
|
||||
sqlStore.GetMaster().Exec("UPDATE ChannelMembers SET Roles = 'channel_user' WHERE Roles = ''")
|
||||
sqlStore.GetMaster().Exec("UPDATE ChannelMembers SET Roles = 'channel_user channel_admin' WHERE Roles = 'admin'")
|
||||
sqlStore.GetMasterX().Exec("UPDATE TeamMembers SET Roles = 'team_user' WHERE Roles = ''")
|
||||
sqlStore.GetMasterX().Exec("UPDATE TeamMembers SET Roles = 'team_user team_admin' WHERE Roles = 'admin'")
|
||||
sqlStore.GetMasterX().Exec("UPDATE ChannelMembers SET Roles = 'channel_user' WHERE Roles = ''")
|
||||
sqlStore.GetMasterX().Exec("UPDATE ChannelMembers SET Roles = 'channel_user channel_admin' WHERE Roles = 'admin'")
|
||||
|
||||
// The rest of the migration from Filenames -> FileIds is done lazily in api.GetFileInfosForPost
|
||||
sqlStore.CreateColumnIfNotExists("Posts", "FileIds", "varchar(150)", "varchar(150)", "[]")
|
||||
|
||||
@@ -74,7 +74,7 @@ func testBotStoreGet(t *testing.T, ss store.Store, s SqlStore) {
|
||||
defer func() { require.NoError(t, ss.User().PermanentDelete(b2.UserId)) }()
|
||||
|
||||
// Artificially set b2.LastIconUpdate to NULL to verify handling of same.
|
||||
_, sqlErr := s.GetMaster().Exec("UPDATE Bots SET LastIconUpdate = NULL WHERE UserId = '" + b2.UserId + "'")
|
||||
_, sqlErr := s.GetMasterX().Exec("UPDATE Bots SET LastIconUpdate = NULL WHERE UserId = '" + b2.UserId + "'")
|
||||
require.NoError(t, sqlErr)
|
||||
|
||||
t.Run("get non-existent bot", func(t *testing.T) {
|
||||
@@ -162,7 +162,7 @@ func testBotStoreGetAll(t *testing.T, ss store.Store, s SqlStore) {
|
||||
defer func() { require.NoError(t, ss.User().PermanentDelete(b2.UserId)) }()
|
||||
|
||||
// Artificially set b2.LastIconUpdate to NULL to verify handling of same.
|
||||
_, sqlErr := s.GetMaster().Exec("UPDATE Bots SET LastIconUpdate = NULL WHERE UserId = '" + b2.UserId + "'")
|
||||
_, sqlErr := s.GetMasterX().Exec("UPDATE Bots SET LastIconUpdate = NULL WHERE UserId = '" + b2.UserId + "'")
|
||||
require.NoError(t, sqlErr)
|
||||
|
||||
t.Run("get original bots", func(t *testing.T) {
|
||||
|
||||
@@ -5,6 +5,7 @@ package storetest
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"sort"
|
||||
@@ -13,7 +14,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/mattermost/gorp"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
@@ -24,10 +25,21 @@ import (
|
||||
)
|
||||
|
||||
type SqlStore interface {
|
||||
GetMaster() *gorp.DbMap
|
||||
GetMasterX() SqlXExecutor
|
||||
DriverName() string
|
||||
}
|
||||
|
||||
type SqlXExecutor interface {
|
||||
Get(dest interface{}, query string, args ...interface{}) error
|
||||
NamedExec(query string, arg interface{}) (sql.Result, error)
|
||||
Exec(query string, args ...interface{}) (sql.Result, error)
|
||||
ExecRaw(query string, args ...interface{}) (sql.Result, error)
|
||||
NamedQuery(query string, arg interface{}) (*sqlx.Rows, error)
|
||||
QueryRowX(query string, args ...interface{}) *sqlx.Row
|
||||
QueryX(query string, args ...interface{}) (*sqlx.Rows, error)
|
||||
Select(dest interface{}, query string, args ...interface{}) error
|
||||
}
|
||||
|
||||
func cleanupChannels(t *testing.T, ss store.Store) {
|
||||
list, err := ss.Channel().GetAllChannels(0, 100000, store.ChannelSearchOpts{IncludeDeleted: true})
|
||||
require.NoError(t, err, "error cleaning all channels", err)
|
||||
@@ -267,7 +279,7 @@ func testChannelStoreSaveDirectChannel(t *testing.T, ss store.Store, s SqlStore)
|
||||
require.Len(t, members, 1, "should have saved just 1 member")
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testChannelStoreCreateDirectChannel(t *testing.T, ss store.Store) {
|
||||
@@ -461,7 +473,7 @@ func testChannelStoreGet(t *testing.T, ss store.Store, s SqlStore) {
|
||||
require.True(t, errors.As(err, &nfErr))
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testChannelStoreGetChannelsByIds(t *testing.T, ss store.Store) {
|
||||
@@ -3818,7 +3830,7 @@ func testChannelStoreGetAllChannels(t *testing.T, ss store.Store, s SqlStore) {
|
||||
assert.Equal(t, *list[0].PolicyID, policy.ID)
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testChannelStoreGetMoreChannels(t *testing.T, ss store.Store) {
|
||||
@@ -5544,8 +5556,8 @@ func testChannelStoreSearchArchivedInTeam(t *testing.T, ss store.Store, s SqlSto
|
||||
|
||||
t.Run("error", func(t *testing.T) {
|
||||
// trigger a SQL error
|
||||
s.GetMaster().Exec("ALTER TABLE Channels RENAME TO Channels_renamed")
|
||||
defer s.GetMaster().Exec("ALTER TABLE Channels_renamed RENAME TO Channels")
|
||||
s.GetMasterX().Exec("ALTER TABLE Channels RENAME TO Channels_renamed")
|
||||
defer s.GetMasterX().Exec("ALTER TABLE Channels_renamed RENAME TO Channels")
|
||||
|
||||
list, err := ss.Channel().SearchArchivedInTeam(teamId, "term", userId)
|
||||
require.Error(t, err)
|
||||
@@ -7145,45 +7157,45 @@ func testMaterializedPublicChannels(t *testing.T, ss store.Store, s SqlStore) {
|
||||
Type: model.ChannelTypeOpen,
|
||||
}
|
||||
|
||||
_, execerr := s.GetMaster().ExecNoTimeout(`
|
||||
_, execerr := s.GetMasterX().NamedExec(`
|
||||
INSERT INTO
|
||||
PublicChannels(Id, DeleteAt, TeamId, DisplayName, Name, Header, Purpose)
|
||||
VALUES
|
||||
(:Id, :DeleteAt, :TeamId, :DisplayName, :Name, :Header, :Purpose);
|
||||
(:id, :deleteat, :teamid, :displayname, :name, :header, :purpose);
|
||||
`, map[string]interface{}{
|
||||
"Id": o3.Id,
|
||||
"DeleteAt": o3.DeleteAt,
|
||||
"TeamId": o3.TeamId,
|
||||
"DisplayName": o3.DisplayName,
|
||||
"Name": o3.Name,
|
||||
"Header": o3.Header,
|
||||
"Purpose": o3.Purpose,
|
||||
"id": o3.Id,
|
||||
"deleteat": o3.DeleteAt,
|
||||
"teamid": o3.TeamId,
|
||||
"displayname": o3.DisplayName,
|
||||
"name": o3.Name,
|
||||
"header": o3.Header,
|
||||
"purpose": o3.Purpose,
|
||||
})
|
||||
require.NoError(t, execerr)
|
||||
|
||||
o3.DisplayName = "Open Channel 3 - Modified"
|
||||
|
||||
_, execerr = s.GetMaster().ExecNoTimeout(`
|
||||
_, execerr = s.GetMasterX().NamedExec(`
|
||||
INSERT INTO
|
||||
Channels(Id, CreateAt, UpdateAt, DeleteAt, TeamId, Type, DisplayName, Name, Header, Purpose, LastPostAt, LastRootPostAt, TotalMsgCount, ExtraUpdateAt, CreatorId, TotalMsgCountRoot)
|
||||
VALUES
|
||||
(:Id, :CreateAt, :UpdateAt, :DeleteAt, :TeamId, :Type, :DisplayName, :Name, :Header, :Purpose, :LastPostAt, :LastRootPostAt, :TotalMsgCount, :ExtraUpdateAt, :CreatorId, 0);
|
||||
(:id, :createat, :updateat, :deleteat, :teamid, :type, :displayname, :name, :header, :purpose, :lastpostat, :lastrootpostat, :totalmsgcount, :extraupdateat, :creatorid, 0);
|
||||
`, map[string]interface{}{
|
||||
"Id": o3.Id,
|
||||
"CreateAt": o3.CreateAt,
|
||||
"UpdateAt": o3.UpdateAt,
|
||||
"DeleteAt": o3.DeleteAt,
|
||||
"TeamId": o3.TeamId,
|
||||
"Type": o3.Type,
|
||||
"DisplayName": o3.DisplayName,
|
||||
"Name": o3.Name,
|
||||
"Header": o3.Header,
|
||||
"Purpose": o3.Purpose,
|
||||
"LastPostAt": o3.LastPostAt,
|
||||
"LastRootPostAt": o3.LastRootPostAt,
|
||||
"TotalMsgCount": o3.TotalMsgCount,
|
||||
"ExtraUpdateAt": o3.ExtraUpdateAt,
|
||||
"CreatorId": o3.CreatorId,
|
||||
"id": o3.Id,
|
||||
"createat": o3.CreateAt,
|
||||
"updateat": o3.UpdateAt,
|
||||
"deleteat": o3.DeleteAt,
|
||||
"teamid": o3.TeamId,
|
||||
"type": o3.Type,
|
||||
"displayname": o3.DisplayName,
|
||||
"name": o3.Name,
|
||||
"header": o3.Header,
|
||||
"purpose": o3.Purpose,
|
||||
"lastpostat": o3.LastPostAt,
|
||||
"lastrootpostat": o3.LastRootPostAt,
|
||||
"totalmsgcount": o3.TotalMsgCount,
|
||||
"extraupdateat": o3.ExtraUpdateAt,
|
||||
"creatorid": o3.CreatorId,
|
||||
})
|
||||
require.NoError(t, execerr)
|
||||
|
||||
@@ -7204,14 +7216,12 @@ func testMaterializedPublicChannels(t *testing.T, ss store.Store, s SqlStore) {
|
||||
_, nErr = ss.Channel().Save(&o4, -1)
|
||||
require.NoError(t, nErr)
|
||||
|
||||
_, execerr = s.GetMaster().ExecNoTimeout(`
|
||||
_, execerr = s.GetMasterX().Exec(`
|
||||
DELETE FROM
|
||||
PublicChannels
|
||||
WHERE
|
||||
Id = :Id
|
||||
`, map[string]interface{}{
|
||||
"Id": o4.Id,
|
||||
})
|
||||
Id = ?
|
||||
`, o4.Id)
|
||||
require.NoError(t, execerr)
|
||||
|
||||
o4.DisplayName += " - Modified"
|
||||
@@ -7393,7 +7403,7 @@ func testChannelStoreRemoveAllDeactivatedMembers(t *testing.T, ss store.Store, s
|
||||
assert.Equal(t, u3.Id, d2[0].UserId)
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testChannelStoreExportAllDirectChannels(t *testing.T, ss store.Store, s SqlStore) {
|
||||
@@ -7450,7 +7460,7 @@ func testChannelStoreExportAllDirectChannels(t *testing.T, ss store.Store, s Sql
|
||||
assert.ElementsMatch(t, []string{o1.DisplayName, o2.DisplayName}, []string{d1[0].DisplayName, d1[1].DisplayName})
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testChannelStoreExportAllDirectChannelsExcludePrivateAndPublic(t *testing.T, ss store.Store, s SqlStore) {
|
||||
@@ -7512,7 +7522,7 @@ func testChannelStoreExportAllDirectChannelsExcludePrivateAndPublic(t *testing.T
|
||||
assert.Equal(t, o1.DisplayName, d1[0].DisplayName)
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testChannelStoreExportAllDirectChannelsDeletedChannel(t *testing.T, ss store.Store, s SqlStore) {
|
||||
@@ -7562,7 +7572,7 @@ func testChannelStoreExportAllDirectChannelsDeletedChannel(t *testing.T, ss stor
|
||||
assert.Equal(t, 0, len(d1))
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testChannelStoreGetChannelsBatchForIndexing(t *testing.T, ss store.Store) {
|
||||
|
||||
@@ -619,13 +619,14 @@ func testGetSidebarCategory(t *testing.T, ss store.Store, s SqlStore) {
|
||||
require.NoError(t, nErr)
|
||||
|
||||
// Confirm that they're not in the Channels category in the DB
|
||||
count, countErr := s.GetMaster().SelectInt(`
|
||||
var count int64
|
||||
countErr := s.GetMasterX().Get(&count, `
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
SidebarChannels
|
||||
WHERE
|
||||
CategoryId = :CategoryId`, map[string]interface{}{"CategoryId": channelsCategory.Id})
|
||||
CategoryId = ?`, channelsCategory.Id)
|
||||
require.NoError(t, countErr)
|
||||
assert.Equal(t, int64(0), count)
|
||||
|
||||
@@ -1749,11 +1750,12 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// Confirm that we start with the right number of categories and SidebarChannels entries
|
||||
count, err := s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarCategories WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
var count int64
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarCategories WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(4), count)
|
||||
|
||||
count, err = s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarChannels WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarChannels WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(2), count)
|
||||
|
||||
@@ -1762,11 +1764,11 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Confirm that all the categories and SidebarChannel entries have been deleted
|
||||
count, err = s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarCategories WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarCategories WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(0), count)
|
||||
|
||||
count, err = s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarChannels WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarChannels WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(0), count)
|
||||
})
|
||||
@@ -1797,11 +1799,12 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// Confirm that we start with the right number of categories and SidebarChannels entries
|
||||
count, err := s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarCategories WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
var count int64
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarCategories WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(4), count)
|
||||
|
||||
count, err = s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarChannels WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarChannels WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(2), count)
|
||||
|
||||
@@ -1810,11 +1813,11 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Confirm that nothing has been deleted
|
||||
count, err = s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarCategories WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarCategories WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(4), count)
|
||||
|
||||
count, err = s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarChannels WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarChannels WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(2), count)
|
||||
})
|
||||
@@ -1870,11 +1873,12 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// Confirm that we start with the right number of categories and SidebarChannels entries
|
||||
count, err := s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarCategories WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
var count int64
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarCategories WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(8), count)
|
||||
|
||||
count, err = s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarChannels WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarChannels WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(4), count)
|
||||
|
||||
@@ -1883,11 +1887,11 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Confirm that we have the correct number of categories and SidebarChannels entries left over
|
||||
count, err = s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarCategories WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarCategories WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(4), count)
|
||||
|
||||
count, err = s.GetMaster().SelectInt("SELECT COUNT(*) FROM SidebarChannels WHERE UserId = :UserId", map[string]interface{}{"UserId": userId})
|
||||
err = s.GetMasterX().Get(&count, "SELECT COUNT(*) FROM SidebarChannels WHERE UserId = ?", userId)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(2), count)
|
||||
|
||||
@@ -1980,13 +1984,14 @@ func testDeleteSidebarCategory(t *testing.T, ss store.Store, s SqlStore) {
|
||||
assert.Len(t, res.Categories, 3)
|
||||
|
||||
// ...and that the corresponding SidebarChannel entries were deleted
|
||||
count, countErr := s.GetMaster().SelectInt(`
|
||||
var count int64
|
||||
countErr := s.GetMasterX().Get(&count, `
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
SidebarChannels
|
||||
WHERE
|
||||
CategoryId = :CategoryId`, map[string]interface{}{"CategoryId": newCategory.Id})
|
||||
CategoryId = ?`, newCategory.Id)
|
||||
require.NoError(t, countErr)
|
||||
assert.Equal(t, int64(0), count)
|
||||
})
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
// Code generated by mockery v1.0.0. DO NOT EDIT.
|
||||
|
||||
// Regenerate this file using `make store-mocks`.
|
||||
|
||||
package mocks
|
||||
|
||||
import mock "github.com/stretchr/testify/mock"
|
||||
|
||||
// JSONSerializable is an autogenerated mock type for the JSONSerializable type
|
||||
type JSONSerializable struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// ToJSON provides a mock function with given fields:
|
||||
func (_m *JSONSerializable) ToJSON() string {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 string
|
||||
if rf, ok := ret.Get(0).(func() string); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
r0 = ret.Get(0).(string)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
// Code generated by mockery v1.0.0. DO NOT EDIT.
|
||||
|
||||
// Regenerate this file using `make store-mocks`.
|
||||
|
||||
package mocks
|
||||
|
||||
import (
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
// ObjectCache is an autogenerated mock type for the ObjectCache type
|
||||
type ObjectCache struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// AddWithDefaultExpires provides a mock function with given fields: key, value
|
||||
func (_m *ObjectCache) AddWithDefaultExpires(key interface{}, value interface{}) {
|
||||
_m.Called(key, value)
|
||||
}
|
||||
|
||||
// AddWithExpiresInSecs provides a mock function with given fields: key, value, expireAtSecs
|
||||
func (_m *ObjectCache) AddWithExpiresInSecs(key interface{}, value interface{}, expireAtSecs int64) {
|
||||
_m.Called(key, value, expireAtSecs)
|
||||
}
|
||||
|
||||
// Get provides a mock function with given fields: key
|
||||
func (_m *ObjectCache) Get(key interface{}) (interface{}, bool) {
|
||||
ret := _m.Called(key)
|
||||
|
||||
var r0 interface{}
|
||||
if rf, ok := ret.Get(0).(func(interface{}) interface{}); ok {
|
||||
r0 = rf(key)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(interface{})
|
||||
}
|
||||
}
|
||||
|
||||
var r1 bool
|
||||
if rf, ok := ret.Get(1).(func(interface{}) bool); ok {
|
||||
r1 = rf(key)
|
||||
} else {
|
||||
r1 = ret.Get(1).(bool)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetInvalidateClusterEvent provides a mock function with given fields:
|
||||
func (_m *ObjectCache) GetInvalidateClusterEvent() string {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 string
|
||||
if rf, ok := ret.Get(0).(func() string); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
r0 = ret.Get(0).(string)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// Len provides a mock function with given fields:
|
||||
func (_m *ObjectCache) Len() int {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 int
|
||||
if rf, ok := ret.Get(0).(func() int); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
r0 = ret.Get(0).(int)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// Name provides a mock function with given fields:
|
||||
func (_m *ObjectCache) Name() string {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 string
|
||||
if rf, ok := ret.Get(0).(func() string); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
r0 = ret.Get(0).(string)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// Purge provides a mock function with given fields:
|
||||
func (_m *ObjectCache) Purge() {
|
||||
_m.Called()
|
||||
}
|
||||
|
||||
// Remove provides a mock function with given fields: key
|
||||
func (_m *ObjectCache) Remove(key interface{}) {
|
||||
_m.Called(key)
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
// Code generated by mockery v1.0.0. DO NOT EDIT.
|
||||
|
||||
// Regenerate this file using `make store-mocks`.
|
||||
|
||||
package mocks
|
||||
|
||||
import (
|
||||
gorp "github.com/mattermost/gorp"
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
// SqlStore is an autogenerated mock type for the SqlStore type
|
||||
type SqlStore struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// DriverName provides a mock function with given fields:
|
||||
func (_m *SqlStore) DriverName() string {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 string
|
||||
if rf, ok := ret.Get(0).(func() string); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
r0 = ret.Get(0).(string)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// GetMaster provides a mock function with given fields:
|
||||
func (_m *SqlStore) GetMaster() *gorp.DbMap {
|
||||
ret := _m.Called()
|
||||
|
||||
var r0 *gorp.DbMap
|
||||
if rf, ok := ret.Get(0).(func() *gorp.DbMap); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*gorp.DbMap)
|
||||
}
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
// Code generated by mockery v1.0.0. DO NOT EDIT.
|
||||
|
||||
// Regenerate this file using `make store-mocks`.
|
||||
|
||||
package mocks
|
||||
|
||||
import mock "github.com/stretchr/testify/mock"
|
||||
|
||||
// dbSelecter is an autogenerated mock type for the dbSelecter type
|
||||
type dbSelecter struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// Select provides a mock function with given fields: i, query, args
|
||||
func (_m *dbSelecter) Select(i interface{}, query string, args ...interface{}) error {
|
||||
var _ca []interface{}
|
||||
_ca = append(_ca, i, query)
|
||||
_ca = append(_ca, args...)
|
||||
ret := _m.Called(_ca...)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(interface{}, string, ...interface{}) error); ok {
|
||||
r0 = rf(i, query, args...)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
@@ -1,195 +0,0 @@
|
||||
// Code generated by mockery v1.0.0. DO NOT EDIT.
|
||||
|
||||
// Regenerate this file using `make store-mocks`.
|
||||
|
||||
package mocks
|
||||
|
||||
import (
|
||||
sql "database/sql"
|
||||
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
|
||||
sqlx "github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
// sqlxExecutor is an autogenerated mock type for the sqlxExecutor type
|
||||
type sqlxExecutor struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// Exec provides a mock function with given fields: query, args
|
||||
func (_m *sqlxExecutor) Exec(query string, args ...interface{}) (sql.Result, error) {
|
||||
var _ca []interface{}
|
||||
_ca = append(_ca, query)
|
||||
_ca = append(_ca, args...)
|
||||
ret := _m.Called(_ca...)
|
||||
|
||||
var r0 sql.Result
|
||||
if rf, ok := ret.Get(0).(func(string, ...interface{}) sql.Result); ok {
|
||||
r0 = rf(query, args...)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(sql.Result)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(string, ...interface{}) error); ok {
|
||||
r1 = rf(query, args...)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// ExecRaw provides a mock function with given fields: query, args
|
||||
func (_m *sqlxExecutor) ExecRaw(query string, args ...interface{}) (sql.Result, error) {
|
||||
var _ca []interface{}
|
||||
_ca = append(_ca, query)
|
||||
_ca = append(_ca, args...)
|
||||
ret := _m.Called(_ca...)
|
||||
|
||||
var r0 sql.Result
|
||||
if rf, ok := ret.Get(0).(func(string, ...interface{}) sql.Result); ok {
|
||||
r0 = rf(query, args...)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(sql.Result)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(string, ...interface{}) error); ok {
|
||||
r1 = rf(query, args...)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// Get provides a mock function with given fields: dest, query, args
|
||||
func (_m *sqlxExecutor) Get(dest interface{}, query string, args ...interface{}) error {
|
||||
var _ca []interface{}
|
||||
_ca = append(_ca, dest, query)
|
||||
_ca = append(_ca, args...)
|
||||
ret := _m.Called(_ca...)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(interface{}, string, ...interface{}) error); ok {
|
||||
r0 = rf(dest, query, args...)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// NamedExec provides a mock function with given fields: query, arg
|
||||
func (_m *sqlxExecutor) NamedExec(query string, arg interface{}) (sql.Result, error) {
|
||||
ret := _m.Called(query, arg)
|
||||
|
||||
var r0 sql.Result
|
||||
if rf, ok := ret.Get(0).(func(string, interface{}) sql.Result); ok {
|
||||
r0 = rf(query, arg)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(sql.Result)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(string, interface{}) error); ok {
|
||||
r1 = rf(query, arg)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// NamedQuery provides a mock function with given fields: query, arg
|
||||
func (_m *sqlxExecutor) NamedQuery(query string, arg interface{}) (*sqlx.Rows, error) {
|
||||
ret := _m.Called(query, arg)
|
||||
|
||||
var r0 *sqlx.Rows
|
||||
if rf, ok := ret.Get(0).(func(string, interface{}) *sqlx.Rows); ok {
|
||||
r0 = rf(query, arg)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*sqlx.Rows)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(string, interface{}) error); ok {
|
||||
r1 = rf(query, arg)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// QueryRowX provides a mock function with given fields: query, args
|
||||
func (_m *sqlxExecutor) QueryRowX(query string, args ...interface{}) *sqlx.Row {
|
||||
var _ca []interface{}
|
||||
_ca = append(_ca, query)
|
||||
_ca = append(_ca, args...)
|
||||
ret := _m.Called(_ca...)
|
||||
|
||||
var r0 *sqlx.Row
|
||||
if rf, ok := ret.Get(0).(func(string, ...interface{}) *sqlx.Row); ok {
|
||||
r0 = rf(query, args...)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*sqlx.Row)
|
||||
}
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// QueryX provides a mock function with given fields: query, args
|
||||
func (_m *sqlxExecutor) QueryX(query string, args ...interface{}) (*sqlx.Rows, error) {
|
||||
var _ca []interface{}
|
||||
_ca = append(_ca, query)
|
||||
_ca = append(_ca, args...)
|
||||
ret := _m.Called(_ca...)
|
||||
|
||||
var r0 *sqlx.Rows
|
||||
if rf, ok := ret.Get(0).(func(string, ...interface{}) *sqlx.Rows); ok {
|
||||
r0 = rf(query, args...)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*sqlx.Rows)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(string, ...interface{}) error); ok {
|
||||
r1 = rf(query, args...)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// Select provides a mock function with given fields: dest, query, args
|
||||
func (_m *sqlxExecutor) Select(dest interface{}, query string, args ...interface{}) error {
|
||||
var _ca []interface{}
|
||||
_ca = append(_ca, dest, query)
|
||||
_ca = append(_ca, args...)
|
||||
ret := _m.Called(_ca...)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(interface{}, string, ...interface{}) error); ok {
|
||||
r0 = rf(dest, query, args...)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
@@ -2217,7 +2217,7 @@ func testPostStoreGetFlaggedPostsForTeam(t *testing.T, ss store.Store, s SqlStor
|
||||
require.Len(t, r4.Order, 3, "should have 3 posts")
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testPostStoreGetFlaggedPosts(t *testing.T, ss store.Store) {
|
||||
@@ -3268,7 +3268,7 @@ func testPostStoreGetDirectPostParentsForExportAfter(t *testing.T, ss store.Stor
|
||||
assert.Equal(t, p1.Message, r1[0].Message)
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testPostStoreGetDirectPostParentsForExportAfterDeleted(t *testing.T, ss store.Store, s SqlStore) {
|
||||
@@ -3334,7 +3334,7 @@ func testPostStoreGetDirectPostParentsForExportAfterDeleted(t *testing.T, ss sto
|
||||
assert.Equal(t, 0, len(r1))
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testPostStoreGetDirectPostParentsForExportAfterBatched(t *testing.T, ss store.Store, s SqlStore) {
|
||||
@@ -3410,7 +3410,7 @@ func testPostStoreGetDirectPostParentsForExportAfterBatched(t *testing.T, ss sto
|
||||
assert.ElementsMatch(t, postIds[:100], exportedPostIds)
|
||||
|
||||
// Manually truncate Channels table until testlib can handle cleanups
|
||||
s.GetMaster().Exec("TRUNCATE Channels")
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
func testHasAutoResponsePostByUserSince(t *testing.T, ss store.Store) {
|
||||
@@ -3539,8 +3539,7 @@ func testGetPostsSinceForSync(t *testing.T, ss store.Store, s SqlStore) {
|
||||
|
||||
t.Run("UpdateAt collisions", func(t *testing.T) {
|
||||
// this test requires all the UpdateAt timestamps to be the same.
|
||||
args := map[string]interface{}{"UpdateAt": model.GetMillis()}
|
||||
result, err := s.GetMaster().Exec("UPDATE Posts SET UpdateAt = :UpdateAt", args)
|
||||
result, err := s.GetMasterX().Exec("UPDATE Posts SET UpdateAt = ?", model.GetMillis())
|
||||
require.NoError(t, err)
|
||||
rows, err := result.RowsAffected()
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -384,21 +384,21 @@ func testReactionGetForPostSince(t *testing.T, ss store.Store, s SqlStore) {
|
||||
|
||||
func forceUpdateAt(reaction *model.Reaction, updateAt int64, s SqlStore) error {
|
||||
params := map[string]interface{}{
|
||||
"UserId": reaction.UserId,
|
||||
"PostId": reaction.PostId,
|
||||
"EmojiName": reaction.EmojiName,
|
||||
"UpdateAt": updateAt,
|
||||
"userid": reaction.UserId,
|
||||
"postid": reaction.PostId,
|
||||
"emojiname": reaction.EmojiName,
|
||||
"updateat": updateAt,
|
||||
}
|
||||
|
||||
sqlResult, err := s.GetMaster().Exec(`
|
||||
sqlResult, err := s.GetMasterX().NamedExec(`
|
||||
UPDATE
|
||||
Reactions
|
||||
SET
|
||||
UpdateAt=:UpdateAt
|
||||
UpdateAt=:updateat
|
||||
WHERE
|
||||
UserId = :UserId AND
|
||||
PostId = :PostId AND
|
||||
EmojiName = :EmojiName`, params,
|
||||
UserId = :userid AND
|
||||
PostId = :postid AND
|
||||
EmojiName = :emojiname`, params,
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
@@ -417,10 +417,10 @@ func forceUpdateAt(reaction *model.Reaction, updateAt int64, s SqlStore) error {
|
||||
}
|
||||
|
||||
func forceNULL(reaction *model.Reaction, s SqlStore) error {
|
||||
if _, err := s.GetMaster().Exec(`UPDATE Reactions SET UpdateAt = NULL WHERE UpdateAt = 0`); err != nil {
|
||||
if _, err := s.GetMasterX().Exec(`UPDATE Reactions SET UpdateAt = NULL WHERE UpdateAt = 0`); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := s.GetMaster().Exec(`UPDATE Reactions SET DeleteAt = NULL WHERE DeleteAt = 0`); err != nil {
|
||||
if _, err := s.GetMasterX().Exec(`UPDATE Reactions SET DeleteAt = NULL WHERE DeleteAt = 0`); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -153,7 +153,7 @@ func cleanupRetentionPolicyTest(s SqlStore) {
|
||||
// Manually clear tables until testlib can handle cleanups
|
||||
tables := []string{"RetentionPolicies", "RetentionPoliciesChannels", "RetentionPoliciesTeams"}
|
||||
for _, table := range tables {
|
||||
if _, err := s.GetMaster().Exec("DELETE FROM " + table); err != nil {
|
||||
if _, err := s.GetMasterX().Exec("DELETE FROM " + table); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -578,7 +578,7 @@ func testRoleStoreChannelHigherScopedPermissionsBlankTeamSchemeChannelGuest(t *t
|
||||
require.NoError(t, err)
|
||||
|
||||
// blank-out the guest role to simulate an old team scheme, ensure it's blank
|
||||
result, sqlErr := s.GetMaster().Exec(fmt.Sprintf("UPDATE Schemes SET DefaultChannelGuestRole = '' WHERE Id = '%s'", teamScheme.Id))
|
||||
result, sqlErr := s.GetMasterX().Exec(fmt.Sprintf("UPDATE Schemes SET DefaultChannelGuestRole = '' WHERE Id = '%s'", teamScheme.Id))
|
||||
require.NoError(t, sqlErr)
|
||||
rows, serr := result.RowsAffected()
|
||||
require.NoError(t, serr)
|
||||
|
||||
@@ -23,7 +23,7 @@ const (
|
||||
)
|
||||
|
||||
func cleanupStatusStore(t *testing.T, s SqlStore) {
|
||||
_, execerr := s.GetMaster().ExecNoTimeout(` DELETE FROM Status `)
|
||||
_, execerr := s.GetMasterX().Exec(`DELETE FROM Status`)
|
||||
require.NoError(t, execerr)
|
||||
}
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user