feat(storage,document,sqlite): implements order by and limit
This commit is contained in:
@ -41,7 +41,7 @@ var documentStoreOpsTestCases = []documentStoreOpsTestCase{
|
||||
}),
|
||||
)
|
||||
|
||||
results, err := store.Query(ctx, collection, filter, nil)
|
||||
results, err := store.Query(ctx, collection, filter)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
@ -82,7 +82,7 @@ var documentStoreOpsTestCases = []documentStoreOpsTestCase{
|
||||
}),
|
||||
)
|
||||
|
||||
results, err := store.Query(ctx, collection, filter, nil)
|
||||
results, err := store.Query(ctx, collection, filter)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
@ -127,7 +127,7 @@ var documentStoreOpsTestCases = []documentStoreOpsTestCase{
|
||||
),
|
||||
)
|
||||
|
||||
results, err := store.Query(ctx, collection, filter, nil)
|
||||
results, err := store.Query(ctx, collection, filter)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
@ -219,7 +219,7 @@ var documentStoreOpsTestCases = []documentStoreOpsTestCase{
|
||||
|
||||
// Verify that there is no additional created document in the collection
|
||||
|
||||
results, err := store.Query(ctx, collection, nil, nil)
|
||||
results, err := store.Query(ctx, collection, nil)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
@ -228,6 +228,206 @@ var documentStoreOpsTestCases = []documentStoreOpsTestCase{
|
||||
return errors.Errorf("len(results): expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Query order by document field",
|
||||
Run: func(ctx context.Context, store storage.DocumentStore) error {
|
||||
docs := []storage.Document{
|
||||
{
|
||||
"sortedField": 0,
|
||||
"name": "Item 1",
|
||||
},
|
||||
{
|
||||
"sortedField": 1,
|
||||
"name": "Item 2",
|
||||
},
|
||||
{
|
||||
"sortedField": 2,
|
||||
"name": "Item 3",
|
||||
},
|
||||
}
|
||||
|
||||
collection := "ordered_query_by_document_field"
|
||||
|
||||
for _, doc := range docs {
|
||||
if _, err := store.Upsert(ctx, collection, doc); err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
}
|
||||
|
||||
results, err := store.Query(
|
||||
ctx, collection, nil,
|
||||
storage.WithOrderBy("sortedField"),
|
||||
storage.WithOrderDirection(storage.OrderDirectionAsc),
|
||||
)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
if e, g := 3, len(results); e != g {
|
||||
return errors.Errorf("len(results): expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[0]["name"], results[0]["name"]; e != g {
|
||||
return errors.Errorf("results[0][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[2]["name"], results[2]["name"]; e != g {
|
||||
return errors.Errorf("results[2][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
results, err = store.Query(
|
||||
ctx, collection, nil,
|
||||
storage.WithOrderBy("sortedField"),
|
||||
storage.WithOrderDirection(storage.OrderDirectionDesc),
|
||||
)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
if e, g := 3, len(results); e != g {
|
||||
return errors.Errorf("len(results): expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[2]["name"], results[0]["name"]; e != g {
|
||||
return errors.Errorf("results[0][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[0]["name"], results[2]["name"]; e != g {
|
||||
return errors.Errorf("results[2][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Query order by special attr",
|
||||
Run: func(ctx context.Context, store storage.DocumentStore) error {
|
||||
docs := []storage.Document{
|
||||
{
|
||||
"name": "Item 1",
|
||||
},
|
||||
{
|
||||
"name": "Item 2",
|
||||
},
|
||||
{
|
||||
"name": "Item 3",
|
||||
},
|
||||
}
|
||||
|
||||
collection := "ordered_query_by_special_attr"
|
||||
|
||||
for _, doc := range docs {
|
||||
if _, err := store.Upsert(ctx, collection, doc); err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
}
|
||||
|
||||
results, err := store.Query(
|
||||
ctx, collection, nil,
|
||||
storage.WithOrderBy(storage.DocumentAttrCreatedAt),
|
||||
storage.WithOrderDirection(storage.OrderDirectionAsc),
|
||||
)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
if e, g := 3, len(results); e != g {
|
||||
return errors.Errorf("len(results): expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[0]["name"], results[0]["name"]; e != g {
|
||||
return errors.Errorf("results[0][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[2]["name"], results[2]["name"]; e != g {
|
||||
return errors.Errorf("results[2][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
results, err = store.Query(
|
||||
ctx, collection, nil,
|
||||
storage.WithOrderBy(storage.DocumentAttrCreatedAt),
|
||||
storage.WithOrderDirection(storage.OrderDirectionDesc),
|
||||
)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
if e, g := 3, len(results); e != g {
|
||||
return errors.Errorf("len(results): expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[2]["name"], results[0]["name"]; e != g {
|
||||
return errors.Errorf("results[0][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[0]["name"], results[2]["name"]; e != g {
|
||||
return errors.Errorf("results[2][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Query limit and offset",
|
||||
Run: func(ctx context.Context, store storage.DocumentStore) error {
|
||||
docs := []storage.Document{
|
||||
{"name": "Item 1"},
|
||||
{"name": "Item 2"},
|
||||
{"name": "Item 3"},
|
||||
{"name": "Item 4"},
|
||||
}
|
||||
|
||||
collection := "query_limit_and_offset"
|
||||
|
||||
for _, doc := range docs {
|
||||
if _, err := store.Upsert(ctx, collection, doc); err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
}
|
||||
|
||||
results, err := store.Query(
|
||||
ctx, collection, nil,
|
||||
storage.WithLimit(2),
|
||||
)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
if e, g := 2, len(results); e != g {
|
||||
return errors.Errorf("len(results): expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[0]["name"], results[0]["name"]; e != g {
|
||||
return errors.Errorf("results[0][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[1]["name"], results[1]["name"]; e != g {
|
||||
return errors.Errorf("results[1][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
results, err = store.Query(
|
||||
ctx, collection, nil,
|
||||
storage.WithOffset(2),
|
||||
)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
if e, g := 2, len(results); e != g {
|
||||
return errors.Errorf("len(results): expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[2]["name"], results[0]["name"]; e != g {
|
||||
return errors.Errorf("results[0][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
if e, g := docs[3]["name"], results[1]["name"]; e != g {
|
||||
return errors.Errorf("results[1][\"name\"]: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
|
Reference in New Issue
Block a user