1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * EliasDB
- *
- * Copyright 2016 Matthias Ladkau. All rights reserved.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
- package dbfunc
- import (
- "fmt"
- "devt.de/krotik/ecal/parser"
- "devt.de/krotik/eliasdb/eql"
- "devt.de/krotik/eliasdb/graph"
- )
- /*
- QueryFunc runs an EQL query.
- */
- type QueryFunc struct {
- GM *graph.Manager
- }
- /*
- Run executes the ECAL function.
- */
- func (f *QueryFunc) Run(instanceID string, vs parser.Scope, is map[string]interface{}, tid uint64, args []interface{}) (interface{}, error) {
- var err error
- var cols, rows []interface{}
- if arglen := len(args); arglen != 2 {
- err = fmt.Errorf("Function requires 2 parameters: partition and a query string")
- }
- if err == nil {
- var res eql.SearchResult
- part := fmt.Sprint(args[0])
- query := fmt.Sprint(args[1])
- res, err = eql.RunQuery("db.query", part, query, f.GM)
- if err != nil {
- return nil, err
- }
- // Convert result to rumble data structure
- labels := res.Header().Labels()
- cols = make([]interface{}, len(labels))
- for i, v := range labels {
- cols[i] = v
- }
- rrows := res.Rows()
- rows = make([]interface{}, len(rrows))
- for i, v := range rrows {
- rows[i] = v
- }
- }
- return map[interface{}]interface{}{
- "cols": cols,
- "rows": rows,
- }, err
- }
- /*
- DocString returns a descriptive string.
- */
- func (f *QueryFunc) DocString() (string, error) {
- return "Run an EQL query.", nil
- }
|