Skip to content

Commit b4f207a

Browse files
authored
updating dacfx to fix sd perf issues (#2498)
1 parent 3ad9b77 commit b4f207a

File tree

8 files changed

+105
-367
lines changed

8 files changed

+105
-367
lines changed

Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<!-- TODO: Upgrade package and use Token Credential design -->
2222
<PackageReference Update="Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider" Version="1.1.1" />
2323
<PackageReference Update="Microsoft.SqlServer.Management.SmoMetadataProvider" Version="170.18.0" />
24-
<PackageReference Update="Microsoft.SqlServer.DacFx" Version="170.0.94" />
24+
<PackageReference Update="Microsoft.SqlServer.DacFx" Version="170.1.23-preview" />
2525
<PackageReference Update="Microsoft.SqlServer.DacFx.Projects" Version="0.4.0-preview" />
2626
<PackageReference Update="Microsoft.Azure.Kusto.Data" Version="12.2.3" />
2727
<PackageReference Update="Microsoft.Azure.Kusto.Language" Version="9.0.4" />

src/Microsoft.SqlTools.ServiceLayer/SchemaDesigner/Contracts/RequestGenerateScript.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,18 @@
33
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
44
//
55

6-
using System.Collections.Generic;
76
using Microsoft.SqlTools.Hosting.Protocol.Contracts;
87

98
namespace Microsoft.SqlTools.ServiceLayer.SchemaDesigner
109
{
1110
public class GenerateScriptRequest
1211
{
1312
public string? SessionId { get; set; }
14-
public SchemaDesignerModel? UpdatedSchema { get; set; }
1513
}
1614

1715
public class GenerateScriptResponse
1816
{
19-
public List<SchemaDesignerScriptObject>? Scripts { get; set; }
20-
public string? CombinedScript { get; set; }
17+
public string? Script { get; set; }
2118
}
2219

2320
public class GenerateScript
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//
2+
// Copyright (c) Microsoft. All rights reserved.
3+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
4+
//
5+
6+
using Microsoft.SqlTools.Hosting.Protocol.Contracts;
7+
8+
namespace Microsoft.SqlTools.ServiceLayer.SchemaDesigner
9+
{
10+
public class GetDefinitionRequest
11+
{
12+
public string? SessionId { get; set; }
13+
public SchemaDesignerModel? UpdatedSchema { get; set; }
14+
}
15+
16+
public class GetDefinitionResponse
17+
{
18+
public string? Script { get; set; }
19+
}
20+
21+
public class GetDefinition
22+
{
23+
/// <summary>
24+
/// Request to generate create script for the schema model
25+
/// </summary>
26+
public static readonly RequestType<GetDefinitionRequest, GetDefinitionResponse> Type = RequestType<GetDefinitionRequest, GetDefinitionResponse>.Create("schemaDesigner/getDefinition");
27+
}
28+
}

src/Microsoft.SqlTools.ServiceLayer/SchemaDesigner/Contracts/RequestGetReport.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
44
//
55

6-
using System.Collections.Generic;
76
using Microsoft.Data.Tools.Sql.DesignServices;
87
using Microsoft.SqlTools.Hosting.Protocol.Contracts;
98

@@ -26,9 +25,8 @@ public class GetReportRequest
2625
/// </summary>
2726
public class GetReportResponse
2827
{
29-
public List<SchemaDesignerChangeReport>? Reports { get; set; }
28+
public bool HasSchemaChanged { get; set; }
3029
public PreviewReport? DacReport { get; set; }
31-
public string? UpdateScript { get; set; }
3230
}
3331

3432
/// <summary>

src/Microsoft.SqlTools.ServiceLayer/SchemaDesigner/Contracts/SchemaDesignerReportObject.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/Microsoft.SqlTools.ServiceLayer/SchemaDesigner/SchemaDesignerService.cs

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,12 @@ public void InitializeService(IProtocolEndpoint serviceHost)
3232
Logger.Verbose("Initializing Schema Designer Service");
3333
this.serviceHost = serviceHost;
3434
serviceHost.SetRequestHandler(CreateSession.Type, HandleGetSchemaModelRequest, true);
35-
serviceHost.SetRequestHandler(GenerateScript.Type, HandleGetSchemaDesignerScriptRequest, true);
36-
serviceHost.SetRequestHandler(DisposeSession.Type, HandleDisposeSchemaDesignerSessionRequest, true);
35+
serviceHost.SetRequestHandler(GetDefinition.Type, HandleGetDefinitionRequest, true);
36+
serviceHost.SetRequestHandler(GenerateScript.Type, HandleGenerateScriptRequest, true);
3737
serviceHost.SetRequestHandler(GetReport.Type, HandleGetSchemaDesignerSessionReportRequest, true);
3838
serviceHost.SetRequestHandler(PublishSession.Type, HandlePublishSchemaDesignerSessionRequest, true);
39+
serviceHost.SetRequestHandler(DisposeSession.Type, HandleDisposeSchemaDesignerSessionRequest, true);
40+
3941
Logger.Verbose("Initialized Schema Designer Service");
4042
}
4143

@@ -56,27 +58,51 @@ await requestContext.SendResult(new CreateSessionResponse()
5658
SessionId = connectionUri,
5759
});
5860
});
61+
}
5962

