value.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package sql
  2. import (
  3. "git.sxidc.com/go-tools/utils/reflectutils"
  4. "git.sxidc.com/service-supports/fserr"
  5. "reflect"
  6. "strings"
  7. )
  8. func toSqlValue(value any) (string, error) {
  9. if value == nil {
  10. return "", nil
  11. }
  12. valueValue := reflect.ValueOf(value)
  13. if valueValue.Kind() == reflect.Slice {
  14. return "", fserr.New("请使用toSqlValues处理slice类型")
  15. }
  16. switch v := reflectutils.PointerValueElem(valueValue).Interface().(type) {
  17. case string:
  18. return "'" + v + "'", nil
  19. default:
  20. var retStr string
  21. err := reflectutils.AssignStringValue(v, reflect.ValueOf(retStr))
  22. if err != nil {
  23. return "", err
  24. }
  25. return retStr, nil
  26. }
  27. }
  28. func toSqlValues(values any) (string, error) {
  29. if values == nil {
  30. return "()", nil
  31. }
  32. sliceValue := reflect.ValueOf(values)
  33. if sliceValue.IsZero() {
  34. return "()", nil
  35. }
  36. if sliceValue.Kind() != reflect.Slice {
  37. return "", fserr.New("传递的不是slice")
  38. }
  39. parsedValues := make([]string, 0)
  40. for i := 0; i < sliceValue.Len(); i++ {
  41. value := sliceValue.Index(i).Interface()
  42. parsedValue, err := toSqlValue(value)
  43. if err != nil {
  44. return "", err
  45. }
  46. parsedValues = append(parsedValues, parsedValue)
  47. }
  48. if len(parsedValues) == 0 {
  49. return "()", nil
  50. }
  51. return "(" + strings.Join(parsedValues, ",") + ")", nil
  52. }