package pilosa import ( "encoding/json" "net" ) // QueryRequest represent a request to process a query. type QueryRequest struct { // Index to execute query against. Index string // The query string to parse and execute. Query string // The slices to include in the query execution. // If empty, all slices are included. Slices []uint64 // Return column attributes, if true. ColumnAttrs bool // Do not return row attributes, if true. ExcludeRowAttrs bool // Do not return columns, if true. ExcludeColumns bool // If true, indicates that query is part of a larger distributed query. // If false, this request is on the originating node. Remote bool } // QueryResponse represent a response from a processed query. type QueryResponse struct { // Result for each top-level query call. // Can be a Bitmap, Pairs, or uint64. Results []interface{} // Set of column attribute objects matching IDs returned in Result. ColumnAttrSets []*ColumnAttrSet // Error during parsing or execution. Err error } // MarshalJSON marshals QueryResponse into a JSON-encoded byte slice func (resp *QueryResponse) MarshalJSON() ([]byte, error) { var output struct { Results []interface{} `json:"results,omitempty"` ColumnAttrSets []*ColumnAttrSet `json:"columnAttrs,omitempty"` Err string `json:"error,omitempty"` } output.Results = resp.Results output.ColumnAttrSets = resp.ColumnAttrSets if resp.Err != nil { output.Err = resp.Err.Error() } return json.Marshal(output) } type Handler interface { Serve(ln net.Listener, closing <-chan struct{}) GetAPI() *API } type NopHandler struct{} func (n *NopHandler) Serve(ln net.Listener, closing <-chan struct{}) {} func (n *NopHandler) GetAPI() *API { return nil } func NewNopHandler() Handler { return &NopHandler{} }