Skip to content

Commit ed8a3b9

Browse files
committed
Removed QueryService impelemntation of scanQuery
1 parent 49548cc commit ed8a3b9

File tree

5 files changed

+50
-81
lines changed

5 files changed

+50
-81
lines changed

jdbc/src/main/java/tech/ydb/jdbc/context/BaseYdbExecutor.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
package tech.ydb.jdbc.context;
22

33
import java.sql.SQLException;
4+
import java.time.Duration;
45
import java.util.Collections;
56
import java.util.concurrent.atomic.AtomicReference;
67

8+
import tech.ydb.core.Result;
9+
import tech.ydb.core.UnexpectedResultException;
10+
import tech.ydb.core.grpc.GrpcReadStream;
711
import tech.ydb.jdbc.YdbConst;
812
import tech.ydb.jdbc.YdbStatement;
13+
import tech.ydb.jdbc.exception.ExceptionFactory;
914
import tech.ydb.jdbc.impl.YdbQueryResult;
1015
import tech.ydb.jdbc.query.QueryType;
1116
import tech.ydb.jdbc.query.YdbQuery;
17+
import tech.ydb.table.Session;
1218
import tech.ydb.table.SessionRetryContext;
19+
import tech.ydb.table.TableClient;
20+
import tech.ydb.table.query.Params;
21+
import tech.ydb.table.result.ResultSetReader;
22+
import tech.ydb.table.settings.ExecuteScanQuerySettings;
1323
import tech.ydb.table.settings.ExecuteSchemeQuerySettings;
1424
import tech.ydb.table.values.ListValue;
1525

