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/autorest/validation"
25	"github.com/Azure/go-autorest/tracing"
26	"net/http"
27)
28
29// ManagedInstancesClient is the the Azure SQL Database management API provides a RESTful set of web services that
30// interact with Azure SQL Database services to manage your databases. The API enables you to create, retrieve, update,
31// and delete databases.
32type ManagedInstancesClient struct {
33	BaseClient
34}
35
36// NewManagedInstancesClient creates an instance of the ManagedInstancesClient client.
37func NewManagedInstancesClient(subscriptionID string) ManagedInstancesClient {
38	return NewManagedInstancesClientWithBaseURI(DefaultBaseURI, subscriptionID)
39}
40
41// NewManagedInstancesClientWithBaseURI creates an instance of the ManagedInstancesClient client using a custom
42// endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure
43// stack).
44func NewManagedInstancesClientWithBaseURI(baseURI string, subscriptionID string) ManagedInstancesClient {
45	return ManagedInstancesClient{NewWithBaseURI(baseURI, subscriptionID)}
46}
47
48// CreateOrUpdate creates or updates a managed instance.
49// Parameters:
50// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
51// from the Azure Resource Manager API or the portal.
52// managedInstanceName - the name of the managed instance.
53// parameters - the requested managed instance resource state.
54func (client ManagedInstancesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, managedInstanceName string, parameters ManagedInstance) (result ManagedInstancesCreateOrUpdateFuture, err error) {
55	if tracing.IsEnabled() {
56		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.CreateOrUpdate")
57		defer func() {
58			sc := -1
59			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
60				sc = result.FutureAPI.Response().StatusCode
61			}
62			tracing.EndSpan(ctx, sc, err)
63		}()
64	}
65	if err := validation.Validate([]validation.Validation{
66		{TargetValue: parameters,
67			Constraints: []validation.Constraint{{Target: "parameters.Sku", Name: validation.Null, Rule: false,
68				Chain: []validation.Constraint{{Target: "parameters.Sku.Name", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil {
69		return result, validation.NewError("sql.ManagedInstancesClient", "CreateOrUpdate", err.Error())
70	}
71
72	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, managedInstanceName, parameters)
73	if err != nil {
74		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "CreateOrUpdate", nil, "Failure preparing request")
75		return
76	}
77
78	result, err = client.CreateOrUpdateSender(req)
79	if err != nil {
80		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "CreateOrUpdate", nil, "Failure sending request")
81		return
82	}
83
84	return
85}
86
87// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
88func (client ManagedInstancesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, managedInstanceName string, parameters ManagedInstance) (*http.Request, error) {
89	pathParameters := map[string]interface{}{
90		"managedInstanceName": autorest.Encode("path", managedInstanceName),
91		"resourceGroupName":   autorest.Encode("path", resourceGroupName),
92		"subscriptionId":      autorest.Encode("path", client.SubscriptionID),
93	}
94
95	const APIVersion = "2020-02-02-preview"
96	queryParameters := map[string]interface{}{
97		"api-version": APIVersion,
98	}
99
100	preparer := autorest.CreatePreparer(
101		autorest.AsContentType("application/json; charset=utf-8"),
102		autorest.AsPut(),
103		autorest.WithBaseURL(client.BaseURI),
104		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}", pathParameters),
105		autorest.WithJSON(parameters),
106		autorest.WithQueryParameters(queryParameters))
107	return preparer.Prepare((&http.Request{}).WithContext(ctx))
108}
109
110// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
111// http.Response Body if it receives an error.
112func (client ManagedInstancesClient) CreateOrUpdateSender(req *http.Request) (future ManagedInstancesCreateOrUpdateFuture, err error) {
113	var resp *http.Response
114	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
115	if err != nil {
116		return
117	}
118	var azf azure.Future
119	azf, err = azure.NewFutureFromResponse(resp)
120	future.FutureAPI = &azf
121	future.Result = func(client ManagedInstancesClient) (mi ManagedInstance, err error) {
122		var done bool
123		done, err = future.DoneWithContext(context.Background(), client)
124		if err != nil {
125			err = autorest.NewErrorWithError(err, "sql.ManagedInstancesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
126			return
127		}
128		if !done {
129			err = azure.NewAsyncOpIncompleteError("sql.ManagedInstancesCreateOrUpdateFuture")
130			return
131		}
132		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
133		mi.Response.Response, err = future.GetResult(sender)
134		if mi.Response.Response == nil && err == nil {
135			err = autorest.NewErrorWithError(err, "sql.ManagedInstancesCreateOrUpdateFuture", "Result", nil, "received nil response and error")
136		}
137		if err == nil && mi.Response.Response.StatusCode != http.StatusNoContent {
138			mi, err = client.CreateOrUpdateResponder(mi.Response.Response)
139			if err != nil {
140				err = autorest.NewErrorWithError(err, "sql.ManagedInstancesCreateOrUpdateFuture", "Result", mi.Response.Response, "Failure responding to request")
141			}
142		}
143		return
144	}
145	return
146}
147
148// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
149// closes the http.Response Body.
150func (client ManagedInstancesClient) CreateOrUpdateResponder(resp *http.Response) (result ManagedInstance, err error) {
151	err = autorest.Respond(
152		resp,
153		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted),
154		autorest.ByUnmarshallingJSON(&result),
155		autorest.ByClosing())
156	result.Response = autorest.Response{Response: resp}
157	return
158}
159
160// Delete deletes a managed instance.
161// Parameters:
162// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
163// from the Azure Resource Manager API or the portal.
164// managedInstanceName - the name of the managed instance.
165func (client ManagedInstancesClient) Delete(ctx context.Context, resourceGroupName string, managedInstanceName string) (result ManagedInstancesDeleteFuture, err error) {
166	if tracing.IsEnabled() {
167		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.Delete")
168		defer func() {
169			sc := -1
170			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
171				sc = result.FutureAPI.Response().StatusCode
172			}
173			tracing.EndSpan(ctx, sc, err)
174		}()
175	}
176	req, err := client.DeletePreparer(ctx, resourceGroupName, managedInstanceName)
177	if err != nil {
178		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "Delete", nil, "Failure preparing request")
179		return
180	}
181
182	result, err = client.DeleteSender(req)
183	if err != nil {
184		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "Delete", nil, "Failure sending request")
185		return
186	}
187
188	return
189}
190
191// DeletePreparer prepares the Delete request.
192func (client ManagedInstancesClient) DeletePreparer(ctx context.Context, resourceGroupName string, managedInstanceName string) (*http.Request, error) {
193	pathParameters := map[string]interface{}{
194		"managedInstanceName": autorest.Encode("path", managedInstanceName),
195		"resourceGroupName":   autorest.Encode("path", resourceGroupName),
196		"subscriptionId":      autorest.Encode("path", client.SubscriptionID),
197	}
198
199	const APIVersion = "2020-02-02-preview"
200	queryParameters := map[string]interface{}{
201		"api-version": APIVersion,
202	}
203
204	preparer := autorest.CreatePreparer(
205		autorest.AsDelete(),
206		autorest.WithBaseURL(client.BaseURI),
207		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}", pathParameters),
208		autorest.WithQueryParameters(queryParameters))
209	return preparer.Prepare((&http.Request{}).WithContext(ctx))
210}
211
212// DeleteSender sends the Delete request. The method will close the
213// http.Response Body if it receives an error.
214func (client ManagedInstancesClient) DeleteSender(req *http.Request) (future ManagedInstancesDeleteFuture, err error) {
215	var resp *http.Response
216	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
217	if err != nil {
218		return
219	}
220	var azf azure.Future
221	azf, err = azure.NewFutureFromResponse(resp)
222	future.FutureAPI = &azf
223	future.Result = func(client ManagedInstancesClient) (ar autorest.Response, err error) {
224		var done bool
225		done, err = future.DoneWithContext(context.Background(), client)
226		if err != nil {
227			err = autorest.NewErrorWithError(err, "sql.ManagedInstancesDeleteFuture", "Result", future.Response(), "Polling failure")
228			return
229		}
230		if !done {
231			err = azure.NewAsyncOpIncompleteError("sql.ManagedInstancesDeleteFuture")
232			return
233		}
234		ar.Response = future.Response()
235		return
236	}
237	return
238}
239
240// DeleteResponder handles the response to the Delete request. The method always
241// closes the http.Response Body.
242func (client ManagedInstancesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
243	err = autorest.Respond(
244		resp,
245		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
246		autorest.ByClosing())
247	result.Response = resp
248	return
249}
250
251// Failover failovers a managed instance.
252// Parameters:
253// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
254// from the Azure Resource Manager API or the portal.
255// managedInstanceName - the name of the managed instance to failover.
256// replicaType - the type of replica to be failed over.
257func (client ManagedInstancesClient) Failover(ctx context.Context, resourceGroupName string, managedInstanceName string, replicaType ReplicaType) (result ManagedInstancesFailoverFuture, err error) {
258	if tracing.IsEnabled() {
259		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.Failover")
260		defer func() {
261			sc := -1
262			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
263				sc = result.FutureAPI.Response().StatusCode
264			}
265			tracing.EndSpan(ctx, sc, err)
266		}()
267	}
268	req, err := client.FailoverPreparer(ctx, resourceGroupName, managedInstanceName, replicaType)
269	if err != nil {
270		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "Failover", nil, "Failure preparing request")
271		return
272	}
273
274	result, err = client.FailoverSender(req)
275	if err != nil {
276		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "Failover", nil, "Failure sending request")
277		return
278	}
279
280	return
281}
282
283// FailoverPreparer prepares the Failover request.
284func (client ManagedInstancesClient) FailoverPreparer(ctx context.Context, resourceGroupName string, managedInstanceName string, replicaType ReplicaType) (*http.Request, error) {
285	pathParameters := map[string]interface{}{
286		"managedInstanceName": autorest.Encode("path", managedInstanceName),
287		"resourceGroupName":   autorest.Encode("path", resourceGroupName),
288		"subscriptionId":      autorest.Encode("path", client.SubscriptionID),
289	}
290
291	const APIVersion = "2020-02-02-preview"
292	queryParameters := map[string]interface{}{
293		"api-version": APIVersion,
294	}
295	if len(string(replicaType)) > 0 {
296		queryParameters["replicaType"] = autorest.Encode("query", replicaType)
297	}
298
299	preparer := autorest.CreatePreparer(
300		autorest.AsPost(),
301		autorest.WithBaseURL(client.BaseURI),
302		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}/failover", pathParameters),
303		autorest.WithQueryParameters(queryParameters))
304	return preparer.Prepare((&http.Request{}).WithContext(ctx))
305}
306
307// FailoverSender sends the Failover request. The method will close the
308// http.Response Body if it receives an error.
309func (client ManagedInstancesClient) FailoverSender(req *http.Request) (future ManagedInstancesFailoverFuture, err error) {
310	var resp *http.Response
311	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
312	if err != nil {
313		return
314	}
315	var azf azure.Future
316	azf, err = azure.NewFutureFromResponse(resp)
317	future.FutureAPI = &azf
318	future.Result = func(client ManagedInstancesClient) (ar autorest.Response, err error) {
319		var done bool
320		done, err = future.DoneWithContext(context.Background(), client)
321		if err != nil {
322			err = autorest.NewErrorWithError(err, "sql.ManagedInstancesFailoverFuture", "Result", future.Response(), "Polling failure")
323			return
324		}
325		if !done {
326			err = azure.NewAsyncOpIncompleteError("sql.ManagedInstancesFailoverFuture")
327			return
328		}
329		ar.Response = future.Response()
330		return
331	}
332	return
333}
334
335// FailoverResponder handles the response to the Failover request. The method always
336// closes the http.Response Body.
337func (client ManagedInstancesClient) FailoverResponder(resp *http.Response) (result autorest.Response, err error) {
338	err = autorest.Respond(
339		resp,
340		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
341		autorest.ByClosing())
342	result.Response = resp
343	return
344}
345
346// Get gets a managed instance.
347// Parameters:
348// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
349// from the Azure Resource Manager API or the portal.
350// managedInstanceName - the name of the managed instance.
351func (client ManagedInstancesClient) Get(ctx context.Context, resourceGroupName string, managedInstanceName string) (result ManagedInstance, err error) {
352	if tracing.IsEnabled() {
353		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.Get")
354		defer func() {
355			sc := -1
356			if result.Response.Response != nil {
357				sc = result.Response.Response.StatusCode
358			}
359			tracing.EndSpan(ctx, sc, err)
360		}()
361	}
362	req, err := client.GetPreparer(ctx, resourceGroupName, managedInstanceName)
363	if err != nil {
364		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "Get", nil, "Failure preparing request")
365		return
366	}
367
368	resp, err := client.GetSender(req)
369	if err != nil {
370		result.Response = autorest.Response{Response: resp}
371		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "Get", resp, "Failure sending request")
372		return
373	}
374
375	result, err = client.GetResponder(resp)
376	if err != nil {
377		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "Get", resp, "Failure responding to request")
378		return
379	}
380
381	return
382}
383
384// GetPreparer prepares the Get request.
385func (client ManagedInstancesClient) GetPreparer(ctx context.Context, resourceGroupName string, managedInstanceName string) (*http.Request, error) {
386	pathParameters := map[string]interface{}{
387		"managedInstanceName": autorest.Encode("path", managedInstanceName),
388		"resourceGroupName":   autorest.Encode("path", resourceGroupName),
389		"subscriptionId":      autorest.Encode("path", client.SubscriptionID),
390	}
391
392	const APIVersion = "2020-02-02-preview"
393	queryParameters := map[string]interface{}{
394		"api-version": APIVersion,
395	}
396
397	preparer := autorest.CreatePreparer(
398		autorest.AsGet(),
399		autorest.WithBaseURL(client.BaseURI),
400		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}", pathParameters),
401		autorest.WithQueryParameters(queryParameters))
402	return preparer.Prepare((&http.Request{}).WithContext(ctx))
403}
404
405// GetSender sends the Get request. The method will close the
406// http.Response Body if it receives an error.
407func (client ManagedInstancesClient) GetSender(req *http.Request) (*http.Response, error) {
408	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
409}
410
411// GetResponder handles the response to the Get request. The method always
412// closes the http.Response Body.
413func (client ManagedInstancesClient) GetResponder(resp *http.Response) (result ManagedInstance, err error) {
414	err = autorest.Respond(
415		resp,
416		azure.WithErrorUnlessStatusCode(http.StatusOK),
417		autorest.ByUnmarshallingJSON(&result),
418		autorest.ByClosing())
419	result.Response = autorest.Response{Response: resp}
420	return
421}
422
423// List gets a list of all managed instances in the subscription.
424func (client ManagedInstancesClient) List(ctx context.Context) (result ManagedInstanceListResultPage, err error) {
425	if tracing.IsEnabled() {
426		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.List")
427		defer func() {
428			sc := -1
429			if result.milr.Response.Response != nil {
430				sc = result.milr.Response.Response.StatusCode
431			}
432			tracing.EndSpan(ctx, sc, err)
433		}()
434	}
435	result.fn = client.listNextResults
436	req, err := client.ListPreparer(ctx)
437	if err != nil {
438		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "List", nil, "Failure preparing request")
439		return
440	}
441
442	resp, err := client.ListSender(req)
443	if err != nil {
444		result.milr.Response = autorest.Response{Response: resp}
445		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "List", resp, "Failure sending request")
446		return
447	}
448
449	result.milr, err = client.ListResponder(resp)
450	if err != nil {
451		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "List", resp, "Failure responding to request")
452		return
453	}
454	if result.milr.hasNextLink() && result.milr.IsEmpty() {
455		err = result.NextWithContext(ctx)
456		return
457	}
458
459	return
460}
461
462// ListPreparer prepares the List request.
463func (client ManagedInstancesClient) ListPreparer(ctx context.Context) (*http.Request, error) {
464	pathParameters := map[string]interface{}{
465		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
466	}
467
468	const APIVersion = "2020-02-02-preview"
469	queryParameters := map[string]interface{}{
470		"api-version": APIVersion,
471	}
472
473	preparer := autorest.CreatePreparer(
474		autorest.AsGet(),
475		autorest.WithBaseURL(client.BaseURI),
476		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Sql/managedInstances", pathParameters),
477		autorest.WithQueryParameters(queryParameters))
478	return preparer.Prepare((&http.Request{}).WithContext(ctx))
479}
480
481// ListSender sends the List request. The method will close the
482// http.Response Body if it receives an error.
483func (client ManagedInstancesClient) ListSender(req *http.Request) (*http.Response, error) {
484	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
485}
486
487// ListResponder handles the response to the List request. The method always
488// closes the http.Response Body.
489func (client ManagedInstancesClient) ListResponder(resp *http.Response) (result ManagedInstanceListResult, err error) {
490	err = autorest.Respond(
491		resp,
492		azure.WithErrorUnlessStatusCode(http.StatusOK),
493		autorest.ByUnmarshallingJSON(&result),
494		autorest.ByClosing())
495	result.Response = autorest.Response{Response: resp}
496	return
497}
498
499// listNextResults retrieves the next set of results, if any.
500func (client ManagedInstancesClient) listNextResults(ctx context.Context, lastResults ManagedInstanceListResult) (result ManagedInstanceListResult, err error) {
501	req, err := lastResults.managedInstanceListResultPreparer(ctx)
502	if err != nil {
503		return result, autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listNextResults", nil, "Failure preparing next results request")
504	}
505	if req == nil {
506		return
507	}
508	resp, err := client.ListSender(req)
509	if err != nil {
510		result.Response = autorest.Response{Response: resp}
511		return result, autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listNextResults", resp, "Failure sending next results request")
512	}
513	result, err = client.ListResponder(resp)
514	if err != nil {
515		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listNextResults", resp, "Failure responding to next results request")
516	}
517	return
518}
519
520// ListComplete enumerates all values, automatically crossing page boundaries as required.
521func (client ManagedInstancesClient) ListComplete(ctx context.Context) (result ManagedInstanceListResultIterator, err error) {
522	if tracing.IsEnabled() {
523		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.List")
524		defer func() {
525			sc := -1
526			if result.Response().Response.Response != nil {
527				sc = result.page.Response().Response.Response.StatusCode
528			}
529			tracing.EndSpan(ctx, sc, err)
530		}()
531	}
532	result.page, err = client.List(ctx)
533	return
534}
535
536// ListByInstancePool gets a list of all managed instances in an instance pool.
537// Parameters:
538// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
539// from the Azure Resource Manager API or the portal.
540// instancePoolName - the instance pool name.
541func (client ManagedInstancesClient) ListByInstancePool(ctx context.Context, resourceGroupName string, instancePoolName string) (result ManagedInstanceListResultPage, err error) {
542	if tracing.IsEnabled() {
543		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.ListByInstancePool")
544		defer func() {
545			sc := -1
546			if result.milr.Response.Response != nil {
547				sc = result.milr.Response.Response.StatusCode
548			}
549			tracing.EndSpan(ctx, sc, err)
550		}()
551	}
552	result.fn = client.listByInstancePoolNextResults
553	req, err := client.ListByInstancePoolPreparer(ctx, resourceGroupName, instancePoolName)
554	if err != nil {
555		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "ListByInstancePool", nil, "Failure preparing request")
556		return
557	}
558
559	resp, err := client.ListByInstancePoolSender(req)
560	if err != nil {
561		result.milr.Response = autorest.Response{Response: resp}
562		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "ListByInstancePool", resp, "Failure sending request")
563		return
564	}
565
566	result.milr, err = client.ListByInstancePoolResponder(resp)
567	if err != nil {
568		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "ListByInstancePool", resp, "Failure responding to request")
569		return
570	}
571	if result.milr.hasNextLink() && result.milr.IsEmpty() {
572		err = result.NextWithContext(ctx)
573		return
574	}
575
576	return
577}
578
579// ListByInstancePoolPreparer prepares the ListByInstancePool request.
580func (client ManagedInstancesClient) ListByInstancePoolPreparer(ctx context.Context, resourceGroupName string, instancePoolName string) (*http.Request, error) {
581	pathParameters := map[string]interface{}{
582		"instancePoolName":  autorest.Encode("path", instancePoolName),
583		"resourceGroupName": autorest.Encode("path", resourceGroupName),
584		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
585	}
586
587	const APIVersion = "2020-02-02-preview"
588	queryParameters := map[string]interface{}{
589		"api-version": APIVersion,
590	}
591
592	preparer := autorest.CreatePreparer(
593		autorest.AsGet(),
594		autorest.WithBaseURL(client.BaseURI),
595		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/instancePools/{instancePoolName}/managedInstances", pathParameters),
596		autorest.WithQueryParameters(queryParameters))
597	return preparer.Prepare((&http.Request{}).WithContext(ctx))
598}
599
600// ListByInstancePoolSender sends the ListByInstancePool request. The method will close the
601// http.Response Body if it receives an error.
602func (client ManagedInstancesClient) ListByInstancePoolSender(req *http.Request) (*http.Response, error) {
603	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
604}
605
606// ListByInstancePoolResponder handles the response to the ListByInstancePool request. The method always
607// closes the http.Response Body.
608func (client ManagedInstancesClient) ListByInstancePoolResponder(resp *http.Response) (result ManagedInstanceListResult, err error) {
609	err = autorest.Respond(
610		resp,
611		azure.WithErrorUnlessStatusCode(http.StatusOK),
612		autorest.ByUnmarshallingJSON(&result),
613		autorest.ByClosing())
614	result.Response = autorest.Response{Response: resp}
615	return
616}
617
618// listByInstancePoolNextResults retrieves the next set of results, if any.
619func (client ManagedInstancesClient) listByInstancePoolNextResults(ctx context.Context, lastResults ManagedInstanceListResult) (result ManagedInstanceListResult, err error) {
620	req, err := lastResults.managedInstanceListResultPreparer(ctx)
621	if err != nil {
622		return result, autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listByInstancePoolNextResults", nil, "Failure preparing next results request")
623	}
624	if req == nil {
625		return
626	}
627	resp, err := client.ListByInstancePoolSender(req)
628	if err != nil {
629		result.Response = autorest.Response{Response: resp}
630		return result, autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listByInstancePoolNextResults", resp, "Failure sending next results request")
631	}
632	result, err = client.ListByInstancePoolResponder(resp)
633	if err != nil {
634		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listByInstancePoolNextResults", resp, "Failure responding to next results request")
635	}
636	return
637}
638
639// ListByInstancePoolComplete enumerates all values, automatically crossing page boundaries as required.
640func (client ManagedInstancesClient) ListByInstancePoolComplete(ctx context.Context, resourceGroupName string, instancePoolName string) (result ManagedInstanceListResultIterator, err error) {
641	if tracing.IsEnabled() {
642		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.ListByInstancePool")
643		defer func() {
644			sc := -1
645			if result.Response().Response.Response != nil {
646				sc = result.page.Response().Response.Response.StatusCode
647			}
648			tracing.EndSpan(ctx, sc, err)
649		}()
650	}
651	result.page, err = client.ListByInstancePool(ctx, resourceGroupName, instancePoolName)
652	return
653}
654
655// ListByManagedInstance get top resource consuming queries of a managed instance.
656// Parameters:
657// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
658// from the Azure Resource Manager API or the portal.
659// managedInstanceName - the name of the managed instance.
660// numberOfQueries - how many 'top queries' to return. Default is 5.
661// databases - comma separated list of databases to be included into search. All DB's are included if this
662// parameter is not specified.
663// startTime - start time for observed period.
664// endTime - end time for observed period.
665// interval - the time step to be used to summarize the metric values. Default value is PT1H
666// aggregationFunction - aggregation function to be used, default value is 'sum'
667// observationMetric - metric to be used for ranking top queries. Default is 'cpu'
668func (client ManagedInstancesClient) ListByManagedInstance(ctx context.Context, resourceGroupName string, managedInstanceName string, numberOfQueries *int32, databases string, startTime string, endTime string, interval QueryTimeGrainType, aggregationFunction AggregationFunctionType, observationMetric MetricType) (result TopQueriesListResultPage, err error) {
669	if tracing.IsEnabled() {
670		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.ListByManagedInstance")
671		defer func() {
672			sc := -1
673			if result.tqlr.Response.Response != nil {
674				sc = result.tqlr.Response.Response.StatusCode
675			}
676			tracing.EndSpan(ctx, sc, err)
677		}()
678	}
679	result.fn = client.listByManagedInstanceNextResults
680	req, err := client.ListByManagedInstancePreparer(ctx, resourceGroupName, managedInstanceName, numberOfQueries, databases, startTime, endTime, interval, aggregationFunction, observationMetric)
681	if err != nil {
682		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "ListByManagedInstance", nil, "Failure preparing request")
683		return
684	}
685
686	resp, err := client.ListByManagedInstanceSender(req)
687	if err != nil {
688		result.tqlr.Response = autorest.Response{Response: resp}
689		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "ListByManagedInstance", resp, "Failure sending request")
690		return
691	}
692
693	result.tqlr, err = client.ListByManagedInstanceResponder(resp)
694	if err != nil {
695		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "ListByManagedInstance", resp, "Failure responding to request")
696		return
697	}
698	if result.tqlr.hasNextLink() && result.tqlr.IsEmpty() {
699		err = result.NextWithContext(ctx)
700		return
701	}
702
703	return
704}
705
706// ListByManagedInstancePreparer prepares the ListByManagedInstance request.
707func (client ManagedInstancesClient) ListByManagedInstancePreparer(ctx context.Context, resourceGroupName string, managedInstanceName string, numberOfQueries *int32, databases string, startTime string, endTime string, interval QueryTimeGrainType, aggregationFunction AggregationFunctionType, observationMetric MetricType) (*http.Request, error) {
708	pathParameters := map[string]interface{}{
709		"managedInstanceName": autorest.Encode("path", managedInstanceName),
710		"resourceGroupName":   autorest.Encode("path", resourceGroupName),
711		"subscriptionId":      autorest.Encode("path", client.SubscriptionID),
712	}
713
714	const APIVersion = "2020-02-02-preview"
715	queryParameters := map[string]interface{}{
716		"api-version": APIVersion,
717	}
718	if numberOfQueries != nil {
719		queryParameters["numberOfQueries"] = autorest.Encode("query", *numberOfQueries)
720	}
721	if len(databases) > 0 {
722		queryParameters["databases"] = autorest.Encode("query", databases)
723	}
724	if len(startTime) > 0 {
725		queryParameters["startTime"] = autorest.Encode("query", startTime)
726	}
727	if len(endTime) > 0 {
728		queryParameters["endTime"] = autorest.Encode("query", endTime)
729	}
730	if len(string(interval)) > 0 {
731		queryParameters["interval"] = autorest.Encode("query", interval)
732	}
733	if len(string(aggregationFunction)) > 0 {
734		queryParameters["aggregationFunction"] = autorest.Encode("query", aggregationFunction)
735	}
736	if len(string(observationMetric)) > 0 {
737		queryParameters["observationMetric"] = autorest.Encode("query", observationMetric)
738	}
739
740	preparer := autorest.CreatePreparer(
741		autorest.AsGet(),
742		autorest.WithBaseURL(client.BaseURI),
743		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}/topqueries", pathParameters),
744		autorest.WithQueryParameters(queryParameters))
745	return preparer.Prepare((&http.Request{}).WithContext(ctx))
746}
747
748// ListByManagedInstanceSender sends the ListByManagedInstance request. The method will close the
749// http.Response Body if it receives an error.
750func (client ManagedInstancesClient) ListByManagedInstanceSender(req *http.Request) (*http.Response, error) {
751	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
752}
753
754// ListByManagedInstanceResponder handles the response to the ListByManagedInstance request. The method always
755// closes the http.Response Body.
756func (client ManagedInstancesClient) ListByManagedInstanceResponder(resp *http.Response) (result TopQueriesListResult, err error) {
757	err = autorest.Respond(
758		resp,
759		azure.WithErrorUnlessStatusCode(http.StatusOK),
760		autorest.ByUnmarshallingJSON(&result),
761		autorest.ByClosing())
762	result.Response = autorest.Response{Response: resp}
763	return
764}
765
766// listByManagedInstanceNextResults retrieves the next set of results, if any.
767func (client ManagedInstancesClient) listByManagedInstanceNextResults(ctx context.Context, lastResults TopQueriesListResult) (result TopQueriesListResult, err error) {
768	req, err := lastResults.topQueriesListResultPreparer(ctx)
769	if err != nil {
770		return result, autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listByManagedInstanceNextResults", nil, "Failure preparing next results request")
771	}
772	if req == nil {
773		return
774	}
775	resp, err := client.ListByManagedInstanceSender(req)
776	if err != nil {
777		result.Response = autorest.Response{Response: resp}
778		return result, autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listByManagedInstanceNextResults", resp, "Failure sending next results request")
779	}
780	result, err = client.ListByManagedInstanceResponder(resp)
781	if err != nil {
782		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listByManagedInstanceNextResults", resp, "Failure responding to next results request")
783	}
784	return
785}
786
787// ListByManagedInstanceComplete enumerates all values, automatically crossing page boundaries as required.
788func (client ManagedInstancesClient) ListByManagedInstanceComplete(ctx context.Context, resourceGroupName string, managedInstanceName string, numberOfQueries *int32, databases string, startTime string, endTime string, interval QueryTimeGrainType, aggregationFunction AggregationFunctionType, observationMetric MetricType) (result TopQueriesListResultIterator, err error) {
789	if tracing.IsEnabled() {
790		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.ListByManagedInstance")
791		defer func() {
792			sc := -1
793			if result.Response().Response.Response != nil {
794				sc = result.page.Response().Response.Response.StatusCode
795			}
796			tracing.EndSpan(ctx, sc, err)
797		}()
798	}
799	result.page, err = client.ListByManagedInstance(ctx, resourceGroupName, managedInstanceName, numberOfQueries, databases, startTime, endTime, interval, aggregationFunction, observationMetric)
800	return
801}
802
803// ListByResourceGroup gets a list of managed instances in a resource group.
804// Parameters:
805// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
806// from the Azure Resource Manager API or the portal.
807func (client ManagedInstancesClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result ManagedInstanceListResultPage, err error) {
808	if tracing.IsEnabled() {
809		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.ListByResourceGroup")
810		defer func() {
811			sc := -1
812			if result.milr.Response.Response != nil {
813				sc = result.milr.Response.Response.StatusCode
814			}
815			tracing.EndSpan(ctx, sc, err)
816		}()
817	}
818	result.fn = client.listByResourceGroupNextResults
819	req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName)
820	if err != nil {
821		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "ListByResourceGroup", nil, "Failure preparing request")
822		return
823	}
824
825	resp, err := client.ListByResourceGroupSender(req)
826	if err != nil {
827		result.milr.Response = autorest.Response{Response: resp}
828		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "ListByResourceGroup", resp, "Failure sending request")
829		return
830	}
831
832	result.milr, err = client.ListByResourceGroupResponder(resp)
833	if err != nil {
834		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "ListByResourceGroup", resp, "Failure responding to request")
835		return
836	}
837	if result.milr.hasNextLink() && result.milr.IsEmpty() {
838		err = result.NextWithContext(ctx)
839		return
840	}
841
842	return
843}
844
845// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
846func (client ManagedInstancesClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
847	pathParameters := map[string]interface{}{
848		"resourceGroupName": autorest.Encode("path", resourceGroupName),
849		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
850	}
851
852	const APIVersion = "2020-02-02-preview"
853	queryParameters := map[string]interface{}{
854		"api-version": APIVersion,
855	}
856
857	preparer := autorest.CreatePreparer(
858		autorest.AsGet(),
859		autorest.WithBaseURL(client.BaseURI),
860		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances", pathParameters),
861		autorest.WithQueryParameters(queryParameters))
862	return preparer.Prepare((&http.Request{}).WithContext(ctx))
863}
864
865// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
866// http.Response Body if it receives an error.
867func (client ManagedInstancesClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
868	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
869}
870
871// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
872// closes the http.Response Body.
873func (client ManagedInstancesClient) ListByResourceGroupResponder(resp *http.Response) (result ManagedInstanceListResult, err error) {
874	err = autorest.Respond(
875		resp,
876		azure.WithErrorUnlessStatusCode(http.StatusOK),
877		autorest.ByUnmarshallingJSON(&result),
878		autorest.ByClosing())
879	result.Response = autorest.Response{Response: resp}
880	return
881}
882
883// listByResourceGroupNextResults retrieves the next set of results, if any.
884func (client ManagedInstancesClient) listByResourceGroupNextResults(ctx context.Context, lastResults ManagedInstanceListResult) (result ManagedInstanceListResult, err error) {
885	req, err := lastResults.managedInstanceListResultPreparer(ctx)
886	if err != nil {
887		return result, autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request")
888	}
889	if req == nil {
890		return
891	}
892	resp, err := client.ListByResourceGroupSender(req)
893	if err != nil {
894		result.Response = autorest.Response{Response: resp}
895		return result, autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listByResourceGroupNextResults", resp, "Failure sending next results request")
896	}
897	result, err = client.ListByResourceGroupResponder(resp)
898	if err != nil {
899		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request")
900	}
901	return
902}
903
904// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required.
905func (client ManagedInstancesClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result ManagedInstanceListResultIterator, err error) {
906	if tracing.IsEnabled() {
907		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.ListByResourceGroup")
908		defer func() {
909			sc := -1
910			if result.Response().Response.Response != nil {
911				sc = result.page.Response().Response.Response.StatusCode
912			}
913			tracing.EndSpan(ctx, sc, err)
914		}()
915	}
916	result.page, err = client.ListByResourceGroup(ctx, resourceGroupName)
917	return
918}
919
920// Update updates a managed instance.
921// Parameters:
922// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
923// from the Azure Resource Manager API or the portal.
924// managedInstanceName - the name of the managed instance.
925// parameters - the requested managed instance resource state.
926func (client ManagedInstancesClient) Update(ctx context.Context, resourceGroupName string, managedInstanceName string, parameters ManagedInstanceUpdate) (result ManagedInstancesUpdateFuture, err error) {
927	if tracing.IsEnabled() {
928		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedInstancesClient.Update")
929		defer func() {
930			sc := -1
931			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
932				sc = result.FutureAPI.Response().StatusCode
933			}
934			tracing.EndSpan(ctx, sc, err)
935		}()
936	}
937	req, err := client.UpdatePreparer(ctx, resourceGroupName, managedInstanceName, parameters)
938	if err != nil {
939		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "Update", nil, "Failure preparing request")
940		return
941	}
942
943	result, err = client.UpdateSender(req)
944	if err != nil {
945		err = autorest.NewErrorWithError(err, "sql.ManagedInstancesClient", "Update", nil, "Failure sending request")
946		return
947	}
948
949	return
950}
951
952// UpdatePreparer prepares the Update request.
953func (client ManagedInstancesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, managedInstanceName string, parameters ManagedInstanceUpdate) (*http.Request, error) {
954	pathParameters := map[string]interface{}{
955		"managedInstanceName": autorest.Encode("path", managedInstanceName),
956		"resourceGroupName":   autorest.Encode("path", resourceGroupName),
957		"subscriptionId":      autorest.Encode("path", client.SubscriptionID),
958	}
959
960	const APIVersion = "2020-02-02-preview"
961	queryParameters := map[string]interface{}{
962		"api-version": APIVersion,
963	}
964
965	preparer := autorest.CreatePreparer(
966		autorest.AsContentType("application/json; charset=utf-8"),
967		autorest.AsPatch(),
968		autorest.WithBaseURL(client.BaseURI),
969		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/managedInstances/{managedInstanceName}", pathParameters),
970		autorest.WithJSON(parameters),
971		autorest.WithQueryParameters(queryParameters))
972	return preparer.Prepare((&http.Request{}).WithContext(ctx))
973}
974
975// UpdateSender sends the Update request. The method will close the
976// http.Response Body if it receives an error.
977func (client ManagedInstancesClient) UpdateSender(req *http.Request) (future ManagedInstancesUpdateFuture, err error) {
978	var resp *http.Response
979	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
980	if err != nil {
981		return
982	}
983	var azf azure.Future
984	azf, err = azure.NewFutureFromResponse(resp)
985	future.FutureAPI = &azf
986	future.Result = func(client ManagedInstancesClient) (mi ManagedInstance, err error) {
987		var done bool
988		done, err = future.DoneWithContext(context.Background(), client)
989		if err != nil {
990			err = autorest.NewErrorWithError(err, "sql.ManagedInstancesUpdateFuture", "Result", future.Response(), "Polling failure")
991			return
992		}
993		if !done {
994			err = azure.NewAsyncOpIncompleteError("sql.ManagedInstancesUpdateFuture")
995			return
996		}
997		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
998		mi.Response.Response, err = future.GetResult(sender)
999		if mi.Response.Response == nil && err == nil {
1000			err = autorest.NewErrorWithError(err, "sql.ManagedInstancesUpdateFuture", "Result", nil, "received nil response and error")
1001		}
1002		if err == nil && mi.Response.Response.StatusCode != http.StatusNoContent {
1003			mi, err = client.UpdateResponder(mi.Response.Response)
1004			if err != nil {
1005				err = autorest.NewErrorWithError(err, "sql.ManagedInstancesUpdateFuture", "Result", mi.Response.Response, "Failure responding to request")
1006			}
1007		}
1008		return
1009	}
1010	return
1011}
1012
1013// UpdateResponder handles the response to the Update request. The method always
1014// closes the http.Response Body.
1015func (client ManagedInstancesClient) UpdateResponder(resp *http.Response) (result ManagedInstance, err error) {
1016	err = autorest.Respond(
1017		resp,
1018		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
1019		autorest.ByUnmarshallingJSON(&result),
1020		autorest.ByClosing())
1021	result.Response = autorest.Response{Response: resp}
1022	return
1023}
1024