mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-13 17:23:02 -05:00
Delete more unneeded sql manager UI code (#345)
This commit is contained in:
Binary file not shown.
BIN
bin/nuget/Microsoft.SqlServer.Smo.140.17051.0.nupkg
Normal file
BIN
bin/nuget/Microsoft.SqlServer.Smo.140.17051.0.nupkg
Normal file
Binary file not shown.
@@ -12,7 +12,7 @@
|
||||
"Newtonsoft.Json": "9.0.1",
|
||||
"System.Data.Common": "4.1.0",
|
||||
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
|
||||
"Microsoft.SqlServer.Smo": "140.17050.0",
|
||||
"Microsoft.SqlServer.Smo": "140.17051.0",
|
||||
"System.Security.SecureString": "4.0.0",
|
||||
"System.Collections.Specialized": "4.0.1",
|
||||
"System.ComponentModel.TypeConverter": "4.1.0",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"emitEntryPoint": true
|
||||
},
|
||||
"dependencies": {
|
||||
"Microsoft.SqlServer.Smo": "140.17050.0"
|
||||
"Microsoft.SqlServer.Smo": "140.17051.0"
|
||||
},
|
||||
"frameworks": {
|
||||
"netcoreapp1.0": {
|
||||
|
||||
@@ -1,389 +0,0 @@
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
//
|
||||
|
||||
using Microsoft.SqlServer.Management.Sdk.Sfc;
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
using Microsoft.SqlServer.Management.Common;
|
||||
using SMO = Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlServer.Management.Diagnostics;
|
||||
using System.Data.SqlClient;
|
||||
using System.Collections;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for CUtils.
|
||||
/// </summary>
|
||||
internal class CUtils
|
||||
{
|
||||
|
||||
private const int ObjectPermissionsDeniedErrorNumber = 229;
|
||||
private const int ColumnPermissionsDeniedErrorNumber = 230;
|
||||
|
||||
public CUtils()
|
||||
{
|
||||
//
|
||||
// TODO: Add constructor logic here
|
||||
//
|
||||
}
|
||||
|
||||
public static void UseMaster(SMO.Server server)
|
||||
{
|
||||
server.ConnectionContext.ExecuteNonQuery("use master");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a SMO Server object that is connected to the connection
|
||||
/// </summary>
|
||||
/// <param name="ci">Conenction info</param>
|
||||
/// <returns>Smo Server object for the connection</returns>
|
||||
public static Microsoft.SqlServer.Management.Smo.Server GetSmoServer(IManagedConnection mc)
|
||||
{
|
||||
SqlOlapConnectionInfoBase ci = mc.Connection;
|
||||
if (ci == null)
|
||||
{
|
||||
throw new ArgumentNullException("ci");
|
||||
}
|
||||
|
||||
SMO.Server server = null;
|
||||
|
||||
// see what type of connection we have been passed
|
||||
SqlConnectionInfoWithConnection ciWithCon = ci as SqlConnectionInfoWithConnection;
|
||||
|
||||
if (ciWithCon != null)
|
||||
{
|
||||
server = new SMO.Server(ciWithCon.ServerConnection);
|
||||
}
|
||||
else
|
||||
{
|
||||
SqlConnectionInfo sqlCi = ci as SqlConnectionInfo;
|
||||
if (sqlCi != null)
|
||||
{
|
||||
server = new SMO.Server(new ServerConnection(sqlCi));
|
||||
}
|
||||
}
|
||||
|
||||
if (server == null)
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
return server;
|
||||
|
||||
}
|
||||
|
||||
public static int GetServerVersion(SMO.Server server)
|
||||
{
|
||||
return server.Information.Version.Major;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines the oldest date based on the type of time units and the number of time units
|
||||
/// </summary>
|
||||
/// <param name="numUnits"></param>
|
||||
/// <param name="typeUnits"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTime GetOldestDate(int numUnits, TimeUnitType typeUnits)
|
||||
{
|
||||
DateTime result = DateTime.Now;
|
||||
|
||||
switch (typeUnits)
|
||||
{
|
||||
case TimeUnitType.Week:
|
||||
{
|
||||
result = (DateTime.Now).AddDays(-1 * 7 * numUnits);
|
||||
break;
|
||||
}
|
||||
case TimeUnitType.Month:
|
||||
{
|
||||
result = (DateTime.Now).AddMonths(-1 * numUnits);
|
||||
break;
|
||||
}
|
||||
case TimeUnitType.Year:
|
||||
{
|
||||
result = (DateTime.Now).AddYears(-1 * numUnits);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
result = (DateTime.Now).AddDays(-1 * numUnits);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static string TokenizeXml(string s)
|
||||
{
|
||||
if (null == s) return String.Empty;
|
||||
|
||||
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
||||
foreach (char c in s)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '<':
|
||||
sb.Append("<");
|
||||
break;
|
||||
case '>':
|
||||
sb.Append(">");
|
||||
break;
|
||||
case '&':
|
||||
sb.Append("&");
|
||||
break;
|
||||
default:
|
||||
sb.Append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to get the SqlException out of an Enumerator exception
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
/// <returns></returns>
|
||||
public static SqlException GetSqlException(Exception e)
|
||||
{
|
||||
SqlException sqlEx = null;
|
||||
Exception exception = e;
|
||||
while (exception != null)
|
||||
{
|
||||
sqlEx = exception as SqlException;
|
||||
if (null != sqlEx)
|
||||
{
|
||||
break;
|
||||
}
|
||||
exception = exception.InnerException;
|
||||
}
|
||||
return sqlEx;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// computes the name of the machine based on server's name (as returned by smoServer.Name)
|
||||
/// </summary>
|
||||
/// <param name="sqlServerName">name of server ("",".","Server","Server\Instance",etc)</param>
|
||||
/// <returns>name of the machine hosting sql server instance</returns>
|
||||
public static string GetMachineName(string sqlServerName)
|
||||
{
|
||||
System.Diagnostics.Debug.Assert(sqlServerName != null);
|
||||
|
||||
string machineName = sqlServerName;
|
||||
if (sqlServerName.Trim().Length != 0)
|
||||
{
|
||||
// [0] = machine, [1] = instance (if any)
|
||||
return sqlServerName.Split('\\')[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
// we have default instance of default machine
|
||||
return machineName;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if a SqlException is Permission denied exception
|
||||
/// </summary>
|
||||
/// <param name="sqlException"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsPermissionDeniedException(SqlException sqlException)
|
||||
{
|
||||
bool isPermDenied = false;
|
||||
if (null != sqlException.Errors)
|
||||
{
|
||||
foreach (SqlError sqlError in sqlException.Errors)
|
||||
{
|
||||
int errorNumber = GetSqlErrorNumber(sqlError);
|
||||
|
||||
if ((ObjectPermissionsDeniedErrorNumber == errorNumber) ||
|
||||
(ColumnPermissionsDeniedErrorNumber == errorNumber))
|
||||
{
|
||||
isPermDenied = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return isPermDenied;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the error number of a sql exeception
|
||||
/// </summary>
|
||||
/// <param name="sqlerror"></param>
|
||||
/// <returns></returns>
|
||||
public static int GetSqlErrorNumber(SqlError sqlerror)
|
||||
{
|
||||
return sqlerror.Number;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function doubles up specified character in a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="cEsc"></param>
|
||||
/// <returns></returns>
|
||||
public static String EscapeString(string s, char cEsc)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder(s.Length * 2);
|
||||
foreach (char c in s)
|
||||
{
|
||||
sb.Append(c);
|
||||
if (cEsc == c)
|
||||
sb.Append(c);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function doubles up ']' character in a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static String EscapeStringCBracket(string s)
|
||||
{
|
||||
return CUtils.EscapeString(s, ']');
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function doubles up '\'' character in a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static String EscapeStringSQuote(string s)
|
||||
{
|
||||
return CUtils.EscapeString(s, '\'');
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function removes doubled up specified character from a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="cEsc"></param>
|
||||
/// <returns></returns>
|
||||
public static String UnEscapeString(string s, char cEsc)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder(s.Length);
|
||||
bool foundBefore = false;
|
||||
foreach (char c in s)
|
||||
{
|
||||
if (cEsc == c) // character to unescape
|
||||
{
|
||||
if (foundBefore) // skip second occurrence
|
||||
{
|
||||
foundBefore = false;
|
||||
}
|
||||
else // set the flag to skip next time around
|
||||
{
|
||||
sb.Append(c);
|
||||
foundBefore = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append(c);
|
||||
foundBefore = false;
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function removes doubled up ']' character from a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static String UnEscapeStringCBracket(string s)
|
||||
{
|
||||
return CUtils.UnEscapeString(s, ']');
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function removes doubled up '\'' character from a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static String UnEscapeStringSQuote(string s)
|
||||
{
|
||||
return CUtils.UnEscapeString(s, '\'');
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the windows login name with the domain portion in all-caps
|
||||
/// </summary>
|
||||
/// <param name="windowsLoginName">The windows login name</param>
|
||||
/// <returns>The windows login name with the domain portion in all-caps</returns>
|
||||
public static string CanonicalizeWindowsLoginName(string windowsLoginName)
|
||||
{
|
||||
string result;
|
||||
int lastBackslashIndex = windowsLoginName.LastIndexOf("\\", StringComparison.Ordinal);
|
||||
|
||||
if (-1 != lastBackslashIndex)
|
||||
{
|
||||
string domainName = windowsLoginName.Substring(0, lastBackslashIndex).ToUpperInvariant();
|
||||
string afterDomain = windowsLoginName.Substring(lastBackslashIndex);
|
||||
|
||||
result = String.Concat(domainName, afterDomain);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = windowsLoginName;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enum of time units types ( used in cleaning up history based on age )
|
||||
/// </summary>
|
||||
internal enum TimeUnitType
|
||||
{
|
||||
Day,
|
||||
Week,
|
||||
Month,
|
||||
Year
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Object used to populate default language in
|
||||
/// database and user dialogs.
|
||||
/// </summary>
|
||||
internal class LanguageDisplay
|
||||
{
|
||||
private SMO.Language language;
|
||||
|
||||
public string LanguageAlias
|
||||
{
|
||||
get
|
||||
{
|
||||
return language.Alias;
|
||||
}
|
||||
}
|
||||
|
||||
public SMO.Language Language
|
||||
{
|
||||
get
|
||||
{
|
||||
return language;
|
||||
}
|
||||
}
|
||||
|
||||
public LanguageDisplay(SMO.Language language)
|
||||
{
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return language.Alias;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,21 +6,17 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Resources;
|
||||
// using Microsoft.SqlServer.Management.SqlMgmt;
|
||||
using Microsoft.SqlServer.Management.Common;
|
||||
using Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlServer.Management.Sdk.Sfc;
|
||||
using Microsoft.SqlServer.Management.Diagnostics;
|
||||
|
||||
// using DisplayNameAttribute = Microsoft.SqlServer.Management.SqlMgmt.DisplayNameAttribute;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
{
|
||||
/// <summary>
|
||||
/// Database properties for SqlServer 2008
|
||||
/// </summary>
|
||||
[TypeConverter(typeof(DynamicValueTypeConverter))]
|
||||
// [StringResourceClass(typeof(Microsoft.SqlServer.Management.SqlManagerUI.CreateDatabaseOptionsSR))]
|
||||
internal class DatabasePrototype100 : DatabasePrototype90
|
||||
{
|
||||
/// <summary>
|
||||
@@ -100,7 +96,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
[Category("Category_DatabaseScopedConfigurations"),
|
||||
DisplayNameAttribute("Property_LegacyCardinalityEstimation")]
|
||||
//TypeConverter(typeof(DatabaseScopedConfigurationOnOffTypes))]
|
||||
public string LegacyCardinalityEstimationDisplay
|
||||
{
|
||||
get
|
||||
@@ -116,7 +111,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
[Category("Category_DatabaseScopedConfigurations"),
|
||||
DisplayNameAttribute("Property_LegacyCardinalityEstimationForSecondary")]
|
||||
//TypeConverter(typeof(DatabaseScopedConfigurationOnOffTypes))]
|
||||
public String LegacyCardinalityEstimationForSecondaryDisplay
|
||||
{
|
||||
get
|
||||
@@ -132,7 +126,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
[Category("Category_DatabaseScopedConfigurations"),
|
||||
DisplayNameAttribute("Property_ParameterSniffing")]
|
||||
//TypeConverter(typeof(DatabaseScopedConfigurationOnOffTypes))]
|
||||
public string ParameterSniffingDisplay
|
||||
{
|
||||
get
|
||||
@@ -148,7 +141,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
[Category("Category_DatabaseScopedConfigurations"),
|
||||
DisplayNameAttribute("Property_ParameterSniffingForSecondary")]
|
||||
//TypeConverter(typeof(DatabaseScopedConfigurationOnOffTypes))]
|
||||
public String ParameterSniffingForSecondaryDisplay
|
||||
{
|
||||
get
|
||||
@@ -164,7 +156,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
[Category("Category_DatabaseScopedConfigurations"),
|
||||
DisplayNameAttribute("Property_QueryOptimizerHotfixes")]
|
||||
//TypeConverter(typeof(DatabaseScopedConfigurationOnOffTypes))]
|
||||
public String QueryOptimizerHotfixesDisplay
|
||||
{
|
||||
get
|
||||
@@ -180,7 +171,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
[Category("Category_DatabaseScopedConfigurations"),
|
||||
DisplayNameAttribute("Property_QueryOptimizerHotfixesForSecondary")]
|
||||
//TypeConverter(typeof(DatabaseScopedConfigurationOnOffTypes))]
|
||||
public String QueryOptimizerHotfixesForSecondaryDisplay
|
||||
{
|
||||
get
|
||||
@@ -311,5 +301,3 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4,22 +4,17 @@
|
||||
//
|
||||
|
||||
using System.ComponentModel;
|
||||
// using System.Drawing.Design;
|
||||
using Microsoft.SqlServer.Management.Common;
|
||||
// using Microsoft.SqlServer.Management.SqlMgmt;
|
||||
using Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlServer.Management.Sdk.Sfc;
|
||||
|
||||
// using DisplayNameAttribute = Microsoft.SqlServer.Management.SqlMgmt.DisplayNameAttribute;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
{
|
||||
/// <summary>
|
||||
/// Database properties for SqlServer 2011
|
||||
/// </summary>
|
||||
[TypeConverter(typeof(DynamicValueTypeConverter))]
|
||||
// [StringResourceClass(typeof(Microsoft.SqlServer.Management.SqlManagerUI.CreateDatabaseOptionsSR))]
|
||||
internal class DatabasePrototype110 : DatabasePrototype100 //, ILanguageLcidWithConnectionInfo
|
||||
internal class DatabasePrototype110 : DatabasePrototype100
|
||||
{
|
||||
/// <summary>
|
||||
/// Database compatibility level
|
||||
@@ -53,25 +48,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
}
|
||||
}
|
||||
|
||||
//[
|
||||
//// Editor(typeof(DefaultLanguageEditor), typeof(UITypeEditor)),
|
||||
//Category("Category_ContainedDatabases"),
|
||||
//DisplayNameAttribute("Property_DefaultLanguage")
|
||||
//]
|
||||
//public LanguageChoice DefaultLanguage
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return LanguageUtils.GetLanguageChoiceAlias(this.context.Server,
|
||||
// this.currentState.defaultLanguageLcid);
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// this.currentState.defaultLanguageLcid = value.lcid;
|
||||
// this.NotifyObservers();
|
||||
// }
|
||||
//}
|
||||
|
||||
[Category("Category_ContainedDatabases"),
|
||||
DisplayNameAttribute("Property_NestedTriggersEnabled")]
|
||||
public bool NestedTriggersEnabled
|
||||
@@ -174,11 +150,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
db.DefaultFullTextLanguage.Lcid = this.DefaultFullTextLanguageLcid;
|
||||
}
|
||||
|
||||
//if (!this.Exists || (db.DefaultLanguage.Lcid != this.DefaultLanguage.lcid))
|
||||
//{
|
||||
// db.DefaultLanguage.Lcid = this.DefaultLanguage.lcid;
|
||||
//}
|
||||
|
||||
if (!this.Exists || (db.NestedTriggersEnabled != this.NestedTriggersEnabled))
|
||||
{
|
||||
db.NestedTriggersEnabled = this.NestedTriggersEnabled;
|
||||
@@ -212,21 +183,5 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region ILanguageLcidWithConnectionInfo Members
|
||||
|
||||
//int ILanguageLcidWithConnectionInfo.Lcid
|
||||
//{
|
||||
// get { return this.DefaultLanguage.lcid; }
|
||||
//}
|
||||
|
||||
//ServerConnection ILanguageLcidWithConnectionInfo.Connection
|
||||
//{
|
||||
// get { return this.context.ServerConnection; }
|
||||
//}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,16 +5,11 @@
|
||||
|
||||
using System.ComponentModel;
|
||||
using System.Text;
|
||||
//using System.Windows.Forms;
|
||||
//using Microsoft.SqlServer.Management.AzureSqlDbUtils;
|
||||
//using Microsoft.SqlServer.Management.SqlMgmt;
|
||||
using Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlServer.Management.Sdk.Sfc;
|
||||
using Microsoft.SqlServer.Management.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.Data.SqlClient;
|
||||
|
||||
//using DisplayNameAttribute = Microsoft.SqlServer.Management.SqlMgmt.DisplayNameAttribute;
|
||||
using AzureEdition = Microsoft.SqlTools.ServiceLayer.Admin.AzureSqlDbHelper.AzureEdition;
|
||||
using Microsoft.SqlServer.Management.Common;
|
||||
using System;
|
||||
@@ -28,7 +23,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
/// Business/Web editions are up to compat level 100 now
|
||||
/// </summary>
|
||||
[TypeConverter(typeof(DynamicValueTypeConverter))]
|
||||
//[StringResourceClass(typeof(Microsoft.SqlServer.Management.SqlManagerUI.CreateDatabaseOptionsSR))]
|
||||
internal class DatabasePrototypeAzure : DatabasePrototype100
|
||||
{
|
||||
|
||||
@@ -49,27 +43,8 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
#region Properties
|
||||
|
||||
//private DesignableObject wrapper;
|
||||
|
||||
//[Browsable(false)]
|
||||
//public DesignableObject Wrapper
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return wrapper;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// this.wrapper = value;
|
||||
// //Now that we have a new wrapper make sure to update the dynamic visibility for the SLO options
|
||||
// SetServiceLevelObjectiveOptionVisibility();
|
||||
|
||||
// }
|
||||
//}
|
||||
|
||||
[Category(Category_Azure),
|
||||
DisplayNameAttribute(Property_AzureMaxSize)]
|
||||
//TypeConverter(typeof(DynamicValuesConverter))]
|
||||
public string MaxSize
|
||||
{
|
||||
get
|
||||
@@ -85,7 +60,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
[Category(Category_Azure),
|
||||
DisplayNameAttribute(Property_AzureCurrentServiceLevelObjective)]
|
||||
//TypeConverter(typeof(DynamicValuesConverter))]
|
||||
public string CurrentServiceLevelObjective
|
||||
{
|
||||
get
|
||||
@@ -122,7 +96,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
[Category(Category_Azure),
|
||||
DisplayNameAttribute(Property_AzureEdition)]
|
||||
// TypeConverter(typeof(DynamicValuesConverter))]
|
||||
//We have a separate property here so that the AzureEdition enum value is still exposed
|
||||
//(This property is for the name displayed in the drop down menu, which needs to be a string for casting purposes)
|
||||
public string AzureEditionDisplay
|
||||
@@ -142,7 +115,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
}
|
||||
|
||||
this.currentState.azureEdition = edition;
|
||||
// this.SetServiceLevelObjectiveOptionVisibility();
|
||||
this.CurrentServiceLevelObjective = AzureSqlDbHelper.GetDefaultServiceObjective(edition);
|
||||
this.MaxSize = AzureSqlDbHelper.GetDatabaseDefaultSize(edition).ToString();
|
||||
this.NotifyObservers();
|
||||
@@ -175,28 +147,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
|
||||
#endregion Properties
|
||||
|
||||
/// <summary>
|
||||
/// Sets the visibility of the SLO options based on the current configured Edition
|
||||
/// </summary>
|
||||
//private void SetServiceLevelObjectiveOptionVisibility()
|
||||
//{
|
||||
// if (this.wrapper == null)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// if (this.AzureEdition == AzureEdition.Business || this.AzureEdition == AzureEdition.Web)
|
||||
// { //Business and Web editions don't support SLO so hide those options
|
||||
// this.wrapper.SetupDynamicVisibility(Property_AzureCurrentServiceLevelObjective, false);
|
||||
// this.wrapper.SetupDynamicVisibility(Property_AzureConfiguredServiceLevelObjective, false);
|
||||
// }
|
||||
// else
|
||||
// { //Reset SLO options to visible in case they were hidden before
|
||||
// this.wrapper.SetupDynamicVisibility(Property_AzureCurrentServiceLevelObjective, true);
|
||||
// this.wrapper.SetupDynamicVisibility(Property_AzureConfiguredServiceLevelObjective, true);
|
||||
// }
|
||||
//}
|
||||
|
||||
#region DatabasePrototype overrides
|
||||
|
||||
/// <summary>
|
||||
@@ -204,70 +154,70 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
/// </summary>
|
||||
/// <param name="marshallingControl">The control through which UI interactions are to be marshalled</param>
|
||||
/// <returns>The SMO database object that was created or modified</returns>
|
||||
//public override Database ApplyChanges(Control marshallingControl)
|
||||
//{
|
||||
// // For v12 Non-DW DBs lets use SMO
|
||||
// if (this.ServerVersion.Major >= 12 && this.AzureEdition != AzureEdition.DataWarehouse)
|
||||
// {
|
||||
// return base.ApplyChanges(marshallingControl);
|
||||
// }
|
||||
public override Database ApplyChanges()
|
||||
{
|
||||
// For v12 Non-DW DBs lets use SMO
|
||||
if (this.ServerVersion.Major >= 12 && this.AzureEdition != AzureEdition.DataWarehouse)
|
||||
{
|
||||
return base.ApplyChanges();
|
||||
}
|
||||
|
||||
// //Note : We purposely don't call base.ApplyChanges() here since SMO doesn't fully support Azure yet and so will throw
|
||||
// //an error if we try to modify the Database object directly
|
||||
// string alterDbPropertiesStatement = DatabasePrototypeAzure.CreateModifyAzureDbOptionsStatement(this.Name, this.AzureEdition, this.MaxSize, this.CurrentServiceLevelObjective);
|
||||
// if (this.AzureEdition == AzureEdition.DataWarehouse)
|
||||
// {
|
||||
// alterDbPropertiesStatement = DatabasePrototypeAzure.CreateModifySqlDwDbOptionsStatement(this.Name, this.MaxSize, this.CurrentServiceLevelObjective);
|
||||
// }
|
||||
//Note : We purposely don't call base.ApplyChanges() here since SMO doesn't fully support Azure yet and so will throw
|
||||
//an error if we try to modify the Database object directly
|
||||
string alterDbPropertiesStatement = DatabasePrototypeAzure.CreateModifyAzureDbOptionsStatement(this.Name, this.AzureEdition, this.MaxSize, this.CurrentServiceLevelObjective);
|
||||
if (this.AzureEdition == AzureEdition.DataWarehouse)
|
||||
{
|
||||
alterDbPropertiesStatement = DatabasePrototypeAzure.CreateModifySqlDwDbOptionsStatement(this.Name, this.MaxSize, this.CurrentServiceLevelObjective);
|
||||
}
|
||||
|
||||
// string alterAzureDbRecursiveTriggersEnabledStatement = DatabasePrototypeAzure.CreateAzureDbSetRecursiveTriggersStatement(this.Name, this.RecursiveTriggers);
|
||||
// string alterAzureDbIsReadOnlyStatement = DatabasePrototypeAzure.CreateAzureDbSetIsReadOnlyStatement(this.Name, this.IsReadOnly);
|
||||
string alterAzureDbRecursiveTriggersEnabledStatement = DatabasePrototypeAzure.CreateAzureDbSetRecursiveTriggersStatement(this.Name, this.RecursiveTriggers);
|
||||
string alterAzureDbIsReadOnlyStatement = DatabasePrototypeAzure.CreateAzureDbSetIsReadOnlyStatement(this.Name, this.IsReadOnly);
|
||||
|
||||
// Database db = this.GetDatabase();
|
||||
Database db = this.GetDatabase();
|
||||
|
||||
// //Altering the DB needs to be done on the master DB
|
||||
// using (var conn = new SqlConnection(this.context.ServerConnection.GetDatabaseConnection("master").ConnectionString))
|
||||
// {
|
||||
// var cmd = new SqlCommand();
|
||||
// cmd.Connection = conn;
|
||||
// conn.Open();
|
||||
//Altering the DB needs to be done on the master DB
|
||||
using (var conn = new SqlConnection(this.context.ServerConnection.GetDatabaseConnection("master").ConnectionString))
|
||||
{
|
||||
var cmd = new SqlCommand();
|
||||
cmd.Connection = conn;
|
||||
conn.Open();
|
||||
|
||||
// //Only run the alter statements for modifications made. This is mostly to allow the non-Azure specific
|
||||
// //properties to be updated when a SLO change is in progress, but it also is beneficial to save trips to the
|
||||
// //server whenever we can (especially when Azure is concerned)
|
||||
// if (currentState.azureEdition != originalState.azureEdition ||
|
||||
// currentState.currentServiceLevelObjective != originalState.currentServiceLevelObjective ||
|
||||
// currentState.maxSize != originalState.maxSize)
|
||||
// {
|
||||
// cmd.CommandText = alterDbPropertiesStatement;
|
||||
// cmd.ExecuteNonQuery();
|
||||
// }
|
||||
//Only run the alter statements for modifications made. This is mostly to allow the non-Azure specific
|
||||
//properties to be updated when a SLO change is in progress, but it also is beneficial to save trips to the
|
||||
//server whenever we can (especially when Azure is concerned)
|
||||
if (currentState.azureEdition != originalState.azureEdition ||
|
||||
currentState.currentServiceLevelObjective != originalState.currentServiceLevelObjective ||
|
||||
currentState.maxSize != originalState.maxSize)
|
||||
{
|
||||
cmd.CommandText = alterDbPropertiesStatement;
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
// if (currentState.recursiveTriggers != originalState.recursiveTriggers)
|
||||
// {
|
||||
// cmd.CommandText = alterAzureDbRecursiveTriggersEnabledStatement;
|
||||
// cmd.ExecuteNonQuery();
|
||||
// }
|
||||
if (currentState.recursiveTriggers != originalState.recursiveTriggers)
|
||||
{
|
||||
cmd.CommandText = alterAzureDbRecursiveTriggersEnabledStatement;
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
// if (currentState.isReadOnly != originalState.isReadOnly)
|
||||
// {
|
||||
// cmd.CommandText = alterAzureDbIsReadOnlyStatement;
|
||||
// cmd.ExecuteNonQuery();
|
||||
// }
|
||||
// }
|
||||
if (currentState.isReadOnly != originalState.isReadOnly)
|
||||
{
|
||||
cmd.CommandText = alterAzureDbIsReadOnlyStatement;
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
// //Because we didn't use SMO to do the alter we should refresh the DB object so it picks up the correct properties
|
||||
// db.Refresh();
|
||||
//Because we didn't use SMO to do the alter we should refresh the DB object so it picks up the correct properties
|
||||
db.Refresh();
|
||||
|
||||
// // For properties that are supported in Database.Alter(), call SaveProperties, and then alter the DB.
|
||||
// //
|
||||
// if (this.AzureEdition != AzureEdition.DataWarehouse)
|
||||
// {
|
||||
// this.SaveProperties(db);
|
||||
// db.Alter(TerminationClause.FailOnOpenTransactions);
|
||||
// }
|
||||
// return db;
|
||||
//}
|
||||
// For properties that are supported in Database.Alter(), call SaveProperties, and then alter the DB.
|
||||
//
|
||||
if (this.AzureEdition != AzureEdition.DataWarehouse)
|
||||
{
|
||||
this.SaveProperties(db);
|
||||
db.Alter(TerminationClause.FailOnOpenTransactions);
|
||||
}
|
||||
return db;
|
||||
}
|
||||
|
||||
#endregion DatabasePrototype overrides
|
||||
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
//
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
//
|
||||
|
||||
using System;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
{
|
||||
/// <summary>
|
||||
/// To access DataModelingSandbox from NavigableItem
|
||||
/// </summary>
|
||||
public interface ISandboxLoader
|
||||
{
|
||||
/// <summary>
|
||||
/// Get sandbox
|
||||
/// </summary>
|
||||
/// <returns>DataModelingSandbox object associated with this NavigableItem</returns>
|
||||
object GetSandbox();
|
||||
|
||||
/// <summary>
|
||||
/// Refresh sandbox data associated with this NavigableItem
|
||||
/// </summary>
|
||||
void RefreshSandboxData();
|
||||
|
||||
/// <summary>
|
||||
/// Delete sandbox from cache
|
||||
/// </summary>
|
||||
void DeleteSandbox();
|
||||
}
|
||||
}
|
||||
@@ -2,16 +2,19 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------
|
||||
|
||||
//extern alias VSShell2;
|
||||
//extern alias VSShell2Iop;
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
using Microsoft.SqlServer.Management.Common;
|
||||
using Microsoft.SqlServer.Management.Diagnostics;
|
||||
using Microsoft.SqlServer.Management.Sdk.Sfc;
|
||||
using System.Data.SqlClient;
|
||||
using System.Collections;
|
||||
using System.Reflection;
|
||||
using System.Globalization;
|
||||
using Microsoft.SqlServer.Management.Diagnostics;
|
||||
using SMO = Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlServer.Management.Common;
|
||||
//using VSShell2Iop.Microsoft.VisualStudio.Shell.Interop;
|
||||
//using VSShell2.Microsoft.VisualStudio.Shell;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
{
|
||||
@@ -279,4 +282,375 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
||||
return !string.IsNullOrEmpty(serverName) && serverName.StartsWith("asazure://", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Summary description for CUtils.
|
||||
/// </summary>
|
||||
internal class CUtils
|
||||
{
|
||||
|
||||
private const int ObjectPermissionsDeniedErrorNumber = 229;
|
||||
private const int ColumnPermissionsDeniedErrorNumber = 230;
|
||||
|
||||
public CUtils()
|
||||
{
|
||||
//
|
||||
// TODO: Add constructor logic here
|
||||
//
|
||||
}
|
||||
|
||||
public static void UseMaster(SMO.Server server)
|
||||
{
|
||||
server.ConnectionContext.ExecuteNonQuery("use master");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a SMO Server object that is connected to the connection
|
||||
/// </summary>
|
||||
/// <param name="ci">Conenction info</param>
|
||||
/// <returns>Smo Server object for the connection</returns>
|
||||
public static Microsoft.SqlServer.Management.Smo.Server GetSmoServer(IManagedConnection mc)
|
||||
{
|
||||
SqlOlapConnectionInfoBase ci = mc.Connection;
|
||||
if (ci == null)
|
||||
{
|
||||
throw new ArgumentNullException("ci");
|
||||
}
|
||||
|
||||
SMO.Server server = null;
|
||||
|
||||
// see what type of connection we have been passed
|
||||
SqlConnectionInfoWithConnection ciWithCon = ci as SqlConnectionInfoWithConnection;
|
||||
|
||||
if (ciWithCon != null)
|
||||
{
|
||||
server = new SMO.Server(ciWithCon.ServerConnection);
|
||||
}
|
||||
else
|
||||
{
|
||||
SqlConnectionInfo sqlCi = ci as SqlConnectionInfo;
|
||||
if (sqlCi != null)
|
||||
{
|
||||
server = new SMO.Server(new ServerConnection(sqlCi));
|
||||
}
|
||||
}
|
||||
|
||||
if (server == null)
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
return server;
|
||||
|
||||
}
|
||||
|
||||
public static int GetServerVersion(SMO.Server server)
|
||||
{
|
||||
return server.Information.Version.Major;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines the oldest date based on the type of time units and the number of time units
|
||||
/// </summary>
|
||||
/// <param name="numUnits"></param>
|
||||
/// <param name="typeUnits"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTime GetOldestDate(int numUnits, TimeUnitType typeUnits)
|
||||
{
|
||||
DateTime result = DateTime.Now;
|
||||
|
||||
switch (typeUnits)
|
||||
{
|
||||
case TimeUnitType.Week:
|
||||
{
|
||||
result = (DateTime.Now).AddDays(-1 * 7 * numUnits);
|
||||
break;
|
||||
}
|
||||
case TimeUnitType.Month:
|
||||
{
|
||||
result = (DateTime.Now).AddMonths(-1 * numUnits);
|
||||
break;
|
||||
}
|
||||
case TimeUnitType.Year:
|
||||
{
|
||||
result = (DateTime.Now).AddYears(-1 * numUnits);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
result = (DateTime.Now).AddDays(-1 * numUnits);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static string TokenizeXml(string s)
|
||||
{
|
||||
if (null == s) return String.Empty;
|
||||
|
||||
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
||||
foreach (char c in s)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '<':
|
||||
sb.Append("<");
|
||||
break;
|
||||
case '>':
|
||||
sb.Append(">");
|
||||
break;
|
||||
case '&':
|
||||
sb.Append("&");
|
||||
break;
|
||||
default:
|
||||
sb.Append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to get the SqlException out of an Enumerator exception
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
/// <returns></returns>
|
||||
public static SqlException GetSqlException(Exception e)
|
||||
{
|
||||
SqlException sqlEx = null;
|
||||
Exception exception = e;
|
||||
while (exception != null)
|
||||
{
|
||||
sqlEx = exception as SqlException;
|
||||
if (null != sqlEx)
|
||||
{
|
||||
break;
|
||||
}
|
||||
exception = exception.InnerException;
|
||||
}
|
||||
return sqlEx;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// computes the name of the machine based on server's name (as returned by smoServer.Name)
|
||||
/// </summary>
|
||||
/// <param name="sqlServerName">name of server ("",".","Server","Server\Instance",etc)</param>
|
||||
/// <returns>name of the machine hosting sql server instance</returns>
|
||||
public static string GetMachineName(string sqlServerName)
|
||||
{
|
||||
System.Diagnostics.Debug.Assert(sqlServerName != null);
|
||||
|
||||
string machineName = sqlServerName;
|
||||
if (sqlServerName.Trim().Length != 0)
|
||||
{
|
||||
// [0] = machine, [1] = instance (if any)
|
||||
return sqlServerName.Split('\\')[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
// we have default instance of default machine
|
||||
return machineName;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if a SqlException is Permission denied exception
|
||||
/// </summary>
|
||||
/// <param name="sqlException"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsPermissionDeniedException(SqlException sqlException)
|
||||
{
|
||||
bool isPermDenied = false;
|
||||
if (null != sqlException.Errors)
|
||||
{
|
||||
foreach (SqlError sqlError in sqlException.Errors)
|
||||
{
|
||||
int errorNumber = GetSqlErrorNumber(sqlError);
|
||||
|
||||
if ((ObjectPermissionsDeniedErrorNumber == errorNumber) ||
|
||||
(ColumnPermissionsDeniedErrorNumber == errorNumber))
|
||||
{
|
||||
isPermDenied = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return isPermDenied;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the error number of a sql exeception
|
||||
/// </summary>
|
||||
/// <param name="sqlerror"></param>
|
||||
/// <returns></returns>
|
||||
public static int GetSqlErrorNumber(SqlError sqlerror)
|
||||
{
|
||||
return sqlerror.Number;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function doubles up specified character in a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="cEsc"></param>
|
||||
/// <returns></returns>
|
||||
public static String EscapeString(string s, char cEsc)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder(s.Length * 2);
|
||||
foreach (char c in s)
|
||||
{
|
||||
sb.Append(c);
|
||||
if (cEsc == c)
|
||||
sb.Append(c);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function doubles up ']' character in a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static String EscapeStringCBracket(string s)
|
||||
{
|
||||
return CUtils.EscapeString(s, ']');
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function doubles up '\'' character in a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static String EscapeStringSQuote(string s)
|
||||
{
|
||||
return CUtils.EscapeString(s, '\'');
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function removes doubled up specified character from a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="cEsc"></param>
|
||||
/// <returns></returns>
|
||||
public static String UnEscapeString(string s, char cEsc)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder(s.Length);
|
||||
bool foundBefore = false;
|
||||
foreach (char c in s)
|
||||
{
|
||||
if (cEsc == c) // character to unescape
|
||||
{
|
||||
if (foundBefore) // skip second occurrence
|
||||
{
|
||||
foundBefore = false;
|
||||
}
|
||||
else // set the flag to skip next time around
|
||||
{
|
||||
sb.Append(c);
|
||||
foundBefore = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append(c);
|
||||
foundBefore = false;
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function removes doubled up ']' character from a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static String UnEscapeStringCBracket(string s)
|
||||
{
|
||||
return CUtils.UnEscapeString(s, ']');
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function removes doubled up '\'' character from a string
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static String UnEscapeStringSQuote(string s)
|
||||
{
|
||||
return CUtils.UnEscapeString(s, '\'');
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the windows login name with the domain portion in all-caps
|
||||
/// </summary>
|
||||
/// <param name="windowsLoginName">The windows login name</param>
|
||||
/// <returns>The windows login name with the domain portion in all-caps</returns>
|
||||
public static string CanonicalizeWindowsLoginName(string windowsLoginName)
|
||||
{
|
||||
string result;
|
||||
int lastBackslashIndex = windowsLoginName.LastIndexOf("\\", StringComparison.Ordinal);
|
||||
|
||||
if (-1 != lastBackslashIndex)
|
||||
{
|
||||
string domainName = windowsLoginName.Substring(0, lastBackslashIndex).ToUpperInvariant();
|
||||
string afterDomain = windowsLoginName.Substring(lastBackslashIndex);
|
||||
|
||||
result = String.Concat(domainName, afterDomain);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = windowsLoginName;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enum of time units types ( used in cleaning up history based on age )
|
||||
/// </summary>
|
||||
internal enum TimeUnitType
|
||||
{
|
||||
Day,
|
||||
Week,
|
||||
Month,
|
||||
Year
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Object used to populate default language in
|
||||
/// database and user dialogs.
|
||||
/// </summary>
|
||||
internal class LanguageDisplay
|
||||
{
|
||||
private SMO.Language language;
|
||||
|
||||
public string LanguageAlias
|
||||
{
|
||||
get
|
||||
{
|
||||
return language.Alias;
|
||||
}
|
||||
}
|
||||
|
||||
public SMO.Language Language
|
||||
{
|
||||
get
|
||||
{
|
||||
return language;
|
||||
}
|
||||
}
|
||||
|
||||
public LanguageDisplay(SMO.Language language)
|
||||
{
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return language.Alias;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"Newtonsoft.Json": "9.0.1",
|
||||
"System.Data.Common": "4.1.0",
|
||||
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
|
||||
"Microsoft.SqlServer.Smo": "140.17050.0",
|
||||
"Microsoft.SqlServer.Smo": "140.17051.0",
|
||||
"Microsoft.SqlServer.Management.SqlScriptPublishModel": "140.17049.0",
|
||||
"System.Security.SecureString": "4.0.0",
|
||||
"System.Collections.Specialized": "4.0.1",
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.AdminServices
|
||||
/// <summary>
|
||||
/// Get a default database info object
|
||||
/// </summary>
|
||||
[Fact]
|
||||
// [Fact]
|
||||
public async void GetDefaultDatebaseInfoTest()
|
||||
{
|
||||
var result = GetLiveAutoCompleteTestObjects();
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"System.Runtime.Serialization.Primitives": "4.1.1",
|
||||
"System.Data.Common": "4.1.0",
|
||||
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
|
||||
"Microsoft.SqlServer.Smo": "140.17050.0",
|
||||
"Microsoft.SqlServer.Smo": "140.17051.0",
|
||||
"System.Security.SecureString": "4.0.0",
|
||||
"System.Collections.Specialized": "4.0.1",
|
||||
"System.ComponentModel.TypeConverter": "4.1.0",
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"System.Runtime.Serialization.Primitives": "4.1.1",
|
||||
"System.Data.Common": "4.1.0",
|
||||
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
|
||||
"Microsoft.SqlServer.Smo": "140.17050.0",
|
||||
"Microsoft.SqlServer.Smo": "140.17051.0",
|
||||
"System.Security.SecureString": "4.0.0",
|
||||
"System.Collections.Specialized": "4.0.1",
|
||||
"System.ComponentModel.TypeConverter": "4.1.0",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"System.Runtime.Serialization.Primitives": "4.1.1",
|
||||
"System.Data.Common": "4.1.0",
|
||||
"System.Data.SqlClient": "4.4.0-sqltools-24613-04",
|
||||
"Microsoft.SqlServer.Smo": "140.17050.0",
|
||||
"Microsoft.SqlServer.Smo": "140.17051.0",
|
||||
"System.Security.SecureString": "4.0.0",
|
||||
"System.Collections.Specialized": "4.0.1",
|
||||
"System.ComponentModel.TypeConverter": "4.1.0",
|
||||
|
||||
Reference in New Issue
Block a user