diff --git a/bin/nuget/Microsoft.SqlServer.Smo.140.17054.0.nupkg b/bin/nuget/Microsoft.SqlServer.Smo.140.17054.0.nupkg new file mode 100644 index 00000000..ef7016ef Binary files /dev/null and b/bin/nuget/Microsoft.SqlServer.Smo.140.17054.0.nupkg differ diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQuerier.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQuerier.cs index 2c6f2dc3..c457c93e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQuerier.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQuerier.cs @@ -77,90 +77,9 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel { return true; } + - protected HashSet GetUrns(SmoQueryContext context, SqlSmoObject smoObject, string filter, string objectName) - { - HashSet urns = null; - string urn = string.Empty; - try - { - string parentUrn = smoObject.Urn != null ? smoObject.Urn.Value : string.Empty; - urn = parentUrn != null ? $"{parentUrn.ToString()}/{objectName}" + filter : string.Empty; - - if (!string.IsNullOrEmpty(urn)) - { - Enumerator en = new Enumerator(); - Request request = new Request(new Urn(urn)); - ServerConnection serverConnection = new ServerConnection(context.Server.ConnectionContext.SqlConnectionObject); - if (!serverConnection.IsOpen) - { - serverConnection.Connect(); - } - EnumResult result = en.Process(serverConnection, request); - - urns = GetUrns(result); - } - } - catch (Exception ex) - { - string error = string.Format(CultureInfo.InvariantCulture, "Failed getting urns. error:{0} inner:{1} stacktrace:{2}", - ex.Message, ex.InnerException != null ? ex.InnerException.Message : "", ex.StackTrace); - Logger.Write(LogLevel.Error, error); - throw ex; - } - - return urns; - } - - /// - /// Gets the urn from the enumResult - /// - protected HashSet GetUrns(EnumResult enumResult) - { - try - { - HashSet urns = null; - if (enumResult != null && enumResult.Data != null) - { - urns = new HashSet(); - using (IDataReader reader = GetDataReader(enumResult.Data)) - { - if (reader != null) - { - while (reader.Read()) - { - urns.Add(reader.GetString(0)); - } - } - } - } - - return urns; - } - catch(Exception ex) - { - string error = string.Format(CultureInfo.InvariantCulture, "Failed getting urns. error:{0} inner:{1} stacktrace:{2}", - ex.Message, ex.InnerException != null ? ex.InnerException.Message : "", ex.StackTrace); - Logger.Write(LogLevel.Error, error); - } - - return null; - } - - protected IEnumerable GetSmoCollectionResult(HashSet urns, SmoCollectionBase retValue, SqlSmoObject parent) where T : SqlSmoObject - { - // the below code is filtering out tables on helsinki system - return new SmoCollectionWrapper(retValue); - - // if (urns != null) - // { - // return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parent, c) && urns.Contains(c.Urn)); - // } - // else - // { - // return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parent, c)); - // } - } + } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.cs index a13f6b24..3e0a9e97 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.cs @@ -24,20 +24,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.Databases.Refresh(true); - } var retValue = parentServer.Databases; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "Database"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -56,20 +47,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.LinkedServers.Refresh(true); - } var retValue = parentServer.LinkedServers; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "LinkedServer"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -88,20 +70,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.Logins.Refresh(true); - } var retValue = parentServer.Logins; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "Login"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -120,20 +93,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.Roles.Refresh(true); - } var retValue = parentServer.Roles; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "ServerRole"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -152,20 +116,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.Credentials.Refresh(true); - } var retValue = parentServer.Credentials; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "Credential"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -184,20 +139,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.CryptographicProviders.Refresh(true); - } var retValue = parentServer.CryptographicProviders; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "CryptographicProvider"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -216,20 +162,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.Audits.Refresh(true); - } var retValue = parentServer.Audits; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "Audit"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -248,20 +185,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.ServerAuditSpecifications.Refresh(true); - } var retValue = parentServer.ServerAuditSpecifications; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "ServerAuditSpecification"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -280,20 +208,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.Endpoints.Refresh(true); - } var retValue = parentServer.Endpoints; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "Endpoint"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -312,20 +231,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.LinkedServers.Refresh(true); - } var retValue = parentServer.LinkedServers; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "LinkedServer"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -344,20 +254,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.Triggers.Refresh(true); - } var retValue = parentServer.Triggers; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "ServerDdlTrigger"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -376,20 +277,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Server parentServer = context.Parent as Server; if (parentServer != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServer.UserDefinedMessages.Refresh(true); - } var retValue = parentServer.UserDefinedMessages; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServer, filter, "UserDefinedMessage"); - } - return GetSmoCollectionResult(urns, retValue, parentServer); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServer, c)); } } return Enumerable.Empty(); @@ -408,20 +300,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Tables.Refresh(true); - } var retValue = parentDatabase.Tables; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "Table"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { "IsSystemVersioned" }); + return new SmoCollectionWrapper
(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -440,20 +323,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Table parentTable = context.Parent as Table; if (parentTable != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentTable.Parent.Tables.Refresh(true); - } var retValue = parentTable.Parent.Tables; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentTable.Parent, filter, "Table"); - } - return GetSmoCollectionResult
(urns, retValue, parentTable); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper
(retValue).Where(c => PassesFinalFilters(parentTable, c)); } } return Enumerable.Empty(); @@ -472,20 +346,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Views.Refresh(true); - } var retValue = parentDatabase.Views; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "View"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -504,20 +369,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Synonyms.Refresh(true); - } var retValue = parentDatabase.Synonyms; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "Synonym"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -536,20 +392,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel TableViewTableTypeBase parentTableViewTableTypeBase = context.Parent as TableViewTableTypeBase; if (parentTableViewTableTypeBase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentTableViewTableTypeBase.Columns.Refresh(true); - } var retValue = parentTableViewTableTypeBase.Columns; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentTableViewTableTypeBase, filter, "Column"); - } - return GetSmoCollectionResult(urns, retValue, parentTableViewTableTypeBase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentTableViewTableTypeBase, c)); } } return Enumerable.Empty(); @@ -568,20 +415,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel TableViewTableTypeBase parentTableViewTableTypeBase = context.Parent as TableViewTableTypeBase; if (parentTableViewTableTypeBase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentTableViewTableTypeBase.Indexes.Refresh(true); - } var retValue = parentTableViewTableTypeBase.Indexes; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentTableViewTableTypeBase, filter, "Index"); - } - return GetSmoCollectionResult(urns, retValue, parentTableViewTableTypeBase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentTableViewTableTypeBase, c)); } } return Enumerable.Empty(); @@ -600,20 +438,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Table parentTable = context.Parent as Table; if (parentTable != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentTable.Checks.Refresh(true); - } var retValue = parentTable.Checks; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentTable, filter, "Check"); - } - return GetSmoCollectionResult(urns, retValue, parentTable); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentTable, c)); } } return Enumerable.Empty(); @@ -632,20 +461,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Table parentTable = context.Parent as Table; if (parentTable != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentTable.ForeignKeys.Refresh(true); - } var retValue = parentTable.ForeignKeys; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentTable, filter, "ForeignKey"); - } - return GetSmoCollectionResult(urns, retValue, parentTable); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentTable, c)); } } return Enumerable.Empty(); @@ -664,14 +484,13 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Column parentColumn = context.Parent as Column; if (parentColumn != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentColumn.DefaultConstraint.Refresh(); - } var retValue = parentColumn.DefaultConstraint; if (retValue != null) { + if (refresh) + { + parentColumn.DefaultConstraint.Refresh(); + } return new SqlSmoObject[] { retValue }; } } @@ -691,20 +510,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Table parentTable = context.Parent as Table; if (parentTable != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentTable.Triggers.Refresh(true); - } var retValue = parentTable.Triggers; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentTable, filter, "Trigger"); - } - return GetSmoCollectionResult(urns, retValue, parentTable); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentTable, c)); } } return Enumerable.Empty(); @@ -723,14 +533,13 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Table parentTable = context.Parent as Table; if (parentTable != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentTable.FullTextIndex.Refresh(); - } var retValue = parentTable.FullTextIndex; if (retValue != null) { + if (refresh) + { + parentTable.FullTextIndex.Refresh(); + } return new SqlSmoObject[] { retValue }; } } @@ -750,20 +559,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel TableViewBase parentTableViewBase = context.Parent as TableViewBase; if (parentTableViewBase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentTableViewBase.Statistics.Refresh(true); - } var retValue = parentTableViewBase.Statistics; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentTableViewBase, filter, "Statistic"); - } - return GetSmoCollectionResult(urns, retValue, parentTableViewBase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentTableViewBase, c)); } } return Enumerable.Empty(); @@ -782,20 +582,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Triggers.Refresh(true); - } var retValue = parentDatabase.Triggers; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "DatabaseDdlTrigger"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -814,20 +605,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Assemblies.Refresh(true); - } var retValue = parentDatabase.Assemblies; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "SqlAssembly"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -846,20 +628,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Sequences.Refresh(true); - } var retValue = parentDatabase.Sequences; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "Sequence"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -878,20 +651,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.UserDefinedDataTypes.Refresh(true); - } var retValue = parentDatabase.UserDefinedDataTypes; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "UserDefinedDataType"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -910,20 +674,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.UserDefinedTableTypes.Refresh(true); - } var retValue = parentDatabase.UserDefinedTableTypes; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "UserDefinedTableType"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -942,20 +697,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.XmlSchemaCollections.Refresh(true); - } var retValue = parentDatabase.XmlSchemaCollections; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "XmlSchemaCollection"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -974,20 +720,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.UserDefinedTypes.Refresh(true); - } var retValue = parentDatabase.UserDefinedTypes; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "UserDefinedType"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1006,20 +743,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.UserDefinedFunctions.Refresh(true); - } var retValue = parentDatabase.UserDefinedFunctions; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "UserDefinedFunction"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1038,20 +766,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.UserDefinedAggregates.Refresh(true); - } var retValue = parentDatabase.UserDefinedAggregates; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "UserDefinedAggregate"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1070,20 +789,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.FileGroups.Refresh(true); - } var retValue = parentDatabase.FileGroups; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "FileGroup"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1102,20 +812,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel FileGroup parentFileGroup = context.Parent as FileGroup; if (parentFileGroup != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentFileGroup.Files.Refresh(true); - } var retValue = parentFileGroup.Files; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentFileGroup, filter, "DataFile"); - } - return GetSmoCollectionResult(urns, retValue, parentFileGroup); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentFileGroup, c)); } } return Enumerable.Empty(); @@ -1134,20 +835,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.FullTextCatalogs.Refresh(true); - } var retValue = parentDatabase.FullTextCatalogs; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "FullTextCatalog"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1166,20 +858,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.FullTextStopLists.Refresh(true); - } var retValue = parentDatabase.FullTextStopLists; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "FullTextStopList"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1198,20 +881,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.PartitionFunctions.Refresh(true); - } var retValue = parentDatabase.PartitionFunctions; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "PartitionFunction"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1230,20 +904,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.PartitionSchemes.Refresh(true); - } var retValue = parentDatabase.PartitionSchemes; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "PartitionScheme"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1262,20 +927,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.SearchPropertyLists.Refresh(true); - } var retValue = parentDatabase.SearchPropertyLists; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "SearchPropertyList"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1294,20 +950,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Users.Refresh(true); - } var retValue = parentDatabase.Users; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "User"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1326,20 +973,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Schemas.Refresh(true); - } var retValue = parentDatabase.Schemas; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "Schema"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1358,20 +996,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.AsymmetricKeys.Refresh(true); - } var retValue = parentDatabase.AsymmetricKeys; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "AsymmetricKey"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1390,20 +1019,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Certificates.Refresh(true); - } var retValue = parentDatabase.Certificates; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "Certificate"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1422,20 +1042,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.SymmetricKeys.Refresh(true); - } var retValue = parentDatabase.SymmetricKeys; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "SymmetricKey"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1454,14 +1065,13 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.DatabaseEncryptionKey.Refresh(); - } var retValue = parentDatabase.DatabaseEncryptionKey; if (retValue != null) { + if (refresh) + { + parentDatabase.DatabaseEncryptionKey.Refresh(); + } return new SqlSmoObject[] { retValue }; } } @@ -1481,14 +1091,13 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.MasterKey.Refresh(); - } var retValue = parentDatabase.MasterKey; if (retValue != null) { + if (refresh) + { + parentDatabase.MasterKey.Refresh(); + } return new SqlSmoObject[] { retValue }; } } @@ -1508,20 +1117,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.DatabaseAuditSpecifications.Refresh(true); - } var retValue = parentDatabase.DatabaseAuditSpecifications; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "DatabaseAuditSpecification"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1540,20 +1140,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.SecurityPolicies.Refresh(true); - } var retValue = parentDatabase.SecurityPolicies; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "SecurityPolicy"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1572,20 +1163,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.DatabaseScopedCredentials.Refresh(true); - } var retValue = parentDatabase.DatabaseScopedCredentials; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "DatabaseScopedCredential"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1604,20 +1186,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Roles.Refresh(true); - } var retValue = parentDatabase.Roles; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "DatabaseRole"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1636,20 +1209,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.ApplicationRoles.Refresh(true); - } var retValue = parentDatabase.ApplicationRoles; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "ApplicationRole"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1668,20 +1232,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.ColumnMasterKeys.Refresh(true); - } var retValue = parentDatabase.ColumnMasterKeys; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "ColumnMasterKey"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1700,20 +1255,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.ColumnEncryptionKeys.Refresh(true); - } var retValue = parentDatabase.ColumnEncryptionKeys; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "ColumnEncryptionKey"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1732,14 +1278,13 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.ServiceBroker.Refresh(); - } var retValue = parentDatabase.ServiceBroker; if (retValue != null) { + if (refresh) + { + parentDatabase.ServiceBroker.Refresh(); + } return new SqlSmoObject[] { retValue }; } } @@ -1759,20 +1304,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel ServiceBroker parentServiceBroker = context.Parent as ServiceBroker; if (parentServiceBroker != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServiceBroker.Services.Refresh(true); - } var retValue = parentServiceBroker.Services; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServiceBroker, filter, "BrokerService"); - } - return GetSmoCollectionResult(urns, retValue, parentServiceBroker); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServiceBroker, c)); } } return Enumerable.Empty(); @@ -1791,20 +1327,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel ServiceBroker parentServiceBroker = context.Parent as ServiceBroker; if (parentServiceBroker != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServiceBroker.ServiceContracts.Refresh(true); - } var retValue = parentServiceBroker.ServiceContracts; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServiceBroker, filter, "ServiceContract"); - } - return GetSmoCollectionResult(urns, retValue, parentServiceBroker); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServiceBroker, c)); } } return Enumerable.Empty(); @@ -1823,20 +1350,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel ServiceBroker parentServiceBroker = context.Parent as ServiceBroker; if (parentServiceBroker != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServiceBroker.Queues.Refresh(true); - } var retValue = parentServiceBroker.Queues; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServiceBroker, filter, "ServiceQueue"); - } - return GetSmoCollectionResult(urns, retValue, parentServiceBroker); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServiceBroker, c)); } } return Enumerable.Empty(); @@ -1855,20 +1373,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel ServiceBroker parentServiceBroker = context.Parent as ServiceBroker; if (parentServiceBroker != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServiceBroker.RemoteServiceBindings.Refresh(true); - } var retValue = parentServiceBroker.RemoteServiceBindings; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServiceBroker, filter, "RemoteServiceBinding"); - } - return GetSmoCollectionResult(urns, retValue, parentServiceBroker); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServiceBroker, c)); } } return Enumerable.Empty(); @@ -1887,20 +1396,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel ServiceBroker parentServiceBroker = context.Parent as ServiceBroker; if (parentServiceBroker != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServiceBroker.Priorities.Refresh(true); - } var retValue = parentServiceBroker.Priorities; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServiceBroker, filter, "BrokerPriority"); - } - return GetSmoCollectionResult(urns, retValue, parentServiceBroker); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServiceBroker, c)); } } return Enumerable.Empty(); @@ -1919,20 +1419,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel ServiceBroker parentServiceBroker = context.Parent as ServiceBroker; if (parentServiceBroker != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentServiceBroker.MessageTypes.Refresh(true); - } var retValue = parentServiceBroker.MessageTypes; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentServiceBroker, filter, "MessageType"); - } - return GetSmoCollectionResult(urns, retValue, parentServiceBroker); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentServiceBroker, c)); } } return Enumerable.Empty(); @@ -1951,20 +1442,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.ExternalDataSources.Refresh(true); - } var retValue = parentDatabase.ExternalDataSources; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "ExternalDataSource"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -1983,20 +1465,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.ExternalFileFormats.Refresh(true); - } var retValue = parentDatabase.ExternalFileFormats; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "ExternalFileFormat"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -2015,20 +1488,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.StoredProcedures.Refresh(true); - } var retValue = parentDatabase.StoredProcedures; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "StoredProcedure"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -2047,20 +1511,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.ExtendedStoredProcedures.Refresh(true); - } var retValue = parentDatabase.ExtendedStoredProcedures; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase, filter, "ExtendedStoredProcedure"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); @@ -2079,58 +1534,31 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel StoredProcedure parentStoredProcedure = context.Parent as StoredProcedure; if (parentStoredProcedure != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentStoredProcedure.Parameters.Refresh(true); - } var retValue = parentStoredProcedure.Parameters; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentStoredProcedure, filter, "Parameter"); - } - return GetSmoCollectionResult(urns, retValue, parentStoredProcedure); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentStoredProcedure, c)); } } UserDefinedAggregate parentUserDefinedAggregate = context.Parent as UserDefinedAggregate; if (parentUserDefinedAggregate != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentUserDefinedAggregate.Parameters.Refresh(true); - } var retValue = parentUserDefinedAggregate.Parameters; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentUserDefinedAggregate, filter, "Parameter"); - } - return GetSmoCollectionResult(urns, retValue, parentUserDefinedAggregate); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentUserDefinedAggregate, c)); } } UserDefinedFunction parentUserDefinedFunction = context.Parent as UserDefinedFunction; if (parentUserDefinedFunction != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentUserDefinedFunction.Parameters.Refresh(true); - } var retValue = parentUserDefinedFunction.Parameters; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentUserDefinedFunction, filter, "Parameter"); - } - return GetSmoCollectionResult(urns, retValue, parentUserDefinedFunction); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentUserDefinedFunction, c)); } } return Enumerable.Empty(); @@ -2149,20 +1577,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel PartitionFunction parentPartitionFunction = context.Parent as PartitionFunction; if (parentPartitionFunction != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentPartitionFunction.PartitionFunctionParameters.Refresh(true); - } var retValue = parentPartitionFunction.PartitionFunctionParameters; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentPartitionFunction, filter, "PartitionFunctionParameter"); - } - return GetSmoCollectionResult(urns, retValue, parentPartitionFunction); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentPartitionFunction, c)); } } return Enumerable.Empty(); @@ -2181,20 +1600,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel Database parentDatabase = context.Parent as Database; if (parentDatabase != null) { - bool hasFilter = !string.IsNullOrEmpty(filter); - if (refresh) - { - parentDatabase.Parent.SystemDataTypes.Refresh(true); - } var retValue = parentDatabase.Parent.SystemDataTypes; if (retValue != null) { - HashSet urns = null; - if (hasFilter) - { - urns = GetUrns(context, parentDatabase.Parent, filter, "SystemDataType"); - } - return GetSmoCollectionResult(urns, retValue, parentDatabase); + retValue.InitializeCollection(filter, new string[] { }); + return new SmoCollectionWrapper(retValue).Where(c => PassesFinalFilters(parentDatabase, c)); } } return Enumerable.Empty(); diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.tt b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.tt index 5231bd36..12b28944 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.tt +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.tt @@ -33,6 +33,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel { XmlElement nodeElement = GetNodeElement(xmlFile, nodeName); IList parents = GetParents(nodeElement, xmlFile, nodeName); + string properties = GetProperties(nodeElement, xmlFile, nodeName); string nodeType = GetNodeType(nodeElement, nodeName); string queryBaseClass = "SmoQuerier"; @@ -62,15 +63,9 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel WriteLine(string.Format("if ({0} != null)", parentVar)); WriteLine("{"); PushIndent(indent); - WriteLine("bool hasFilter = !string.IsNullOrEmpty(filter);"); string navigationPath = GetNavigationPath(nodeElement, xmlFile, nodeName, parentType); - WriteLine("if (refresh)"); - WriteLine("{"); - PushIndent(indent); - WriteLine(string.Format("{0}.{1}.Refresh({2});", parentVar, navigationPath, IsCollection(nodeElement) ? "true" : "")); - PopIndent(); - WriteLine("}"); + WriteLine(string.Format("var retValue = {0}.{1};", parentVar, navigationPath)); WriteLine("if (retValue != null)"); @@ -80,27 +75,17 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel if (IsCollection(nodeElement)) { - string fieldForUrn = GetNavPathFieldForUrn(xmlFile, nodeName, parentType); - if (!string.IsNullOrEmpty(fieldForUrn)) - { - fieldForUrn = string.Format("{0}.{1}", parentVar, fieldForUrn); - } - else - { - fieldForUrn = parentVar; - } - WriteLine("HashSet urns = null;"); - - WriteLine("if (hasFilter)"); - WriteLine("{"); - PushIndent(indent); - WriteLine(string.Format("urns = GetUrns(context, {0}, filter, \"{1}\");", fieldForUrn, nodeType)); - PopIndent(); - WriteLine("}"); - WriteLine(string.Format("return GetSmoCollectionResult<{0}>(urns, retValue, {1});", nodeType, parentVar)); + WriteLine(string.Format("retValue.InitializeCollection(filter, new string[] {{ {0} }});", properties)); + WriteLine(string.Format("return new SmoCollectionWrapper<{0}>(retValue).Where(c => PassesFinalFilters({1}, c));", nodeType, parentVar)); } else { + WriteLine("if (refresh)"); + WriteLine("{"); + PushIndent(indent); + WriteLine(string.Format("{0}.{1}.Refresh();", parentVar, navigationPath)); + PopIndent(); + WriteLine("}"); WriteLine("return new SqlSmoObject[] { retValue };"); } @@ -228,6 +213,22 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel // default to assuming a type is under Database return new string[] { "Database" }; } + + public static string GetProperties(XmlElement nodeElement, string xmlFile, string parentName) + { + var propertiesAttr = nodeElement.GetAttribute("Properties"); + string result = string.Empty; + if (!string.IsNullOrEmpty(propertiesAttr)) + { + var properties = propertiesAttr.Split(';'); + foreach (var item in properties) + { + result = result + (string.IsNullOrEmpty(result) ? "" : ",") + "\"" + item + "\""; + } + + } + return result; + } public static List GetChildren(string xmlFile, string parentName, string childNode) { diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModelDefinition.xml b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModelDefinition.xml index 034067d7..42932976 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModelDefinition.xml +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModelDefinition.xml @@ -35,7 +35,7 @@ - + diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTableCustomNode.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTableCustomNode.cs index 6e754bc7..7f97ef3c 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTableCustomNode.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTableCustomNode.cs @@ -14,13 +14,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel { public override string GetNodeCustomName(object smoObject, SmoQueryContext smoContext) { - // TODO: this code makes expanding the tables slow because of loading the IsSystemVersioned property for each table. - // Have to uncomment this after optimizing the way properties are loaded for SMO objects - //Table table = smoObject as Table; - //if (table != null && table.IsSystemVersioned) - //{ - // return $"{table.Schema}.{table.Name} ({SR.SystemVersioned_LabelPart})"; - //} + Table table = smoObject as Table; + if (table != null && table.IsSystemVersioned) + { + return $"{table.Schema}.{table.Name} ({SR.SystemVersioned_LabelPart})"; + } return string.Empty; } diff --git a/src/Microsoft.SqlTools.ServiceLayer/project.json b/src/Microsoft.SqlTools.ServiceLayer/project.json index f134d50d..306b7723 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/project.json +++ b/src/Microsoft.SqlTools.ServiceLayer/project.json @@ -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.17053.0", + "Microsoft.SqlServer.Smo": "140.17054.0", "Microsoft.SqlServer.Management.SqlScriptPublishModel": "140.17049.0", "System.Security.SecureString": "4.0.0", "System.Collections.Specialized": "4.0.1", diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/project.json b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/project.json index 266d36ad..e72d458c 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/project.json +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/project.json @@ -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.17053.0", + "Microsoft.SqlServer.Smo": "140.17054.0", "System.Security.SecureString": "4.0.0", "System.Collections.Specialized": "4.0.1", "System.ComponentModel.TypeConverter": "4.1.0", diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/Baselines/AllSqlObjects.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/Baselines/AllSqlObjects.txt index d0e90f13..a89be3d3 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/Baselines/AllSqlObjects.txt +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/ObjectExplorer/Baselines/AllSqlObjects.txt @@ -29,7 +29,7 @@ NodeType: Constraint Label: CK_Employee_VacationHours SubType: Status: NodeType: Index Label: NonClusteredIndex-Login (Non-Unique, Non-Clustered) SubType: Status: NodeType: Statistic Label: NonClusteredIndex-Login SubType: Status: NodeType: Statistic Label: PK_Employee_BusinessEntityID SubType: Status: -NodeType: Table Label: HumanResources.Employee_Temporal SubType: Status: +NodeType: Table Label: HumanResources.Employee_Temporal (System-Versioned) SubType: Status: NodeType: Column Label: BusinessEntityID (PK, int, not null) SubType: Status: NodeType: Column Label: NationalIDNumber (nvarchar(15), not null) SubType: Status: NodeType: Column Label: LoginID (nvarchar(256), not null) SubType: Status: diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/project.json b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/project.json index 76d9d20c..8fedc357 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/project.json +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/project.json @@ -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.17053.0", + "Microsoft.SqlServer.Smo": "140.17054.0", "System.Security.SecureString": "4.0.0", "System.Collections.Specialized": "4.0.1", "System.ComponentModel.TypeConverter": "4.1.0", diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/project.json b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/project.json index 854b49aa..bcc6c34b 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/project.json +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/project.json @@ -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.17053.0", + "Microsoft.SqlServer.Smo": "140.17054.0", "System.Security.SecureString": "4.0.0", "System.Collections.Specialized": "4.0.1", "System.ComponentModel.TypeConverter": "4.1.0",