Skip to content

Commit 068a56e

Browse files
aasimkhan30Aasim Khan
andauthored
Adding support for async script operation. (#2534)
* Adding support for async script operation. * Fixed flag name * fixed flows and more comments --------- Co-authored-by: Aasim Khan <aasimkhan@gmail.com>
1 parent 256048c commit 068a56e

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

src/Microsoft.SqlTools.ServiceLayer/Scripting/ScriptingService.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,16 @@ public Task HandleScriptExecuteRequest(ScriptingParams parameters, RequestContex
137137

138138
operation.PlanNotification += (sender, e) => requestContext.SendEvent(ScriptingPlanNotificationEvent.Type, e).Wait();
139139
operation.ProgressNotification += (sender, e) => requestContext.SendEvent(ScriptingProgressNotificationEvent.Type, e).Wait();
140-
operation.CompleteNotification += (sender, e) => this.SendScriptingCompleteEvent(requestContext, ScriptingCompleteEvent.Type, e, operation, parameters.ScriptDestination);
140+
operation.CompleteNotification += (sender, e) => this.SendScriptingCompleteEvent(requestContext, ScriptingCompleteEvent.Type, e, operation, parameters);
141141

142142
RunTask(requestContext, operation);
143+
144+
// If ReturnScriptAsynchronously is enabled, return operation ID immediately
145+
if (parameters.ReturnScriptAsynchronously)
146+
{
147+
return requestContext.SendResult(new ScriptingResult { OperationId = operation.OperationId });
148+
}
149+
143150
return Task.CompletedTask;
144151
}
145152

@@ -180,10 +187,19 @@ public async Task HandleScriptCancelRequest(ScriptingCancelParams parameters, Re
180187
}
181188

182189
private async void SendScriptingCompleteEvent<TParams>(RequestContext<ScriptingResult> requestContext, EventType<TParams> eventType, TParams parameters,
183-
SmoScriptingOperation operation, string scriptDestination)
190+
SmoScriptingOperation operation, ScriptingParams scriptingParams)
184191
{
192+
// If ReturnScriptAsynchronously is enabled, include script in the complete event
193+
if (scriptingParams.ReturnScriptAsynchronously && parameters is ScriptingCompleteParams completeParams)
194+
{
195+
completeParams.Script = operation.ScriptText;
196+
await requestContext.SendEvent(eventType, parameters);
197+
return;
198+
}
199+
185200
await requestContext.SendEvent(eventType, parameters);
186-
switch (scriptDestination)
201+
202+
switch (scriptingParams.ScriptDestination)
187203
{
188204
case "ToEditor":
189205
await requestContext.SendResult(new ScriptingResult { OperationId = operation.OperationId, Script = operation.ScriptText });

src/Microsoft.SqlTools.SqlCore/Scripting/Contracts/ScriptingCompleteParams.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,10 @@ public class ScriptingCompleteParams : ScriptingEventParams
3434
/// Get or sets a value to indicate the scripting operation successfully completed.
3535
/// </summary>
3636
public bool Success { get; set; }
37+
38+
/// <summary>
39+
/// Gets or sets the script text when ReturnScriptAsEvent is enabled.
40+
/// </summary>
41+
public string Script { get; set; }
3742
}
3843
}

src/Microsoft.SqlTools.SqlCore/Scripting/Contracts/ScriptingParams.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,13 @@ public class ScriptingParams
7777
/// </summary>
7878
public ScriptingOperationType Operation { get; set; } = ScriptingOperationType.Create;
7979

80+
/// <summary>
81+
/// Gets or sets whether to return the operation ID immediately and deliver the script via the complete event.
82+
/// When true, the script request returns immediately with an operation ID,
83+
/// and the script content is delivered later via the scriptComplete event.
84+
/// When false (default), the request waits for completion and returns both operation ID and script together.
85+
/// </summary>
86+
public bool ReturnScriptAsynchronously { get; set; }
87+
8088
}
8189
}

0 commit comments

Comments
 (0)