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

Function parseForm

sqlchain/adapter/api/utils.go:71–146  ·  view source on GitHub ↗
(r *http.Request)

Source from the content-addressed store, hash-verified

69}
70
71func parseForm(r *http.Request) (qm *queryMap, err error) {
72 ct := r.Header.Get("Content-Type")
73 if ct != "" {
74 ct, _, _ = mime.ParseMediaType(ct)
75 }
76 if ct == "application/json" {
77 // json form
78 if r.Body == nil {
79 err = errors.New("missing request payload")
80 return
81 }
82 if err = json.NewDecoder(r.Body).Decode(&qm); err != nil {
83 // decode failed
84 err = errors.New("decode request json payload failed")
85 return
86 }
87
88 // resolve args
89 if qm.RawArgs != nil {
90 switch v := qm.RawArgs.(type) {
91 case map[string]interface{}:
92 if len(v) > 0 {
93 qm.Args = make([]interface{}, 0, len(v))
94 for pk, pv := range v {
95 qm.Args = append(qm.Args, sql.Named(pk, pv))
96 }
97 }
98 case []interface{}:
99 qm.Args = v
100 default:
101 // scalar types
102 qm.Args = []interface{}{qm.RawArgs}
103 }
104 }
105 } else {
106 // normal form
107 // parse database id
108 qm = &queryMap{}
109
110 if qm.Database = r.FormValue("database"); qm.Database != "" {
111 if err = isValidDatabaseID(qm.Database); err != nil {
112 return
113 }
114 }
115 // parse query
116 qm.Query = r.FormValue("query")
117 // parse args
118 args := r.Form["args"]
119
120 if len(args) > 0 {
121 qm.Args = make([]interface{}, len(args))
122
123 for i, v := range args {
124 qm.Args[i] = v
125 }
126 }
127 }
128

Callers 2

QueryMethod · 0.85
WriteMethod · 0.85

Calls 3

isValidDatabaseIDFunction · 0.85
GetMethod · 0.65
NewMethod · 0.65

Tested by

no test coverage detected