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