Implement query parser
This commit is contained in:
8
types.go
8
types.go
@@ -4,22 +4,22 @@ import "time"
|
|||||||
|
|
||||||
type (
|
type (
|
||||||
Guild struct {
|
Guild struct {
|
||||||
ID int
|
ID int64
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
}
|
}
|
||||||
Player struct {
|
Player struct {
|
||||||
ID int
|
ID int64
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Guild Guild `json:"guild"`
|
Guild Guild `json:"guild"`
|
||||||
}
|
}
|
||||||
Association struct {
|
Association struct {
|
||||||
ID int
|
ID int64
|
||||||
LHS Player
|
LHS Player
|
||||||
RHS Player
|
RHS Player
|
||||||
Note string
|
Note string
|
||||||
}
|
}
|
||||||
Note struct {
|
Note struct {
|
||||||
ID int
|
ID int64
|
||||||
Content string
|
Content string
|
||||||
Timestamp time.Time
|
Timestamp time.Time
|
||||||
Player Player
|
Player Player
|
||||||
|
37
utils.go
Normal file
37
utils.go
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func BuildWhereQuery(params interface{}) string {
|
||||||
|
conditions := []string{}
|
||||||
|
v := reflect.ValueOf(params)
|
||||||
|
t := v.Type()
|
||||||
|
|
||||||
|
for i := 0; i < v.NumField(); i++ {
|
||||||
|
field := v.Field(i)
|
||||||
|
if field.Kind() == reflect.Ptr && !field.IsNil() {
|
||||||
|
dbTag := t.Field(i).Tag.Get("db")
|
||||||
|
if dbTag != "" {
|
||||||
|
switch field.Elem().Kind() {
|
||||||
|
case reflect.String:
|
||||||
|
conditions = append(conditions, fmt.Sprintf("%s = '%s'", dbTag, field.Elem().String()))
|
||||||
|
case reflect.Bool:
|
||||||
|
conditions = append(conditions, fmt.Sprintf("%s = %t", dbTag, field.Elem().Bool()))
|
||||||
|
case reflect.Int:
|
||||||
|
conditions = append(conditions, fmt.Sprintf("%s = %d", dbTag, field.Elem().Int()))
|
||||||
|
case reflect.Int64:
|
||||||
|
conditions = append(conditions, fmt.Sprintf("%s = %d", dbTag, field.Elem().Int()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(conditions) > 0 {
|
||||||
|
return "WHERE " + strings.Join(conditions, " AND ")
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
Reference in New Issue
Block a user