transaction.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package sdk
  2. import (
  3. "encoding/json"
  4. v1 "git.sxidc.com/service-supports/ds-sdk/grpc_client/v1"
  5. "git.sxidc.com/service-supports/ds-sdk/grpc_client/v1/request"
  6. )
  7. type TxFunc func(tx *Transaction) error
  8. type Transaction struct {
  9. stream v1.SqlService_TransactionClient
  10. }
  11. func (tx *Transaction) ExecuteRawSql(sql string, executeParams map[string]any) error {
  12. var retErr error
  13. defer func() {
  14. if retErr != nil {
  15. innerErr := tx.stream.CloseSend()
  16. if innerErr != nil {
  17. panic(innerErr)
  18. }
  19. }
  20. }()
  21. executeParamsJsonBytes, err := json.Marshal(executeParams)
  22. if err != nil {
  23. retErr = err
  24. return retErr
  25. }
  26. err = tx.stream.SendMsg(&request.TransactionOperation{
  27. Request: &request.TransactionOperation_ExecuteRawSqlRequest{
  28. ExecuteRawSqlRequest: &request.ExecuteRawSqlRequest{
  29. SQL: sql,
  30. ExecuteParams: string(executeParamsJsonBytes),
  31. },
  32. },
  33. })
  34. if err != nil {
  35. retErr = err
  36. return retErr
  37. }
  38. _, err = tx.stream.Recv()
  39. if err != nil {
  40. retErr = err
  41. return retErr
  42. }
  43. return nil
  44. }
  45. func (tx *Transaction) ExecuteSql(name string, executeParams map[string]any) error {
  46. var retErr error
  47. defer func() {
  48. if retErr != nil {
  49. innerErr := tx.stream.CloseSend()
  50. if innerErr != nil {
  51. panic(innerErr)
  52. }
  53. }
  54. }()
  55. executeParamsJsonBytes, err := json.Marshal(executeParams)
  56. if err != nil {
  57. retErr = err
  58. return retErr
  59. }
  60. err = tx.stream.Send(&request.TransactionOperation{
  61. Request: &request.TransactionOperation_ExecuteSqlRequest{
  62. ExecuteSqlRequest: &request.ExecuteSqlRequest{
  63. Name: name,
  64. ExecuteParams: string(executeParamsJsonBytes),
  65. },
  66. },
  67. })
  68. if err != nil {
  69. retErr = err
  70. return retErr
  71. }
  72. _, err = tx.stream.Recv()
  73. if err != nil {
  74. retErr = err
  75. return retErr
  76. }
  77. return nil
  78. }