fixed the bug with not closing data reader for oe (#352)

* fixed the bug with not closing data reader for oe

*  fixed the bug with triggers not sending back status
This commit is contained in:
Leila Lali
2017-05-17 09:35:55 -07:00
committed by GitHub
parent 3334b76ab3
commit 7ec5549a13
4 changed files with 95 additions and 17 deletions

View File

@@ -23,18 +23,23 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
public override IEnumerable<TreeNode> Expand(TreeNode parent, bool refresh)
{
List<TreeNode> allChildren = new List<TreeNode>();
try
{
List<TreeNode> allChildren = new List<TreeNode>();
OnExpandPopulateFolders(allChildren, parent);
RemoveFoldersFromInvalidSqlServerVersions(allChildren, parent);
OnExpandPopulateNonFolders(allChildren, parent, refresh);
OnBeginAsyncOperations(parent);
return allChildren;
}
catch(Exception ex)
{
Logger.Write(LogLevel.Error, $"Failed expanding oe children. error:{ex.Message} {ex.StackTrace}");
}
finally
{
}
return allChildren;
}
/// <summary>

View File

@@ -22,6 +22,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
public abstract class SmoQuerier : IComposableService
{
public abstract Type[] SupportedObjectTypes { get; }
private static object lockObject = new object();
/// <summary>
/// Queries SMO for a collection of objects using the <see cref="SmoQueryContext"/>
@@ -78,21 +79,26 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
/// </summary>
protected HashSet<string> GetUrns(EnumResult enumResult)
{
HashSet<string> urns = null;
if (enumResult != null && enumResult.Data != null)
lock (lockObject)
{
urns = new HashSet<string>();
IDataReader reader = GetDataReader(enumResult.Data);
if (reader != null)
HashSet<string> urns = null;
if (enumResult != null && enumResult.Data != null)
{
while (reader.Read())
urns = new HashSet<string>();
using (IDataReader reader = GetDataReader(enumResult.Data))
{
urns.Add(reader.GetString(0));
if (reader != null)
{
while (reader.Read())
{
urns.Add(reader.GetString(0));
}
}
}
}
}
return urns;
return urns;
}
}
}

View File

@@ -10,14 +10,27 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
/// <summary>
/// Status for triggers
/// </summary>
public class SmoTriggerCustomNode
internal partial class TriggersChildFactory : SmoChildFactoryBase
{
internal partial class TriggersChildFactory : SmoChildFactoryBase
public override string GetNodeStatus(object context)
{
public override string GetNodeStatus(object context)
{
return TriggersCustomeNodeHelper.GetStatus(context);
}
return TriggersCustomeNodeHelper.GetStatus(context);
}
}
internal partial class ServerLevelServerTriggersChildFactory : SmoChildFactoryBase
{
public override string GetNodeStatus(object context)
{
return TriggersCustomeNodeHelper.GetStatus(context);
}
}
internal partial class DatabaseTriggersChildFactory : SmoChildFactoryBase
{
public override string GetNodeStatus(object context)
{
return TriggersCustomeNodeHelper.GetStatus(context);
}
}
@@ -34,6 +47,24 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
}
}
ServerDdlTrigger serverDdlTrigger = context as ServerDdlTrigger;
if (serverDdlTrigger != null)
{
if (!serverDdlTrigger.IsEnabled)
{
return "Disabled";
}
}
DatabaseDdlTrigger databaseDdlTrigger = context as DatabaseDdlTrigger;
if (databaseDdlTrigger != null)
{
if (!databaseDdlTrigger.IsEnabled)
{
return "Disabled";
}
}
return string.Empty;
}
}