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"
)
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
}

View File

@@ -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)
}

View File

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