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

query_csv.go 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package functions
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "git.x2erp.com/qdy/go-base/mycsv"
  5. "git.x2erp.com/qdy/go-base/types"
  6. "git.x2erp.com/qdy/go-db/factory/database"
  7. )
  8. // 统一的错误响应处理
  9. func handleErrorResponseCSV(c *gin.Context, err error) {
  10. errorCSV := mycsv.CreateStringToCSV(err.Error())
  11. c.Header("Content-Type", "text/csv; charset=utf-8")
  12. c.Header("X-Error", "true")
  13. c.Data(400, "text/csv; charset=utf-8", errorCSV)
  14. }
  15. // 统一的成功响应处理
  16. func handleSuccessResponseCSV(c *gin.Context, csvData []byte) {
  17. c.Header("Content-Type", "text/csv; charset=utf-8")
  18. c.Data(200, "text/csv; charset=utf-8", csvData)
  19. }
  20. // 执行查询,返回CSV数据格式。无参数查询
  21. func QueryToCSV(dbFactory *database.DBFactory) func(c *gin.Context, req types.QueryRequest) {
  22. return func(c *gin.Context, req types.QueryRequest) {
  23. csvData, err := dbFactory.QueryToCSV(req.SQL, req.WriterHeader)
  24. if err != nil {
  25. handleErrorResponseCSV(c, err)
  26. return
  27. }
  28. handleSuccessResponseCSV(c, csvData)
  29. }
  30. }
  31. // 执行查询,返回CSV数据格式。带参数名称进行查询
  32. func QueryParamNameToCSV(dbFactory *database.DBFactory) func(c *gin.Context, req types.QueryRequest) {
  33. return func(c *gin.Context, req types.QueryRequest) {
  34. csvData, err := dbFactory.QueryParamsNameToCSV(req.SQL, req.WriterHeader, req.Params)
  35. if err != nil {
  36. handleErrorResponseCSV(c, err)
  37. return
  38. }
  39. handleSuccessResponseCSV(c, csvData)
  40. }
  41. }
  42. // 执行查询,返回CSV数据格式。带占位参数进行查询
  43. func QueryPositionalToCSV(dbFactory *database.DBFactory) func(c *gin.Context, req types.QueryRequest) {
  44. return func(c *gin.Context, req types.QueryRequest) {
  45. csvData, err := dbFactory.QueryPositionalToCSV(req.SQL, req.WriterHeader, req.PositionalParams)
  46. if err != nil {
  47. handleErrorResponseCSV(c, err)
  48. return
  49. }
  50. handleSuccessResponseCSV(c, csvData)
  51. }
  52. }