From 962ba3a12bf41e05d895870ce9d00017e84420ce Mon Sep 17 00:00:00 2001 From: BranislavGrbicMDCS <55592643+BranislavGrbicMDCS@users.noreply.github.com> Date: Wed, 16 Oct 2019 23:29:57 +0200 Subject: [PATCH] Adding Support for new engine edition (#876) * Adding Support for SqlOnDemand * Updating unit test per comment * Resolving comments. Enabling external table for sqlondemand * Resolving comments. Enabling External tables for sqlondemand * Enabling external tables for sqlondemand --- .../ObjectExplorer/SmoModel/SmoQueryModel.tt | 92 ++++++------ .../SmoModel/TreeNodeDefinition.xml | 23 +-- .../SmoModel/TreeNodeGenerator.cs | 62 +++++++- .../SmoModel/TreeNodeGenerator.tt | 140 +++++++++--------- .../ObjectExplorer/SqlServerType.cs | 13 +- .../ObjectExplorer/ValidForFlag.cs | 7 +- .../Scripting/Contracts/ScriptingOptions.cs | 3 +- .../Scripting/ScriptAsScriptingOperation.cs | 3 + .../Scripting/Scripter.cs | 1 + .../ObjectExplorer/NodePathGeneratorTests.cs | 3 + .../ServerVersionHelperTests.cs | 20 +++ 11 files changed, 239 insertions(+), 128 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.tt b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.tt index f68b2bfc..5c4d5653 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.tt +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoQueryModel.tt @@ -23,7 +23,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel <# var directory = Path.GetDirectoryName(Host.TemplateFile); string xmlFile = Path.Combine(directory, "SmoQueryModelDefinition.xml"); - + ///////// // Now generate all the Query methods ///////// @@ -58,7 +58,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel WriteLine(""); // Query impl - WriteLine("public override IEnumerable Query(SmoQueryContext context, string filter, bool refresh, IEnumerable extraProperties)"); + WriteLine("public override IEnumerable Query(SmoQueryContext context, string filter, bool refresh, IEnumerable extraProperties)"); WriteLine("{"); PushIndent(indent); @@ -157,7 +157,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel } return typesList.ToArray(); } - + public static XmlElement GetNodeElement(string xmlFile, string nodeName) { XmlDocument doc = new XmlDocument(); @@ -250,69 +250,77 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel XmlNodeList nodeList = doc.SelectNodes(string.Format("/SmoQueryModel/Node[@Name='{0}']/{1}", parentName, childNode)); foreach (var item in nodeList) { - XmlElement itemAsElement = item as XmlElement; - if (itemAsElement != null) - { - retElements.Add(itemAsElement); - } + XmlElement itemAsElement = item as XmlElement; + if (itemAsElement != null) + { + retElements.Add(itemAsElement); + } } return retElements; } public static string GetValidForFlags(string validForStr) { - List flags = new List(); - if (validForStr.Contains("Sql2005")) - { + List flags = new List(); + if (validForStr.Contains("Sql2005")) + { flags.Add("ValidForFlag.Sql2005"); - } + } - if (validForStr.Contains("Sql2008")) - { + if (validForStr.Contains("Sql2008")) + { flags.Add("ValidForFlag.Sql2008"); - } + } - if (validForStr.Contains("Sql2012")) - { + if (validForStr.Contains("Sql2012")) + { flags.Add("ValidForFlag.Sql2012"); - } + } - if (validForStr.Contains("Sql2014")) - { + if (validForStr.Contains("Sql2014")) + { flags.Add("ValidForFlag.Sql2014"); - } + } - if (validForStr.Contains("Sql2016")) - { + if (validForStr.Contains("Sql2016")) + { flags.Add("ValidForFlag.Sql2016"); - } + } - if (validForStr.Contains("Sql2017")) - { + if (validForStr.Contains("Sql2017")) + { flags.Add("ValidForFlag.Sql2017"); - } + } - if (validForStr.Contains("AzureV12")) - { + if (validForStr.Contains("AzureV12")) + { flags.Add("ValidForFlag.AzureV12"); - } + } - if (validForStr.Contains("AllOnPrem")) - { + if (validForStr.Contains("AllOnPrem")) + { flags.Add("ValidForFlag.AllOnPrem"); - } - if (validForStr.Contains("AllAzure")) - { + } + if (validForStr.Contains("AllAzure")) + { flags.Add("ValidForFlag.AllAzure"); - } - if (validForStr.Contains("NotSqlDw")) - { + } + if (validForStr.Contains("NotSqlDw")) + { flags.Add("ValidForFlag.NotSqlDw"); - } - if (validForStr == "All") - { + } + if (validForStr.Contains("SqlOnDemand")) + { + flags.Add("ValidForFlag.SqlOnDemand"); + } + if (validForStr == "NotSqlDemand") + { + flags.Add("ValidForFlag.NotSqlDemand"); + } + if (validForStr == "All") + { flags.Add("ValidForFlag.All"); - } + } return string.Join("|", flags); } diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeDefinition.xml b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeDefinition.xml index 4c24d62b..7af55320 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeDefinition.xml +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeDefinition.xml @@ -48,7 +48,7 @@ - + @@ -85,6 +85,7 @@ + @@ -107,7 +108,7 @@ --> - + @@ -160,12 +161,13 @@ - + --> + - --> + @@ -189,7 +191,6 @@ - @@ -207,7 +208,7 @@ - + IndexKeyType.None @@ -216,7 +217,7 @@ - + @@ -231,7 +232,7 @@ - + @@ -245,7 +246,7 @@ - + @@ -301,8 +302,8 @@ - - + + diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeGenerator.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeGenerator.cs index 2bac84de..8270281c 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeGenerator.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeGenerator.cs @@ -265,7 +265,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.ServerLevelServerRoles, IsSystemObject = false, - ValidFor = ValidForFlag.AllOnPrem, + ValidFor = ValidForFlag.AllOnPrem|ValidForFlag.SqlOnDemand, SortPriority = SmoTreeNode.NextSortPriority, }); currentChildren.Add(new FolderNode { @@ -702,7 +702,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.ExternalResources, IsSystemObject = false, - ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017|ValidForFlag.AzureV12, + ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017|ValidForFlag.AzureV12|ValidForFlag.SqlOnDemand, SortPriority = SmoTreeNode.NextSortPriority, }); currentChildren.Add(new FolderNode { @@ -818,6 +818,14 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel IsMsShippedOwned = true, SortPriority = SmoTreeNode.NextSortPriority, }); + currentChildren.Add(new FolderNode { + NodeValue = SR.SchemaHierarchy_ExternalTables, + NodeType = "Folder", + NodeTypeId = NodeTypes.ExternalTables, + IsSystemObject = false, + ValidFor = ValidForFlag.SqlOnDemand, + SortPriority = SmoTreeNode.NextSortPriority, + }); } internal override Type[] ChildQuerierTypes @@ -929,6 +937,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.Functions, IsSystemObject = false, + ValidFor = ValidForFlag.NotSqlDemand, SortPriority = SmoTreeNode.NextSortPriority, }); currentChildren.Add(new FolderNode { @@ -952,6 +961,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.Types, IsSystemObject = false, + ValidFor = ValidForFlag.NotSqlDemand, SortPriority = SmoTreeNode.NextSortPriority, }); currentChildren.Add(new FolderNode { @@ -986,7 +996,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.ExternalDataSources, IsSystemObject = false, - ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017|ValidForFlag.AzureV12, + ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017|ValidForFlag.AzureV12|ValidForFlag.SqlOnDemand, SortPriority = SmoTreeNode.NextSortPriority, }); currentChildren.Add(new FolderNode { @@ -994,7 +1004,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.ExternalFileFormats, IsSystemObject = false, - ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017, + ValidFor = ValidForFlag.Sql2016|ValidForFlag.Sql2017|ValidForFlag.SqlOnDemand, SortPriority = SmoTreeNode.NextSortPriority, }); } @@ -1289,6 +1299,43 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel } } + [Export(typeof(ChildFactory))] + [Shared] + internal partial class ExternalTablesChildFactory : SmoChildFactoryBase + { + public override IEnumerable ApplicableParents() { return new[] { "ExternalTables" }; } + + public override IEnumerable Filters + { + get + { + var filters = new List(); + filters.Add(new NodeFilter + { + Property = "IsExternal", + Type = typeof(bool), + Values = new List { 1 }, + }); + return filters; + } + } + + internal override Type[] ChildQuerierTypes + { + get + { + return new [] { typeof(SqlTableQuerier), }; + } + } + + public override TreeNode CreateChild(TreeNode parent, object context) + { + var child = new ExternalTableTreeNode(); + InitializeChild(parent, child, context); + return child; + } + } + [Export(typeof(ChildFactory))] [Shared] internal partial class TableChildFactory : SmoChildFactoryBase @@ -1352,6 +1399,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.Indexes, IsSystemObject = false, + ValidFor = ValidForFlag.NotSqlDemand, SortPriority = SmoTreeNode.NextSortPriority, }); currentChildren.Add(new FolderNode { @@ -1359,6 +1407,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.Statistics, IsSystemObject = false, + ValidFor = ValidForFlag.NotSqlDemand, SortPriority = SmoTreeNode.NextSortPriority, }); } @@ -1406,6 +1455,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.Indexes, IsSystemObject = false, + ValidFor = ValidForFlag.NotSqlDemand, SortPriority = SmoTreeNode.NextSortPriority, }); currentChildren.Add(new FolderNode { @@ -1413,6 +1463,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.Statistics, IsSystemObject = false, + ValidFor = ValidForFlag.NotSqlDemand, SortPriority = SmoTreeNode.NextSortPriority, }); } @@ -1454,6 +1505,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.Statistics, IsSystemObject = false, + ValidFor = ValidForFlag.NotSqlDemand, SortPriority = SmoTreeNode.NextSortPriority, }); } @@ -1729,6 +1781,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.Indexes, IsSystemObject = false, + ValidFor = ValidForFlag.NotSqlDemand, SortPriority = SmoTreeNode.NextSortPriority, }); currentChildren.Add(new FolderNode { @@ -1736,6 +1789,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeType = "Folder", NodeTypeId = NodeTypes.Statistics, IsSystemObject = false, + ValidFor = ValidForFlag.NotSqlDemand, SortPriority = SmoTreeNode.NextSortPriority, }); } diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeGenerator.tt b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeGenerator.tt index 26cf6268..0e1f9ce5 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeGenerator.tt +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/TreeNodeGenerator.tt @@ -20,7 +20,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel <# var directory = Path.GetDirectoryName(Host.TemplateFile); string xmlFile = Path.Combine(directory, "TreeNodeDefinition.xml"); - + ///////// // TODO - is Generate all the ReverseDependencies needed? ///////// @@ -103,7 +103,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel WriteLine(string.Format(" internal partial class {0}ChildFactory : {1}", type, childFactoryBaseClass)); WriteLine(" {"); - WriteLine(string.Format(" public override IEnumerable ApplicableParents() {{ return new[] {{ \"{0}\" }}; }}", type)); + WriteLine(string.Format(" public override IEnumerable ApplicableParents() {{ return new[] {{ \"{0}\" }}; }}", type)); List children = GetChildren(xmlFile, type); List filters = GetNodeFilters(xmlFile, type); @@ -239,7 +239,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel } else { - WriteLine(" currentChildren.Add(new FolderNode {"); + WriteLine(" currentChildren.Add(new FolderNode {"); WriteLine(string.Format(" NodeValue = {0},", childAsXmlElement.GetAttribute("LocLabel"))); WriteLine(string.Format(" NodeType = \"{0}\",", "Folder")); WriteLine(string.Format(" NodeTypeId = NodeTypes.{0},", child.GetAttribute("Name"))); @@ -254,7 +254,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel WriteLine(string.Format(" ValidFor = {0},", GetValidForFlags(validFor))); } WriteLine(" SortPriority = SmoTreeNode.NextSortPriority,"); - WriteLine(" });"); + WriteLine(" });"); } } WriteLine(" }"); @@ -341,60 +341,68 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel } <#+ - public static string GetValidForFlags(string validForStr) + public static string GetValidForFlags(string validForStr) { - List flags = new List(); - if (validForStr.Contains("Sql2005")) - { + List flags = new List(); + if (validForStr.Contains("Sql2005")) + { flags.Add("ValidForFlag.Sql2005"); - } + } - if (validForStr.Contains("Sql2008")) - { + if (validForStr.Contains("Sql2008")) + { flags.Add("ValidForFlag.Sql2008"); - } + } - if (validForStr.Contains("Sql2012")) - { + if (validForStr.Contains("Sql2012")) + { flags.Add("ValidForFlag.Sql2012"); - } + } - if (validForStr.Contains("Sql2014")) - { + if (validForStr.Contains("Sql2014")) + { flags.Add("ValidForFlag.Sql2014"); - } + } - if (validForStr.Contains("Sql2016")) - { + if (validForStr.Contains("Sql2016")) + { flags.Add("ValidForFlag.Sql2016"); - } + } - if (validForStr.Contains("Sql2017")) - { + if (validForStr.Contains("Sql2017")) + { flags.Add("ValidForFlag.Sql2017"); - } + } - if (validForStr.Contains("AzureV12")) - { + if (validForStr.Contains("AzureV12")) + { flags.Add("ValidForFlag.AzureV12"); - } + } - if (validForStr.Contains("AllOnPrem")) - { + if (validForStr.Contains("AllOnPrem")) + { flags.Add("ValidForFlag.AllOnPrem"); - } - if (validForStr.Contains("AllAzure")) - { + } + if (validForStr.Contains("AllAzure")) + { flags.Add("ValidForFlag.AllAzure"); - } - if (validForStr.Contains("NotSqlDw")) - { + } + if (validForStr.Contains("NotSqlDw")) + { flags.Add("ValidForFlag.NotSqlDw"); - } - if (validForStr == "All") - { + } + if (validForStr.Contains("SqlOnDemand")) + { + flags.Add("ValidForFlag.SqlOnDemand"); + } + if (validForStr == "NotSqlDemand") + { + flags.Add("ValidForFlag.NotSqlDemand"); + } + if (validForStr == "All") + { flags.Add("ValidForFlag.All"); - } + } return string.Join("|", flags); } @@ -417,7 +425,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel } return typesList.ToArray(); } - + public static Dictionary> GetReverseDependencies(string xmlFile) { Dictionary> dependencyMap = new Dictionary>(); @@ -440,7 +448,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel } else { - string[] allDepedencies = dependency.Split(new [] { ';' }, StringSplitOptions.RemoveEmptyEntries); + string[] allDepedencies = dependency.Split(new [] { ';' }, StringSplitOptions.RemoveEmptyEntries); dependenciesForType = new List(); dependenciesForType.AddRange(allDepedencies); dependencyMap.Add(typeName, dependenciesForType); @@ -476,11 +484,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel XmlNodeList nodeList = doc.SelectNodes("/ServerExplorerTree/CodeGenOptions/UniqueTreeNode"); foreach (var item in nodeList) { - XmlElement itemAsElement = item as XmlElement; - if (itemAsElement != null) - { - retElements.Add(itemAsElement); - } + XmlElement itemAsElement = item as XmlElement; + if (itemAsElement != null) + { + retElements.Add(itemAsElement); + } } return retElements; } @@ -495,11 +503,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel XmlNodeList nodeList = doc.SelectNodes(string.Format("/ServerExplorerTree/Node[@Name='{0}']/Child", parentName)); foreach (var item in nodeList) { - XmlElement itemAsElement = item as XmlElement; - if (itemAsElement != null) - { - retElements.Add(itemAsElement); - } + XmlElement itemAsElement = item as XmlElement; + if (itemAsElement != null) + { + retElements.Add(itemAsElement); + } } return retElements; } @@ -514,11 +522,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel XmlNodeList nodeList = doc.SelectNodes(string.Format("/ServerExplorerTree/Node[@Name='{0}']/Filters/Filter", parentName)); foreach (var item in nodeList) { - XmlElement itemAsElement = item as XmlElement; - if (itemAsElement != null) - { - retElements.Add(itemAsElement); - } + XmlElement itemAsElement = item as XmlElement; + if (itemAsElement != null) + { + retElements.Add(itemAsElement); + } } return retElements; } @@ -534,11 +542,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel XmlNodeList nodeList = doc.SelectNodes(string.Format("/ServerExplorerTree/Node[@Name='{0}']/Properties/Property", parentName)); foreach (var item in nodeList) { - XmlElement itemAsElement = item as XmlElement; - if (itemAsElement != null) - { - retElements.Add(itemAsElement); - } + XmlElement itemAsElement = item as XmlElement; + if (itemAsElement != null) + { + retElements.Add(itemAsElement); + } } return retElements; } @@ -553,11 +561,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel XmlNodeList nodeList = doc.SelectNodes(string.Format("/ServerExplorerTree/Node[@Name='{0}']/Filters/Filter[@Property='{1}']/Value", parentName, filterProperty)); foreach (var item in nodeList) { - XmlElement itemAsElement = item as XmlElement; - if (itemAsElement != null) - { - retElements.Add(itemAsElement); - } + XmlElement itemAsElement = item as XmlElement; + if (itemAsElement != null) + { + retElements.Add(itemAsElement); + } } return retElements; } diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SqlServerType.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SqlServerType.cs index f7e0cbc2..0b1de37f 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SqlServerType.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SqlServerType.cs @@ -21,7 +21,8 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer Sql2014, Sql2016, Sql2017, - AzureV12 + AzureV12, + SqlOnDemand } /// @@ -62,6 +63,10 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer { validforFlag = ValidForFlag.SqlDw; } + else if (serverType == SqlServerType.SqlOnDemand) + { + validforFlag = ValidForFlag.SqlOnDemand; + } else { //TODO: not supporting SQL DW for on prem @@ -79,7 +84,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer SqlServerType serverType = SqlServerType.Unknown; string serverVersion = serverInfo.ServerVersion; - if (serverInfo.IsCloud) + if (serverInfo.EngineEditionId == 11) + { + serverType = SqlServerType.SqlOnDemand; + } + else if (serverInfo.IsCloud) { serverType = SqlServerType.AzureV12; } diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ValidForFlag.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ValidForFlag.cs index 663dafa4..ed146932 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ValidForFlag.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ValidForFlag.cs @@ -20,9 +20,12 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer Sql2016 = 0x20, Sql2017 = 0x40, SqlDw = 0x80, + SqlOnDemand = 0x100, AllOnPrem = Sql2005 | Sql2008 | Sql2012 | Sql2014 | Sql2016 | Sql2017, AllAzure = AzureV12, - All = Sql2005 | Sql2008 | Sql2012 | Sql2014 | Sql2016 | Sql2017 | AzureV12 | SqlDw, - NotSqlDw = Sql2005 | Sql2008 | Sql2012 | Sql2014 | Sql2016 | Sql2017 | AzureV12 + All = Sql2005 | Sql2008 | Sql2012 | Sql2014 | Sql2016 | Sql2017 | AzureV12 | SqlDw | SqlOnDemand, + NotSqlDw = Sql2005 | Sql2008 | Sql2012 | Sql2014 | Sql2016 | Sql2017 | AzureV12 | SqlOnDemand, + NotSqlDemand = Sql2005 | Sql2008 | Sql2012 | Sql2014 | Sql2016 | Sql2017 | AzureV12 | SqlDw, + NotSqlDwNotDemand = Sql2005 | Sql2008 | Sql2012 | Sql2014 | Sql2016 | Sql2017 | AzureV12, } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/Scripting/Contracts/ScriptingOptions.cs b/src/Microsoft.SqlTools.ServiceLayer/Scripting/Contracts/ScriptingOptions.cs index 4e058f65..d6250c3c 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Scripting/Contracts/ScriptingOptions.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Scripting/Contracts/ScriptingOptions.cs @@ -149,7 +149,8 @@ namespace Microsoft.SqlTools.ServiceLayer.Scripting.Contracts /// SqlAzureDatabaseEdition /// SqlDatawarehouseEdition /// SqlServerStretchEdition - /// SqlManagedInstanceEdition + /// SqlManagedInstanceEdition + /// SqlServerOnDemandEdition /// public virtual string TargetDatabaseEngineEdition { get; set; } = "SqlServerEnterpriseEdition"; diff --git a/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptAsScriptingOperation.cs b/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptAsScriptingOperation.cs index b4e32647..398ebeb1 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptAsScriptingOperation.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptAsScriptingOperation.cs @@ -630,6 +630,9 @@ namespace Microsoft.SqlTools.ServiceLayer.Scripting case SqlScriptOptions.ScriptDatabaseEngineEdition.SqlServerManagedInstanceEdition: scriptingOptions.TargetDatabaseEngineEdition = DatabaseEngineEdition.SqlManagedInstance; break; + case SqlScriptOptions.ScriptDatabaseEngineEdition.SqlServerOnDemandEdition: + scriptingOptions.TargetDatabaseEngineEdition = DatabaseEngineEdition.SqlOnDemand; + break; default: scriptingOptions.TargetDatabaseEngineEdition = DatabaseEngineEdition.Standard; break; diff --git a/src/Microsoft.SqlTools.ServiceLayer/Scripting/Scripter.cs b/src/Microsoft.SqlTools.ServiceLayer/Scripting/Scripter.cs index 2d737429..07fa30ae 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Scripting/Scripter.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Scripting/Scripter.cs @@ -41,6 +41,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Scripting targetDatabaseEngineEditionMap.Add(DatabaseEngineEdition.SqlDataWarehouse, "SqlDatawarehouseEdition"); targetDatabaseEngineEditionMap.Add(DatabaseEngineEdition.SqlStretchDatabase, "SqlServerStretchEdition"); targetDatabaseEngineEditionMap.Add(DatabaseEngineEdition.SqlManagedInstance, "SqlServerManagedInstance"); + targetDatabaseEngineEditionMap.Add(DatabaseEngineEdition.SqlOnDemand, "SqlOnDemand"); // Mapping for database engine type serverVersionMap.Add(9, "Script90Compat"); diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/NodePathGeneratorTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/NodePathGeneratorTests.cs index 48ae58e7..cadc1da6 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/NodePathGeneratorTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/NodePathGeneratorTests.cs @@ -98,6 +98,8 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer "testServer/Databases/System Databases/testDatabase/Tables/testSchema.testTable/Columns/testColumn", "testServer/Databases/testDatabase/Tables/System Tables/testSchema.testTable/Columns/testColumn", "testServer/Databases/System Databases/testDatabase/Tables/System Tables/testSchema.testTable/Columns/testColumn", + "testServer/Databases/testDatabase/Tables/External Tables/testSchema.testTable/Columns/testColumn", + "testServer/Databases/System Databases/testDatabase/Tables/External Tables/testSchema.testTable/Columns/testColumn", "testServer/Databases/testDatabase/Views/testSchema.testTable/Columns/testColumn", "testServer/Databases/System Databases/testDatabase/Views/testSchema.testTable/Columns/testColumn", "testServer/Databases/testDatabase/Views/System Views/testSchema.testTable/Columns/testColumn", @@ -119,6 +121,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer { "testServer/testDatabase/Tables/testSchema.testTable/Columns/testColumn", "testServer/testDatabase/Tables/System Tables/testSchema.testTable/Columns/testColumn", + "testServer/testDatabase/Tables/External Tables/testSchema.testTable/Columns/testColumn", "testServer/testDatabase/Views/testSchema.testTable/Columns/testColumn", "testServer/testDatabase/Views/System Views/testSchema.testTable/Columns/testColumn" }; diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ServerVersionHelperTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ServerVersionHelperTests.cs index 1dc1541f..95e9f411 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ServerVersionHelperTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ServerVersionHelperTests.cs @@ -30,6 +30,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer VerifyGetValidForFlag(SqlServerType.Sql2014, ValidForFlag.Sql2014); VerifyGetValidForFlag(SqlServerType.Sql2016, ValidForFlag.Sql2016); VerifyGetValidForFlag(SqlServerType.Sql2017, ValidForFlag.Sql2017); + VerifyGetValidForFlag(SqlServerType.SqlOnDemand, ValidForFlag.SqlOnDemand); } [Fact] @@ -135,6 +136,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer VerifyIsValidFor(serverValidFor, validFor, expected); } + [Fact] + public void CalculateServerTypeShouldReturnSqlOnDemandGivenEngineEdition() + { + int engineEdition = 11; + SqlServerType expected = SqlServerType.SqlOnDemand; + VerifyCalculateServerTypeForEngineEdition(engineEdition, expected); + } + private void VerifyIsValidFor(ValidForFlag serverValidFor, ValidForFlag validFor, bool expected) { bool actual = ServerVersionHelper.IsValidFor(serverValidFor, validFor); @@ -151,6 +160,17 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer Assert.Equal(expected, actual); } + private void VerifyCalculateServerTypeForEngineEdition(int engineEdition, SqlServerType expected) + { + ServerInfo serverInfo = new ServerInfo + { + EngineEditionId = engineEdition + }; + + SqlServerType actual = ServerVersionHelper.CalculateServerType(serverInfo); + Assert.True(actual == expected, $"Verify server type based on Engine Edition. Actual value: {actual}, Expected value: {expected}"); + } + private void VerifyGetValidForFlag(SqlServerType serverType, ValidForFlag validForFlag) { ValidForFlag validforFlag = ServerVersionHelper.GetValidForFlag(serverType);