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
```
Этот коммит содержится в:
Agniva De Sarker
2022-02-16 22:30:27 +05:30
коммит произвёл GitHub
родитель 256427f7f9
Коммит 678c7d3b8c
26 изменённых файлов: 178 добавлений и 518 удалений

Просмотреть файл

@@ -275,7 +275,7 @@ i18n-check: ## Exit on empty translation strings and translation source strings
store-mocks: ## Creates mock files. store-mocks: ## Creates mock files.
$(GO) install github.com/vektra/mockery/...@v1.1.2 $(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. telemetry-mocks: ## Creates mock files.
$(GO) install github.com/vektra/mockery/...@v1.1.2 $(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. // Temporarily renaming a table to force a DB error.
sqlStore := mainHelper.GetSQLStore() 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) require.NoError(t, err)
defer func() { 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) require.NoError(t, err)
}() }()

Просмотреть файл

@@ -126,12 +126,12 @@ func TestEnsureInstallationDate(t *testing.T) {
for _, tc := range tt { for _, tc := range tt {
t.Run(tc.Name, func(t *testing.T) { t.Run(tc.Name, func(t *testing.T) {
sqlStore := th.GetSqlStore() sqlStore := th.GetSqlStore()
sqlStore.GetMaster().Exec("DELETE FROM Users") sqlStore.GetMasterX().Exec("DELETE FROM Users")
for _, createAt := range tc.UsersCreationDates { for _, createAt := range tc.UsersCreationDates {
user := th.CreateUser() user := th.CreateUser()
user.CreateAt = createAt 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 { if tc.PrevInstallationDate == nil {
@@ -156,7 +156,7 @@ func TestEnsureInstallationDate(t *testing.T) {
assert.True(t, *tc.ExpectedInstallationDate <= value && *tc.ExpectedInstallationDate+1000 >= value) 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() { func (*TestHelper) ResetRoleMigration() {
sqlStore := mainHelper.GetSQLStore() 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) panic(err)
} }
mainHelper.GetClusterInterface().SendClearRoleCacheMessage() 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) panic(err)
} }
} }
func (*TestHelper) ResetEmojisMigration() { func (*TestHelper) ResetEmojisMigration() {
sqlStore := mainHelper.GetSQLStore() 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) 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) 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) panic(err)
} }
mainHelper.GetClusterInterface().SendClearRoleCacheMessage() 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) panic(err)
} }
} }

Просмотреть файл

@@ -41,12 +41,13 @@ func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model
store.GetMaster().Db = handle store.GetMaster().Db = handle
store.SetMasterX(handle) store.SetMasterX(handle)
wrapper := sqlstore.NewStoreTestWrapper(store)
// Testing with a handful of stores // Testing with a handful of stores
storetest.TestPostStore(p.t, store, store) storetest.TestPostStore(p.t, store, wrapper)
storetest.TestUserStore(p.t, store, store) storetest.TestUserStore(p.t, store, wrapper)
storetest.TestTeamStore(p.t, store) storetest.TestTeamStore(p.t, store)
storetest.TestChannelStore(p.t, store, store) storetest.TestChannelStore(p.t, store, wrapper)
storetest.TestBotStore(p.t, store, store) storetest.TestBotStore(p.t, store, wrapper)
store.GetMaster().Db.Close() store.GetMaster().Db.Close()
} }

Просмотреть файл

@@ -821,7 +821,8 @@ func TestCreatePost(t *testing.T) {
sqlStore := th.GetSqlStore() sqlStore := th.GetSqlStore()
sql := fmt.Sprintf("select count(*) from Posts where Id = '%[1]s' or OriginalId = '%[1]s';", previewPost.Id) 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.NoError(t, err2)
require.EqualValues(t, int64(1), val) require.EqualValues(t, int64(1), val)

Просмотреть файл

@@ -927,11 +927,11 @@ func TestPermanentDeleteUser(t *testing.T) {
}) })
assert.Nil(t, err) assert.Nil(t, err)
var bots1 []*model.Bot bots1 := []*model.Bot{}
var bots2 []*model.Bot bots2 := []*model.Bot{}
sqlStore := mainHelper.GetSQLStore() sqlStore := mainHelper.GetSQLStore()
_, err1 := sqlStore.GetMaster().Select(&bots1, "SELECT * FROM Bots") err1 := sqlStore.GetMasterX().Select(&bots1, "SELECT * FROM Bots")
assert.NoError(t, err1) assert.NoError(t, err1)
assert.Equal(t, 1, len(bots1)) assert.Equal(t, 1, len(bots1))
@@ -942,7 +942,7 @@ func TestPermanentDeleteUser(t *testing.T) {
err = th.App.PermanentDeleteUser(th.Context, retUser1) err = th.App.PermanentDeleteUser(th.Context, retUser1)
assert.Nil(t, err) 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.NoError(t, err1)
assert.Equal(t, 0, len(bots2)) 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() { if testing.Short() {
t.SkipNow() 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) { func getOrphanedRecords(ss *SqlStore, cfg relationalCheckConfig) ([]model.OrphanedRecord, error) {
var records []model.OrphanedRecord records := []model.OrphanedRecord{}
sub := ss.getQueryBuilder(). sub := ss.getQueryBuilder().
Select("TRUE"). Select("TRUE").
@@ -54,8 +54,7 @@ func getOrphanedRecords(ss *SqlStore, cfg relationalCheckConfig) ([]model.Orphan
query, args, _ := main.ToSql() query, args, _ := main.ToSql()
_, err := ss.GetMaster().Select(&records, query, args...) err := ss.GetMasterX().Select(&records, query, args...)
return records, err return records, err
} }

Просмотреть файл

@@ -14,10 +14,32 @@ import (
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
"github.com/mattermost/gorp"
"github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/mlog" "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 // sqlxExecutor exposes sqlx operations. It is used to enable some internal store methods to
// accept both transactions (*sqlxTxWrapper) and common db handlers (*sqlxDbWrapper). // accept both transactions (*sqlxTxWrapper) and common db handlers (*sqlxDbWrapper).
type sqlxExecutor interface { type sqlxExecutor interface {
@@ -106,6 +128,18 @@ func (w *sqlxDBWrapper) Exec(query string, args ...interface{}) (sql.Result, err
return w.ExecRaw(query, args...) 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 // ExecRaw is like Exec but without any rebinding of params. You need to pass
// the exact param types of your target database. // the exact param types of your target database.
func (w *sqlxDBWrapper) ExecRaw(query string, args ...interface{}) (sql.Result, error) { 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 { 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 return version
} }
@@ -540,7 +541,8 @@ func (ss *SqlStore) MarkSystemRanUnitTests() {
func (ss *SqlStore) DoesTableExist(tableName string) bool { func (ss *SqlStore) DoesTableExist(tableName string) bool {
if ss.DriverName() == model.DatabaseDriverPostgres { 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`, `SELECT count(relname) FROM pg_class WHERE relname=$1`,
strings.ToLower(tableName), strings.ToLower(tableName),
) )
@@ -552,8 +554,8 @@ func (ss *SqlStore) DoesTableExist(tableName string) bool {
return count > 0 return count > 0
} else if ss.DriverName() == model.DatabaseDriverMysql { } else if ss.DriverName() == model.DatabaseDriverMysql {
var count int64
count, err := ss.GetMaster().SelectInt( err := ss.GetMasterX().Get(&count,
`SELECT `SELECT
COUNT(0) AS table_exists COUNT(0) AS table_exists
FROM FROM
@@ -579,7 +581,8 @@ func (ss *SqlStore) DoesTableExist(tableName string) bool {
func (ss *SqlStore) DoesColumnExist(tableName string, columnName string) bool { func (ss *SqlStore) DoesColumnExist(tableName string, columnName string) bool {
if ss.DriverName() == model.DatabaseDriverPostgres { if ss.DriverName() == model.DatabaseDriverPostgres {
count, err := ss.GetMaster().SelectInt( var count int64
err := ss.GetMasterX().Get(&count,
`SELECT COUNT(0) `SELECT COUNT(0)
FROM pg_attribute FROM pg_attribute
WHERE attrelid = $1::regclass WHERE attrelid = $1::regclass
@@ -600,8 +603,8 @@ func (ss *SqlStore) DoesColumnExist(tableName string, columnName string) bool {
return count > 0 return count > 0
} else if ss.DriverName() == model.DatabaseDriverMysql { } else if ss.DriverName() == model.DatabaseDriverMysql {
var count int64
count, err := ss.GetMaster().SelectInt( err := ss.GetMasterX().Get(&count,
`SELECT `SELECT
COUNT(0) AS column_exists COUNT(0) AS column_exists
FROM FROM
@@ -628,7 +631,8 @@ func (ss *SqlStore) DoesColumnExist(tableName string, columnName string) bool {
func (ss *SqlStore) DoesTriggerExist(triggerName string) bool { func (ss *SqlStore) DoesTriggerExist(triggerName string) bool {
if ss.DriverName() == model.DatabaseDriverPostgres { if ss.DriverName() == model.DatabaseDriverPostgres {
count, err := ss.GetMaster().SelectInt(` var count int64
err := ss.GetMasterX().Get(&count, `
SELECT SELECT
COUNT(0) COUNT(0)
FROM FROM
@@ -644,7 +648,8 @@ func (ss *SqlStore) DoesTriggerExist(triggerName string) bool {
return count > 0 return count > 0
} else if ss.DriverName() == model.DatabaseDriverMysql { } else if ss.DriverName() == model.DatabaseDriverMysql {
count, err := ss.GetMaster().SelectInt(` var count int64
err := ss.GetMasterX().Get(&count, `
SELECT SELECT
COUNT(0) COUNT(0)
FROM FROM
@@ -673,7 +678,7 @@ func (ss *SqlStore) CreateColumnIfNotExists(tableName string, columnName string,
} }
if ss.DriverName() == model.DatabaseDriverPostgres { 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 { if err != nil {
mlog.Fatal("Failed to create column", mlog.Err(err)) mlog.Fatal("Failed to create column", mlog.Err(err))
} }
@@ -681,7 +686,7 @@ func (ss *SqlStore) CreateColumnIfNotExists(tableName string, columnName string,
return true return true
} else if ss.DriverName() == model.DatabaseDriverMysql { } 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 { if err != nil {
mlog.Fatal("Failed to create column", mlog.Err(err)) mlog.Fatal("Failed to create column", mlog.Err(err))
} }
@@ -699,7 +704,7 @@ func (ss *SqlStore) RemoveTableIfExists(tableName string) bool {
return false return false
} }
_, err := ss.GetMaster().ExecNoTimeout("DROP TABLE " + tableName) _, err := ss.GetMasterX().ExecNoTimeout("DROP TABLE " + tableName)
if err != nil { if err != nil {
mlog.Fatal("Failed to drop table", mlog.Err(err)) 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() { if testing.Short() {
t.SkipNow() 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 { } else if sqlStore.DriverName() == model.DatabaseDriverPostgres {
query = `SELECT pg_sleep(2);` query = `SELECT pg_sleep(2);`
} }
_, err := sqlStore.GetMaster().ExecNoTimeout(query) _, err := sqlStore.GetMasterX().ExecNoTimeout(query)
require.NoError(t, err) require.NoError(t, err)
}) })
} }
@@ -781,6 +781,6 @@ func TestMySQLReadTimeout(t *testing.T) {
store.initConnection() store.initConnection()
defer store.Close() defer store.Close()
_, err = store.GetMaster().ExecNoTimeout(`SELECT SLEEP(3)`) _, err = store.GetMasterX().ExecNoTimeout(`SELECT SLEEP(3)`)
require.NoError(t, err) require.NoError(t, err)
} }

Просмотреть файл

@@ -323,10 +323,10 @@ func upgradeDatabaseToVersion34(sqlStore *SqlStore) {
func upgradeDatabaseToVersion35(sqlStore *SqlStore) { func upgradeDatabaseToVersion35(sqlStore *SqlStore) {
if shouldPerformUpgrade(sqlStore, Version340, Version350) { if shouldPerformUpgrade(sqlStore, Version340, Version350) {
sqlStore.GetMaster().Exec("UPDATE TeamMembers SET Roles = 'team_user' WHERE Roles = ''") sqlStore.GetMasterX().Exec("UPDATE TeamMembers SET Roles = 'team_user' WHERE Roles = ''")
sqlStore.GetMaster().Exec("UPDATE TeamMembers SET Roles = 'team_user team_admin' WHERE Roles = 'admin'") sqlStore.GetMasterX().Exec("UPDATE TeamMembers SET Roles = 'team_user team_admin' WHERE Roles = 'admin'")
sqlStore.GetMaster().Exec("UPDATE ChannelMembers SET Roles = 'channel_user' WHERE Roles = ''") sqlStore.GetMasterX().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 ChannelMembers SET Roles = 'channel_user channel_admin' WHERE Roles = 'admin'")
// The rest of the migration from Filenames -> FileIds is done lazily in api.GetFileInfosForPost // The rest of the migration from Filenames -> FileIds is done lazily in api.GetFileInfosForPost
sqlStore.CreateColumnIfNotExists("Posts", "FileIds", "varchar(150)", "varchar(150)", "[]") 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)) }() defer func() { require.NoError(t, ss.User().PermanentDelete(b2.UserId)) }()
// Artificially set b2.LastIconUpdate to NULL to verify handling of same. // 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) require.NoError(t, sqlErr)
t.Run("get non-existent bot", func(t *testing.T) { 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)) }() defer func() { require.NoError(t, ss.User().PermanentDelete(b2.UserId)) }()
// Artificially set b2.LastIconUpdate to NULL to verify handling of same. // 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) require.NoError(t, sqlErr)
t.Run("get original bots", func(t *testing.T) { t.Run("get original bots", func(t *testing.T) {

Просмотреть файл

@@ -5,6 +5,7 @@ package storetest
import ( import (
"context" "context"
"database/sql"
"encoding/json" "encoding/json"
"errors" "errors"
"sort" "sort"
@@ -13,7 +14,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/mattermost/gorp" "github.com/jmoiron/sqlx"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@@ -24,10 +25,21 @@ import (
) )
type SqlStore interface { type SqlStore interface {
GetMaster() *gorp.DbMap GetMasterX() SqlXExecutor
DriverName() string 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) { func cleanupChannels(t *testing.T, ss store.Store) {
list, err := ss.Channel().GetAllChannels(0, 100000, store.ChannelSearchOpts{IncludeDeleted: true}) list, err := ss.Channel().GetAllChannels(0, 100000, store.ChannelSearchOpts{IncludeDeleted: true})
require.NoError(t, err, "error cleaning all channels", err) 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") require.Len(t, members, 1, "should have saved just 1 member")
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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)) require.True(t, errors.As(err, &nfErr))
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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) assert.Equal(t, *list[0].PolicyID, policy.ID)
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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) { t.Run("error", func(t *testing.T) {
// trigger a SQL error // trigger a SQL error
s.GetMaster().Exec("ALTER TABLE Channels RENAME TO Channels_renamed") s.GetMasterX().Exec("ALTER TABLE Channels RENAME TO Channels_renamed")
defer s.GetMaster().Exec("ALTER TABLE Channels_renamed RENAME TO Channels") defer s.GetMasterX().Exec("ALTER TABLE Channels_renamed RENAME TO Channels")
list, err := ss.Channel().SearchArchivedInTeam(teamId, "term", userId) list, err := ss.Channel().SearchArchivedInTeam(teamId, "term", userId)
require.Error(t, err) require.Error(t, err)
@@ -7145,45 +7157,45 @@ func testMaterializedPublicChannels(t *testing.T, ss store.Store, s SqlStore) {
Type: model.ChannelTypeOpen, Type: model.ChannelTypeOpen,
} }
_, execerr := s.GetMaster().ExecNoTimeout(` _, execerr := s.GetMasterX().NamedExec(`
INSERT INTO INSERT INTO
PublicChannels(Id, DeleteAt, TeamId, DisplayName, Name, Header, Purpose) PublicChannels(Id, DeleteAt, TeamId, DisplayName, Name, Header, Purpose)
VALUES VALUES
(:Id, :DeleteAt, :TeamId, :DisplayName, :Name, :Header, :Purpose); (:id, :deleteat, :teamid, :displayname, :name, :header, :purpose);
`, map[string]interface{}{ `, map[string]interface{}{
"Id": o3.Id, "id": o3.Id,
"DeleteAt": o3.DeleteAt, "deleteat": o3.DeleteAt,
"TeamId": o3.TeamId, "teamid": o3.TeamId,
"DisplayName": o3.DisplayName, "displayname": o3.DisplayName,
"Name": o3.Name, "name": o3.Name,
"Header": o3.Header, "header": o3.Header,
"Purpose": o3.Purpose, "purpose": o3.Purpose,
}) })
require.NoError(t, execerr) require.NoError(t, execerr)
o3.DisplayName = "Open Channel 3 - Modified" o3.DisplayName = "Open Channel 3 - Modified"
_, execerr = s.GetMaster().ExecNoTimeout(` _, execerr = s.GetMasterX().NamedExec(`
INSERT INTO INSERT INTO
Channels(Id, CreateAt, UpdateAt, DeleteAt, TeamId, Type, DisplayName, Name, Header, Purpose, LastPostAt, LastRootPostAt, TotalMsgCount, ExtraUpdateAt, CreatorId, TotalMsgCountRoot) Channels(Id, CreateAt, UpdateAt, DeleteAt, TeamId, Type, DisplayName, Name, Header, Purpose, LastPostAt, LastRootPostAt, TotalMsgCount, ExtraUpdateAt, CreatorId, TotalMsgCountRoot)
VALUES 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{}{ `, map[string]interface{}{
"Id": o3.Id, "id": o3.Id,
"CreateAt": o3.CreateAt, "createat": o3.CreateAt,
"UpdateAt": o3.UpdateAt, "updateat": o3.UpdateAt,
"DeleteAt": o3.DeleteAt, "deleteat": o3.DeleteAt,
"TeamId": o3.TeamId, "teamid": o3.TeamId,
"Type": o3.Type, "type": o3.Type,
"DisplayName": o3.DisplayName, "displayname": o3.DisplayName,
"Name": o3.Name, "name": o3.Name,
"Header": o3.Header, "header": o3.Header,
"Purpose": o3.Purpose, "purpose": o3.Purpose,
"LastPostAt": o3.LastPostAt, "lastpostat": o3.LastPostAt,
"LastRootPostAt": o3.LastRootPostAt, "lastrootpostat": o3.LastRootPostAt,
"TotalMsgCount": o3.TotalMsgCount, "totalmsgcount": o3.TotalMsgCount,
"ExtraUpdateAt": o3.ExtraUpdateAt, "extraupdateat": o3.ExtraUpdateAt,
"CreatorId": o3.CreatorId, "creatorid": o3.CreatorId,
}) })
require.NoError(t, execerr) require.NoError(t, execerr)
@@ -7204,14 +7216,12 @@ func testMaterializedPublicChannels(t *testing.T, ss store.Store, s SqlStore) {
_, nErr = ss.Channel().Save(&o4, -1) _, nErr = ss.Channel().Save(&o4, -1)
require.NoError(t, nErr) require.NoError(t, nErr)
_, execerr = s.GetMaster().ExecNoTimeout(` _, execerr = s.GetMasterX().Exec(`
DELETE FROM DELETE FROM
PublicChannels PublicChannels
WHERE WHERE
Id = :Id Id = ?
`, map[string]interface{}{ `, o4.Id)
"Id": o4.Id,
})
require.NoError(t, execerr) require.NoError(t, execerr)
o4.DisplayName += " - Modified" o4.DisplayName += " - Modified"
@@ -7393,7 +7403,7 @@ func testChannelStoreRemoveAllDeactivatedMembers(t *testing.T, ss store.Store, s
assert.Equal(t, u3.Id, d2[0].UserId) assert.Equal(t, u3.Id, d2[0].UserId)
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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}) assert.ElementsMatch(t, []string{o1.DisplayName, o2.DisplayName}, []string{d1[0].DisplayName, d1[1].DisplayName})
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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) assert.Equal(t, o1.DisplayName, d1[0].DisplayName)
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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)) assert.Equal(t, 0, len(d1))
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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) require.NoError(t, nErr)
// Confirm that they're not in the Channels category in the DB // 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 SELECT
COUNT(*) COUNT(*)
FROM FROM
SidebarChannels SidebarChannels
WHERE WHERE
CategoryId = :CategoryId`, map[string]interface{}{"CategoryId": channelsCategory.Id}) CategoryId = ?`, channelsCategory.Id)
require.NoError(t, countErr) require.NoError(t, countErr)
assert.Equal(t, int64(0), count) assert.Equal(t, int64(0), count)
@@ -1749,11 +1750,12 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
require.NoError(t, err) require.NoError(t, err)
// Confirm that we start with the right number of categories and SidebarChannels entries // 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.NoError(t, err)
require.Equal(t, int64(4), count) 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.NoError(t, err)
require.Equal(t, int64(2), count) require.Equal(t, int64(2), count)
@@ -1762,11 +1764,11 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
assert.NoError(t, err) assert.NoError(t, err)
// Confirm that all the categories and SidebarChannel entries have been deleted // 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) require.NoError(t, err)
assert.Equal(t, int64(0), count) 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) require.NoError(t, err)
assert.Equal(t, int64(0), count) assert.Equal(t, int64(0), count)
}) })
@@ -1797,11 +1799,12 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
require.NoError(t, err) require.NoError(t, err)
// Confirm that we start with the right number of categories and SidebarChannels entries // 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.NoError(t, err)
require.Equal(t, int64(4), count) 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.NoError(t, err)
require.Equal(t, int64(2), count) require.Equal(t, int64(2), count)
@@ -1810,11 +1813,11 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
assert.NoError(t, err) assert.NoError(t, err)
// Confirm that nothing has been deleted // 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) require.NoError(t, err)
assert.Equal(t, int64(4), count) 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) require.NoError(t, err)
assert.Equal(t, int64(2), count) assert.Equal(t, int64(2), count)
}) })
@@ -1870,11 +1873,12 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
require.NoError(t, err) require.NoError(t, err)
// Confirm that we start with the right number of categories and SidebarChannels entries // 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.NoError(t, err)
require.Equal(t, int64(8), count) 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.NoError(t, err)
require.Equal(t, int64(4), count) require.Equal(t, int64(4), count)
@@ -1883,11 +1887,11 @@ func testClearSidebarOnTeamLeave(t *testing.T, ss store.Store, s SqlStore) {
assert.NoError(t, err) assert.NoError(t, err)
// Confirm that we have the correct number of categories and SidebarChannels entries left over // 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) require.NoError(t, err)
assert.Equal(t, int64(4), count) 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) require.NoError(t, err)
assert.Equal(t, int64(2), count) 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) assert.Len(t, res.Categories, 3)
// ...and that the corresponding SidebarChannel entries were deleted // ...and that the corresponding SidebarChannel entries were deleted
count, countErr := s.GetMaster().SelectInt(` var count int64
countErr := s.GetMasterX().Get(&count, `
SELECT SELECT
COUNT(*) COUNT(*)
FROM FROM
SidebarChannels SidebarChannels
WHERE WHERE
CategoryId = :CategoryId`, map[string]interface{}{"CategoryId": newCategory.Id}) CategoryId = ?`, newCategory.Id)
require.NoError(t, countErr) require.NoError(t, countErr)
assert.Equal(t, int64(0), count) 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") require.Len(t, r4.Order, 3, "should have 3 posts")
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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) assert.Equal(t, p1.Message, r1[0].Message)
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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)) assert.Equal(t, 0, len(r1))
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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) assert.ElementsMatch(t, postIds[:100], exportedPostIds)
// Manually truncate Channels table until testlib can handle cleanups // 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) { 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) { t.Run("UpdateAt collisions", func(t *testing.T) {
// this test requires all the UpdateAt timestamps to be the same. // this test requires all the UpdateAt timestamps to be the same.
args := map[string]interface{}{"UpdateAt": model.GetMillis()} result, err := s.GetMasterX().Exec("UPDATE Posts SET UpdateAt = ?", model.GetMillis())
result, err := s.GetMaster().Exec("UPDATE Posts SET UpdateAt = :UpdateAt", args)
require.NoError(t, err) require.NoError(t, err)
rows, err := result.RowsAffected() rows, err := result.RowsAffected()
require.NoError(t, err) 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 { func forceUpdateAt(reaction *model.Reaction, updateAt int64, s SqlStore) error {
params := map[string]interface{}{ params := map[string]interface{}{
"UserId": reaction.UserId, "userid": reaction.UserId,
"PostId": reaction.PostId, "postid": reaction.PostId,
"EmojiName": reaction.EmojiName, "emojiname": reaction.EmojiName,
"UpdateAt": updateAt, "updateat": updateAt,
} }
sqlResult, err := s.GetMaster().Exec(` sqlResult, err := s.GetMasterX().NamedExec(`
UPDATE UPDATE
Reactions Reactions
SET SET
UpdateAt=:UpdateAt UpdateAt=:updateat
WHERE WHERE
UserId = :UserId AND UserId = :userid AND
PostId = :PostId AND PostId = :postid AND
EmojiName = :EmojiName`, params, EmojiName = :emojiname`, params,
) )
if err != nil { 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 { 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 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 err
} }
return nil return nil

Просмотреть файл

@@ -153,7 +153,7 @@ func cleanupRetentionPolicyTest(s SqlStore) {
// Manually clear tables until testlib can handle cleanups // Manually clear tables until testlib can handle cleanups
tables := []string{"RetentionPolicies", "RetentionPoliciesChannels", "RetentionPoliciesTeams"} tables := []string{"RetentionPolicies", "RetentionPoliciesChannels", "RetentionPoliciesTeams"}
for _, table := range tables { 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) panic(err)
} }
} }

Просмотреть файл

@@ -578,7 +578,7 @@ func testRoleStoreChannelHigherScopedPermissionsBlankTeamSchemeChannelGuest(t *t
require.NoError(t, err) require.NoError(t, err)
// blank-out the guest role to simulate an old team scheme, ensure it's blank // 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) require.NoError(t, sqlErr)
rows, serr := result.RowsAffected() rows, serr := result.RowsAffected()
require.NoError(t, serr) require.NoError(t, serr)

Просмотреть файл

@@ -23,7 +23,7 @@ const (
) )
func cleanupStatusStore(t *testing.T, s SqlStore) { 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) require.NoError(t, execerr)
} }