MCPcopy Index your code
hub / github.com/CovenantSQL/CovenantSQL / Query

Method Query

sqlchain/adapter/api/query.go:39–103  ·  view source on GitHub ↗

Query defines read query for database.

(rw http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

37
38// Query defines read query for database.
39func (a *queryAPI) Query(rw http.ResponseWriter, r *http.Request) {
40 var (
41 qm *queryMap
42 err error
43 )
44
45 if qm, err = parseForm(r); err != nil {
46 sendResponse(http.StatusBadRequest, false, err, nil, rw)
47 return
48 }
49
50 log.WithFields(log.Fields{
51 "db": qm.Database,
52 "query": qm.Query,
53 }).Info("got query")
54
55 assoc := r.FormValue("assoc")
56
57 var (
58 columns []string
59 types []string
60 rows [][]interface{}
61 )
62
63 if columns, types, rows, err = config.GetConfig().StorageInstance.Query(
64 qm.Database, qm.Query, qm.Args...); err != nil {
65 sendResponse(http.StatusInternalServerError, false, err, nil, rw)
66 return
67 }
68
69 // assign names to empty columns
70 for i, c := range columns {
71 if c == "" {
72 columns[i] = fmt.Sprintf("_c%d", i)
73 }
74 }
75
76 if assoc == "" {
77 sendResponse(http.StatusOK, true, nil, map[string]interface{}{
78 "types": types,
79 "columns": columns,
80 "rows": rows,
81 }, rw)
82 } else {
83 // combine columns
84 assocRows := make([]map[string]interface{}, 0, len(rows))
85
86 for _, row := range rows {
87 assocRow := make(map[string]interface{}, len(row))
88
89 for i, v := range row {
90 if i >= len(columns) {
91 break
92 }
93 assocRow[columns[i]] = v
94 }
95
96 assocRows = append(assocRows, assocRow)

Callers

nothing calls this directly

Calls 6

WithFieldsFunction · 0.92
GetConfigFunction · 0.92
parseFormFunction · 0.85
InfoMethod · 0.80
sendResponseFunction · 0.70
QueryMethod · 0.65

Tested by

no test coverage detected