From fb5e08fd63779eb865c1a307bc8cb112b351f917 Mon Sep 17 00:00:00 2001 From: Shahzad Lone Date: Sat, 2 Jul 2022 04:04:01 -0400 Subject: [PATCH] wip: Adhere to code review. todo: Still have to add the test where you can sort/order the parent by its child. --- .../query/explain/with_sort_test.go | 396 +++++++++++------- 1 file changed, 255 insertions(+), 141 deletions(-) diff --git a/tests/integration/query/explain/with_sort_test.go b/tests/integration/query/explain/with_sort_test.go index 035824a4a6..9463b577a3 100644 --- a/tests/integration/query/explain/with_sort_test.go +++ b/tests/integration/query/explain/with_sort_test.go @@ -16,99 +16,98 @@ import ( testUtils "github.com/sourcenetwork/defradb/tests/integration" ) -func TestExplainQuerySimpleSort(t *testing.T) { +func TestExplainAscendingOrderQueryOnParent(t *testing.T) { test := testUtils.QueryTestCase{ - Description: "Explain a simple sort query.", + Description: "Explain An Ascending Order Query On Parent Field.", + Query: `query @explain { author(order: {age: ASC}) { name age - verified } }`, Docs: map[int][]string{ - // articles - 0: { - (`{ - "name": "After Guantánamo, Another Injustice", - "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" - }`), - (`{ - "name": "To my dear readers", - "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" - }`), - (`{ - "name": "Twinklestar's Favourite Xmas Cookie", - "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" - }`), - }, - // books - 1: { - (`{ - "name": "Painted House", - "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" - }`), - (`{ - "name": "A Time for Mercy", - "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" - }`), - (`{ - "name": "Theif Lord", - "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" - }`), - }, // authors 2: { // _key: bae-41598f0c-19bc-5da6-813b-e80f14a10df3 - (`{ + `{ "name": "John Grisham", "age": 65, - "verified": true, - "contact_id": "bae-1fe427b8-ab8d-56c3-9df2-826a6ce86fed" - }`), + "verified": true + }`, // _key: bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04 - (`{ + `{ "name": "Cornelia Funke", "age": 62, - "verified": false, - "contact_id": "bae-c0960a29-b704-5c37-9c2e-59e1249e4559" - }`), + "verified": false + }`, }, - // contact - 3: { - // _key: bae-1fe427b8-ab8d-56c3-9df2-826a6ce86fed - // "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" - (`{ - "cell": "5197212301", - "email": "john_grisham@example.com", - "address_id": "bae-c8448e47-6cd1-571f-90bd-364acb80da7b" - }`), + }, - // _key: bae-c0960a29-b704-5c37-9c2e-59e1249e4559 - // "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" - (`{ - "cell": "5197212302", - "email": "cornelia_funke@example.com", - "address_id": "bae-c0960a29-b704-5c37-9c2e-59e1249e4559" - }`), + Results: []dataMap{ + { + "explain": dataMap{ + "selectTopNode": dataMap{ + "sortNode": dataMap{ + "selectNode": dataMap{ + "filter": nil, + "scanNode": dataMap{ + "filter": nil, + "collectionID": "3", + "collectionName": "author", + "spans": []dataMap{ + { + "start": "/3", + "end": "/4", + }, + }, + }, + }, + "orderings": []dataMap{ + { + "direction": "ASC", + "fields": []string{ + "age", + }, + }, + }, + }, + }, + }, }, + }, + } - // address - 4: { - // _key: bae-c8448e47-6cd1-571f-90bd-364acb80da7b - // "contact_id": "bae-1fe427b8-ab8d-56c3-9df2-826a6ce86fed" - (`{ - "city": "Waterloo", - "country": "Canada" - }`), + executeTestCase(t, test) +} - // _key: bae-f01bf83f-1507-5fb5-a6a3-09ecffa3c692 - // "contact_id": "bae-c0960a29-b704-5c37-9c2e-59e1249e4559" - (`{ - "city": "Brampton", - "country": "Canada" - }`), +func TestExplainQueryWithMultiOrderFieldsOnParent(t *testing.T) { + test := testUtils.QueryTestCase{ + Description: "Explain Query With Multiple Order Fields on the Parent.", + + Query: `query @explain { + author(order: {name: ASC, age: DESC}) { + name + age + } + }`, + + Docs: map[int][]string{ + // authors + 2: { + // _key: bae-41598f0c-19bc-5da6-813b-e80f14a10df3 + `{ + "name": "John Grisham", + "age": 65, + "verified": true + }`, + // _key: bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04 + `{ + "name": "Cornelia Funke", + "age": 62, + "verified": false + }`, }, }, @@ -134,6 +133,12 @@ func TestExplainQuerySimpleSort(t *testing.T) { "orderings": []dataMap{ { "direction": "ASC", + "fields": []string{ + "name", + }, + }, + { + "direction": "DESC", "fields": []string{ "age", }, @@ -149,14 +154,13 @@ func TestExplainQuerySimpleSort(t *testing.T) { executeTestCase(t, test) } -func TestExplainQuerySortAscendingOnParentAndDescendingOnChild(t *testing.T) { +func TestExplainQueryWithOrderFieldOnChild(t *testing.T) { test := testUtils.QueryTestCase{ - Description: "Explain Ascending Sort Order on Parent and Descending Sort Order on Child.", + Description: "Explain Query With Order Field On A Child.", + Query: `query @explain { - author(order: {name: ASC, age: ASC}) { + author { name - age - verified articles(order: {name: DESC}) { name } @@ -166,85 +170,143 @@ func TestExplainQuerySortAscendingOnParentAndDescendingOnChild(t *testing.T) { Docs: map[int][]string{ // articles 0: { - (`{ + `{ "name": "After Guantánamo, Another Injustice", "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" - }`), - (`{ + }`, + `{ "name": "To my dear readers", "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" - }`), - (`{ + }`, + `{ "name": "Twinklestar's Favourite Xmas Cookie", "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" - }`), - }, - // books - 1: { - (`{ - "name": "Painted House", - "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" - }`), - (`{ - "name": "A Time for Mercy", - "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" - }`), - (`{ - "name": "Theif Lord", - "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" - }`), + }`, }, + // authors 2: { // _key: bae-41598f0c-19bc-5da6-813b-e80f14a10df3 - (`{ + `{ "name": "John Grisham", "age": 65, - "verified": true, - "contact_id": "bae-1fe427b8-ab8d-56c3-9df2-826a6ce86fed" - }`), + "verified": true + }`, // _key: bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04 - (`{ + `{ "name": "Cornelia Funke", "age": 62, - "verified": false, - "contact_id": "bae-c0960a29-b704-5c37-9c2e-59e1249e4559" - }`), + "verified": false + }`, }, - // contact - 3: { - // _key: bae-1fe427b8-ab8d-56c3-9df2-826a6ce86fed - // "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" - (`{ - "cell": "5197212301", - "email": "john_grisham@example.com", - "address_id": "bae-c8448e47-6cd1-571f-90bd-364acb80da7b" - }`), + }, - // _key: bae-c0960a29-b704-5c37-9c2e-59e1249e4559 - // "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" - (`{ - "cell": "5197212302", - "email": "cornelia_funke@example.com", - "address_id": "bae-c0960a29-b704-5c37-9c2e-59e1249e4559" - }`), + Results: []dataMap{ + { + "explain": dataMap{ + "selectTopNode": dataMap{ + "selectNode": dataMap{ + "filter": nil, + "typeIndexJoin": dataMap{ + "joinType": "typeJoinMany", + "rootName": "author", + "root": dataMap{ + "scanNode": dataMap{ + "collectionID": "3", + "collectionName": "author", + "filter": nil, + "spans": []dataMap{ + { + "start": "/3", + "end": "/4", + }, + }, + }, + }, + "subTypeName": "articles", + "subType": dataMap{ + "selectTopNode": dataMap{ + "sortNode": dataMap{ + "orderings": []dataMap{ + { + "direction": "DESC", + "fields": []string{ + "name", + }, + }, + }, + "selectNode": dataMap{ + "filter": nil, + "scanNode": dataMap{ + "collectionID": "1", + "collectionName": "article", + "filter": nil, + "spans": []dataMap{ + { + "start": "/1", + "end": "/2", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, }, + }, + } - // address - 4: { - // _key: bae-c8448e47-6cd1-571f-90bd-364acb80da7b - // "contact_id": "bae-1fe427b8-ab8d-56c3-9df2-826a6ce86fed" - (`{ - "city": "Waterloo", - "country": "Canada" - }`), + executeTestCase(t, test) +} - // _key: bae-f01bf83f-1507-5fb5-a6a3-09ecffa3c692 - // "contact_id": "bae-c0960a29-b704-5c37-9c2e-59e1249e4559" - (`{ - "city": "Brampton", - "country": "Canada" - }`), +func TestExplainQueryWithOrderOnBothTheParentAndChild(t *testing.T) { + test := testUtils.QueryTestCase{ + Description: "Explain A Query With Order On Parent and An Order on Child.", + + Query: `query @explain { + author(order: {name: ASC}) { + name + articles(order: {name: DESC}) { + name + } + } + }`, + + Docs: map[int][]string{ + // articles + 0: { + `{ + "name": "After Guantánamo, Another Injustice", + "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" + }`, + `{ + "name": "To my dear readers", + "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" + }`, + `{ + "name": "Twinklestar's Favourite Xmas Cookie", + "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" + }`, + }, + + // authors + 2: { + // _key: bae-41598f0c-19bc-5da6-813b-e80f14a10df3 + `{ + "name": "John Grisham", + "age": 65, + "verified": true + }`, + // _key: bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04 + `{ + "name": "Cornelia Funke", + "age": 62, + "verified": false + }`, }, }, @@ -260,12 +322,6 @@ func TestExplainQuerySortAscendingOnParentAndDescendingOnChild(t *testing.T) { "name", }, }, - { - "direction": "ASC", - "fields": []string{ - "age", - }, - }, }, "selectNode": dataMap{ "filter": nil, @@ -325,3 +381,61 @@ func TestExplainQuerySortAscendingOnParentAndDescendingOnChild(t *testing.T) { executeTestCase(t, test) } + +// Add Below test Post Bug-Fix: https://github.com/sourcenetwork/defradb/issues/584 +//func TestExplainQueryWhereParentIsOrderedByChild(t *testing.T) { +// test := testUtils.QueryTestCase{ +// Description: "Explain Query Where The Parent Is Ordered By It's Child.", +// +// Query: `query @explain { +// author( +// order: { +// articles: {name: ASC} +// } +// ) { +// name +// articles { +// name +// } +// } +// }`, +// +// Docs: map[int][]string{ +// // articles +// 0: { +// `{ +// "name": "After Guantánamo, Another Injustice", +// "author_id": "bae-41598f0c-19bc-5da6-813b-e80f14a10df3" +// }`, +// `{ +// "name": "To my dear readers", +// "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" +// }`, +// `{ +// "name": "Twinklestar's Favourite Xmas Cookie", +// "author_id": "bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04" +// }`, +// }, +// +// // authors +// 2: { +// // _key: bae-41598f0c-19bc-5da6-813b-e80f14a10df3 +// `{ +// "name": "John Grisham", +// "age": 65, +// "verified": true +// }`, +// // _key: bae-b769708d-f552-5c3d-a402-ccfd7ac7fb04 +// `{ +// "name": "Cornelia Funke", +// "age": 62, +// "verified": false +// }`, +// }, +// }, +// +// Results: []dataMap{}, +// } +// +// executeTestCase(t, test) +//}