Skip to content

Commit dd982b0

Browse files
committed
Remove unused code, add comments, java doc
1 parent ef4f8f2 commit dd982b0

File tree

8 files changed

+524
-213
lines changed

8 files changed

+524
-213
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package tech.ydb.core;
2+
3+
import tech.ydb.core.operation.Operation;
4+
5+
import javax.annotation.Nonnull;
6+
7+
import java.util.concurrent.CompletableFuture;
8+
import java.util.function.Function;
9+
10+
public class OperationResult<T> implements Result<T>{
11+
12+
Operation<Result<T>> operation;
13+
Result<T> result;
14+
15+
public OperationResult(Operation<Result<T>> resultOperation) {
16+
this.operation = resultOperation;
17+
this.result = operation.getValue();
18+
}
19+
20+
public Operation<Result<T>> getOperation() {
21+
return operation;
22+
}
23+
24+
@Nonnull
25+
@Override
26+
public Status getStatus() {
27+
return result.getStatus();
28+
}
29+
30+
@Nonnull
31+
@Override
32+
public T getValue() throws UnexpectedResultException {
33+
return result.getValue();
34+
}
35+
36+
@Nonnull
37+
@Override
38+
public <U> Result<U> map(@Nonnull Function<T, U> mapper) {
39+
return result.map(mapper);
40+
}
41+
42+
@Nonnull
43+
@Override
44+
public <U> CompletableFuture<Result<U>> mapResultFuture(@Nonnull Function<T, CompletableFuture<Result<U>>> mapper) {
45+
return result.mapResultFuture(mapper);
46+
}
47+
48+
@Nonnull
49+
@Override
50+
public CompletableFuture<Status> mapStatusFuture(@Nonnull Function<T, CompletableFuture<Status>> mapper) {
51+
return result.mapStatusFuture(mapper);
52+
}
53+
}

query/src/main/java/tech/ydb/query/QuerySession.java

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66

