mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-12 09:23:09 -06:00
Check for existing filter before inserting a new one
Signed-off-by: Andrew (anoa) <anoa@openmailbox.org>
This commit is contained in:
parent
e5944e0fdb
commit
5a09d5123d
|
|
@ -38,11 +38,15 @@ CREATE INDEX IF NOT EXISTS account_filter_localpart ON account_filter(localpart)
|
||||||
const selectFilterSQL = "" +
|
const selectFilterSQL = "" +
|
||||||
"SELECT filter FROM account_filter WHERE localpart = $1 AND id = $2"
|
"SELECT filter FROM account_filter WHERE localpart = $1 AND id = $2"
|
||||||
|
|
||||||
|
const selectFilterByContentSQL = "" +
|
||||||
|
"SELECT filter FROM account_filter WHERE localpart = $1 AND filter = $2"
|
||||||
|
|
||||||
const insertFilterSQL = "" +
|
const insertFilterSQL = "" +
|
||||||
"INSERT INTO account_filter (filter, id, localpart) VALUES ($1, DEFAULT, $2) RETURNING id"
|
"INSERT INTO account_filter (filter, id, localpart) VALUES ($1, DEFAULT, $2) RETURNING id"
|
||||||
|
|
||||||
type filterStatements struct {
|
type filterStatements struct {
|
||||||
selectFilterStmt *sql.Stmt
|
selectFilterStmt *sql.Stmt
|
||||||
|
selectFilterByContentStmt *sql.Stmt
|
||||||
insertFilterStmt *sql.Stmt
|
insertFilterStmt *sql.Stmt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -54,6 +58,9 @@ func (s *filterStatements) prepare(db *sql.DB) (err error) {
|
||||||
if s.selectFilterStmt, err = db.Prepare(selectFilterSQL); err != nil {
|
if s.selectFilterStmt, err = db.Prepare(selectFilterSQL); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if s.selectFilterByContentStmt, err = db.Prepare(selectFilterByContentSQL); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
if s.insertFilterStmt, err = db.Prepare(insertFilterSQL); err != nil {
|
if s.insertFilterStmt, err = db.Prepare(insertFilterSQL); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -70,6 +77,15 @@ func (s *filterStatements) selectFilter(
|
||||||
func (s *filterStatements) insertFilter(
|
func (s *filterStatements) insertFilter(
|
||||||
ctx context.Context, filter string, localpart string,
|
ctx context.Context, filter string, localpart string,
|
||||||
) (pos string, err error) {
|
) (pos string, err error) {
|
||||||
|
var existingFilter string
|
||||||
|
|
||||||
|
// Check if filter already exists in the database
|
||||||
|
err = s.selectFilterByContentStmt.QueryRowContext(ctx,
|
||||||
|
localpart, filter).Scan(&existingFilter)
|
||||||
|
if existingFilter != "" {
|
||||||
|
return existingFilter, err
|
||||||
|
}
|
||||||
|
|
||||||
err = s.insertFilterStmt.QueryRowContext(ctx, filter, localpart).Scan(&pos)
|
err = s.insertFilterStmt.QueryRowContext(ctx, filter, localpart).Scan(&pos)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue