-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathrequest_parser.go
66 lines (47 loc) · 1.37 KB
/
request_parser.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package gransak
import (
"net/http"
"net/url"
"regexp"
"strconv"
"strings"
)
func parseRequest(r *http.Request) (string, []interface{}) {
params := r.URL.Query()
return getGransakQuery(¶ms)
}
func parseUrlValues(params url.Values) (string, []interface{}) {
return getGransakQuery(¶ms)
}
func getGransakQuery(params *url.Values) (string, []interface{}) {
r := regexp.MustCompile(`^q\[[\w]+\]$`)
var temp, sql string
statements := []string{}
parsedParams := []interface{}{}
gparams := []interface{}{}
for key, value := range *params {
if r.MatchString(key) {
temp = strings.Replace(key, "q[", "", 1)
temp = strings.Replace(temp, "]", "", 1)
sql, gparams = getSqlString(temp, value[0])
parsedParams = append(parsedParams, gparams...)
if strings.Trim(sql, " ") != "" {
statements = append(statements, sql)
}
}
}
result := strings.Join(statements, " AND ")
result = ReplaceByEngineHolders(result, parsedParams)
result = Gransak.appendSelectStatement(result)
Gransak.Table("")
return result, parsedParams
}
func getSqlString(query, value string) (string, []interface{}) {
if intVal, err := strconv.ParseInt(value, 0, 64); err == nil {
return Gransak.core.Parse(query, intVal)
}
if floatVal, err := strconv.ParseFloat(value, 64); err == nil {
return Gransak.core.Parse(query, floatVal)
}
return Gransak.core.Parse(query, value)
}