63+
internal Task HandleGetDefinitionRequest(GetDefinitionRequest requestParams, RequestContext<GetDefinitionResponse> requestContext)
64+
{
65+
return Utils.HandleRequest<GetDefinitionResponse>(requestContext, async () =>
66+
{
67+
await requestContext.SendResult(new GetDefinitionResponse()
68+
{
69+
Script = SchemaCreationScriptGenerator.GenerateCreateTableScript(requestParams.UpdatedSchema),
70+
});
71+
});
6072
}
6173

62-
internal Task HandleGetSchemaDesignerScriptRequest(GenerateScriptRequest requestParams, RequestContext<GenerateScriptResponse> requestContext)
74+
internal Task HandleGenerateScriptRequest(GenerateScriptRequest requestParams, RequestContext<GenerateScriptResponse> requestContext)
6375
{
6476
return Utils.HandleRequest<GenerateScriptResponse>(requestContext, async () =>
6577
{
66-
await requestContext.SendResult(new GenerateScriptResponse()
78+
if (sessions.TryGetValue(requestParams.SessionId, out SchemaDesignerSession? session))
6779
{
68-
Scripts = SchemaCreationScriptGenerator.GenerateCreateAsScriptForSchemaTables(requestParams.UpdatedSchema),
69-
CombinedScript = SchemaCreationScriptGenerator.GenerateCreateTableScript(requestParams.UpdatedSchema)
70-
});
80+
session.PublishSchema();
81+
82+
await requestContext.SendResult(new GenerateScriptResponse()
83+
{
84+
Script = await session.GenerateScript(),
85+
});
86+
}
7187
});
88+
}
7289

90+
internal Task HandlePublishSchemaDesignerSessionRequest(PublishSessionRequest requestParams, RequestContext<PublishSessionResponse> requestContext)
91+
{
92+
return Utils.HandleRequest<PublishSessionResponse>(requestContext, async () =>
93+
{
94+
if (sessions.TryGetValue(requestParams.SessionId, out SchemaDesignerSession? session))
95+
{
96+
session.PublishSchema();
97+
}
98+
await requestContext.SendResult(new PublishSessionResponse());
99+
});
73100
}
74101

