sql.go 3.8 KB

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