/// <summary>
        /// Creates or updates an Azure Sql Database with new AutoRest SDK.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The upserted Azure Sql Database from AutoRest SDK</returns>
        internal AzureSqlDatabaseModel UpsertDatabaseWithNewSdk(string resourceGroup, string serverName, AzureSqlDatabaseCreateOrUpdateModel model)
        {
            // Construct the ARM resource Id of the pool
            string elasticPoolId = string.IsNullOrWhiteSpace(model.Database.ElasticPoolName) ? null : AzureSqlDatabaseModel.PoolIdTemplate.FormatInvariant(
                _subscription.Id,
                resourceGroup,
                serverName,
                model.Database.ElasticPoolName);

            // Use AutoRest SDK
            var resp = Communicator.CreateOrUpdate(resourceGroup, serverName, model.Database.DatabaseName, new Management.Sql.Models.Database
            {
                Location  = model.Database.Location,
                Tags      = model.Database.Tags,
                Collation = model.Database.CollationName,
                Sku       = string.IsNullOrWhiteSpace(model.Database.SkuName) ? null : new Sku()
                {
                    Name     = model.Database.SkuName,
                    Tier     = model.Database.Edition,
                    Family   = model.Database.Family,
                    Capacity = model.Database.Capacity
                },
                MaxSizeBytes   = model.Database.MaxSizeBytes,
                ReadScale      = model.Database.ReadScale.ToString(),
                SampleName     = model.SampleName,
                ZoneRedundant  = model.Database.ZoneRedundant,
                ElasticPoolId  = elasticPoolId,
                LicenseType    = model.Database.LicenseType,
                AutoPauseDelay = model.Database.AutoPauseDelayInMinutes,
                MinCapacity    = model.Database.MinimumCapacity,
                HighAvailabilityReplicaCount     = model.Database.HighAvailabilityReplicaCount,
                RequestedBackupStorageRedundancy = model.Database.RequestedBackupStorageRedundancy,
                SecondaryType = model.Database.SecondaryType,
                MaintenanceConfigurationId = MaintenanceConfigurationHelper.ConvertMaintenanceConfigurationIdArgument(model.Database.MaintenanceConfigurationId, _subscription.Id),
            });

            return(CreateDatabaseModelFromResponse(resourceGroup, serverName, resp));
        }
        /// <summary>
        /// Creates or updates an Azure Sql Database with new AutoRest SDK.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The upserted Azure Sql Database from AutoRest SDK</returns>
        internal AzureSqlDatabaseModel UpsertDatabaseWithNewSdk(string resourceGroup, string serverName, AzureSqlDatabaseCreateOrUpdateModel model)
        {
            // Construct the ARM resource Id of the pool
            string elasticPoolId = string.IsNullOrWhiteSpace(model.Database.ElasticPoolName) ? null : AzureSqlDatabaseModel.PoolIdTemplate.FormatInvariant(
                _subscription.Id,
                resourceGroup,
                serverName,
                model.Database.ElasticPoolName);

            // Use AutoRest SDK
            var resp = Communicator.CreateOrUpdate(resourceGroup, serverName, model.Database.DatabaseName, new Management.Sql.Models.Database
            {
                Location  = model.Database.Location,
                Tags      = model.Database.Tags,
                Collation = model.Database.CollationName,
                Sku       = string.IsNullOrWhiteSpace(model.Database.SkuName) ? null : new Sku()
                {
                    Name     = model.Database.SkuName,
                    Tier     = model.Database.Edition,
                    Family   = model.Database.Family,
                    Capacity = model.Database.Capacity
                },
                MaxSizeBytes  = model.Database.MaxSizeBytes,
                ReadScale     = model.Database.ReadScale.ToString(),
                SampleName    = model.SampleName,
                ZoneRedundant = model.Database.ZoneRedundant,
                ElasticPoolId = elasticPoolId
            });

            return(CreateDatabaseModelFromResponse(resourceGroup, serverName, resp));
        }
        /// <summary>
        /// Creates or updates an Azure Sql Database with Hyak SDK.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The upserted Azure Sql Database from Hyak SDK</returns>
        internal AzureSqlDatabaseModel UpsertDatabase(string resourceGroup, string serverName, AzureSqlDatabaseCreateOrUpdateModel model)
        {
            // Use Hyak SDK
            var resp = Communicator.CreateOrUpdate(resourceGroup, serverName, model.Database.DatabaseName, new DatabaseCreateOrUpdateParameters
            {
                Location = model.Database.Location,
                Tags = model.Database.Tags,
                Properties = new DatabaseCreateOrUpdateProperties()
                {
                    Collation = model.Database.CollationName,
                    Edition = model.Database.Edition == DatabaseEdition.None ? null : model.Database.Edition.ToString(),
                    MaxSizeBytes = model.Database.MaxSizeBytes,
                    RequestedServiceObjectiveId = model.Database.RequestedServiceObjectiveId,
                    ElasticPoolName = model.Database.ElasticPoolName,
                    RequestedServiceObjectiveName = model.Database.RequestedServiceObjectiveName,
                    ReadScale = model.Database.ReadScale.ToString(),
                }
            });

            return CreateDatabaseModelFromResponse(resourceGroup, serverName, resp);
        }
        /// <summary>
        /// Creates or updates an Azure Sql Database with new AutoRest SDK.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The upserted Azure Sql Database from AutoRest SDK</returns>
        internal AzureSqlDatabaseModel UpsertDatabaseWithNewSdk(string resourceGroup, string serverName, AzureSqlDatabaseCreateOrUpdateModel model)
        {
            // Use AutoRest SDK
            var resp = Communicator.CreateOrUpdate(resourceGroup, serverName, model.Database.DatabaseName, new Management.Sql.Models.Database
            {
                Location = model.Database.Location,
                Tags = model.Database.Tags,
                Collation = model.Database.CollationName,
                Edition = model.Database.Edition == DatabaseEdition.None ? null : model.Database.Edition.ToString(),
                MaxSizeBytes = model.Database.MaxSizeBytes.ToString(),
                RequestedServiceObjectiveId = model.Database.RequestedServiceObjectiveId,
                ElasticPoolName = model.Database.ElasticPoolName,
                RequestedServiceObjectiveName = model.Database.RequestedServiceObjectiveName,
                ReadScale = (ReadScale)Enum.Parse(typeof(ReadScale), model.Database.ReadScale.ToString()),
                SampleName = model.SampleName,
                ZoneRedundant = model.Database.ZoneRedundant
            });

            return CreateDatabaseModelFromResponse(resourceGroup, serverName, resp);
        }
        /// <summary>
        /// Creates or updates an Azure Sql Database.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The upserted Azure Sql Database</returns>
        internal AzureSqlDatabaseModel UpsertDatabase(string resourceGroup, string serverName, AzureSqlDatabaseCreateOrUpdateModel model)
        {
            // Use AutoRest or Hyak SDK depending on model parameters.
            // This is done because we want to add support for -SampleName, which is only supported by AutoRest SDK.
            // Why not always use AutoRest SDK? Because it uses Azure-AsyncOperation polling, while Hyak uses
            // Location polling. This means that switching to AutoRest requires re-recording almost all scenario tests,
            // which currently is quite difficult.
            if (!string.IsNullOrEmpty(model.SampleName))
            {
                // Use AutoRest SDK
                var resp = Communicator.CreateOrUpdate(resourceGroup, serverName, model.Database.DatabaseName, new Management.Sql.Models.Database
                {
                    Location     = model.Database.Location,
                    Tags         = model.Database.Tags,
                    Collation    = model.Database.CollationName,
                    Edition      = model.Database.Edition == DatabaseEdition.None ? null : model.Database.Edition.ToString(),
                    MaxSizeBytes = model.Database.MaxSizeBytes.ToString(),
                    RequestedServiceObjectiveId   = model.Database.RequestedServiceObjectiveId,
                    ElasticPoolName               = model.Database.ElasticPoolName,
                    RequestedServiceObjectiveName = model.Database.RequestedServiceObjectiveName,
                    ReadScale  = (ReadScale)Enum.Parse(typeof(ReadScale), model.Database.ReadScale.ToString()),
                    SampleName = model.SampleName
                });

                return(CreateDatabaseModelFromResponse(resourceGroup, serverName, resp));
            }
            else
            {
                // Use Hyak SDK
                var resp = Communicator.CreateOrUpdate(resourceGroup, serverName, model.Database.DatabaseName, new DatabaseCreateOrUpdateParameters
                {
                    Location   = model.Database.Location,
                    Tags       = model.Database.Tags,
                    Properties = new DatabaseCreateOrUpdateProperties()
                    {
                        Collation    = model.Database.CollationName,
                        Edition      = model.Database.Edition == DatabaseEdition.None ? null : model.Database.Edition.ToString(),
                        MaxSizeBytes = model.Database.MaxSizeBytes,
                        RequestedServiceObjectiveId   = model.Database.RequestedServiceObjectiveId,
                        ElasticPoolName               = model.Database.ElasticPoolName,
                        RequestedServiceObjectiveName = model.Database.RequestedServiceObjectiveName,
                        ReadScale = model.Database.ReadScale.ToString(),
                    }
                });

                return(CreateDatabaseModelFromResponse(resourceGroup, serverName, resp));
            }
        }