1package sql
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"github.com/Azure/go-autorest/autorest"
23	"github.com/Azure/go-autorest/autorest/azure"
24	"github.com/Azure/go-autorest/tracing"
25	"net/http"
26)
27
28// DatabaseAdvisorsClient is the the Azure SQL Database management API provides a RESTful set of web services that
29// interact with Azure SQL Database services to manage your databases. The API enables you to create, retrieve, update,
30// and delete databases.
31type DatabaseAdvisorsClient struct {
32	BaseClient
33}
34
35// NewDatabaseAdvisorsClient creates an instance of the DatabaseAdvisorsClient client.
36func NewDatabaseAdvisorsClient(subscriptionID string) DatabaseAdvisorsClient {
37	return NewDatabaseAdvisorsClientWithBaseURI(DefaultBaseURI, subscriptionID)
38}
39
40// NewDatabaseAdvisorsClientWithBaseURI creates an instance of the DatabaseAdvisorsClient client using a custom
41// endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure
42// stack).
43func NewDatabaseAdvisorsClientWithBaseURI(baseURI string, subscriptionID string) DatabaseAdvisorsClient {
44	return DatabaseAdvisorsClient{NewWithBaseURI(baseURI, subscriptionID)}
45}
46
47// CreateOrUpdate creates or updates a database advisor.
48// Parameters:
49// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
50// from the Azure Resource Manager API or the portal.
51// serverName - the name of the server.
52// databaseName - the name of the database.
53// advisorName - the name of the Database Advisor.
54// parameters - the requested advisor resource state.
55func (client DatabaseAdvisorsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, serverName string, databaseName string, advisorName string, parameters Advisor) (result Advisor, err error) {
56	if tracing.IsEnabled() {
57		ctx = tracing.StartSpan(ctx, fqdn+"/DatabaseAdvisorsClient.CreateOrUpdate")
58		defer func() {
59			sc := -1
60			if result.Response.Response != nil {
61				sc = result.Response.Response.StatusCode
62			}
63			tracing.EndSpan(ctx, sc, err)
64		}()
65	}
66	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, serverName, databaseName, advisorName, parameters)
67	if err != nil {
68		err = autorest.NewErrorWithError(err, "sql.DatabaseAdvisorsClient", "CreateOrUpdate", nil, "Failure preparing request")
69		return
70	}
71
72	resp, err := client.CreateOrUpdateSender(req)
73	if err != nil {
74		result.Response = autorest.Response{Response: resp}
75		err = autorest.NewErrorWithError(err, "sql.DatabaseAdvisorsClient", "CreateOrUpdate", resp, "Failure sending request")
76		return
77	}
78
79	result, err = client.CreateOrUpdateResponder(resp)
80	if err != nil {
81		err = autorest.NewErrorWithError(err, "sql.DatabaseAdvisorsClient", "CreateOrUpdate", resp, "Failure responding to request")
82		return
83	}
84
85	return
86}
87
88// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
89func (client DatabaseAdvisorsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, serverName string, databaseName string, advisorName string, parameters Advisor) (*http.Request, error) {
90	pathParameters := map[string]interface{}{
91		"advisorName":       autorest.Encode("path", advisorName),
92		"databaseName":      autorest.Encode("path", databaseName),
93		"resourceGroupName": autorest.Encode("path", resourceGroupName),
94		"serverName":        autorest.Encode("path", serverName),
95		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
96	}
97
98	const APIVersion = "2014-04-01"
99	queryParameters := map[string]interface{}{
100		"api-version": APIVersion,
101	}
102
103	parameters.Kind = nil
104	parameters.Location = nil
105	preparer := autorest.CreatePreparer(
106		autorest.AsContentType("application/json; charset=utf-8"),
107		autorest.AsPut(),
108		autorest.WithBaseURL(client.BaseURI),
109		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/advisors/{advisorName}", pathParameters),
110		autorest.WithJSON(parameters),
111		autorest.WithQueryParameters(queryParameters))
112	return preparer.Prepare((&http.Request{}).WithContext(ctx))
113}
114
115// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
116// http.Response Body if it receives an error.
117func (client DatabaseAdvisorsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
118	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
119}
120
121// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
122// closes the http.Response Body.
123func (client DatabaseAdvisorsClient) CreateOrUpdateResponder(resp *http.Response) (result Advisor, err error) {
124	err = autorest.Respond(
125		resp,
126		azure.WithErrorUnlessStatusCode(http.StatusOK),
127		autorest.ByUnmarshallingJSON(&result),
128		autorest.ByClosing())
129	result.Response = autorest.Response{Response: resp}
130	return
131}
132
133// Get returns details of a Database Advisor.
134// Parameters:
135// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
136// from the Azure Resource Manager API or the portal.
137// serverName - the name of the server.
138// databaseName - the name of the database.
139// advisorName - the name of the Database Advisor.
140func (client DatabaseAdvisorsClient) Get(ctx context.Context, resourceGroupName string, serverName string, databaseName string, advisorName string) (result Advisor, err error) {
141	if tracing.IsEnabled() {
142		ctx = tracing.StartSpan(ctx, fqdn+"/DatabaseAdvisorsClient.Get")
143		defer func() {
144			sc := -1
145			if result.Response.Response != nil {
146				sc = result.Response.Response.StatusCode
147			}
148			tracing.EndSpan(ctx, sc, err)
149		}()
150	}
151	req, err := client.GetPreparer(ctx, resourceGroupName, serverName, databaseName, advisorName)
152	if err != nil {
153		err = autorest.NewErrorWithError(err, "sql.DatabaseAdvisorsClient", "Get", nil, "Failure preparing request")
154		return
155	}
156
157	resp, err := client.GetSender(req)
158	if err != nil {
159		result.Response = autorest.Response{Response: resp}
160		err = autorest.NewErrorWithError(err, "sql.DatabaseAdvisorsClient", "Get", resp, "Failure sending request")
161		return
162	}
163
164	result, err = client.GetResponder(resp)
165	if err != nil {
166		err = autorest.NewErrorWithError(err, "sql.DatabaseAdvisorsClient", "Get", resp, "Failure responding to request")
167		return
168	}
169
170	return
171}
172
173// GetPreparer prepares the Get request.
174func (client DatabaseAdvisorsClient) GetPreparer(ctx context.Context, resourceGroupName string, serverName string, databaseName string, advisorName string) (*http.Request, error) {
175	pathParameters := map[string]interface{}{
176		"advisorName":       autorest.Encode("path", advisorName),
177		"databaseName":      autorest.Encode("path", databaseName),
178		"resourceGroupName": autorest.Encode("path", resourceGroupName),
179		"serverName":        autorest.Encode("path", serverName),
180		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
181	}
182
183	const APIVersion = "2014-04-01"
184	queryParameters := map[string]interface{}{
185		"api-version": APIVersion,
186	}
187
188	preparer := autorest.CreatePreparer(
189		autorest.AsGet(),
190		autorest.WithBaseURL(client.BaseURI),
191		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/advisors/{advisorName}", pathParameters),
192		autorest.WithQueryParameters(queryParameters))
193	return preparer.Prepare((&http.Request{}).WithContext(ctx))
194}
195
196// GetSender sends the Get request. The method will close the
197// http.Response Body if it receives an error.
198func (client DatabaseAdvisorsClient) GetSender(req *http.Request) (*http.Response, error) {
199	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
200}
201
202// GetResponder handles the response to the Get request. The method always
203// closes the http.Response Body.
204func (client DatabaseAdvisorsClient) GetResponder(resp *http.Response) (result Advisor, err error) {
205	err = autorest.Respond(
206		resp,
207		azure.WithErrorUnlessStatusCode(http.StatusOK),
208		autorest.ByUnmarshallingJSON(&result),
209		autorest.ByClosing())
210	result.Response = autorest.Response{Response: resp}
211	return
212}
213
214// ListByDatabase returns a list of database advisors.
215// Parameters:
216// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
217// from the Azure Resource Manager API or the portal.
218// serverName - the name of the server.
219// databaseName - the name of the database.
220func (client DatabaseAdvisorsClient) ListByDatabase(ctx context.Context, resourceGroupName string, serverName string, databaseName string) (result AdvisorListResult, err error) {
221	if tracing.IsEnabled() {
222		ctx = tracing.StartSpan(ctx, fqdn+"/DatabaseAdvisorsClient.ListByDatabase")
223		defer func() {
224			sc := -1
225			if result.Response.Response != nil {
226				sc = result.Response.Response.StatusCode
227			}
228			tracing.EndSpan(ctx, sc, err)
229		}()
230	}
231	req, err := client.ListByDatabasePreparer(ctx, resourceGroupName, serverName, databaseName)
232	if err != nil {
233		err = autorest.NewErrorWithError(err, "sql.DatabaseAdvisorsClient", "ListByDatabase", nil, "Failure preparing request")
234		return
235	}
236
237	resp, err := client.ListByDatabaseSender(req)
238	if err != nil {
239		result.Response = autorest.Response{Response: resp}
240		err = autorest.NewErrorWithError(err, "sql.DatabaseAdvisorsClient", "ListByDatabase", resp, "Failure sending request")
241		return
242	}
243
244	result, err = client.ListByDatabaseResponder(resp)
245	if err != nil {
246		err = autorest.NewErrorWithError(err, "sql.DatabaseAdvisorsClient", "ListByDatabase", resp, "Failure responding to request")
247		return
248	}
249
250	return
251}
252
253// ListByDatabasePreparer prepares the ListByDatabase request.
254func (client DatabaseAdvisorsClient) ListByDatabasePreparer(ctx context.Context, resourceGroupName string, serverName string, databaseName string) (*http.Request, error) {
255	pathParameters := map[string]interface{}{
256		"databaseName":      autorest.Encode("path", databaseName),
257		"resourceGroupName": autorest.Encode("path", resourceGroupName),
258		"serverName":        autorest.Encode("path", serverName),
259		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
260	}
261
262	const APIVersion = "2014-04-01"
263	queryParameters := map[string]interface{}{
264		"api-version": APIVersion,
265	}
266
267	preparer := autorest.CreatePreparer(
268		autorest.AsGet(),
269		autorest.WithBaseURL(client.BaseURI),
270		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/advisors", pathParameters),
271		autorest.WithQueryParameters(queryParameters))
272	return preparer.Prepare((&http.Request{}).WithContext(ctx))
273}
274
275// ListByDatabaseSender sends the ListByDatabase request. The method will close the
276// http.Response Body if it receives an error.
277func (client DatabaseAdvisorsClient) ListByDatabaseSender(req *http.Request) (*http.Response, error) {
278	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
279}
280
281// ListByDatabaseResponder handles the response to the ListByDatabase request. The method always
282// closes the http.Response Body.
283func (client DatabaseAdvisorsClient) ListByDatabaseResponder(resp *http.Response) (result AdvisorListResult, err error) {
284	err = autorest.Respond(
285		resp,
286		azure.WithErrorUnlessStatusCode(http.StatusOK),
287		autorest.ByUnmarshallingJSON(&result),
288		autorest.ByClosing())
289	result.Response = autorest.Response{Response: resp}
290	return
291}
292