@@ -77,33 +77,66 @@ internal EditDataService(QueryExecutionService qes, ConnectionService cs, IEditM
7777 public void InitializeService ( ServiceHost serviceHost )
7878 {
7979 // Register handlers for requests
80- serviceHost . SetRequestHandler ( EditCreateRowRequest . Type , HandleCreateRowRequest , true ) ;
81- serviceHost . SetRequestHandler ( EditDeleteRowRequest . Type , HandleDeleteRowRequest , true ) ;
82- serviceHost . SetRequestHandler ( EditDisposeRequest . Type , HandleDisposeRequest , true ) ;
83- serviceHost . SetRequestHandler ( EditInitializeRequest . Type , HandleInitializeRequest , true ) ;
84- serviceHost . SetRequestHandler ( EditRevertCellRequest . Type , HandleRevertCellRequest , true ) ;
85- serviceHost . SetRequestHandler ( EditRevertRowRequest . Type , HandleRevertRowRequest , true ) ;
86- serviceHost . SetRequestHandler ( EditSubsetRequest . Type , HandleSubsetRequest , true ) ;
87- serviceHost . SetRequestHandler ( EditUpdateCellRequest . Type , HandleUpdateCellRequest , true ) ;
88- serviceHost . SetRequestHandler ( EditCommitRequest . Type , HandleCommitRequest , true ) ;
80+ serviceHost . SetRequestHandler ( EditCreateRowRequest . Type , HandleCreateRowRequest , isParallelProcessingSupported : true ) ;
81+ serviceHost . SetRequestHandler ( EditDeleteRowRequest . Type , HandleDeleteRowRequest , isParallelProcessingSupported : true ) ;
82+ serviceHost . SetRequestHandler ( EditDisposeRequest . Type , HandleDisposeRequest , isParallelProcessingSupported : true ) ;
83+ serviceHost . SetRequestHandler ( EditInitializeRequest . Type , HandleInitializeRequest , isParallelProcessingSupported : true ) ;
84+ serviceHost . SetRequestHandler ( EditRevertCellRequest . Type , HandleRevertCellRequest , isParallelProcessingSupported : true ) ;
85+ serviceHost . SetRequestHandler ( EditRevertRowRequest . Type , HandleRevertRowRequest , isParallelProcessingSupported : true ) ;
86+ serviceHost . SetRequestHandler ( EditSubsetRequest . Type , HandleSubsetRequest , isParallelProcessingSupported : true ) ;
87+ serviceHost . SetRequestHandler ( EditUpdateCellRequest . Type , HandleUpdateCellRequest , isParallelProcessingSupported : true ) ;
88+ serviceHost . SetRequestHandler ( EditCommitRequest . Type , HandleCommitRequest , isParallelProcessingSupported : true ) ;
89+ serviceHost . SetRequestHandler ( EditScriptRequest . Type , HandleEditScriptRequest , isParallelProcessingSupported : true ) ;
8990 }
9091
9192 #region Request Handlers
9293
9394 internal async Task HandleSessionRequest < TResult > ( SessionOperationParams sessionParams ,
9495 RequestContext < TResult > requestContext , Func < EditSession , TResult > sessionOperation )
9596 {
96- EditSession editSession = GetActiveSessionOrThrow ( sessionParams . OwnerUri ) ;
97+ try
98+ {
99+ EditSession editSession = GetActiveSessionOrThrow ( sessionParams . OwnerUri ) ;
100+
101+ // Get the result from execution of the editSession operation
102+ TResult result = sessionOperation ( editSession ) ;
103+ await requestContext . SendResult ( result ) ;
104+ }
105+ catch ( Exception e )
106+ {
107+ await requestContext . SendError ( e . Message ) ;
108+ }
109+ }
97110
98- // Get the result from execution of the editSession operation
99- TResult result = sessionOperation ( editSession ) ;
100- await requestContext . SendResult ( result ) ;
111+ internal async Task HandleSessionRequestAsync < TResult > ( SessionOperationParams sessionParams ,
112+ RequestContext < TResult > requestContext , Func < EditSession , Task < TResult > > sessionOperationAsync )
113+ {
114+ try
115+ {
116+ EditSession editSession = GetActiveSessionOrThrow ( sessionParams . OwnerUri ) ;
117+
118+ // Get the result from execution of the async editSession operation
119+ TResult result = await sessionOperationAsync ( editSession ) ;
120+ await requestContext . SendResult ( result ) ;
121+ }
122+ catch ( Exception e )
123+ {
124+ await requestContext . SendError ( e . Message ) ;
125+ }
101126 }
102127
103128 internal Task HandleCreateRowRequest ( EditCreateRowParams createParams ,
104129 RequestContext < EditCreateRowResult > requestContext )
105130 {
106- return HandleSessionRequest ( createParams , requestContext , s => s . CreateRow ( ) ) ;
131+ return HandleSessionRequestAsync ( createParams , requestContext , async session =>
132+ {
133+ EditCreateRowResult result = session . CreateRow ( ) ;
134+
135+ EditRow [ ] rows = await session . GetRows ( result . NewRowId , rowCount : 1 ) ;
136+ result . Row = rows . Length > 0 ? rows [ 0 ] : null ;
137+
138+ return result ;
139+ } ) ;
107140 }
108141
109142 internal Task HandleDeleteRowRequest ( EditDeleteRowParams deleteParams ,
@@ -156,7 +189,7 @@ internal async Task HandleInitializeRequest(EditInitializeParams initParams,
156189 throw new InvalidOperationException ( SR . EditDataSessionAlreadyExists ) ;
157190 }
158191
159- context . ResultSetHandler = ( ResultSetEventParams resultSetEventParams ) => { session . UpdateColumnInformationWithMetadata ( resultSetEventParams . ResultSetSummary . ColumnInfo ) ; } ;
192+ context . ResultSetHandler = resultSetEventParams => { session . UpdateColumnInformationWithMetadata ( resultSetEventParams . ResultSetSummary . ColumnInfo ) ; } ;
160193
161194 // Initialize the session
162195 session . Initialize ( initParams , connector , queryRunner , executionSuccessHandler , executionFailureHandler ) ;
@@ -175,26 +208,31 @@ internal Task HandleRevertCellRequest(EditRevertCellParams revertParams,
175208 internal Task HandleRevertRowRequest ( EditRevertRowParams revertParams ,
176209 RequestContext < EditRevertRowResult > requestContext )
177210 {
178- return HandleSessionRequest ( revertParams , requestContext , session =>
211+ return HandleSessionRequestAsync ( revertParams , requestContext , async session =>
179212 {
180- session . RevertRow ( revertParams . RowId ) ;
181- return new EditRevertRowResult ( ) ;
213+ EditRow revertedRow = await session . RevertRow ( revertParams . RowId ) ;
214+
215+ return new EditRevertRowResult
216+ {
217+ Row = revertedRow
218+ } ;
182219 } ) ;
183220 }
184221
185- internal async Task HandleSubsetRequest ( EditSubsetParams subsetParams ,
222+ internal Task HandleSubsetRequest ( EditSubsetParams subsetParams ,
186223 RequestContext < EditSubsetResult > requestContext )
187224 {
188- EditSession session = GetActiveSessionOrThrow ( subsetParams . OwnerUri ) ;
189-
190- EditRow [ ] rows = await session . GetRows ( subsetParams . RowStartIndex , subsetParams . RowCount ) ;
191- EditSubsetResult result = new EditSubsetResult
225+ return HandleSessionRequestAsync ( subsetParams , requestContext , async session =>
192226 {
193- RowCount = rows . Length ,
194- Subset = rows
195- } ;
196-
197- await requestContext . SendResult ( result ) ;
227+ EditRow [ ] rows = await session . GetRows ( subsetParams . RowStartIndex , subsetParams . RowCount ) ;
228+
229+ return new EditSubsetResult
230+ {
231+ RowCount = rows . Length ,
232+ Subset = rows ,
233+ ColumnInfo = session . GetColumnInfo ( )
234+ } ;
235+ } ) ;
198236 }
199237
200238 internal Task HandleUpdateCellRequest ( EditUpdateCellParams updateParams ,
@@ -229,6 +267,15 @@ internal async Task HandleCommitRequest(EditCommitParams commitParams,
229267 }
230268 }
231269
270+ internal Task HandleEditScriptRequest ( EditScriptParams scriptParams , RequestContext < EditScriptResult > requestContext )
271+ {
272+ return HandleSessionRequest ( scriptParams , requestContext , session =>
273+ {
274+ string [ ] scripts = session . ScriptEdits ( ) ;
275+ return new EditScriptResult { Scripts = scripts } ;
276+ } ) ;
277+ }
278+
232279 #endregion
233280
234281 #region Private Helpers
0 commit comments