mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-16 10:58:30 -05:00
Bug fix for https://github.com/Microsoft/azuredatastudio/issues/2923 and misc other fixes (#711)
This commit is contained in:
@@ -36,15 +36,12 @@ namespace Microsoft.SqlTools.Credentials
|
||||
string logFilePath = commandOptions.LogFilePath;
|
||||
if (string.IsNullOrWhiteSpace(logFilePath))
|
||||
{
|
||||
logFilePath = "credentials";
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(commandOptions.LoggingDirectory))
|
||||
{
|
||||
logFilePath = Logger.GenerateLogFilePath(Path.Combine(commandOptions.LoggingDirectory, logFilePath));
|
||||
logFilePath = Logger.GenerateLogFilePath("credentials");
|
||||
}
|
||||
|
||||
Logger.AutoFlush = commandOptions.AutoFlushLog;
|
||||
|
||||
Logger.Initialize(tracingLevel: commandOptions.TracingLevel, logFilePath: logFilePath, traceSource: "credentials");
|
||||
Logger.Write(TraceEventType.Information, "Starting SqlTools Credentials Provider");
|
||||
|
||||
// set up the host details and profile paths
|
||||
var hostDetails = new HostDetails(
|
||||
|
||||
@@ -28,19 +28,12 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
ErrorMessage = string.Empty;
|
||||
Locale = string.Empty;
|
||||
|
||||
//set default log directory
|
||||
LoggingDirectory = DefaultLogRoot;
|
||||
if (!string.IsNullOrWhiteSpace(ServiceName))
|
||||
{
|
||||
LoggingDirectory = Path.Combine(LoggingDirectory, ServiceName);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
for (int i = 0; i < args.Length; ++i)
|
||||
{
|
||||
string arg = args[i];
|
||||
if (arg.StartsWith("--") || arg.StartsWith("-"))
|
||||
if (arg != null && (arg.StartsWith("--") || arg.StartsWith("-")))
|
||||
{
|
||||
// Extracting arguments and properties
|
||||
arg = arg.Substring(1).ToLowerInvariant();
|
||||
@@ -48,17 +41,15 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
|
||||
switch (argName)
|
||||
{
|
||||
case "-enable-logging":
|
||||
break; //ignore this old option for now for backward compat with older opsstudio code - to be removed in a future checkin
|
||||
case "-autoflush-log":
|
||||
AutoFlushLog = true;
|
||||
break;
|
||||
case "-tracing-level":
|
||||
TracingLevel = args[++i];
|
||||
break;
|
||||
case "-log-file":
|
||||
LogFilePath = args[++i];
|
||||
break;
|
||||
case "-log-dir":
|
||||
SetLoggingDirectory(args[++i]);
|
||||
break;
|
||||
case "-locale":
|
||||
SetLocale(args[++i]);
|
||||
break;
|
||||
@@ -93,11 +84,6 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
/// </summary>
|
||||
public string ErrorMessage { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the directory where log files are output.
|
||||
/// </summary>
|
||||
public string LoggingDirectory { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the program should exit immediately. Set to true when the usage is printed.
|
||||
/// </summary>
|
||||
@@ -123,11 +109,10 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
var str = string.Format("{0}" + Environment.NewLine +
|
||||
ServiceName + " " + Environment.NewLine +
|
||||
" Options:" + Environment.NewLine +
|
||||
" [--enable-logging ] (obsolete - present for backward compat. Logging is always on, except -tracing-level Off has the effect of disabling logging)" + Environment.NewLine +
|
||||
" [--tracing-level **] (** can be any of: All, Off, Critical, Error, Warning, Information, Verbose. Default is Critical)" + Environment.NewLine +
|
||||
" [--log-file **]" + Environment.NewLine +
|
||||
" [--log-dir **] (default: %APPDATA%\\<service name>)" + Environment.NewLine +
|
||||
" [--autoflush-log] (If passed in auto flushing of log files is enabled., Verbose. Default is to not auto-flush log files)" + Environment.NewLine +
|
||||
" [--locale **] (default: 'en')" + Environment.NewLine,
|
||||
" [--log-file **]" + Environment.NewLine +
|
||||
" [--tracing-level **] (** can be any of: All, Off, Critical, Error, Warning, Information, Verbose. Default is Critical)" + Environment.NewLine +
|
||||
" [--help]" + Environment.NewLine +
|
||||
ErrorMessage);
|
||||
return str;
|
||||
@@ -138,15 +123,7 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
|
||||
public string LogFilePath { get; private set; }
|
||||
|
||||
private void SetLoggingDirectory(string loggingDirectory)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(loggingDirectory))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this.LoggingDirectory = Path.GetFullPath(loggingDirectory);
|
||||
}
|
||||
public bool AutoFlushLog { get; private set; } = false;
|
||||
|
||||
public virtual void SetLocale(string locale)
|
||||
{
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
get => tracingLevel;
|
||||
set
|
||||
{
|
||||
// configures the source level filter. This alone is not enough for tracing that is done via "Trace" object instead of "TraceSource" object
|
||||
// configures the source level filter. This alone is not enough for tracing that is done via "Trace" class instead of "TraceSource" object
|
||||
TraceSource.Switch = new SourceSwitch(TraceSource.Name, value.ToString());
|
||||
// configure the listener level filter
|
||||
tracingLevel = value;
|
||||
@@ -94,6 +94,8 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
}
|
||||
}
|
||||
|
||||
public static bool AutoFlush { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the Logger for the current process.
|
||||
/// </summary>
|
||||
@@ -108,9 +110,11 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
public static void Initialize(
|
||||
SourceLevels tracingLevel = defaultTracingLevel,
|
||||
string logFilePath = null,
|
||||
string traceSource = defaultTraceSource)
|
||||
string traceSource = defaultTraceSource,
|
||||
bool autoFlush = false)
|
||||
{
|
||||
Logger.tracingLevel = tracingLevel;
|
||||
Logger.AutoFlush = autoFlush;
|
||||
TraceSource = new TraceSource(traceSource, Logger.tracingLevel);
|
||||
if (string.IsNullOrWhiteSpace(logFilePath))
|
||||
{
|
||||
@@ -118,7 +122,7 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
}
|
||||
|
||||
LogFileFullPath = logFilePath;
|
||||
Write(TraceEventType.Information, $"Initialized the {traceSource} logger");
|
||||
Write(TraceEventType.Information, $"Initialized the {traceSource} logger. Log file is: {LogFileFullPath}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -185,7 +189,7 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
}
|
||||
|
||||
// make the log path unique
|
||||
return $"{logFilePrefix}_{DateTime.Now.Year,4:D4}{DateTime.Now.Month,2:D2}{DateTime.Now.Day,2:D2}{DateTime.Now.Hour,2:D2}{DateTime.Now.Minute,2:D2}{DateTime.Now.Second,2:D2}{uniqueId}.log";
|
||||
return $"{logFilePrefix}_{DateTime.Now.Year,4:D4}{DateTime.Now.Month,2:D2}{DateTime.Now.Day,2:D2}{DateTime.Now.Hour,2:D2}{DateTime.Now.Minute,2:D2}{DateTime.Now.Second,2:D2}_{uniqueId}.log";
|
||||
}
|
||||
|
||||
private static void ConfigureListener()
|
||||
@@ -290,6 +294,10 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (AutoFlush)
|
||||
{
|
||||
Flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -431,7 +439,7 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
return message;
|
||||
}
|
||||
|
||||
return $"{(IsEnabled(TraceOptions.DateTime) ? string.Format(CultureInfo.InvariantCulture, "{0} ", eventCache.DateTime.ToLocalTime().ToString("u", CultureInfo.InvariantCulture)) : string.Empty)}"
|
||||
return $"{(IsEnabled(TraceOptions.DateTime) ? string.Format(CultureInfo.InvariantCulture, "{0} ", eventCache.DateTime.ToLocalTime().ToString("yy-MM-dd H:mm:ss.fffffff", CultureInfo.InvariantCulture)) : string.Empty)}"
|
||||
+ $"{(IsEnabled(TraceOptions.ProcessId) ? string.Format(CultureInfo.InvariantCulture, "pid:{0} ", eventCache.ProcessId.ToString(CultureInfo.InvariantCulture)) : string.Empty)}"
|
||||
+ $"{(IsEnabled(TraceOptions.ThreadId) ? string.Format(CultureInfo.InvariantCulture, "tid:{0} ", eventCache.ThreadId.ToString(CultureInfo.InvariantCulture)) : string.Empty)}"
|
||||
+ message;
|
||||
|
||||
@@ -28,19 +28,12 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
ErrorMessage = string.Empty;
|
||||
Locale = string.Empty;
|
||||
|
||||
//set default log directory
|
||||
LoggingDirectory = DefaultLogRoot;
|
||||
if (!string.IsNullOrWhiteSpace(ServiceName))
|
||||
{
|
||||
LoggingDirectory = Path.Combine(LoggingDirectory, ServiceName);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
for (int i = 0; i < args.Length; ++i)
|
||||
{
|
||||
string arg = args[i];
|
||||
if (arg.StartsWith("--") || arg.StartsWith("-"))
|
||||
if (arg != null && (arg.StartsWith("--") || arg.StartsWith("-")))
|
||||
{
|
||||
// Extracting arguments and properties
|
||||
arg = arg.Substring(1).ToLowerInvariant();
|
||||
@@ -48,17 +41,15 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
|
||||
switch (argName)
|
||||
{
|
||||
case "-enable-logging":
|
||||
break; //ignore this old option for now for backward compat with older opsstudio code - to be removed in a future checkin
|
||||
case "-autoflush-log":
|
||||
AutoFlushLog = true;
|
||||
break;
|
||||
case "-tracing-level":
|
||||
TracingLevel = args[++i];
|
||||
break;
|
||||
case "-log-file":
|
||||
LogFilePath = args[++i];
|
||||
break;
|
||||
case "-log-dir":
|
||||
SetLoggingDirectory(args[++i]);
|
||||
break;
|
||||
case "-locale":
|
||||
SetLocale(args[++i]);
|
||||
break;
|
||||
@@ -93,11 +84,6 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
/// </summary>
|
||||
public string ErrorMessage { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the directory where log files are output.
|
||||
/// </summary>
|
||||
public string LoggingDirectory { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the program should exit immediately. Set to true when the usage is printed.
|
||||
/// </summary>
|
||||
@@ -123,11 +109,10 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
var str = string.Format("{0}" + Environment.NewLine +
|
||||
ServiceName + " " + Environment.NewLine +
|
||||
" Options:" + Environment.NewLine +
|
||||
" [--enable-logging ] (obsolete - present for backward compat. Logging is always on, except -tracing-level Off has the effect of disabling logging)" + Environment.NewLine +
|
||||
" [--tracing-level **] (** can be any of: All, Off, Critical, Error, Warning, Information, Verbose. Default is Critical)" + Environment.NewLine +
|
||||
" [--log-file **]" + Environment.NewLine +
|
||||
" [--log-dir **] (default: %APPDATA%\\<service name>)" + Environment.NewLine +
|
||||
" [--autoflush-log] (If passed in auto flushing of log files is enabled., Verbose. Default is to not auto-flush log files)" + Environment.NewLine +
|
||||
" [--locale **] (default: 'en')" + Environment.NewLine,
|
||||
" [--log-file **]" + Environment.NewLine +
|
||||
" [--tracing-level **] (** can be any of: All, Off, Critical, Error, Warning, Information, Verbose. Default is Critical)" + Environment.NewLine +
|
||||
" [--help]" + Environment.NewLine +
|
||||
ErrorMessage);
|
||||
return str;
|
||||
@@ -138,15 +123,7 @@ namespace Microsoft.SqlTools.Hosting.Utility
|
||||
|
||||
public string LogFilePath { get; private set; }
|
||||
|
||||
private void SetLoggingDirectory(string loggingDirectory)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(loggingDirectory))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this.LoggingDirectory = Path.GetFullPath(loggingDirectory);
|
||||
}
|
||||
public bool AutoFlushLog { get; private set; } = false;
|
||||
|
||||
public virtual void SetLocale(string locale)
|
||||
{
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace Microsoft.SqlTools.Utility
|
||||
get => tracingLevel;
|
||||
set
|
||||
{
|
||||
// configures the source level filter. This alone is not enough for tracing that is done via "Trace" object instead of "TraceSource" object
|
||||
// configures the source level filter. This alone is not enough for tracing that is done via "Trace" class instead of "TraceSource" object
|
||||
TraceSource.Switch = new SourceSwitch(TraceSource.Name, value.ToString());
|
||||
// configure the listener level filter
|
||||
tracingLevel = value;
|
||||
@@ -94,6 +94,8 @@ namespace Microsoft.SqlTools.Utility
|
||||
}
|
||||
}
|
||||
|
||||
public static bool AutoFlush { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the Logger for the current process.
|
||||
/// </summary>
|
||||
@@ -108,9 +110,11 @@ namespace Microsoft.SqlTools.Utility
|
||||
public static void Initialize(
|
||||
SourceLevels tracingLevel = defaultTracingLevel,
|
||||
string logFilePath = null,
|
||||
string traceSource = defaultTraceSource)
|
||||
string traceSource = defaultTraceSource,
|
||||
bool autoFlush = false)
|
||||
{
|
||||
Logger.tracingLevel = tracingLevel;
|
||||
Logger.AutoFlush = autoFlush;
|
||||
TraceSource = new TraceSource(traceSource, Logger.tracingLevel);
|
||||
if (string.IsNullOrWhiteSpace(logFilePath))
|
||||
{
|
||||
@@ -118,7 +122,7 @@ namespace Microsoft.SqlTools.Utility
|
||||
}
|
||||
|
||||
LogFileFullPath = logFilePath;
|
||||
Write(TraceEventType.Information, $"Initialized the {traceSource} logger");
|
||||
Write(TraceEventType.Information, $"Initialized the {traceSource} logger. Log file is: {LogFileFullPath}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -185,7 +189,7 @@ namespace Microsoft.SqlTools.Utility
|
||||
}
|
||||
|
||||
// make the log path unique
|
||||
return $"{logFilePrefix}_{DateTime.Now.Year,4:D4}{DateTime.Now.Month,2:D2}{DateTime.Now.Day,2:D2}{DateTime.Now.Hour,2:D2}{DateTime.Now.Minute,2:D2}{DateTime.Now.Second,2:D2}{uniqueId}.log";
|
||||
return $"{logFilePrefix}_{DateTime.Now.Year,4:D4}{DateTime.Now.Month,2:D2}{DateTime.Now.Day,2:D2}{DateTime.Now.Hour,2:D2}{DateTime.Now.Minute,2:D2}{DateTime.Now.Second,2:D2}_{uniqueId}.log";
|
||||
}
|
||||
|
||||
private static void ConfigureListener()
|
||||
@@ -290,6 +294,10 @@ namespace Microsoft.SqlTools.Utility
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (AutoFlush)
|
||||
{
|
||||
Flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -431,7 +439,7 @@ namespace Microsoft.SqlTools.Utility
|
||||
return message;
|
||||
}
|
||||
|
||||
return $"{(IsEnabled(TraceOptions.DateTime) ? string.Format(CultureInfo.InvariantCulture, "{0} ", eventCache.DateTime.ToLocalTime().ToString("u", CultureInfo.InvariantCulture)) : string.Empty)}"
|
||||
return $"{(IsEnabled(TraceOptions.DateTime) ? string.Format(CultureInfo.InvariantCulture, "{0} ", eventCache.DateTime.ToLocalTime().ToString("yy-MM-dd H:mm:ss.fffffff", CultureInfo.InvariantCulture)) : string.Empty)}"
|
||||
+ $"{(IsEnabled(TraceOptions.ProcessId) ? string.Format(CultureInfo.InvariantCulture, "pid:{0} ", eventCache.ProcessId.ToString(CultureInfo.InvariantCulture)) : string.Empty)}"
|
||||
+ $"{(IsEnabled(TraceOptions.ThreadId) ? string.Format(CultureInfo.InvariantCulture, "tid:{0} ", eventCache.ThreadId.ToString(CultureInfo.InvariantCulture)) : string.Empty)}"
|
||||
+ message;
|
||||
|
||||
@@ -35,11 +35,7 @@ namespace Microsoft.SqlTools.ResourceProvider
|
||||
string logFilePath = commandOptions.LogFilePath;
|
||||
if (string.IsNullOrWhiteSpace(logFilePath))
|
||||
{
|
||||
logFilePath = "SqlToolsResourceProviderService";
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(commandOptions.LoggingDirectory))
|
||||
{
|
||||
logFilePath = Path.Combine(commandOptions.LoggingDirectory, logFilePath);
|
||||
logFilePath = Logger.GenerateLogFilePath("SqlToolsResourceProviderService");
|
||||
}
|
||||
|
||||
// turn on Verbose logging during early development
|
||||
|
||||
@@ -23,80 +23,76 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
|
||||
return SmoColumnCustomNodeHelper.CalculateCustomLabel(smoObject, smoContext);
|
||||
}
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties
|
||||
private readonly Lazy<List<NodeSmoProperty>> smoPropertiesLazy = new Lazy<List<NodeSmoProperty>>(() => new List<NodeSmoProperty>
|
||||
{
|
||||
get
|
||||
new NodeSmoProperty
|
||||
{
|
||||
return new List<NodeSmoProperty>
|
||||
{
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "Computed",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsColumnSet",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "Nullable",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "DataType",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "InPrimaryKey",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsForeignKey",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "SystemType",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "Length",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "NumericPrecision",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "NumericScale",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "XmlSchemaNamespaceSchema",
|
||||
ValidFor = ValidForFlag.NotSqlDw
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "XmlSchemaNamespace",
|
||||
ValidFor = ValidForFlag.NotSqlDw
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "XmlDocumentConstraint",
|
||||
ValidFor = ValidForFlag.NotSqlDw
|
||||
}
|
||||
};
|
||||
Name = "Computed",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsColumnSet",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "Nullable",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "DataType",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "InPrimaryKey",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsForeignKey",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "SystemType",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "Length",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "NumericPrecision",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "NumericScale",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "XmlSchemaNamespaceSchema",
|
||||
ValidFor = ValidForFlag.NotSqlDw
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "XmlSchemaNamespace",
|
||||
ValidFor = ValidForFlag.NotSqlDw
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "XmlDocumentConstraint",
|
||||
ValidFor = ValidForFlag.NotSqlDw
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties => smoPropertiesLazy.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Nodes;
|
||||
@@ -25,30 +26,26 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
|
||||
/// </summary>
|
||||
internal partial class IndexesChildFactory : SmoChildFactoryBase
|
||||
{
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties
|
||||
private readonly Lazy<List<NodeSmoProperty>> smoPropertiesLazy = new Lazy<List<NodeSmoProperty>>(() => new List<NodeSmoProperty>
|
||||
{
|
||||
get
|
||||
new NodeSmoProperty
|
||||
{
|
||||
return new List<NodeSmoProperty>
|
||||
{
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsUnique",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsClustered",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IndexKeyType",
|
||||
ValidFor = ValidForFlag.All
|
||||
}
|
||||
};
|
||||
Name = "IsUnique",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsClustered",
|
||||
ValidFor = ValidForFlag.All
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IndexKeyType",
|
||||
ValidFor = ValidForFlag.All
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties => smoPropertiesLazy.Value;
|
||||
|
||||
public override string GetNodeSubType(object smoObject, SmoQueryContext smoContext)
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Nodes;
|
||||
@@ -18,21 +19,17 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
|
||||
{
|
||||
return LoginCustomNodeHelper.GetStatus(smoObject);
|
||||
}
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties
|
||||
|
||||
private readonly Lazy<List<NodeSmoProperty>> smoPropertiesLazy = new Lazy<List<NodeSmoProperty>>(() => new List<NodeSmoProperty>
|
||||
{
|
||||
get
|
||||
new NodeSmoProperty
|
||||
{
|
||||
return new List<NodeSmoProperty>
|
||||
{
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsDisabled",
|
||||
ValidFor = ValidForFlag.All
|
||||
}
|
||||
};
|
||||
Name = "IsDisabled",
|
||||
ValidFor = ValidForFlag.All
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties => smoPropertiesLazy.Value;
|
||||
}
|
||||
|
||||
internal static class LoginCustomNodeHelper
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Nodes;
|
||||
@@ -14,27 +15,21 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
|
||||
/// </summary>
|
||||
internal partial class TriggersChildFactory : SmoChildFactoryBase
|
||||
{
|
||||
public static readonly List<NodeSmoProperty> SmoPropertyList = new List<NodeSmoProperty>
|
||||
public static readonly Lazy<List<NodeSmoProperty>> SmoPropertiesLazy = new Lazy<List<NodeSmoProperty>>(() => new List<NodeSmoProperty>
|
||||
{
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsEnabled",
|
||||
ValidFor = ValidForFlag.All
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
public override string GetNodeStatus(object smoObject, SmoQueryContext smoContext)
|
||||
{
|
||||
return TriggersCustomeNodeHelper.GetStatus(smoObject);
|
||||
}
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties
|
||||
{
|
||||
get
|
||||
{
|
||||
return TriggersChildFactory.SmoPropertyList;
|
||||
}
|
||||
}
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties => SmoPropertiesLazy.Value;
|
||||
}
|
||||
|
||||
internal partial class ServerLevelServerTriggersChildFactory : SmoChildFactoryBase
|
||||
@@ -48,7 +43,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
|
||||
{
|
||||
get
|
||||
{
|
||||
return TriggersChildFactory.SmoPropertyList;
|
||||
return TriggersChildFactory.SmoPropertiesLazy.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -64,7 +59,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
|
||||
{
|
||||
get
|
||||
{
|
||||
return TriggersChildFactory.SmoPropertyList;
|
||||
return TriggersChildFactory.SmoPropertiesLazy.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.SqlServer.Management.Smo;
|
||||
using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Nodes;
|
||||
@@ -19,20 +20,16 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
|
||||
return UserCustomeNodeHelper.GetStatus(smoObject);
|
||||
}
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties
|
||||
private readonly Lazy<List<NodeSmoProperty>> smoPropertiesLazy = new Lazy<List<NodeSmoProperty>>(() => new List<NodeSmoProperty>
|
||||
{
|
||||
get
|
||||
new NodeSmoProperty
|
||||
{
|
||||
return new List<NodeSmoProperty>
|
||||
{
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "HasDBAccess",
|
||||
ValidFor = ValidForFlag.All
|
||||
}
|
||||
};
|
||||
Name = "HasDBAccess",
|
||||
ValidFor = ValidForFlag.All
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties => smoPropertiesLazy.Value;
|
||||
}
|
||||
|
||||
internal static class UserCustomeNodeHelper
|
||||
|
||||
@@ -180,34 +180,29 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
|
||||
{
|
||||
public override IEnumerable<string> ApplicableParents() { return new[] { "Databases" }; }
|
||||
|
||||
public override IEnumerable<NodeFilter> Filters
|
||||
{
|
||||
get
|
||||
{
|
||||
var filters = new List<NodeFilter>();
|
||||
filters.Add(new NodeFilter
|
||||
{
|
||||
Property = "IsSystemObject",
|
||||
Type = typeof(bool),
|
||||
Values = new List<object> { 0 },
|
||||
});
|
||||
return filters;
|
||||
}
|
||||
}
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties
|
||||
private readonly Lazy<List<NodeFilter>> filtersLazy = new Lazy<List<NodeFilter>>(() => new List<NodeFilter>
|
||||
{
|
||||
get
|
||||
{
|
||||
var properties = new List<NodeSmoProperty>();
|
||||
properties.Add(new NodeSmoProperty
|
||||
{
|
||||
Name = "Status",
|
||||
ValidFor = ValidForFlag.All
|
||||
});
|
||||
return properties;
|
||||
}
|
||||
}
|
||||
new NodeFilter
|
||||
{
|
||||
Property = "IsSystemObject",
|
||||
Type = typeof(bool),
|
||||
Values = new List<object> { 0 },
|
||||
}
|
||||
});
|
||||
|
||||
private readonly Lazy<List<NodeSmoProperty>> smoPropertiesLazy = new Lazy<List<NodeSmoProperty>>(() => new List<NodeSmoProperty>
|
||||
{
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "Status",
|
||||
ValidFor = ValidForFlag.All
|
||||
}
|
||||
});
|
||||
|
||||
public override IEnumerable<NodeFilter> Filters => filtersLazy.Value;
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties => smoPropertiesLazy.Value;
|
||||
|
||||
protected override void OnExpandPopulateFolders(IList<TreeNode> currentChildren, TreeNode parent)
|
||||
{
|
||||
@@ -753,60 +748,54 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
|
||||
{
|
||||
public override IEnumerable<string> ApplicableParents() { return new[] { "Tables" }; }
|
||||
|
||||
public override IEnumerable<NodeFilter> Filters
|
||||
private readonly Lazy<List<NodeFilter>> filtersLazy = new Lazy<List<NodeFilter>>(() => new List<NodeFilter>
|
||||
{
|
||||
get
|
||||
{
|
||||
var filters = new List<NodeFilter>();
|
||||
filters.Add(new NodeFilter
|
||||
new NodeFilter
|
||||
{
|
||||
Property = "IsSystemObject",
|
||||
Type = typeof(bool),
|
||||
Values = new List<object> { 0 },
|
||||
},
|
||||
new NodeFilter
|
||||
{
|
||||
Property = "TemporalType",
|
||||
Type = typeof(Enum),
|
||||
ValidFor = ValidForFlag.Sql2016 | ValidForFlag.Sql2017 | ValidForFlag.AzureV12,
|
||||
Values = new List<object>
|
||||
{
|
||||
Property = "IsSystemObject",
|
||||
Type = typeof(bool),
|
||||
Values = new List<object> { 0 },
|
||||
});
|
||||
filters.Add(new NodeFilter
|
||||
{
|
||||
Property = "TemporalType",
|
||||
Type = typeof(Enum),
|
||||
ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017|ValidForFlag.AzureV12,
|
||||
Values = new List<object>
|
||||
{
|
||||
{ TableTemporalType.None },
|
||||
{ TableTemporalType.SystemVersioned }
|
||||
}
|
||||
});
|
||||
return filters;
|
||||
}
|
||||
}
|
||||
{ TableTemporalType.None },
|
||||
{ TableTemporalType.SystemVersioned }
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties
|
||||
private readonly Lazy<List<NodeSmoProperty>> smoPropertiesLazy = new Lazy<List<NodeSmoProperty>>(() => new List<NodeSmoProperty>
|
||||
{
|
||||
get
|
||||
{
|
||||
var properties = new List<NodeSmoProperty>();
|
||||
properties.Add(new NodeSmoProperty
|
||||
{
|
||||
Name = "IsFileTable",
|
||||
ValidFor = ValidForFlag.Sql2012|ValidForFlag.Sql2014|ValidForFlag.Sql2016|ValidForFlag.Sql2017
|
||||
});
|
||||
properties.Add(new NodeSmoProperty
|
||||
{
|
||||
Name = "IsSystemVersioned",
|
||||
ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017|ValidForFlag.AzureV12
|
||||
});
|
||||
properties.Add(new NodeSmoProperty
|
||||
{
|
||||
Name = "TemporalType",
|
||||
ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017|ValidForFlag.AzureV12
|
||||
});
|
||||
properties.Add(new NodeSmoProperty
|
||||
{
|
||||
Name = "IsExternal",
|
||||
ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017|ValidForFlag.AzureV12
|
||||
});
|
||||
return properties;
|
||||
}
|
||||
}
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsFileTable",
|
||||
ValidFor = ValidForFlag.Sql2012 | ValidForFlag.Sql2014 | ValidForFlag.Sql2016 | ValidForFlag.Sql2017
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsSystemVersioned",
|
||||
ValidFor = ValidForFlag.Sql2016 | ValidForFlag.Sql2017 | ValidForFlag.AzureV12
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "TemporalType",
|
||||
ValidFor = ValidForFlag.Sql2016 | ValidForFlag.Sql2017 | ValidForFlag.AzureV12
|
||||
},
|
||||
new NodeSmoProperty
|
||||
{
|
||||
Name = "IsExternal",
|
||||
ValidFor = ValidForFlag.Sql2016 | ValidForFlag.Sql2017 | ValidForFlag.AzureV12
|
||||
}
|
||||
});
|
||||
|
||||
public override IEnumerable<NodeFilter> Filters => filtersLazy.Value;
|
||||
|
||||
public override IEnumerable<NodeSmoProperty> SmoProperties => smoPropertiesLazy.Value;
|
||||
|
||||
protected override void OnExpandPopulateFolders(IList<TreeNode> currentChildren, TreeNode parent)
|
||||
{
|
||||
|
||||
@@ -33,17 +33,12 @@ namespace Microsoft.SqlTools.ServiceLayer
|
||||
string logFilePath = commandOptions.LogFilePath;
|
||||
if (string.IsNullOrWhiteSpace(logFilePath))
|
||||
{
|
||||
logFilePath = "sqltools";
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(commandOptions.LoggingDirectory))
|
||||
{
|
||||
logFilePath = Path.Combine(commandOptions.LoggingDirectory, logFilePath);
|
||||
logFilePath = Logger.GenerateLogFilePath("sqltools");
|
||||
}
|
||||
|
||||
// turn on Verbose logging during early development
|
||||
// we need to switch to Information when preparing for public preview
|
||||
Logger.AutoFlush = commandOptions.AutoFlushLog;
|
||||
|
||||
Logger.Initialize(tracingLevel: commandOptions.TracingLevel, logFilePath: logFilePath, traceSource: "sqltools");
|
||||
Logger.Write(TraceEventType.Information, "Starting SQL Tools Service Layer");
|
||||
|
||||
// set up the host details and profile paths
|
||||
var hostDetails = new HostDetails(version: new Version(1, 0));
|
||||
|
||||
Reference in New Issue
Block a user