fix sqlite3. added parameters as same as postgresql
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user