forked from ravendb/ravendb-go-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlazy_suggestion_query_operation.go
77 lines (64 loc) · 2.24 KB
/
lazy_suggestion_query_operation.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package ravendb
var _ ILazyOperation = &LazySuggestionQueryOperation{}
type LazySuggestionQueryOperation struct {
result interface{}
queryResult *QueryResult
requiresRetry bool
_conventions *DocumentConventions
_indexQuery *IndexQuery
_invokeAfterQueryExecuted func(*QueryResult)
_processResults func(*QueryResult, *DocumentConventions) (map[string]*SuggestionResult, error)
}
func newLazySuggestionQueryOperation(conventions *DocumentConventions, indexQuery *IndexQuery, invokeAfterQueryExecuted func(*QueryResult),
processResults func(*QueryResult, *DocumentConventions) (map[string]*SuggestionResult, error)) *LazySuggestionQueryOperation {
return &LazySuggestionQueryOperation{
_conventions: conventions,
_indexQuery: indexQuery,
_invokeAfterQueryExecuted: invokeAfterQueryExecuted,
_processResults: processResults,
}
}
// needed for ILazyOperation
func (o *LazySuggestionQueryOperation) createRequest() *getRequest {
return &getRequest{
url: "/queries",
method: "POST",
query: "?queryHash=" + o._indexQuery.GetQueryHash(),
content: NewIndexQueryContent(o._conventions, o._indexQuery),
}
}
// needed for ILazyOperation
func (o *LazySuggestionQueryOperation) getResult(result interface{}) error {
return setInterfaceToValue(result, o.result)
}
func (o *LazySuggestionQueryOperation) getQueryResult() *QueryResult {
return o.queryResult
}
// needed for ILazyOperation
func (o *LazySuggestionQueryOperation) isRequiresRetry() bool {
return o.requiresRetry
}
// needed for ILazyOperation
func (o *LazySuggestionQueryOperation) handleResponse(response *GetResponse) error {
if response.IsForceRetry {
o.result = nil
o.requiresRetry = true
return nil
}
var queryResult *QueryResult
err := jsonUnmarshal(response.Result, &queryResult)
if err != nil {
return err
}
return o.handleResponse2(queryResult)
}
func (o *LazySuggestionQueryOperation) handleResponse2(queryResult *QueryResult) error {
if o._invokeAfterQueryExecuted != nil {
o._invokeAfterQueryExecuted(queryResult)
}
var err error
// TODO: is op._processResults always != nil ?
o.result, err = o._processResults(queryResult, o._conventions)
o.queryResult = queryResult
return err
}