mirror of
https://github.com/hanzoai/team.git
synced 2026-09-30 01:57:35 +00:00
Drop the legacy `X` suffix from `GetMasterX` and `GetReplicaX`. The presence of the suffix suggests there's a `non-X` version: but in fact we migrated these away a long time ago, so remove the cognitive overhead. As an aside, this additionally helps avoid trip up LLMs that interpret this as "something to fix".
93 lines
2.0 KiB
Go
93 lines
2.0 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package sqlstore
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/mattermost/mattermost/server/public/model"
|
|
"github.com/mattermost/mattermost/server/public/shared/mlog"
|
|
)
|
|
|
|
func TestSqlX(t *testing.T) {
|
|
t.Run("NamedQuery", func(t *testing.T) {
|
|
testDrivers := []string{
|
|
model.DatabaseDriverPostgres,
|
|
model.DatabaseDriverMysql,
|
|
}
|
|
|
|
for _, driver := range testDrivers {
|
|
settings, err := makeSqlSettings(driver)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
*settings.QueryTimeout = 1
|
|
store := &SqlStore{
|
|
rrCounter: 0,
|
|
srCounter: 0,
|
|
settings: settings,
|
|
logger: mlog.CreateConsoleTestLogger(t),
|
|
quitMonitor: make(chan struct{}),
|
|
wgMonitor: &sync.WaitGroup{},
|
|
}
|
|
|
|
require.NoError(t, store.initConnection())
|
|
|
|
defer store.Close()
|
|
|
|
tx, err := store.GetMaster().Beginx()
|
|
require.NoError(t, err)
|
|
|
|
var query string
|
|
if store.DriverName() == model.DatabaseDriverMysql {
|
|
query = `SELECT SLEEP(:Timeout);`
|
|
} else if store.DriverName() == model.DatabaseDriverPostgres {
|
|
query = `SELECT pg_sleep(:timeout);`
|
|
}
|
|
arg := struct{ Timeout int }{Timeout: 2}
|
|
_, err = tx.NamedQuery(query, arg)
|
|
require.Equal(t, context.DeadlineExceeded, err)
|
|
require.NoError(t, tx.Commit())
|
|
}
|
|
})
|
|
|
|
t.Run("NamedParse", func(t *testing.T) {
|
|
queries := []struct {
|
|
in string
|
|
out string
|
|
}{
|
|
{
|
|
in: `SELECT pg_sleep(:Timeout)`,
|
|
out: `SELECT pg_sleep(:timeout)`,
|
|
},
|
|
{
|
|
in: `SELECT u.Username FROM Bots
|
|
LIMIT
|
|
:Limit
|
|
OFFSET
|
|
:Offset`,
|
|
out: `SELECT u.Username FROM Bots
|
|
LIMIT
|
|
:limit
|
|
OFFSET
|
|
:offset`,
|
|
},
|
|
{
|
|
in: `UPDATE OAuthAccessData SET Token =:Token`,
|
|
out: `UPDATE OAuthAccessData SET Token =:token`,
|
|
},
|
|
}
|
|
for _, q := range queries {
|
|
out := namedParamRegex.ReplaceAllStringFunc(q.in, strings.ToLower)
|
|
assert.Equal(t, q.out, out)
|
|
}
|
|
})
|
|
}
|