fix sqlite3. added parameters as same as postgresql

This commit is contained in:
Yasuhiro Matsumoto
2023-11-07 22:18:31 +09:00
parent 3539b22598
commit ac0d9a7e3f
3 changed files with 37 additions and 14 deletions

View File

@@ -7,6 +7,14 @@ import (
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
) )
const (
queryLimit = 100
queryIDsLimit = 500
queryAuthorsLimit = 500
queryKindsLimit = 10
queryTagsLimit = 10
)
var _ eventstore.Store = (*SQLite3Backend)(nil) var _ eventstore.Store = (*SQLite3Backend)(nil)
var ddls = []string{ var ddls = []string{
@@ -30,9 +38,6 @@ func (b *SQLite3Backend) Init() error {
return err return err
} }
db.SetMaxOpenConns(b.MaxOpenConns)
db.SetMaxIdleConns(b.MaxIdleConns)
db.Mapper = reflectx.NewMapperFunc("json", sqlx.NameMapper) db.Mapper = reflectx.NewMapperFunc("json", sqlx.NameMapper)
b.DB = db b.DB = db
@@ -42,5 +47,21 @@ func (b *SQLite3Backend) Init() error {
return err return err
} }
} }
if b.QueryLimit == 0 {
b.QueryLimit = queryLimit
}
if b.QueryIDsLimit == 0 {
b.QueryIDsLimit = queryIDsLimit
}
if b.QueryAuthorsLimit == 0 {
b.QueryAuthorsLimit = queryAuthorsLimit
}
if b.QueryKindsLimit == 0 {
b.QueryKindsLimit = queryKindsLimit
}
if b.QueryTagsLimit == 0 {
b.QueryTagsLimit = queryTagsLimit
}
return nil return nil
} }

View File

@@ -15,7 +15,7 @@ import (
func (b SQLite3Backend) QueryEvents(ctx context.Context, filter nostr.Filter) (ch chan *nostr.Event, err error) { func (b SQLite3Backend) QueryEvents(ctx context.Context, filter nostr.Filter) (ch chan *nostr.Event, err error) {
ch = make(chan *nostr.Event) ch = make(chan *nostr.Event)
query, params, err := queryEventsSql(filter, false) query, params, err := b.queryEventsSql(filter, false)
if err != nil { if err != nil {
close(ch) close(ch)
return nil, err return nil, err
@@ -47,20 +47,19 @@ func (b SQLite3Backend) QueryEvents(ctx context.Context, filter nostr.Filter) (c
} }
func (b SQLite3Backend) CountEvents(ctx context.Context, filter nostr.Filter) (int64, error) { func (b SQLite3Backend) CountEvents(ctx context.Context, filter nostr.Filter) (int64, error) {
query, params, err := queryEventsSql(filter, true) query, params, err := b.queryEventsSql(filter, true)
if err != nil { if err != nil {
return 0, err return 0, err
} }
var count int64 var count int64
err = b.DB.QueryRow(query, params...).Scan(&count) if err = b.DB.QueryRow(query, params...).Scan(&count); err != nil && err != sql.ErrNoRows {
if err != nil && err != sql.ErrNoRows {
return 0, fmt.Errorf("failed to fetch events using query %q: %w", query, err) return 0, fmt.Errorf("failed to fetch events using query %q: %w", query, err)
} }
return count, nil return count, nil
} }
func queryEventsSql(filter nostr.Filter, doCount bool) (string, []any, error) { func (b SQLite3Backend) queryEventsSql(filter nostr.Filter, doCount bool) (string, []any, error) {
var conditions []string var conditions []string
var params []any var params []any
@@ -88,7 +87,7 @@ func queryEventsSql(filter nostr.Filter, doCount bool) (string, []any, error) {
} }
if filter.Authors != nil { if filter.Authors != nil {
if len(filter.Authors) > 500 { if len(filter.Authors) > b.QueryAuthorsLimit {
// too many authors, fail everything // too many authors, fail everything
return "", nil, nil return "", nil, nil
} }
@@ -169,8 +168,8 @@ func queryEventsSql(filter nostr.Filter, doCount bool) (string, []any, error) {
conditions = append(conditions, "true") conditions = append(conditions, "true")
} }
if filter.Limit < 1 || filter.Limit > 100 { if filter.Limit < 1 || filter.Limit > b.QueryLimit {
params = append(params, 100) params = append(params, b.QueryLimit)
} else { } else {
params = append(params, filter.Limit) params = append(params, filter.Limit)
} }

View File

@@ -7,8 +7,11 @@ import (
type SQLite3Backend struct { type SQLite3Backend struct {
*sqlx.DB *sqlx.DB
DatabaseURL string DatabaseURL string
MaxOpenConns int QueryLimit int
MaxIdleConns int QueryIDsLimit int
QueryAuthorsLimit int
QueryKindsLimit int
QueryTagsLimit int
} }
func (b *SQLite3Backend) Close() { func (b *SQLite3Backend) Close() {