sql.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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) ([]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. }, resp)
  32. if err != nil {
  33. return nil, err
  34. }
  35. if !resp.Success {
  36. return nil, fmt.Errorf(resp.Msg)
  37. }
  38. return resp.Results, nil
  39. }
  40. func (c *Client) ParseSqlSpec(token string, baseUrl string, spec map[string]any, executeParams map[string]any) (string, error) {
  41. fullUrl, err := url.JoinPath(baseUrl, parseSqlSpecUrl)
  42. if err != nil {
  43. return "", err
  44. }
  45. resp := new(struct {
  46. response.MsgResponse
  47. Parsed string `json:"parsed"`
  48. })
  49. specJsonBytes, err := json.Marshal(spec)
  50. if err != nil {
  51. return "", err
  52. }
  53. err = c.post(token, fullUrl, map[string]any{
  54. "sql": string(specJsonBytes),
  55. "executeParams": executeParams,
  56. }, resp)
  57. if err != nil {
  58. return "", err
  59. }
  60. if !resp.Success {
  61. return "", fmt.Errorf(resp.Msg)
  62. }
  63. return resp.Parsed, nil
  64. }
  65. func (c *Client) CreateSql(token string, baseUrl string, namespace string, dataSource string, name string, spec map[string]any) error {
  66. fullUrl, err := url.JoinPath(baseUrl, createSqlUrl)
  67. if err != nil {
  68. return err
  69. }
  70. resp := new(response.MsgResponse)
  71. specJsonBytes, err := json.Marshal(spec)
  72. if err != nil {
  73. return err
  74. }
  75. err = c.post(token, fullUrl, map[string]any{
  76. "namespace": namespace,
  77. "dataSource": dataSource,
  78. "name": name,
  79. "sql": string(specJsonBytes),
  80. }, resp)
  81. if err != nil {
  82. return err
  83. }
  84. if !resp.Success {
  85. return fmt.Errorf(resp.Msg)
  86. }
  87. return nil
  88. }
  89. func (c *Client) DeleteSql(token string, baseUrl string, namespace string, dataSource string, name string) error {
  90. fullUrl, err := url.JoinPath(baseUrl, deleteSqlUrl)
  91. if err != nil {
  92. return err
  93. }
  94. resp := new(response.MsgResponse)
  95. err = c.post(token, fullUrl, map[string]any{
  96. "namespace": namespace,
  97. "dataSource": dataSource,
  98. "name": name,
  99. }, resp)
  100. if err != nil {
  101. return err
  102. }
  103. if !resp.Success {
  104. return fmt.Errorf(resp.Msg)
  105. }
  106. return nil
  107. }
  108. func (c *Client) GetSqls(token string, baseUrl string, namespace string, dataSource string, name string, pageNo int, pageSize int) ([]SqlInfo, error) {
  109. fullUrl, err := url.JoinPath(baseUrl, getSqlsUrl)
  110. if err != nil {
  111. return nil, err
  112. }
  113. resp := new(response.InfosResponse[SqlInfo])
  114. err = c.get(token, fullUrl, map[string]string{
  115. "namespace": namespace,
  116. "dataSource": dataSource,
  117. "name": name,
  118. "pageNo": strconv.Itoa(pageNo),
  119. "pageSize": strconv.Itoa(pageSize),
  120. }, resp)
  121. if err != nil {
  122. return nil, err
  123. }
  124. if !resp.Success {
  125. return nil, fmt.Errorf(resp.Msg)
  126. }
  127. return resp.Infos, nil
  128. }
  129. func (c *Client) ExecuteSql(token string, baseUrl string,
  130. namespace string, dataSource string, name string, executeParams map[string]any) ([]map[string]any, error) {
  131. fullUrl, err := url.JoinPath(baseUrl, executeSqlUrl)
  132. if err != nil {
  133. return nil, err
  134. }
  135. resp := new(struct {
  136. response.MsgResponse
  137. Results []map[string]any `json:"results"`
  138. })
  139. err = c.post(token, fullUrl, map[string]any{
  140. "namespace": namespace,
  141. "dataSource": dataSource,
  142. "name": name,
  143. "executeParams": executeParams,
  144. }, resp)
  145. if err != nil {
  146. return nil, err
  147. }
  148. if !resp.Success {
  149. return nil, fmt.Errorf(resp.Msg)
  150. }
  151. return resp.Results, nil
  152. }