77
import tech.ydb.common.transaction.TxMode;
88
import tech.ydb.core.Result;
9-
import tech.ydb.proto.OperationProtos;
9+
import tech.ydb.core.Status;
10+
import tech.ydb.core.operation.Operation;
11+
import tech.ydb.proto.query.YdbQuery;
12+
import tech.ydb.proto.scripting.ScriptingProtos;
1013
import tech.ydb.query.settings.BeginTransactionSettings;
1114
import tech.ydb.query.settings.ExecuteQuerySettings;
1215
import tech.ydb.query.settings.ExecuteScriptSettings;
@@ -71,6 +74,17 @@ public interface QuerySession extends AutoCloseable {
7174
*/
7275
QueryStream createQuery(String query, TxMode tx, Params params, ExecuteQuerySettings settings);
7376

77+
78+
/**
79+
* Execute yql script
80+
* @param query text of query
81+
* @param params query parameters
82+
* @param settings additional settings of query execution
83+
* @return future with result of the script execution
84+
*/
85+
CompletableFuture<Result<ScriptingProtos.ExecuteYqlResult>> executeScriptYql(String query, Params params, ExecuteScriptSettings settings);
86+
87+
7488
/**
7589
* Create {@link QueryStream} for executing query with specified {@link TxMode}. The query can contain DML, DDL and
7690
* DCL statements. Supported mix of different statement types depends on the chosen transaction type.
@@ -80,19 +94,18 @@ public interface QuerySession extends AutoCloseable {
8094
* @param settings additional settings of query execution
8195
* @return a ready to execute instance of {@link QueryStream}
8296
*/
83-
CompletableFuture<Result<OperationProtos.Operation>> executeScript(String query, Params params, ExecuteScriptSettings settings);
97+
CompletableFuture<Operation<Status>> executeScript(String query, Params params, ExecuteScriptSettings settings);
8498

8599
/**
86-
* Create {@link QueryStream} for executing query with specified {@link TxMode}. The query can contain DML, DDL and
87-
* DCL statements. Supported mix of different statement types depends on the chosen transaction type.
100+
* Fetch result from script which has already passed to YDB
101+
* Before use wait for CompletableFuture with operation
88102
*
89103
* @param query text of query
90-
* @param tx transaction mode
91104
* @param params query parameters
92105
* @param settings additional settings of query execution
93106
* @return a ready to execute instance of {@link QueryStream}
94107
*/
95-
QueryStream fetchScriptResults(String query, TxMode tx, Params params, FetchScriptSettings settings);
108+
CompletableFuture<Result<YdbQuery.FetchScriptResultsResponse>> fetchScriptResults(String query, Params params, FetchScriptSettings settings);
96109

97110
@Override
98111
void close();
@@ -134,25 +147,23 @@ default CompletableFuture<Result<QueryTransaction>> beginTransaction(TxMode txMo
134147
}
135148

136149
/**
137-
* Create {@link QueryStream} for executing query with specified {@link TxMode}. The query can contain DML, DDL and
138-
* DCL statements. Supported mix of different statement types depends on the chosen transaction type.
150+
* Execute Yql script with different type of operation
139151
*
140152
* @param query text of query
141-
* @return a ready to execute instance of {@link QueryStream}
153+
* @return a future join on it to wait for script finished
142154
*/
143-
default CompletableFuture<Result<OperationProtos.Operation>> executeScript(String query) {
144-
return executeScript(query, Params.empty(), ExecuteScriptSettings.newBuilder().build());
155+
default CompletableFuture<Result<ScriptingProtos.ExecuteYqlResult>> executeScriptYql(String query) {
156+
return executeScriptYql(query, Params.empty(), ExecuteScriptSettings.newBuilder().build());
145157
}
146158

147159
/**
148-
* Create {@link QueryStream} for executing query with specified {@link TxMode}. The query can contain DML, DDL and
149-
* DCL statements. Supported mix of different statement types depends on the chosen transaction type.
160+
* Execute Yql script with different type of operation
161+
* Take a not join on a future is not granted that script is executed instead join guarantee that script pass to YDB
150162
*
151163
* @param query text of query
152-
* @param tx transaction mode
153-
* @return a ready to execute instance of {@link QueryStream}
164+
* @return future join on it to wait for script pass to YDB but not get result
154165
*/
155-
default QueryStream fetchScriptResults(String query, TxMode tx) {
156-
return fetchScriptResults(query, tx, Params.empty(), FetchScriptSettings.newBuilder().build());
166+
default CompletableFuture<Operation<Status>> executeScript(String query) {
167+
return executeScript(query, Params.empty(), ExecuteScriptSettings.newBuilder().build());
157168
}
158169
}

query/src/main/java/tech/ydb/query/impl/QueryServiceRpc.java

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@
55
import io.grpc.Context;
66

77
import tech.ydb.core.Result;
8+
import tech.ydb.core.Status;
89
import tech.ydb.core.grpc.GrpcReadStream;
910
import tech.ydb.core.grpc.GrpcRequestSettings;
1011
import tech.ydb.core.grpc.GrpcTransport;
12+
import tech.ydb.core.operation.Operation;
13+
import tech.ydb.core.operation.OperationBinder;
1114
import tech.ydb.core.operation.StatusExtractor;
12-
import tech.ydb.proto.OperationProtos;
1315
import tech.ydb.proto.query.YdbQuery;
1416
import tech.ydb.proto.query.v1.QueryServiceGrpc;
17+
import tech.ydb.proto.scripting.ScriptingProtos;
18+
import tech.ydb.proto.scripting.v1.ScriptingServiceGrpc;
1519

1620
/**
1721
*
@@ -106,11 +110,46 @@ public GrpcReadStream<YdbQuery.ExecuteQueryResponsePart> executeQuery(
106110
return transport.readStreamCall(QueryServiceGrpc.getExecuteQueryMethod(), settings, request);
107111
}
108112

109-
public CompletableFuture<Result<OperationProtos.Operation>> executeScript(
113+
/**
114+
* Run execute script using Yql
115+
*
116+
* @param request request for execute script
117+
* @param settings grpc settings
118+
* @return future with result of execution
119+
*/
120+
public CompletableFuture<Operation<Result<ScriptingProtos.ExecuteYqlResult>>> executeScriptYql(
121+
ScriptingProtos.ExecuteYqlRequest request, GrpcRequestSettings settings) {
122+
123+
return transport.unaryCall(ScriptingServiceGrpc.getExecuteYqlMethod(), settings, request)
124+
.thenApply(OperationBinder.bindAsync(
125+
transport, ScriptingProtos.ExecuteYqlResponse::getOperation, ScriptingProtos.ExecuteYqlResult.class)
126+
);
127+
}
128+
129+
/**
130+
* Execute script using query
131+
*
132+
* @param request request for execute script
133+
* @param settings grpc settings
134+
* @return future with result of execution
135+
*/
136+
public CompletableFuture<Operation<Status>> executeScript(
110137
YdbQuery.ExecuteScriptRequest request, GrpcRequestSettings settings) {
111-
return transport.unaryCall(QueryServiceGrpc.getExecuteScriptMethod(), settings, request);
138+
139+
return transport.unaryCall(QueryServiceGrpc.getExecuteScriptMethod(), settings, request)
140+
.thenApply(
141+
OperationBinder.bindAsync(transport,
142+
op -> op
143+
));
112144
}
113145

146+
/**
147+
* Fetch script using query
148+
*
149+
* @param request for execute script
150+
* @param settings grpc settings
151+
* @return future with result of execution
152+
*/
114153
public CompletableFuture<Result<YdbQuery.FetchScriptResultsResponse>> fetchScriptResults(
115154
YdbQuery.FetchScriptResultsRequest request, GrpcRequestSettings settings) {
116155
return transport

query/src/main/java/tech/ydb/query/impl/SessionImpl.java

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.concurrent.atomic.AtomicBoolean;
1010
import java.util.concurrent.atomic.AtomicReference;
1111

12+
import com.google.common.base.Strings;
1213
import com.google.protobuf.Duration;
1314
import com.google.protobuf.TextFormat;
1415
import org.slf4j.Logger;
@@ -17,17 +18,20 @@
1718
import tech.ydb.common.transaction.TxMode;
1819
import tech.ydb.common.transaction.impl.YdbTransactionImpl;
1920
import tech.ydb.core.Issue;
21+
import tech.ydb.core.OperationResult;
2022
import tech.ydb.core.Result;
2123
import tech.ydb.core.Status;
2224
import tech.ydb.core.StatusCode;
2325
import tech.ydb.core.grpc.GrpcReadStream;
2426
import tech.ydb.core.grpc.GrpcRequestSettings;
27+
import tech.ydb.core.operation.Operation;
2528
import tech.ydb.core.operation.StatusExtractor;
2629
import tech.ydb.core.settings.BaseRequestSettings;
2730
import tech.ydb.core.utils.URITools;
2831
import tech.ydb.core.utils.UpdatableOptional;
29-
import tech.ydb.proto.OperationProtos;
3032
import tech.ydb.proto.query.YdbQuery;
33+
import tech.ydb.proto.scripting.ScriptingProtos;
34+
import tech.ydb.proto.table.YdbTable;
3135
import tech.ydb.query.QuerySession;
3236
import tech.ydb.query.QueryStream;
3337
import 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) {

query/src/main/java/tech/ydb/query/settings/ExecuteScriptSettings.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package tech.ydb.query.settings;
22

3-
import tech.ydb.core.grpc.GrpcFlowControl;
43
import tech.ydb.core.settings.BaseRequestSettings;
54

65
import java.time.Duration;
76

87
/**
9-
8+
* Script settings to pass to execute script
109
*/
1110
public class ExecuteScriptSettings extends BaseRequestSettings {
1211
private final QueryExecMode execMode;
@@ -51,7 +50,7 @@ public static class Builder extends BaseBuilder<Builder> {
5150
private QueryExecMode execMode = QueryExecMode.EXECUTE;
5251
private QueryStatsMode statsMode = QueryStatsMode.NONE;
5352
private String resourcePool = null;
54-
private Duration ttl =null;
53+
private Duration ttl = null;
5554

5655
public Builder withExecMode(QueryExecMode mode) {
5756
this.execMode = mode;

0 commit comments

Comments
 (0)