mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-23 14:53:10 -06:00
Readability improvements and linting
This commit is contained in:
parent
43375d0e5e
commit
1259a8bace
|
|
@ -129,22 +129,23 @@ type QueryProvider interface {
|
||||||
const SQLite3MaxVariables = 999
|
const SQLite3MaxVariables = 999
|
||||||
|
|
||||||
// RunLimitedVariablesQuery split up a query with more variables than the used database can handle in multiple queries.
|
// RunLimitedVariablesQuery split up a query with more variables than the used database can handle in multiple queries.
|
||||||
func RunLimitedVariablesQuery(ctx context.Context, query string, qp QueryProvider, rowHandler func(*sql.Rows) error, variables []interface{}, limit uint) error {
|
func RunLimitedVariablesQuery(ctx context.Context, query string, qp QueryProvider, variables []interface{}, limit uint, rowHandler func(*sql.Rows) error) error {
|
||||||
var start int
|
var start int
|
||||||
for start < len(variables) {
|
for start < len(variables) {
|
||||||
n := minOfInts(len(variables)-start, int(limit))
|
n := minOfInts(len(variables)-start, int(limit))
|
||||||
query := strings.Replace(query, "($1)", QueryVariadic(n), 1)
|
nextQuery := strings.Replace(query, "($1)", QueryVariadic(n), 1)
|
||||||
rows, err := qp.QueryContext(ctx, query, variables[start:start+n]...)
|
rows, err := qp.QueryContext(ctx, nextQuery, variables[start:start+n]...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
util.GetLogger(ctx).WithError(err).Error("QueryContext returned an error")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = rowHandler(rows)
|
err = rowHandler(rows)
|
||||||
if err := rows.Close(); err != nil {
|
if closeErr := rows.Close(); closeErr != nil {
|
||||||
util.GetLogger(ctx).WithError(err).Error(err.Error())
|
util.GetLogger(ctx).WithError(closeErr).Error("RunLimitedVariablesQuery: failed to close rows")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.GetLogger(ctx).WithError(err).Error(err.Error())
|
util.GetLogger(ctx).WithError(err).Error("RunLimitedVariablesQuery: rowHandler returned error")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
start = start + n
|
start = start + n
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,8 @@ func TestShouldReturnCorrectAmountOfResulstIfFewerVariablesThanLimit(t *testing.
|
||||||
AddRow(2).
|
AddRow(2).
|
||||||
AddRow(3)
|
AddRow(3)
|
||||||
|
|
||||||
mock.ExpectQuery("SELECT id WHERE id IN \\((\\$[0-9]{1,4},?\\s?){3}\\)").WillReturnRows(r)
|
mock.ExpectQuery(`SELECT id WHERE id IN \(\$1, \$2, \$3\)`).WillReturnRows(r)
|
||||||
|
// nolint:goconst
|
||||||
q := "SELECT id WHERE id IN ($1)"
|
q := "SELECT id WHERE id IN ($1)"
|
||||||
v := []int{1, 2, 3}
|
v := []int{1, 2, 3}
|
||||||
iKeyIDs := make([]interface{}, len(v))
|
iKeyIDs := make([]interface{}, len(v))
|
||||||
|
|
@ -29,7 +30,7 @@ func TestShouldReturnCorrectAmountOfResulstIfFewerVariablesThanLimit(t *testing.
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
var result = make([]int, 0)
|
var result = make([]int, 0)
|
||||||
err = RunLimitedVariablesQuery(ctx, q, db, func(rows *sql.Rows) error {
|
err = RunLimitedVariablesQuery(ctx, q, db, iKeyIDs, limit, func(rows *sql.Rows) error {
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var id int
|
var id int
|
||||||
err = rows.Scan(&id)
|
err = rows.Scan(&id)
|
||||||
|
|
@ -37,7 +38,7 @@ func TestShouldReturnCorrectAmountOfResulstIfFewerVariablesThanLimit(t *testing.
|
||||||
result = append(result, id)
|
result = append(result, id)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}, iKeyIDs, limit)
|
})
|
||||||
assertNoError(t, err, "Call returned an error")
|
assertNoError(t, err, "Call returned an error")
|
||||||
if len(result) != len(v) {
|
if len(result) != len(v) {
|
||||||
t.Fatalf("Result should be 3 long")
|
t.Fatalf("Result should be 3 long")
|
||||||
|
|
@ -55,7 +56,8 @@ func TestShouldReturnCorrectAmountOfResulstIfEqualVariablesAsLimit(t *testing.T)
|
||||||
AddRow(3).
|
AddRow(3).
|
||||||
AddRow(4)
|
AddRow(4)
|
||||||
|
|
||||||
mock.ExpectQuery("SELECT id WHERE id IN \\((\\$[0-9]{1,4},?\\s?){4}\\)").WillReturnRows(r)
|
mock.ExpectQuery(`SELECT id WHERE id IN \(\$1, \$2, \$3, \$4\)`).WillReturnRows(r)
|
||||||
|
// nolint:goconst
|
||||||
q := "SELECT id WHERE id IN ($1)"
|
q := "SELECT id WHERE id IN ($1)"
|
||||||
v := []int{1, 2, 3, 4}
|
v := []int{1, 2, 3, 4}
|
||||||
iKeyIDs := make([]interface{}, len(v))
|
iKeyIDs := make([]interface{}, len(v))
|
||||||
|
|
@ -65,7 +67,7 @@ func TestShouldReturnCorrectAmountOfResulstIfEqualVariablesAsLimit(t *testing.T)
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
var result = make([]int, 0)
|
var result = make([]int, 0)
|
||||||
err = RunLimitedVariablesQuery(ctx, q, db, func(rows *sql.Rows) error {
|
err = RunLimitedVariablesQuery(ctx, q, db, iKeyIDs, limit, func(rows *sql.Rows) error {
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var id int
|
var id int
|
||||||
err = rows.Scan(&id)
|
err = rows.Scan(&id)
|
||||||
|
|
@ -73,7 +75,7 @@ func TestShouldReturnCorrectAmountOfResulstIfEqualVariablesAsLimit(t *testing.T)
|
||||||
result = append(result, id)
|
result = append(result, id)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}, iKeyIDs, limit)
|
})
|
||||||
assertNoError(t, err, "Call returned an error")
|
assertNoError(t, err, "Call returned an error")
|
||||||
if len(result) != len(v) {
|
if len(result) != len(v) {
|
||||||
t.Fatalf("Result should be 4 long")
|
t.Fatalf("Result should be 4 long")
|
||||||
|
|
@ -94,8 +96,9 @@ func TestShouldReturnCorrectAmountOfResultsIfMoreVariablesThanLimit(t *testing.T
|
||||||
r2 := mock.NewRows([]string{"id"}).
|
r2 := mock.NewRows([]string{"id"}).
|
||||||
AddRow(5)
|
AddRow(5)
|
||||||
|
|
||||||
mock.ExpectQuery("SELECT id WHERE id IN \\((\\$[0-9]{1,4},?\\s?){4}\\)").WillReturnRows(r1)
|
mock.ExpectQuery(`SELECT id WHERE id IN \(\$1, \$2, \$3, \$4\)`).WillReturnRows(r1)
|
||||||
mock.ExpectQuery("SELECT id WHERE id IN \\((\\$[0-9]{1,4},?\\s?){1}\\)").WillReturnRows(r2)
|
mock.ExpectQuery(`SELECT id WHERE id IN \(\$1\)`).WillReturnRows(r2)
|
||||||
|
// nolint:goconst
|
||||||
q := "SELECT id WHERE id IN ($1)"
|
q := "SELECT id WHERE id IN ($1)"
|
||||||
v := []int{1, 2, 3, 4, 5}
|
v := []int{1, 2, 3, 4, 5}
|
||||||
iKeyIDs := make([]interface{}, len(v))
|
iKeyIDs := make([]interface{}, len(v))
|
||||||
|
|
@ -105,7 +108,7 @@ func TestShouldReturnCorrectAmountOfResultsIfMoreVariablesThanLimit(t *testing.T
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
var result = make([]int, 0)
|
var result = make([]int, 0)
|
||||||
err = RunLimitedVariablesQuery(ctx, q, db, func(rows *sql.Rows) error {
|
err = RunLimitedVariablesQuery(ctx, q, db, iKeyIDs, limit, func(rows *sql.Rows) error {
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var id int
|
var id int
|
||||||
err = rows.Scan(&id)
|
err = rows.Scan(&id)
|
||||||
|
|
@ -113,7 +116,7 @@ func TestShouldReturnCorrectAmountOfResultsIfMoreVariablesThanLimit(t *testing.T
|
||||||
result = append(result, id)
|
result = append(result, id)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}, iKeyIDs, limit)
|
})
|
||||||
assertNoError(t, err, "Call returned an error")
|
assertNoError(t, err, "Call returned an error")
|
||||||
if len(result) != len(v) {
|
if len(result) != len(v) {
|
||||||
t.Fatalf("Result should be 5 long")
|
t.Fatalf("Result should be 5 long")
|
||||||
|
|
@ -123,7 +126,7 @@ func TestShouldReturnCorrectAmountOfResultsIfMoreVariablesThanLimit(t *testing.T
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestShouldREturnErrorIfRowsScanReturnsError(t *testing.T) {
|
func TestShouldReturnErrorIfRowsScanReturnsError(t *testing.T) {
|
||||||
db, mock, err := sqlmock.New()
|
db, mock, err := sqlmock.New()
|
||||||
assertNoError(t, err, "Failed to make DB")
|
assertNoError(t, err, "Failed to make DB")
|
||||||
limit := uint(4)
|
limit := uint(4)
|
||||||
|
|
@ -134,7 +137,8 @@ func TestShouldREturnErrorIfRowsScanReturnsError(t *testing.T) {
|
||||||
AddRow(2).
|
AddRow(2).
|
||||||
AddRow(3)
|
AddRow(3)
|
||||||
|
|
||||||
mock.ExpectQuery("SELECT id WHERE id IN \\((\\$[0-9]{1,4},?\\s?){3}\\)").WillReturnRows(r)
|
mock.ExpectQuery(`SELECT id WHERE id IN \(\$1, \$2, \$3\)`).WillReturnRows(r)
|
||||||
|
// nolint:goconst
|
||||||
q := "SELECT id WHERE id IN ($1)"
|
q := "SELECT id WHERE id IN ($1)"
|
||||||
v := []int{-1, -2, 3}
|
v := []int{-1, -2, 3}
|
||||||
iKeyIDs := make([]interface{}, len(v))
|
iKeyIDs := make([]interface{}, len(v))
|
||||||
|
|
@ -144,7 +148,7 @@ func TestShouldREturnErrorIfRowsScanReturnsError(t *testing.T) {
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
var result = make([]uint, 0)
|
var result = make([]uint, 0)
|
||||||
err = RunLimitedVariablesQuery(ctx, q, db, func(rows *sql.Rows) error {
|
err = RunLimitedVariablesQuery(ctx, q, db, iKeyIDs, limit, func(rows *sql.Rows) error {
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var id uint
|
var id uint
|
||||||
err = rows.Scan(&id)
|
err = rows.Scan(&id)
|
||||||
|
|
@ -154,7 +158,7 @@ func TestShouldREturnErrorIfRowsScanReturnsError(t *testing.T) {
|
||||||
result = append(result, id)
|
result = append(result, id)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}, iKeyIDs, limit)
|
})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("Call did not return an error")
|
t.Fatalf("Call did not return an error")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,8 @@ func (s *serverKeyStatements) bulkSelectServerKeys(
|
||||||
iKeyIDs[i] = v
|
iKeyIDs[i] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
err := sqlutil.RunLimitedVariablesQuery(ctx, bulkSelectServerKeysSQL, s.db,
|
err := sqlutil.RunLimitedVariablesQuery(
|
||||||
|
ctx, bulkSelectServerKeysSQL, s.db, iKeyIDs, sqlutil.SQLite3MaxVariables,
|
||||||
func(rows *sql.Rows) error {
|
func(rows *sql.Rows) error {
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var serverName string
|
var serverName string
|
||||||
|
|
@ -125,7 +126,7 @@ func (s *serverKeyStatements) bulkSelectServerKeys(
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
iKeyIDs, sqlutil.SQLite3MaxVariables)
|
)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue