github.com/altipla-consulting/ravendb-go-client@v0.1.3/lazy_suggestion_query_operation.go (about)

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