75102
internal Task HandleDisposeSchemaDesignerSessionRequest(DisposeSessionRequest requestParams, RequestContext<DisposeSessionResponse> requestContext)
76103
{
77104
return Utils.HandleRequest<DisposeSessionResponse>(requestContext, async () =>
78105
{
79-
80106
try
81107
{
82108
if (sessions.TryGetValue(requestParams.SessionId, out SchemaDesignerSession? session))
@@ -92,21 +118,9 @@ internal Task HandleDisposeSchemaDesignerSessionRequest(DisposeSessionRequest re
92118
}
93119
await requestContext.SendResult(new DisposeSessionResponse());
94120
});
95-
}
96121

97-
internal Task HandlePublishSchemaDesignerSessionRequest(PublishSessionRequest requestParams, RequestContext<PublishSessionResponse> requestContext)
98-
{
99-
return Utils.HandleRequest<PublishSessionResponse>(requestContext, async () =>
100-
{
101-
if (sessions.TryGetValue(requestParams.SessionId, out SchemaDesignerSession? session))
102-
{
103-
session.PublishSchema();
104-
}
105-
await requestContext.SendResult(new PublishSessionResponse());
106-
});
107122
}
108123

109-
110124
internal Task HandleGetSchemaDesignerSessionReportRequest(GetReportRequest requestParams, RequestContext<GetReportResponse> requestContext)
111125
{
112126
return Utils.HandleRequest<GetReportResponse>(requestContext, async () =>

src/Microsoft.SqlTools.ServiceLayer/SchemaDesigner/SchemaDesignerSession.cs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,22 @@ private SchemaDesignerModel createInitialSchema()
4646
CreateOrResetSchemaDesigner();
4747
SchemaDesignerModel schema = new SchemaDesignerModel();
4848
schema.Tables = new List<SchemaDesignerTable>();
49-
foreach (var td in schemaDesigner.TableDesigners)
49+
for (int i = 0; i < schemaDesigner.SimpleSchema.Tables.Count; i++)
5050
{
51-
SchemaDesignerTable table = new SchemaDesignerTable()
51+
var table = schemaDesigner.SimpleSchema.Tables[i];
52+
SchemaDesignerTable schemaTable = new SchemaDesignerTable()
5253
{
5354
Id = Guid.NewGuid(),
54-
Name = td.TableViewModel.Name,
55-
Schema = td.TableViewModel.Schema,
55+
Name = table.Name,
56+
Schema = table.SchemaName,
5657
Columns = new List<SchemaDesignerColumn>(),
5758
ForeignKeys = new List<SchemaDesignerForeignKey>(),
5859
};
5960

60-
foreach (var column in td.TableViewModel.Columns.Items)
61+
for (int j = 0; j < table.Columns.Count; j++)
6162
{
62-
table.Columns.Add(new SchemaDesignerColumn()
63+
var column = table.Columns[j];
64+
schemaTable.Columns.Add(new SchemaDesignerColumn()
6365
{
6466
Id = Guid.NewGuid(),
6567
Name = column.Name,
@@ -75,26 +77,26 @@ private SchemaDesignerModel createInitialSchema()
7577
DefaultValue = column.DefaultValue,
7678
IsComputed = column.IsComputed,
7779
ComputedFormula = column.ComputedFormula,
78-
ComputedPersisted = column.IsComputedPersisted,
80+
ComputedPersisted = column.ComputedPersisted,
7981
});
8082
}
8183

82-
foreach (var fk in td.TableViewModel.ForeignKeys.Items)
84+
foreach (var fk in table.ForeignKeys)
8385
{
84-
table.ForeignKeys.Add(new SchemaDesignerForeignKey()
86+
schemaTable.ForeignKeys.Add(new SchemaDesignerForeignKey()
8587
{
8688
Id = Guid.NewGuid(),
8789
Name = fk.Name,
88-
Columns = fk.Columns.ToList(),
89-
ReferencedColumns = fk.ForeignColumns.ToList(),
90-
ReferencedTableName = fk.ForeignTable.Split('.').Last().Replace("]", "").Replace("[", ""),
91-
ReferencedSchemaName = fk.ForeignTable.Split('.').First().Replace("]", "").Replace("[", ""),
90+
Columns = fk.Columns,
91+
ReferencedColumns = fk.ReferencedColumns,
92+
ReferencedTableName = fk.ReferencedTableName,
93+
ReferencedSchemaName = fk.ReferencedTableSchema,
9294
OnDeleteAction = SchemaDesignerUtils.ConvertSqlForeignKeyActionToOnAction(fk.OnDeleteAction),
9395
OnUpdateAction = SchemaDesignerUtils.ConvertSqlForeignKeyActionToOnAction(fk.OnUpdateAction),
9496
});
9597
}
9698

97-
schema.Tables.Add(table);
99+
schema.Tables.Add(schemaTable);
98100
}
99101
return schema;
100102
}
@@ -131,6 +133,14 @@ public async Task<GetReportResponse> GetReport(SchemaDesignerModel updatedSchema
131133
return report;
132134
}
133135

136+
public async Task<string> GenerateScript()
137+
{
138+
return await Task.Run(() =>
139+
{
140+
return schemaDesigner.GenerateScript();
141+
});
142+
}
143+
134144
public void PublishSchema()
135145
{
136146
schemaDesigner.PublishChanges();

0 commit comments

Comments
 (0)