sql.go 3.6 KB

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