@@ -1887,7 +1887,7 @@ func TestMultiSort5(t *testing.T) {
1887
1887
}`
1888
1888
js := processQueryNoErr (t , query )
1889
1889
// Null value for third Alice comes at first.
1890
- require .JSONEq (t , `{"data": {"me":[{"name":"Alice","age":75},{"name":"Alice","age":75 ,"salary":10002 .000000},{"name":"Alice","age":25,"salary":10000.000000 },{"name":"Bob","age":25},{"name":"Bob","age":75},{"name":"Colin","age":25},{"name":"Elizabeth","age":25},{"name":"Elizabeth","age":75}]}}` , js )
1890
+ require .JSONEq (t , `{"data": {"me":[{"name":"Alice","age":75,"salary":10002.000000 },{"name":"Alice","age":25 ,"salary":10000 .000000},{"name":"Alice","age":75 },{"name":"Bob","age":25},{"name":"Bob","age":75},{"name":"Colin","age":25},{"name":"Elizabeth","age":25},{"name":"Elizabeth","age":75}]}}` , js )
1891
1891
}
1892
1892
1893
1893
func TestMultiSort6Paginate (t * testing.T ) {
@@ -2068,6 +2068,160 @@ func TestSortWithNulls(t *testing.T) {
2068
2068
}
2069
2069
}
2070
2070
2071
+ func TestMultiSortWithNulls (t * testing.T ) {
2072
+
2073
+ tests := []struct {
2074
+ index int32
2075
+ offset int32
2076
+ first int32
2077
+ desc bool
2078
+ result string
2079
+ }{
2080
+ {0 , - 1 , - 1 , true , `{"data": {"me":[
2081
+ {"pname":"nameB","pred1":"A", "pred2":"J"},
2082
+ {"pname":"nameA","pred1":"A", "pred2":"I"},
2083
+ {"pname":"nameC","pred1":"A"},
2084
+ {"pname":"nameE","pred1":"B", "pred2":"J"},
2085
+ {"pname":"nameD","pred1":"B", "pred2":"I"},
2086
+ {"pname":"nameF","pred1":"B"},
2087
+ {"pname":"nameI","pred1":"C", "pred2":"K"},
2088
+ {"pname":"nameH","pred1":"C", "pred2":"J"},
2089
+ {"pname":"nameG","pred1":"C", "pred2":"I"},
2090
+ {"pname":"nameJ","pred1":"C"}]}}` ,
2091
+ },
2092
+ {1 , - 1 , - 1 , false , `{"data": {"me":[
2093
+ {"pname":"nameA","pred1":"A", "pred2":"I"},
2094
+ {"pname":"nameB","pred1":"A", "pred2":"J"},
2095
+ {"pname":"nameC","pred1":"A"},
2096
+ {"pname":"nameD","pred1":"B", "pred2":"I"},
2097
+ {"pname":"nameE","pred1":"B", "pred2":"J"},
2098
+ {"pname":"nameF","pred1":"B"},
2099
+ {"pname":"nameG","pred1":"C", "pred2":"I"},
2100
+ {"pname":"nameH","pred1":"C", "pred2":"J"},
2101
+ {"pname":"nameI","pred1":"C", "pred2":"K"},
2102
+ {"pname":"nameJ","pred1":"C"}]}}` ,
2103
+ },
2104
+ {2 , - 1 , 2 , true , `{"data": {"me":[
2105
+ {"pname":"nameB","pred1":"A", "pred2":"J"},
2106
+ {"pname":"nameA","pred1":"A", "pred2":"I"}]}}` ,
2107
+ },
2108
+ {3 , - 1 , 2 , false , `{"data": {"me":[
2109
+ {"pname":"nameA","pred1":"A", "pred2":"I"},
2110
+ {"pname":"nameB","pred1":"A", "pred2":"J"}]}}` ,
2111
+ },
2112
+ {4 , - 1 , 7 , true , `{"data": {"me":[
2113
+ {"pname":"nameB","pred1":"A", "pred2":"J"},
2114
+ {"pname":"nameA","pred1":"A", "pred2":"I"},
2115
+ {"pname":"nameC","pred1":"A"},
2116
+ {"pname":"nameE","pred1":"B", "pred2":"J"},
2117
+ {"pname":"nameD","pred1":"B", "pred2":"I"},
2118
+ {"pname":"nameF","pred1":"B"},
2119
+ {"pname":"nameI","pred1":"C", "pred2":"K"}]}}` ,
2120
+ },
2121
+ {5 , - 1 , 7 , false , `{"data": {"me":[
2122
+ {"pname":"nameA","pred1":"A", "pred2":"I"},
2123
+ {"pname":"nameB","pred1":"A", "pred2":"J"},
2124
+ {"pname":"nameC","pred1":"A"},
2125
+ {"pname":"nameD","pred1":"B", "pred2":"I"},
2126
+ {"pname":"nameE","pred1":"B", "pred2":"J"},
2127
+ {"pname":"nameF","pred1":"B"},
2128
+ {"pname":"nameG","pred1":"C", "pred2":"I"}]}}` ,
2129
+ },
2130
+ {6 , 2 , 7 , true , `{"data": {"me":[
2131
+ {"pname":"nameC","pred1":"A"},
2132
+ {"pname":"nameE","pred1":"B", "pred2":"J"},
2133
+ {"pname":"nameD","pred1":"B", "pred2":"I"},
2134
+ {"pname":"nameF","pred1":"B"},
2135
+ {"pname":"nameI","pred1":"C", "pred2":"K"},
2136
+ {"pname":"nameH","pred1":"C", "pred2":"J"},
2137
+ {"pname":"nameG","pred1":"C", "pred2":"I"}]}}` ,
2138
+ },
2139
+ {7 , 2 , 7 , false , `{"data": {"me":[
2140
+ {"pname":"nameC","pred1":"A"},
2141
+ {"pname":"nameD","pred1":"B", "pred2":"I"},
2142
+ {"pname":"nameE","pred1":"B", "pred2":"J"},
2143
+ {"pname":"nameF","pred1":"B"},
2144
+ {"pname":"nameG","pred1":"C", "pred2":"I"},
2145
+ {"pname":"nameH","pred1":"C", "pred2":"J"},
2146
+ {"pname":"nameI","pred1":"C", "pred2":"K"}]}}` ,
2147
+ },
2148
+ {8 , 2 , 100 , true , `{"data": {"me":[
2149
+ {"pname":"nameC","pred1":"A"},
2150
+ {"pname":"nameE","pred1":"B", "pred2":"J"},
2151
+ {"pname":"nameD","pred1":"B", "pred2":"I"},
2152
+ {"pname":"nameF","pred1":"B"},
2153
+ {"pname":"nameI","pred1":"C", "pred2":"K"},
2154
+ {"pname":"nameH","pred1":"C", "pred2":"J"},
2155
+ {"pname":"nameG","pred1":"C", "pred2":"I"},
2156
+ {"pname":"nameJ","pred1":"C"}]}}` ,
2157
+ },
2158
+ {9 , 2 , 100 , false , `{"data": {"me":[
2159
+ {"pname":"nameC","pred1":"A"},
2160
+ {"pname":"nameD","pred1":"B", "pred2":"I"},
2161
+ {"pname":"nameE","pred1":"B", "pred2":"J"},
2162
+ {"pname":"nameF","pred1":"B"},
2163
+ {"pname":"nameG","pred1":"C", "pred2":"I"},
2164
+ {"pname":"nameH","pred1":"C", "pred2":"J"},
2165
+ {"pname":"nameI","pred1":"C", "pred2":"K"},
2166
+ {"pname":"nameJ","pred1":"C"}]}}` ,
2167
+ },
2168
+ {10 , 5 , 5 , true , `{"data": {"me":[
2169
+ {"pname":"nameF","pred1":"B"},
2170
+ {"pname":"nameI","pred1":"C", "pred2":"K"},
2171
+ {"pname":"nameH","pred1":"C", "pred2":"J"},
2172
+ {"pname":"nameG","pred1":"C", "pred2":"I"},
2173
+ {"pname":"nameJ","pred1":"C"}]}}` ,
2174
+ },
2175
+ {11 , 5 , 5 , false , `{"data": {"me":[
2176
+ {"pname":"nameF","pred1":"B"},
2177
+ {"pname":"nameG","pred1":"C", "pred2":"I"},
2178
+ {"pname":"nameH","pred1":"C", "pred2":"J"},
2179
+ {"pname":"nameI","pred1":"C", "pred2":"K"},
2180
+ {"pname":"nameJ","pred1":"C"}]}}` ,
2181
+ },
2182
+ {12 , 9 , 5 , true , `{"data": {"me":[
2183
+ {"pname":"nameJ","pred1":"C"}]}}` ,
2184
+ },
2185
+ {13 , 9 , 5 , false , `{"data": {"me":[
2186
+ {"pname":"nameJ","pred1":"C"}]}}` ,
2187
+ },
2188
+ {14 , 12 , 5 , true , `{"data": {"me":[]}}` },
2189
+ {15 , 12 , 5 , false , `{"data": {"me":[]}}` },
2190
+ }
2191
+ makeQuery := func (offset , first int32 , desc , index bool ) string {
2192
+ pred1 := "pred1"
2193
+ pred2 := "pred2"
2194
+ if index {
2195
+ pred1 = "index-pred1"
2196
+ pred2 = "index-pred2"
2197
+ }
2198
+ order := ",orderasc: "
2199
+ if desc {
2200
+ order = ",orderdesc: "
2201
+ }
2202
+ q := "me(func: uid(61, 62, 63, 64, 65, 66, 67, 68, 69, 70), orderasc: " + pred1 +
2203
+ order + pred2
2204
+ if offset != - 1 {
2205
+ q += fmt .Sprintf (", offset: %d" , offset )
2206
+ }
2207
+ if first != - 1 {
2208
+ q += fmt .Sprintf (", first: %d" , first )
2209
+ }
2210
+ query := "{" + q + ") { pname pred1:" + pred1 + " pred2:" + pred2 + " } }"
2211
+ return processQueryNoErr (t , query )
2212
+ }
2213
+
2214
+ for _ , tc := range tests {
2215
+ // Case of sort with Index.
2216
+ actual := makeQuery (tc .offset , tc .first , tc .desc , true )
2217
+ require .JSONEqf (t , tc .result , actual , "Failed on index-testcase: %d\n " , tc .index )
2218
+
2219
+ // Case of sort without index
2220
+ actual = makeQuery (tc .offset , tc .first , tc .desc , false )
2221
+ require .JSONEqf (t , tc .result , actual , "Failed on testcase: %d\n " , tc .index )
2222
+ }
2223
+ }
2224
+
2071
2225
func TestMultiSortPaginateWithOffset (t * testing.T ) {
2072
2226
t .Parallel ()
2073
2227
tests := []struct {
0 commit comments