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.
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user