@Id ListDatabaseColumnsV2 @Description list columns of database source instance. @Tags database @Security ApiKeyAuth @Param host query string true "database host" @Param port query int true "database port" @Param user query string true "database user" @Param password query string true "database pass
(c echo.Context)
| 183 | // @Success 200 {object} models.ListColumnsRespV2 |
| 184 | // @Router /v2/database/columns [get] |
| 185 | func ListDatabaseColumnsV2(c echo.Context) error { |
| 186 | logger := handler.NewLogger().Named("ListDatabaseColumnsV2") |
| 187 | reqParam := new(models.ListColumnsReqV2) |
| 188 | err := handler.BindAndValidate(logger, c, reqParam) |
| 189 | if err != nil { |
| 190 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(err)) |
| 191 | } |
| 192 | |
| 193 | columns := make([]string, 0) |
| 194 | switch reqParam.DatabaseType { |
| 195 | case DB_TYPE_MYSQL: |
| 196 | columns, err = listMySQLColumns(logger, reqParam) |
| 197 | if err != nil { |
| 198 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(fmt.Errorf("list %s columns failed : %v", DB_TYPE_MYSQL, err))) |
| 199 | } |
| 200 | case DB_TYPE_ORACLE: |
| 201 | if reqParam.IsPasswordEncrypted && reqParam.Password != "" { |
| 202 | realPwd, err := handler.DecryptPassword(reqParam.Password, g.RsaPrivateKey) |
| 203 | if nil != err { |
| 204 | return c.JSON(http.StatusOK, &models.ConnectionRespV2{ |
| 205 | BaseResp: models.BuildBaseResp(err), |
| 206 | }) |
| 207 | } |
| 208 | reqParam.Password = realPwd |
| 209 | } |
| 210 | oracleDb, err := config.NewDB(context.TODO(), &config.OracleConfig{ |
| 211 | User: reqParam.User, |
| 212 | Password: reqParam.Password, |
| 213 | Host: reqParam.Host, |
| 214 | Port: reqParam.Port, |
| 215 | ServiceName: reqParam.ServiceName, |
| 216 | }) |
| 217 | if err != nil { |
| 218 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(fmt.Errorf("list %s columns failed : %v", DB_TYPE_ORACLE, err))) |
| 219 | } |
| 220 | defer oracleDb.Close() |
| 221 | columns, err = oracleDb.GetColumns(reqParam.Schema, reqParam.Table) |
| 222 | if err != nil { |
| 223 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(fmt.Errorf("list %s columns failed : %v", DB_TYPE_ORACLE, err))) |
| 224 | } |
| 225 | } |
| 226 | |
| 227 | return c.JSON(http.StatusOK, &models.ListColumnsRespV2{ |
| 228 | Columns: columns, |
| 229 | BaseResp: models.BuildBaseResp(nil), |
| 230 | }) |
| 231 | } |
| 232 | |
| 233 | func listMySQLColumns(logger hclog.Logger, reqParam *models.ListColumnsReqV2) ([]string, error) { |
| 234 | uri, err := buildMysqlUri(reqParam.Host, reqParam.User, reqParam.Password, |
nothing calls this directly
no test coverage detected