fix(module,store): nillable filter and query options
This commit is contained in:
parent
3e601272d7
commit
4606d7a08d
|
@ -91,6 +91,7 @@ func (m *StoreModule) query(call goja.FunctionCall, rt *goja.Runtime) goja.Value
|
||||||
|
|
||||||
queryOptionsFuncs := make([]storage.QueryOptionFunc, 0)
|
queryOptionsFuncs := make([]storage.QueryOptionFunc, 0)
|
||||||
|
|
||||||
|
if queryOptions != nil {
|
||||||
if queryOptions.Limit != nil {
|
if queryOptions.Limit != nil {
|
||||||
queryOptionsFuncs = append(queryOptionsFuncs, storage.WithLimit(*queryOptions.Limit))
|
queryOptionsFuncs = append(queryOptionsFuncs, storage.WithLimit(*queryOptions.Limit))
|
||||||
}
|
}
|
||||||
|
@ -108,6 +109,7 @@ func (m *StoreModule) query(call goja.FunctionCall, rt *goja.Runtime) goja.Value
|
||||||
storage.OrderDirection(*queryOptions.OrderDirection),
|
storage.OrderDirection(*queryOptions.OrderDirection),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
documents, err := m.store.Query(ctx, collection, filter, queryOptionsFuncs...)
|
documents, err := m.store.Query(ctx, collection, filter, queryOptionsFuncs...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -144,6 +146,10 @@ func (m *StoreModule) assertCollection(value goja.Value, rt *goja.Runtime) strin
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *StoreModule) assertFilter(value goja.Value, rt *goja.Runtime) *filter.Filter {
|
func (m *StoreModule) assertFilter(value goja.Value, rt *goja.Runtime) *filter.Filter {
|
||||||
|
if value.Export() == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
rawFilter, ok := value.Export().(map[string]interface{})
|
rawFilter, ok := value.Export().(map[string]interface{})
|
||||||
if !ok {
|
if !ok {
|
||||||
panic(rt.NewTypeError(fmt.Sprintf("filter must be an object, got '%T'", value.Export())))
|
panic(rt.NewTypeError(fmt.Sprintf("filter must be an object, got '%T'", value.Export())))
|
||||||
|
@ -172,6 +178,10 @@ func (m *StoreModule) assertDocumentID(value goja.Value, rt *goja.Runtime) stora
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *StoreModule) assertQueryOptions(value goja.Value, rt *goja.Runtime) *queryOptions {
|
func (m *StoreModule) assertQueryOptions(value goja.Value, rt *goja.Runtime) *queryOptions {
|
||||||
|
if value.Export() == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
rawQueryOptions, ok := value.Export().(map[string]interface{})
|
rawQueryOptions, ok := value.Export().(map[string]interface{})
|
||||||
if !ok {
|
if !ok {
|
||||||
panic(rt.NewTypeError(fmt.Sprintf("query options must be an object, got '%T'", value.Export())))
|
panic(rt.NewTypeError(fmt.Sprintf("query options must be an object, got '%T'", value.Export())))
|
||||||
|
|
|
@ -93,7 +93,13 @@ func (s *DocumentStore) Query(ctx context.Context, collection string, filter *fi
|
||||||
var documents []storage.Document
|
var documents []storage.Document
|
||||||
|
|
||||||
err := s.withTx(ctx, func(tx *sql.Tx) error {
|
err := s.withTx(ctx, func(tx *sql.Tx) error {
|
||||||
criteria, args, err := filterSQL.ToSQL(
|
criteria := "1 = 1"
|
||||||
|
args := make([]any, 0)
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if filter != nil {
|
||||||
|
criteria, args, err = filterSQL.ToSQL(
|
||||||
filter.Root(),
|
filter.Root(),
|
||||||
filterSQL.WithPreparedParameter("$", 2),
|
filterSQL.WithPreparedParameter("$", 2),
|
||||||
filterSQL.WithKeyTransform(func(key string) string {
|
filterSQL.WithKeyTransform(func(key string) string {
|
||||||
|
@ -103,6 +109,7 @@ func (s *DocumentStore) Query(ctx context.Context, collection string, filter *fi
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.WithStack(err)
|
return errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
query := `
|
query := `
|
||||||
SELECT id, data, created_at, updated_at
|
SELECT id, data, created_at, updated_at
|
||||||
|
|
Loading…
Reference in New Issue