You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

utils.go 1.3 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package db
  2. /*
  3. import (
  4. "database/sql"
  5. "github.com/jmoiron/sqlx"
  6. "gitlink.org.cn/cloudream/common/utils/math2"
  7. )
  8. const (
  9. maxPlaceholderCount = 65535
  10. )
  11. func BatchNamedExec[T any](ctx SQLContext, sql string, argCnt int, arr []T, callback func(sql.Result) bool) error {
  12. if argCnt == 0 {
  13. ret, err := ctx.NamedExec(sql, arr)
  14. if err != nil {
  15. return err
  16. }
  17. if callback != nil {
  18. callback(ret)
  19. }
  20. return nil
  21. }
  22. batchSize := maxPlaceholderCount / argCnt
  23. for len(arr) > 0 {
  24. curBatchSize := math2.Min(batchSize, len(arr))
  25. ret, err := ctx.NamedExec(sql, arr[:curBatchSize])
  26. if err != nil {
  27. return err
  28. }
  29. if callback != nil && !callback(ret) {
  30. return nil
  31. }
  32. arr = arr[curBatchSize:]
  33. }
  34. return nil
  35. }
  36. func BatchNamedQuery[T any](ctx SQLContext, sql string, argCnt int, arr []T, callback func(*sqlx.Rows) bool) error {
  37. if argCnt == 0 {
  38. ret, err := ctx.NamedQuery(sql, arr)
  39. if err != nil {
  40. return err
  41. }
  42. if callback != nil {
  43. callback(ret)
  44. }
  45. return nil
  46. }
  47. batchSize := maxPlaceholderCount / argCnt
  48. for len(arr) > 0 {
  49. curBatchSize := math2.Min(batchSize, len(arr))
  50. ret, err := ctx.NamedQuery(sql, arr[:curBatchSize])
  51. if err != nil {
  52. return err
  53. }
  54. if callback != nil && !callback(ret) {
  55. return nil
  56. }
  57. arr = arr[curBatchSize:]
  58. }
  59. return nil
  60. }
  61. */

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。