@@ -19,13 +29,27 @@
1929
*/
2030
public abstract class BaseYdbExecutor implements YdbExecutor {
2131
private final SessionRetryContext retryCtx;
32+
private final Duration sessionTimeout;
33+
private final TableClient tableClient;
2234
private final AtomicReference<YdbQueryResult> currResult;
2335

2436
public BaseYdbExecutor(YdbContext ctx) {
2537
this.retryCtx = ctx.getRetryCtx();
38+
this.sessionTimeout = ctx.getOperationProperties().getSessionTimeout();
39+
this.tableClient = ctx.getTableClient();
2640
this.currResult = new AtomicReference<>();
2741
}
2842

43+
protected Session createNewTableSession(YdbValidator validator) throws SQLException {
44+
try {
45+
Result<Session> session = tableClient.createSession(sessionTimeout).join();
46+
validator.addStatusIssues(session.getStatus());
47+
return session.getValue();
48+
} catch (UnexpectedResultException ex) {
49+
throw ExceptionFactory.createException("Cannot create session with " + ex.getStatus(), ex);
50+
}
51+
}
52+
2953
protected void closeCurrentResult() throws SQLException {
3054
YdbQueryResult rs = currResult.get();
3155
if (rs != null) {
@@ -79,4 +103,29 @@ public YdbQueryResult executeBulkUpsert(YdbStatement statement, YdbQuery query,
79103

80104
return updateCurrentResult(new StaticQueryResult(query, Collections.emptyList()));
81105
}
106+
107+
@Override
108+
public YdbQueryResult executeScanQuery(YdbStatement statement, YdbQuery query, String yql, Params params)
109+
throws SQLException {
110+
ensureOpened();
111+
112+
YdbContext ctx = statement.getConnection().getCtx();
113+
YdbValidator validator = statement.getValidator();
114+
Duration scanQueryTimeout = ctx.getOperationProperties().getScanQueryTimeout();
115+
ExecuteScanQuerySettings settings = ExecuteScanQuerySettings.newBuilder()
116+
.withRequestTimeout(scanQueryTimeout)
117+
.build();
118+
119+
final Session session = createNewTableSession(validator);
120+
121+
String msg = QueryType.SCAN_QUERY + " >>\n" + yql;
122+
StreamQueryResult lazy = validator.call(msg, () -> {
123+
GrpcReadStream<ResultSetReader> stream = session.executeScanQuery(yql, params, settings);
124+
StreamQueryResult result = new StreamQueryResult(msg, statement, query, stream::cancel);
125+
return result.execute(stream, session::close);
126+
});
127+
128+
return updateCurrentResult(lazy);
129+
}
130+
82131
}

jdbc/src/main/java/tech/ydb/jdbc/context/QueryServiceExecutor.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -245,30 +245,6 @@ public YdbQueryResult executeDataQuery(
245245
}
246246
}
247247

248-
@Override
249-
public YdbQueryResult executeScanQuery(YdbStatement statement, YdbQuery query, String yql, Params params)
250-
throws SQLException {
251-
ensureOpened();
252-
253-
YdbContext ctx = statement.getConnection().getCtx();
254-
YdbValidator validator = statement.getValidator();
255-
256-
Duration scanQueryTimeout = ctx.getOperationProperties().getScanQueryTimeout();
257-
ExecuteQuerySettings settings = ExecuteQuerySettings.newBuilder()
258-
.withRequestTimeout(scanQueryTimeout)
259-
.build();
260-
261-
final QuerySession session = createNewQuerySession(validator);
262-
String msg = "STREAM_QUERY >>\n" + yql;
263-
StreamQueryResult lazy = validator.call(msg, () -> {
264-
QueryStream stream = session.createQuery(yql, TxMode.SNAPSHOT_RO, params, settings);
265-
StreamQueryResult result = new StreamQueryResult(msg, statement, query, stream::cancel);
266-
return result.execute(stream, session::close);
267-
});
268-
269-
return updateCurrentResult(lazy);
270-
}
271-
272248
@Override
273249
public YdbQueryResult executeSchemeQuery(YdbStatement statement, YdbQuery query) throws SQLException {
274250
ensureOpened();

jdbc/src/main/java/tech/ydb/jdbc/context/TableServiceExecutor.java

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,20 @@
77
import java.util.ArrayList;
88
import java.util.List;
99

10-
import tech.ydb.core.Result;
11-
import tech.ydb.core.UnexpectedResultException;
12-
import tech.ydb.core.grpc.GrpcReadStream;
1310
import tech.ydb.jdbc.YdbConst;
1411
import tech.ydb.jdbc.YdbResultSet;
1512
import tech.ydb.jdbc.YdbStatement;
16-
import tech.ydb.jdbc.exception.ExceptionFactory;
1713
import tech.ydb.jdbc.impl.YdbQueryResult;
1814
import tech.ydb.jdbc.impl.YdbStaticResultSet;
1915
import tech.ydb.jdbc.query.QueryType;
2016
import tech.ydb.jdbc.query.YdbQuery;
2117
import tech.ydb.table.Session;
22-
import tech.ydb.table.TableClient;
2318
import tech.ydb.table.query.DataQueryResult;
2419
import tech.ydb.table.query.ExplainDataQueryResult;
2520
import tech.ydb.table.query.Params;
2621
import tech.ydb.table.result.ResultSetReader;
2722
import tech.ydb.table.settings.CommitTxSettings;
2823
import tech.ydb.table.settings.ExecuteDataQuerySettings;
29-
import tech.ydb.table.settings.ExecuteScanQuerySettings;
3024
import tech.ydb.table.settings.ExplainDataQuerySettings;
3125
import tech.ydb.table.settings.KeepAliveSessionSettings;
3226
import tech.ydb.table.settings.RollbackTxSettings;
@@ -37,15 +31,11 @@
3731
* @author Aleksandr Gorshenin
3832
*/
3933
public class TableServiceExecutor extends BaseYdbExecutor {
40-
private final Duration sessionTimeout;
41-
private final TableClient tableClient;
4234
private final boolean failOnTruncatedResult;
4335
private volatile TxState tx;
4436

4537
public TableServiceExecutor(YdbContext ctx, int transactionLevel, boolean autoCommit) throws SQLException {
4638
super(ctx);
47-
this.sessionTimeout = ctx.getOperationProperties().getSessionTimeout();
48-
this.tableClient = ctx.getTableClient();
4939
this.tx = createTx(transactionLevel, autoCommit);
5040
this.failOnTruncatedResult = ctx.getOperationProperties().isFailOnTruncatedResult();
5141
}
@@ -63,16 +53,6 @@ private void updateState(TxState newTx) {
6353
this.tx = newTx;
6454
}
6555

66-
protected Session createNewTableSession(YdbValidator validator) throws SQLException {
67-
try {
68-
Result<Session> session = tableClient.createSession(sessionTimeout).join();
69-
validator.addStatusIssues(session.getStatus());
70-
return session.getValue();
71-
} catch (UnexpectedResultException ex) {
72-
throw ExceptionFactory.createException("Cannot create session with " + ex.getStatus(), ex);
73-
}
74-
}
75-
7656
@Override
7757
public void setTransactionLevel(int level) throws SQLException {
7858
ensureOpened();
@@ -233,30 +213,6 @@ public YdbQueryResult executeDataQuery(YdbStatement statement, YdbQuery query, S
233213
}
234214
}
235215

236-
@Override
237-
public YdbQueryResult executeScanQuery(YdbStatement statement, YdbQuery query, String yql, Params params)
238-
throws SQLException {
239-
ensureOpened();
240-
241-
YdbContext ctx = statement.getConnection().getCtx();
242-
YdbValidator validator = statement.getValidator();
243-
Duration scanQueryTimeout = ctx.getOperationProperties().getScanQueryTimeout();
244-
ExecuteScanQuerySettings settings = ExecuteScanQuerySettings.newBuilder()
245-
.withRequestTimeout(scanQueryTimeout)
246-
.build();
247-
248-
final Session session = createNewTableSession(validator);
249-
250-
String msg = QueryType.SCAN_QUERY + " >>\n" + yql;
251-
StreamQueryResult lazy = validator.call(msg, () -> {
252-
GrpcReadStream<ResultSetReader> stream = session.executeScanQuery(yql, params, settings);
253-
StreamQueryResult result = new StreamQueryResult(msg, statement, query, stream::cancel);
254-
return result.execute(stream, session::close);
255-
});
256-
257-
return updateCurrentResult(lazy);
258-
}
259-
260216
@Override
261217
public boolean isValid(YdbValidator validator, int timeout) throws SQLException {
262218
ensureOpened();

jdbc/src/test/java/tech/ydb/jdbc/impl/YdbQueryConnectionImplTest.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -828,18 +828,6 @@ public void testWarningsInQuery() throws SQLException {
828828
warnings.getMessage());
829829
Assertions.assertNull(warnings.getNextWarning());
830830
}
831-
832-
try (ResultSet rs = statement.executeQuery("SCAN " + query)) {
833-
Assertions.assertFalse(rs.next());
834-
835-
SQLWarning warnings = statement.getWarnings();
836-
Assertions.assertNotNull(warnings);
837-
838-
Assertions.assertEquals("#1060 Execution (S_WARNING)\n "
839-
+ "2:1 - 2:1: #2503 Given predicate is not suitable for used index: idx_value (S_WARNING)",
840-
warnings.getMessage());
841-
Assertions.assertNull(warnings.getNextWarning());
842-
}
843831
} finally {
844832
statement.execute(dropTempTable);
845833
}

jdbc/src/test/java/tech/ydb/jdbc/impl/YdbQueryPreparedStatementImplTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ public void executeScanQueryAsUpdate() throws SQLException {
350350
statement.setInt(1, 1);
351351
statement.setString(2, "value-1");
352352

353-
ExceptionAssert.ydbException("Operation 'Upsert' can't be performed in read only transaction",
353+
ExceptionAssert.ydbException("Scan query should have a single result set",
354354
statement::executeQuery);
355355
}
356356
}

0 commit comments

Comments
 (0)