99import java .util .concurrent .atomic .AtomicBoolean ;
1010import java .util .concurrent .atomic .AtomicReference ;
1111
12+ import com .google .common .base .Strings ;
1213import com .google .protobuf .Duration ;
1314import com .google .protobuf .TextFormat ;
1415import org .slf4j .Logger ;
1718import tech .ydb .common .transaction .TxMode ;
1819import tech .ydb .common .transaction .impl .YdbTransactionImpl ;
1920import tech .ydb .core .Issue ;
21+ import tech .ydb .core .OperationResult ;
2022import tech .ydb .core .Result ;
2123import tech .ydb .core .Status ;
2224import tech .ydb .core .StatusCode ;
2325import tech .ydb .core .grpc .GrpcReadStream ;
2426import tech .ydb .core .grpc .GrpcRequestSettings ;
27+ import tech .ydb .core .operation .Operation ;
2528import tech .ydb .core .operation .StatusExtractor ;
2629import tech .ydb .core .settings .BaseRequestSettings ;
2730import tech .ydb .core .utils .URITools ;
2831import tech .ydb .core .utils .UpdatableOptional ;
29- import tech .ydb .proto .OperationProtos ;
3032import tech .ydb .proto .query .YdbQuery ;
33+ import tech .ydb .proto .scripting .ScriptingProtos ;
34+ import tech .ydb .proto .table .YdbTable ;
3135import tech .ydb .query .QuerySession ;
3236import tech .ydb .query .QueryStream ;
3337import tech .ydb .query .QueryTransaction ;
@@ -186,6 +190,19 @@ private static YdbQuery.ExecMode mapExecMode(QueryExecMode mode) {
186190 }
187191 }
188192
193+ private static YdbTable .QueryStatsCollection .Mode mapStatsCollectionMode (QueryStatsMode mode ) {
194+ switch (mode ) {
195+ case NONE : return YdbTable .QueryStatsCollection .Mode .STATS_COLLECTION_NONE ;
196+ case BASIC : return YdbTable .QueryStatsCollection .Mode .STATS_COLLECTION_BASIC ;
197+ case FULL : return YdbTable .QueryStatsCollection .Mode .STATS_COLLECTION_FULL ;
198+ case PROFILE : return YdbTable .QueryStatsCollection .Mode .STATS_COLLECTION_PROFILE ;
199+
200+ case UNSPECIFIED :
201+ default :
202+ return YdbTable .QueryStatsCollection .Mode .STATS_COLLECTION_UNSPECIFIED ;
203+ }
204+ }
205+
189206 private static YdbQuery .StatsMode mapStatsMode (QueryStatsMode mode ) {
190207 switch (mode ) {
191208 case NONE : return YdbQuery .StatsMode .STATS_MODE_NONE ;
@@ -249,7 +266,20 @@ void handleTxMeta(String txID) {
249266 }
250267
251268 @ Override
252- public CompletableFuture <Result <OperationProtos .Operation >> executeScript (String query , Params params , ExecuteScriptSettings settings ) {
269+ public CompletableFuture <Result <ScriptingProtos .ExecuteYqlResult >> executeScriptYql (String query , Params params , ExecuteScriptSettings settings ) {
270+ ScriptingProtos .ExecuteYqlRequest .Builder requestBuilder = ScriptingProtos .ExecuteYqlRequest .newBuilder ()
271+ .setScript (query )
272+ .setCollectStats (mapStatsCollectionMode (settings .getStatsMode ()));
273+
274+ requestBuilder .putAllParameters (params .toPb ());
275+
276+ GrpcRequestSettings .Builder options = makeOptions (settings );
277+
278+ return rpc .executeScriptYql (requestBuilder .build (), options .build ()).thenApply (OperationResult ::new );
279+ }
280+
281+ @ Override
282+ public CompletableFuture <Operation <Status >> executeScript (String query , Params params , ExecuteScriptSettings settings ) {
253283 YdbQuery .ExecuteScriptRequest .Builder request = YdbQuery .ExecuteScriptRequest .newBuilder ()
254284 .setExecMode (mapExecMode (settings .getExecMode ()))
255285 .setStatsMode (mapStatsMode (settings .getStatsMode ()))
@@ -276,45 +306,25 @@ public CompletableFuture<Result<OperationProtos.Operation>> executeScript(String
276306 }
277307
278308 @ Override
279- public QueryStream fetchScriptResults (String query , TxMode tx , Params params , FetchScriptSettings settings ) {
280- YdbQuery .FetchScriptResultsRequest .Builder request = YdbQuery .FetchScriptResultsRequest .newBuilder ()
281- .setOperationId (settings .getOperationId ())
282- .setFetchToken (settings .getFetchToken ())
283- .setRowsLimit (10 )
284- .setResultSetIndex (0L );
309+ public CompletableFuture <Result <YdbQuery .FetchScriptResultsResponse >> fetchScriptResults (String query , Params params , FetchScriptSettings settings ) {
310+ YdbQuery .FetchScriptResultsRequest .Builder requestBuilder = YdbQuery .FetchScriptResultsRequest .newBuilder ();
311+
312+ if (!Strings .isNullOrEmpty (settings .getFetchToken ())) {
313+ requestBuilder .setFetchToken (settings .getFetchToken ());
314+ }
315+
316+ if (settings .getRowsLimit () > 0 ) {
317+ requestBuilder .setRowsLimit (settings .getRowsLimit ());
318+ }
319+
320+ requestBuilder .setOperationId (settings .getOperationId ());
321+
322+ if (settings .getSetResultSetIndex () >= 0 ) {
323+ requestBuilder .setResultSetIndex (settings .getSetResultSetIndex ());
324+ }
285325
286326 GrpcRequestSettings .Builder options = makeOptions (settings );
287- CompletableFuture <Result <YdbQuery .FetchScriptResultsResponse >> response
288- = rpc .fetchScriptResults (request .build (), options .build ());
289-
290- return null ;
291- /* response.thenApply(result -> result.getValue() )
292-
293- Result<YdbQuery.FetchScriptResultsResponse> resp = response.get();
294- YdbQuery.FetchScriptResultsResponse rs = resp.getValue();
295-
296- rs.getResultSet();
297- rs.get*/
298- /*
299- rs := response.GetResultSet()
300- columns := rs.GetColumns()
301- columnNames := make([]string, len(columns))
302- columnTypes := make([]types.Type, len(columns))
303- for i := range columns {
304- columnNames[i] = columns[i].GetName()
305- columnTypes[i] = types.TypeFromYDB(columns[i].GetType())
306- }
307- rows := make([]query.Row, len(rs.GetRows()))
308- for i, r := range rs.GetRows() {
309- rows[i] = NewRow(columns, r)
310- }
311-
312- return &options.FetchScriptResult{
313- ResultSetIndex: response.GetResultSetIndex(),
314- ResultSet: MaterializedResultSet(int(response.GetResultSetIndex()), columnNames, columnTypes, rows),
315- NextToken: response.GetNextFetchToken(),
316- }, nil
317- */
327+ return rpc .fetchScriptResults (requestBuilder .build (), options .build ());
318328 }
319329
320330 public CompletableFuture <Result <YdbQuery .DeleteSessionResponse >> delete (DeleteSessionSettings settings ) {
0 commit comments