Implement query parser

This commit is contained in:
2024-10-27 17:57:01 +01:00
parent beec0ca989
commit 251e372f72
2 changed files with 41 additions and 4 deletions

37
utils.go Normal file
View 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 ""
}