Use query variadic to make lookups actually work!

This commit is contained in:
Kegan Dougal 2020-03-03 18:33:01 +00:00
parent 53f6ace2a9
commit 49d95b03da

View file

@ -18,8 +18,9 @@ package sqlite3
import ( import (
"context" "context"
"database/sql" "database/sql"
"strings"
"github.com/lib/pq" "github.com/matrix-org/dendrite/common"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
) )
@ -60,11 +61,13 @@ const upsertServerKeysSQL = "" +
" DO UPDATE SET valid_until_ts = $4, expired_ts = $5, server_key = $6" " DO UPDATE SET valid_until_ts = $4, expired_ts = $5, server_key = $6"
type serverKeyStatements struct { type serverKeyStatements struct {
db *sql.DB
bulkSelectServerKeysStmt *sql.Stmt bulkSelectServerKeysStmt *sql.Stmt
upsertServerKeysStmt *sql.Stmt upsertServerKeysStmt *sql.Stmt
} }
func (s *serverKeyStatements) prepare(db *sql.DB) (err error) { func (s *serverKeyStatements) prepare(db *sql.DB) (err error) {
s.db = db
_, err = db.Exec(serverKeysSchema) _, err = db.Exec(serverKeysSchema)
if err != nil { if err != nil {
return return
@ -86,8 +89,14 @@ func (s *serverKeyStatements) bulkSelectServerKeys(
for request := range requests { for request := range requests {
nameAndKeyIDs = append(nameAndKeyIDs, nameAndKeyID(request)) nameAndKeyIDs = append(nameAndKeyIDs, nameAndKeyID(request))
} }
stmt := s.bulkSelectServerKeysStmt query := strings.Replace(bulkSelectServerKeysSQL, "($1)", common.QueryVariadic(len(nameAndKeyIDs)), 1)
rows, err := stmt.QueryContext(ctx, pq.StringArray(nameAndKeyIDs))
iKeyIDs := make([]interface{}, len(nameAndKeyIDs))
for i, v := range nameAndKeyIDs {
iKeyIDs[i] = v
}
rows, err := s.db.QueryContext(ctx, query, iKeyIDs...)
if err != nil { if err != nil {
return nil, err return nil, err
} }