diff --git a/Packages.props b/Packages.props
index e61aa0fa..81738be2 100644
--- a/Packages.props
+++ b/Packages.props
@@ -21,7 +21,7 @@
-
+
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableDesignerInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableDesignerInfo.cs
index 47d01151..6bfa829b 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableDesignerInfo.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableDesignerInfo.cs
@@ -2,7 +2,6 @@
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
-using System.Collections.Generic;
namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
{
@@ -15,8 +14,8 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
public TableViewModel ViewModel { get; set; }
- public List ColumnTypes { get; set; }
+ public TableInfo TableInfo { get; set; }
- public List Schemas { get; set; }
+ public TableDesignerIssue[] Issues { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableDesignerView.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableDesignerView.cs
index eee4fd57..bb6b8eba 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableDesignerView.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableDesignerView.cs
@@ -23,6 +23,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
public List AdditionalPrimaryKeyProperties { get; set; } = new List();
public BuiltinTableOptions PrimaryKeyColumnSpecificationTableOptions = new BuiltinTableOptions();
public List AdditionalTabs { get; } = new List();
+ public bool UseAdvancedSaveMode { get; set; }
}
public class BuiltinTableOptions
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableInfo.cs
index 8021e3ae..6d97af1a 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableInfo.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/TableInfo.cs
@@ -3,6 +3,8 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
+using System.Collections.Generic;
+
namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
{
///
@@ -10,6 +12,10 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
///
public class TableInfo
{
+ public string Title { get; set; }
+
+ public string Tooltip { get; set; }
+
public string Server { get; set; }
public string Database { get; set; }
@@ -25,5 +31,13 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
public string Id { get; set; }
public string AccessToken { get; set; }
+
+ public string TableScriptPath { get; set; }
+
+ public string ProjectFilePath { get; set; }
+
+ public List AllScripts { get; set; }
+
+ public string TargetVersion { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs
index 857bca3e..6d8bce25 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs
@@ -85,10 +85,14 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
var tableDesigner = this.CreateTableDesigner(tableInfo);
var viewModel = this.GetTableViewModel(tableInfo);
var view = this.GetDesignerViewInfo(tableInfo);
+ this.UpdateTableTitleInfo(tableInfo);
+ var issues = TableDesignerValidator.Validate(tableDesigner);
await requestContext.SendResult(new TableDesignerInfo()
{
ViewModel = viewModel,
- View = view
+ View = view,
+ TableInfo = tableInfo,
+ Issues = issues.ToArray()
});
});
}
@@ -144,19 +148,23 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
{
var tableDesigner = this.GetTableDesigner(tableInfo);
tableDesigner.CommitChanges();
- string newId = string.Format("{0}|{1}|{2}|{3}|{4}", STSHost.ProviderName, tableInfo.Server, tableInfo.Database, tableDesigner.TableViewModel.Schema, tableDesigner.TableViewModel.Name);
string oldId = tableInfo.Id;
- this.idTableMap.Remove(oldId);
- if (newId != oldId)
+ if (tableInfo.ProjectFilePath == null)
{
- tableInfo.Name = tableDesigner.TableViewModel.Name;
- tableInfo.Schema = tableDesigner.TableViewModel.Schema;
- tableInfo.IsNewTable = false;
- tableInfo.Id = newId;
+ string newId = string.Format("{0}|{1}|{2}|{3}|{4}", STSHost.ProviderName, tableInfo.Server, tableInfo.Database, tableDesigner.TableViewModel.Schema, tableDesigner.TableViewModel.Name);
+ if (newId != oldId)
+ {
+ tableInfo.Name = tableDesigner.TableViewModel.Name;
+ tableInfo.Schema = tableDesigner.TableViewModel.Schema;
+ tableInfo.IsNewTable = false;
+ tableInfo.Id = newId;
+ }
}
+ this.idTableMap.Remove(oldId);
// Recreate the table designer after the changes are published to make sure the table information is up to date.
// Todo: improve the dacfx table designer feature, so that we don't have to recreate it.
this.CreateTableDesigner(tableInfo);
+ this.UpdateTableTitleInfo(tableInfo);
await requestContext.SendResult(new PublishTableChangesResponse()
{
NewTableInfo = tableInfo,
@@ -948,6 +956,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
this.SetEdgeConstraintsViewInfo(view, tableDesigner);
this.SetTemporalTableViewInfo(view, tableDesigner);
this.SetMemoryOptimizedTableViewInfo(view, tableDesigner);
+ view.UseAdvancedSaveMode = tableInfo.ProjectFilePath == null;
return view;
}
@@ -1451,10 +1460,18 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
private Dac.TableDesigner CreateTableDesigner(TableInfo tableInfo)
{
- var connectionStringbuilder = new SqlConnectionStringBuilder(tableInfo.ConnectionString);
- connectionStringbuilder.InitialCatalog = tableInfo.Database;
- var connectionString = connectionStringbuilder.ToString();
- var tableDesigner = new Dac.TableDesigner(connectionString, tableInfo.AccessToken, tableInfo.Schema, tableInfo.Name, tableInfo.IsNewTable);
+ Dac.TableDesigner tableDesigner;
+ if (tableInfo.TableScriptPath == null)
+ {
+ var connectionStringbuilder = new SqlConnectionStringBuilder(tableInfo.ConnectionString);
+ connectionStringbuilder.InitialCatalog = tableInfo.Database;
+ var connectionString = connectionStringbuilder.ToString();
+ tableDesigner = new Dac.TableDesigner(connectionString, tableInfo.AccessToken, tableInfo.Schema, tableInfo.Name, tableInfo.IsNewTable);
+ }
+ else
+ {
+ tableDesigner = new Dac.TableDesigner(tableInfo.ProjectFilePath, tableInfo.TableScriptPath, tableInfo.AllScripts, tableInfo.TargetVersion);
+ }
this.idTableMap[tableInfo.Id] = tableDesigner;
return tableDesigner;
}
@@ -1472,6 +1489,14 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
}
}
+ private void UpdateTableTitleInfo(TableInfo tableInfo)
+ {
+ var td = GetTableDesigner(tableInfo);
+ tableInfo.Title = td.TableViewModel.FullName;
+ var tableParent = tableInfo.Server == null ? tableInfo.ProjectFilePath : string.Format("{0} - {1}", tableInfo.Server, tableInfo.Database);
+ tableInfo.Tooltip = string.Format("{0} - {1}", tableParent, tableInfo.Title);
+ }
+
private Dictionary GetMetadata(TableInfo tableInfo)
{
var tableDesigner = this.GetTableDesigner(tableInfo);
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerValidator.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerValidator.cs
index 858221fb..363359c6 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerValidator.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerValidator.cs
@@ -32,7 +32,8 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
new TableMustHaveAtLeastOneColumnRule(),
new MemoryOptimizedTableIdentityColumnRule(),
new TableShouldAvoidHavingMultipleEdgeConstraintsRule(),
- new ColumnCannotBeListedMoreThanOnceInPrimaryKeyRule()
+ new ColumnCannotBeListedMoreThanOnceInPrimaryKeyRule(),
+ new MutipleCreateTableStatementsInScriptRule()
};
///
@@ -578,4 +579,20 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
return errors;
}
}
+
+ public class MutipleCreateTableStatementsInScriptRule : ITableDesignerValidationRule
+ {
+ public List Run(Dac.TableDesigner designer)
+ {
+ var errors = new List();
+ if(designer.ScriptContainsMultipleTableDefinition)
+ {
+ errors.Add(new TableDesignerIssue(){
+ Description = "There are multiple table definitions in the script, only the first table can be edited in the designer.",
+ Severity = Contracts.IssueSeverity.Information
+ });
+ }
+ return errors;
+ }
+ }
}
\ No newline at end of file