From ac0d9a7e3fbe0d46da3349103ba86e59c66c26c2 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Tue, 7 Nov 2023 22:18:31 +0900 Subject: [PATCH] fix sqlite3. added parameters as same as postgresql --- sqlite3/init.go | 27 ++++++++++++++++++++++++--- sqlite3/query.go | 15 +++++++-------- sqlite3/sqlite3.go | 9 ++++++--- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/sqlite3/init.go b/sqlite3/init.go index 40be3fa..6deb362 100644 --- a/sqlite3/init.go +++ b/sqlite3/init.go @@ -7,6 +7,14 @@ import ( _ "github.com/mattn/go-sqlite3" ) +const ( + queryLimit = 100 + queryIDsLimit = 500 + queryAuthorsLimit = 500 + queryKindsLimit = 10 + queryTagsLimit = 10 +) + var _ eventstore.Store = (*SQLite3Backend)(nil) var ddls = []string{ @@ -30,9 +38,6 @@ func (b *SQLite3Backend) Init() error { return err } - db.SetMaxOpenConns(b.MaxOpenConns) - db.SetMaxIdleConns(b.MaxIdleConns) - db.Mapper = reflectx.NewMapperFunc("json", sqlx.NameMapper) b.DB = db @@ -42,5 +47,21 @@ func (b *SQLite3Backend) Init() error { 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 } diff --git a/sqlite3/query.go b/sqlite3/query.go index 669b55d..5025602 100644 --- a/sqlite3/query.go +++ b/sqlite3/query.go @@ -15,7 +15,7 @@ import ( func (b SQLite3Backend) QueryEvents(ctx context.Context, filter nostr.Filter) (ch chan *nostr.Event, err error) { ch = make(chan *nostr.Event) - query, params, err := queryEventsSql(filter, false) + query, params, err := b.queryEventsSql(filter, false) if err != nil { close(ch) 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) { - query, params, err := queryEventsSql(filter, true) + query, params, err := b.queryEventsSql(filter, true) if err != nil { return 0, err } var count int64 - err = b.DB.QueryRow(query, params...).Scan(&count) - if err != nil && err != sql.ErrNoRows { + if err = b.DB.QueryRow(query, params...).Scan(&count); err != nil && err != sql.ErrNoRows { return 0, fmt.Errorf("failed to fetch events using query %q: %w", query, err) } 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 params []any @@ -88,7 +87,7 @@ func queryEventsSql(filter nostr.Filter, doCount bool) (string, []any, error) { } if filter.Authors != nil { - if len(filter.Authors) > 500 { + if len(filter.Authors) > b.QueryAuthorsLimit { // too many authors, fail everything return "", nil, nil } @@ -169,8 +168,8 @@ func queryEventsSql(filter nostr.Filter, doCount bool) (string, []any, error) { conditions = append(conditions, "true") } - if filter.Limit < 1 || filter.Limit > 100 { - params = append(params, 100) + if filter.Limit < 1 || filter.Limit > b.QueryLimit { + params = append(params, b.QueryLimit) } else { params = append(params, filter.Limit) } diff --git a/sqlite3/sqlite3.go b/sqlite3/sqlite3.go index aab93ff..dc6c48f 100644 --- a/sqlite3/sqlite3.go +++ b/sqlite3/sqlite3.go @@ -6,9 +6,12 @@ import ( type SQLite3Backend struct { *sqlx.DB - DatabaseURL string - MaxOpenConns int - MaxIdleConns int + DatabaseURL string + QueryLimit int + QueryIDsLimit int + QueryAuthorsLimit int + QueryKindsLimit int + QueryTagsLimit int } func (b *SQLite3Backend) Close() {