diff --git a/Packages.props b/Packages.props
index a5d44818..a34c0868 100644
--- a/Packages.props
+++ b/Packages.props
@@ -20,7 +20,7 @@
-
+
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GenerateReportRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GenerateReportRequest.cs
new file mode 100644
index 00000000..0056abd2
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GenerateReportRequest.cs
@@ -0,0 +1,21 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol.Contracts;
+using Microsoft.SqlTools.Utility;
+
+namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
+{
+ ///
+ /// The service request to generate report for the changes.
+ ///
+ public class GenerateReportRequest
+ {
+ ///
+ /// Request definition
+ ///
+ public static readonly RequestType Type = RequestType.Create("tabledesigner/report");
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GenerateScriptRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GenerateScriptRequest.cs
new file mode 100644
index 00000000..bfdf2297
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GenerateScriptRequest.cs
@@ -0,0 +1,21 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol.Contracts;
+using Microsoft.SqlTools.Utility;
+
+namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
+{
+ ///
+ /// The service request to generate script for the changes.
+ ///
+ public class GenerateScriptRequest
+ {
+ ///
+ /// Request definition
+ ///
+ public static readonly RequestType Type = RequestType.Create("tabledesigner/script");
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GetTableDesignerInfoRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GetTableDesignerInfoRequest.cs
index 6ea8ea3b..ffe1e5f7 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GetTableDesignerInfoRequest.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/GetTableDesignerInfoRequest.cs
@@ -8,13 +8,13 @@ using Microsoft.SqlTools.Hosting.Protocol.Contracts;
namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
{
///
- /// The service request to get the designer information about a table.
+ /// The service request to initialize a table designer.
///
- public class GetTableDesignerInfoRequest
+ public class InitializeTableDesignerRequest
{
///
/// Request definition
///
- public static readonly RequestType Type = RequestType.Create("tabledesigner/gettabledesignerinfo");
+ public static readonly RequestType Type = RequestType.Create("tabledesigner/initialize");
}
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/ProcessTableDesignerEditRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/ProcessTableDesignerEditRequest.cs
index be548760..d1433dc2 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/ProcessTableDesignerEditRequest.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/ProcessTableDesignerEditRequest.cs
@@ -13,8 +13,6 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
public TableInfo TableInfo { get; set; }
public TableDesignerChangeInfo TableChangeInfo { get; set; }
-
- public TableViewModel ViewModel { get; set; }
}
public class ProcessTableDesignerEditResponse
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/SaveTableChangesRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/SaveTableChangesRequest.cs
index 15081777..3a77e52a 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/SaveTableChangesRequest.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/Contracts/Requests/SaveTableChangesRequest.cs
@@ -8,13 +8,6 @@ using Microsoft.SqlTools.Utility;
namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
{
- public class SaveTableChangesRequestParams : GeneralRequestDetails
- {
- public TableInfo TableInfo { get; set; }
-
- public TableViewModel ViewModel { get; set; }
- }
-
public class SaveTableChangesResponse
{
}
@@ -27,6 +20,6 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner.Contracts
///
/// Request definition
///
- public static readonly RequestType Type = RequestType.Create("tabledesigner/savechanges");
+ public static readonly RequestType Type = RequestType.Create("tabledesigner/save");
}
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs
index 88ff7218..6f728101 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs
@@ -20,7 +20,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
///
public sealed class TableDesignerService : IDisposable
{
- private Dictionary idTableMap = new Dictionary();
+ private Dictionary idTableMap = new Dictionary();
private bool disposed = false;
private static readonly Lazy instance = new Lazy(() => new TableDesignerService());
@@ -51,9 +51,11 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
public void InitializeService(ServiceHost serviceHost)
{
this.ServiceHost = serviceHost;
- this.ServiceHost.SetRequestHandler(GetTableDesignerInfoRequest.Type, HandleGetTableDesignerInfoRequest);
+ this.ServiceHost.SetRequestHandler(InitializeTableDesignerRequest.Type, HandleInitializeTableDesignerRequest);
this.ServiceHost.SetRequestHandler(ProcessTableDesignerEditRequest.Type, HandleProcessTableDesignerEditRequest);
this.ServiceHost.SetRequestHandler(SaveTableChangesRequest.Type, HandleSaveTableChangesRequest);
+ this.ServiceHost.SetRequestHandler(GenerateScriptRequest.Type, HandleGenerateScriptRequest);
+ this.ServiceHost.SetRequestHandler(GenerateReportRequest.Type, HandleGenerateReportRequest);
this.ServiceHost.SetRequestHandler(DisposeTableDesignerRequest.Type, HandleDisposeTableDesignerRequest);
}
private Task HandleRequest(RequestContext requestContext, Func action)
@@ -74,14 +76,14 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
return Task.CompletedTask;
}
- private Task HandleGetTableDesignerInfoRequest(TableInfo tableInfo, RequestContext requestContext)
+ private Task HandleInitializeTableDesignerRequest(TableInfo tableInfo, RequestContext requestContext)
{
return this.HandleRequest(requestContext, async () =>
{
var connectinStringbuilder = new SqlConnectionStringBuilder(tableInfo.ConnectionString);
connectinStringbuilder.InitialCatalog = tableInfo.Database;
var connectionString = connectinStringbuilder.ToString();
- var table = new Dac.TableDesignerViewModel(connectionString, tableInfo.Schema, tableInfo.Name, tableInfo.IsNewTable);
+ var table = new Dac.TableDesigner(connectionString, tableInfo.Schema, tableInfo.Name, tableInfo.IsNewTable);
this.idTableMap.Add(tableInfo.Id, table);
var viewModel = this.GetTableViewModel(tableInfo);
var view = this.GetDesignerViewInfo(tableInfo);
@@ -122,15 +124,35 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
});
}
- private Task HandleSaveTableChangesRequest(SaveTableChangesRequestParams requestParams, RequestContext requestContext)
+ private Task HandleSaveTableChangesRequest(TableInfo tableInfo, RequestContext requestContext)
{
return this.HandleRequest(requestContext, async () =>
{
- // TODO: Handle the save changes request.
+ var tableDesigner = this.GetTableDesigner(tableInfo);
+ tableDesigner.CommitChanges();
await requestContext.SendResult(new SaveTableChangesResponse());
});
}
+ private Task HandleGenerateScriptRequest(TableInfo tableInfo, RequestContext requestContext)
+ {
+ return this.HandleRequest(requestContext, async () =>
+ {
+ var table = this.GetTableDesigner(tableInfo);
+ var script = table.GenerateScript();
+ await requestContext.SendResult(script);
+ });
+ }
+
+ private Task HandleGenerateReportRequest(TableInfo tableInfo, RequestContext requestContext)
+ {
+ return this.HandleRequest(requestContext, async () =>
+ {
+ var table = this.GetTableDesigner(tableInfo);
+ var report = table.GenerateReport();
+ await requestContext.SendResult(report);
+ });
+ }
private Task HandleDisposeTableDesignerRequest(TableInfo tableInfo, RequestContext requestContext)
{
@@ -143,7 +165,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
private void HandleAddItemRequest(ProcessTableDesignerEditRequestParams requestParams)
{
- var table = this.GetTable(requestParams.TableInfo);
+ var table = this.GetTableDesigner(requestParams.TableInfo).TableViewModel;
var path = requestParams.TableChangeInfo.Path;
// Handle the add item request on top level table properties, e.g. Columns, Indexes.
if (path.Length == 1)
@@ -166,7 +188,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
private void HandleRemoveItemRequest(ProcessTableDesignerEditRequestParams requestParams)
{
- var table = this.GetTable(requestParams.TableInfo);
+ var table = this.GetTableDesigner(requestParams.TableInfo).TableViewModel;
var path = requestParams.TableChangeInfo.Path;
// Handle the add item request on top level table properties, e.g. Columns, Indexes.
if (path.Length == 2)
@@ -175,7 +197,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
switch (propertyName)
{
case TablePropertyNames.Columns:
- table.Columns.Items.RemoveAt(Convert.ToInt32(path[1]));
+ table.Columns.RemoveAt(Convert.ToInt32(path[1]));
break;
default:
break;
@@ -189,7 +211,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
private void HandleUpdateItemRequest(ProcessTableDesignerEditRequestParams requestParams)
{
- var table = this.GetTable(requestParams.TableInfo);
+ var table = this.GetTableDesigner(requestParams.TableInfo).TableViewModel;
var path = requestParams.TableChangeInfo.Path;
if (path.Length == 3)
@@ -232,7 +254,8 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
private TableViewModel GetTableViewModel(TableInfo tableInfo)
{
- var table = this.GetTable(tableInfo);
+ var tableDesigner = this.GetTableDesigner(tableInfo);
+ var table = tableDesigner.TableViewModel;
var tableViewModel = new TableViewModel();
tableViewModel.Name.Value = table.Name;
tableViewModel.Schema.Value = table.Schema;
@@ -276,7 +299,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
foreignKeyViewModel.OnUpdateAction.Value = SqlForeignKeyActionUtil.GetName(foreignKey.OnUpdateAction);
foreignKeyViewModel.OnUpdateAction.Values = SqlForeignKeyActionUtil.ActionNames;
foreignKeyViewModel.PrimaryKeyTable.Value = foreignKey.PrimaryKeyTable;
- foreignKeyViewModel.PrimaryKeyTable.Values = table.AllTables.ToList();
+ foreignKeyViewModel.PrimaryKeyTable.Values = tableDesigner.AllTables.ToList();
foreignKeyViewModel.IsNotForReplication.Checked = foreignKey.IsNotForReplication;
for (int i = 0; i < foreignKey.ForeignKeyColumns.Count; i++)
{
@@ -286,7 +309,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
mapping.ForeignKeyColumn.Value = foreignKeyColumn;
mapping.ForeignKeyColumn.Values = table.Columns.Items.Select(c => c.Name).ToList();
mapping.PrimaryKeyColumn.Value = primaryKeyColumn;
- mapping.PrimaryKeyColumn.Values = table.GetColumnsForTable(foreignKey.PrimaryKeyTable).ToList();
+ mapping.PrimaryKeyColumn.Values = tableDesigner.GetColumnsForTable(foreignKey.PrimaryKeyTable).ToList();
foreignKeyViewModel.Columns.Data.Add(mapping);
}
tableViewModel.ForeignKeys.Data.Add(foreignKeyViewModel);
@@ -302,7 +325,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
}
tableViewModel.Script.Enabled = false;
- tableViewModel.Script.Value = table.Script;
+ tableViewModel.Script.Value = tableDesigner.Script;
// TODO: set other properties of the table
return tableViewModel;
}
@@ -384,12 +407,12 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
return view;
}
- private Dac.TableDesignerViewModel GetTable(TableInfo tableInfo)
+ private Dac.TableDesigner GetTableDesigner(TableInfo tableInfo)
{
- Dac.TableDesignerViewModel table;
- if (this.idTableMap.TryGetValue(tableInfo.Id, out table))
+ Dac.TableDesigner tableDesigner;
+ if (this.idTableMap.TryGetValue(tableInfo.Id, out tableDesigner))
{
- return table;
+ return tableDesigner;
}
else
{