sql.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package client
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "git.sxidc.com/go-tools/api_binding/http_binding/response"
  6. "net/url"
  7. "strconv"
  8. )
  9. const (
  10. executeRawSqlUrl = "/ds/api/v1/sql/rawSql/execute"
  11. parseSqlSpecUrl = "/ds/api/v1/sql/spec/parse"
  12. createSqlUrl = "/ds/api/v1/sql/create"
  13. deleteSqlUrl = "/ds/api/v1/sql/delete"
  14. getSqlsUrl = "/ds/api/v1/sql/query"
  15. executeSqlUrl = "/ds/api/v1/sql/execute"
  16. )
  17. func (c *Client) ExecuteRawSql(token string, baseUrl string,
  18. namespace string, dataSource string, sql string, executeParams map[string]any) ([]map[string]any, error) {
  19. fullUrl, err := url.JoinPath(baseUrl, executeRawSqlUrl)
  20. if err != nil {
  21. return nil, err
  22. }
  23. resp := new(struct {
  24. response.MsgResponse
  25. Results []map[string]any `json:"results"`
  26. })
  27. err = c.post(token, fullUrl, map[string]any{
  28. "namespace": namespace,
  29. "dataSource": dataSource,
  30. "sql": sql,
  31. "executeParams": executeParams,
  32. }, resp)
  33. if err != nil {
  34. return nil, err
  35. }
  36. if !resp.Success {
  37. return nil, fmt.Errorf(resp.Msg)
  38. }
  39. return resp.Results, nil
  40. }
  41. func (c *Client) ParseSqlSpec(token string, baseUrl string, spec map[string]any, executeParams map[string]any) (string, error) {
  42. fullUrl, err := url.JoinPath(baseUrl, parseSqlSpecUrl)
  43. if err != nil {
  44. return "", err
  45. }
  46. resp := new(struct {
  47. response.MsgResponse
  48. Parsed string `json:"parsed"`
  49. })
  50. specJsonBytes, err := json.Marshal(spec)
  51. if err != nil {
  52. return "", err
  53. }
  54. err = c.post(token, fullUrl, map[string]any{
  55. "sql": string(specJsonBytes),
  56. "executeParams": executeParams,
  57. }, resp)
  58. if err != nil {
  59. return "", err
  60. }
  61. if !resp.Success {
  62. return "", fmt.Errorf(resp.Msg)
  63. }
  64. return resp.Parsed, nil
  65. }
  66. func (c *Client) CreateSql(token string, baseUrl string, namespace string, dataSource string, name string, spec map[string]any) error {
  67. fullUrl, err := url.JoinPath(baseUrl, createSqlUrl)
  68. if err != nil {
  69. return err
  70. }
  71. resp := new(response.MsgResponse)
  72. specJsonBytes, err := json.Marshal(spec)
  73. if err != nil {
  74. return err
  75. }
  76. err = c.post(token, fullUrl, map[string]any{
  77. "namespace": namespace,
  78. "dataSource": dataSource,
  79. "name": name,
  80. "sql": string(specJsonBytes),
  81. }, resp)
  82. if err != nil {
  83. return err
  84. }
  85. if !resp.Success {
  86. return fmt.Errorf(resp.Msg)
  87. }
  88. return nil
  89. }
  90. func (c *Client) DeleteSql(token string, baseUrl string, namespace string, dataSource string, name string) error {
  91. fullUrl, err := url.JoinPath(baseUrl, deleteSqlUrl)
  92. if err != nil {
  93. return err
  94. }
  95. resp := new(response.MsgResponse)
  96. err = c.post(token, fullUrl, map[string]any{
  97. "namespace": namespace,
  98. "dataSource": dataSource,
  99. "name": name,
  100. }, resp)
  101. if err != nil {
  102. return err
  103. }
  104. if !resp.Success {
  105. return fmt.Errorf(resp.Msg)
  106. }
  107. return nil
  108. }
  109. func (c *Client) GetSqls(token string, baseUrl string, namespace string, dataSource string, name string, pageNo int, pageSize int) ([]SqlInfo, error) {
  110. fullUrl, err := url.JoinPath(baseUrl, getSqlsUrl)
  111. if err != nil {
  112. return nil, err
  113. }
  114. resp := new(response.InfosResponse[SqlInfo])
  115. err = c.get(token, fullUrl, map[string]string{
  116. "namespace": namespace,
  117. "dataSource": dataSource,
  118. "name": name,
  119. "pageNo": strconv.Itoa(pageNo),
  120. "pageSize": strconv.Itoa(pageSize),
  121. }, resp)
  122. if err != nil {
  123. return nil, err
  124. }
  125. if !resp.Success {
  126. return nil, fmt.Errorf(resp.Msg)
  127. }
  128. return resp.Infos, nil
  129. }
  130. func (c *Client) ExecuteSql(token string, baseUrl string,
  131. namespace string, dataSource string, name string, executeParams map[string]any) ([]map[string]any, error) {
  132. fullUrl, err := url.JoinPath(baseUrl, executeSqlUrl)
  133. if err != nil {
  134. return nil, err
  135. }
  136. resp := new(struct {
  137. response.MsgResponse
  138. Results []map[string]any `json:"results"`
  139. })
  140. err = c.post(token, fullUrl, map[string]any{
  141. "namespace": namespace,
  142. "dataSource": dataSource,
  143. "name": name,
  144. "executeParams": executeParams,
  145. }, resp)
  146. if err != nil {
  147. return nil, err
  148. }
  149. if !resp.Success {
  150. return nil, fmt.Errorf(resp.Msg)
  151. }
  152. return resp.Results, nil
  153. }