Skip to content

Commit 0bdb8b2

Browse files
committed
Update implementation of YdbPreparedQuery
1 parent 8b81fe8 commit 0bdb8b2

18 files changed

+236
-203
lines changed

jdbc/src/main/java/tech/ydb/jdbc/YdbConnection.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import tech.ydb.jdbc.context.YdbContext;
1010
import tech.ydb.jdbc.context.YdbValidator;
1111
import tech.ydb.jdbc.query.ExplainedQuery;
12-
import tech.ydb.jdbc.query.YdbQuery;
1312
import tech.ydb.table.query.Params;
1413
import tech.ydb.table.result.ResultSetReader;
1514

@@ -36,47 +35,47 @@ public interface YdbConnection extends Connection {
3635
/**
3736
* Explicitly execute query as a schema query
3837
*
39-
* @param query query (DDL) to execute
38+
* @param yql query (DDL) to execute
4039
* @param validator handler for logging and warnings
4140
* @throws SQLException if query cannot be executed
4241
*/
43-
void executeSchemeQuery(YdbQuery query, YdbValidator validator) throws SQLException;
42+
void executeSchemeQuery(String yql, YdbValidator validator) throws SQLException;
4443

4544
/**
4645
* Explicitly execute query as a data query
4746
*
48-
* @param query query to execute
47+
* @param yql query to execute
4948
* @param params parameters for query
5049
* @param timeout timeout of operation
5150
* @param keepInCache flag to store query in server-side cache
5251
* @param validator handler for logging and warnings
5352
* @return list of result set
5453
* @throws SQLException if query cannot be executed
5554
*/
56-
List<ResultSetReader> executeDataQuery(YdbQuery query, YdbValidator validator,
55+
List<ResultSetReader> executeDataQuery(String yql, YdbValidator validator,
5756
int timeout, boolean keepInCache, Params params) throws SQLException;
5857

5958
/**
6059
* Explicitly execute query as a scan query
6160
*
62-
* @param query query to execute
61+
* @param yql query to execute
6362
* @param params parameters for query
6463
* @param validator handler for logging and warnings
6564
* @return single result set with rows
6665
* @throws SQLException if query cannot be executed
6766
*/
68-
ResultSetReader executeScanQuery(YdbQuery query, YdbValidator validator, Params params) throws SQLException;
67+
ResultSetReader executeScanQuery(String yql, YdbValidator validator, Params params) throws SQLException;
6968

7069
/**
7170
* Explicitly explain this query
7271
*
73-
* @param query query to explain
72+
* @param yql query to explain
7473
* @param validator handler for logging and warnings
7574
* @return list of result set of two string columns: {@link YdbConst#EXPLAIN_COLUMN_AST}
7675
* and {@link YdbConst#EXPLAIN_COLUMN_PLAN}
7776
* @throws SQLException if query cannot be explained
7877
*/
79-
ExplainedQuery executeExplainQuery(YdbQuery query, YdbValidator validator) throws SQLException;
78+
ExplainedQuery executeExplainQuery(String yql, YdbValidator validator) throws SQLException;
8079

8180
@Override
8281
YdbDatabaseMetaData getMetaData() throws SQLException;

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import tech.ydb.core.UnexpectedResultException;
1010
import tech.ydb.jdbc.exception.ExceptionFactory;
1111
import tech.ydb.jdbc.query.QueryType;
12-
import tech.ydb.jdbc.query.YdbQuery;
1312
import tech.ydb.table.Session;
1413
import tech.ydb.table.TableClient;
1514
import tech.ydb.table.query.Params;
@@ -42,22 +41,19 @@ protected Session createNewTableSession(YdbValidator validator) throws SQLExcept
4241
}
4342

4443
@Override
45-
public void executeSchemeQuery(YdbContext ctx, YdbValidator validator, YdbQuery query) throws SQLException {
44+
public void executeSchemeQuery(YdbContext ctx, YdbValidator validator, String yql) throws SQLException {
4645
// Scheme query does not affect transactions or result sets
4746
ExecuteSchemeQuerySettings settings = ctx.withDefaultTimeout(new ExecuteSchemeQuerySettings());
48-
final String yql = query.withParams(null);
49-
5047
try (Session session = createNewTableSession(validator)) {
5148
validator.execute(QueryType.SCHEME_QUERY + " >>\n" + yql, () -> session.executeSchemeQuery(yql, settings));
5249
}
5350
}
5451

5552
@Override
56-
public ResultSetReader executeScanQuery(YdbContext ctx, YdbValidator validator, YdbQuery query, Params params)
53+
public ResultSetReader executeScanQuery(YdbContext ctx, YdbValidator validator, String yql, Params params)
5754
throws SQLException {
5855
ensureOpened();
5956

60-
String yql = query.withParams(params);
6157
Collection<ResultSetReader> resultSets = new LinkedBlockingQueue<>();
6258
Duration scanQueryTimeout = ctx.getOperationProperties().getScanQueryTimeout();
6359
ExecuteScanQuerySettings settings = ExecuteScanQuerySettings.newBuilder()

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import tech.ydb.jdbc.exception.ExceptionFactory;
1818
import tech.ydb.jdbc.query.ExplainedQuery;
1919
import tech.ydb.jdbc.query.QueryType;
20-
import tech.ydb.jdbc.query.YdbQuery;
2120
import tech.ydb.query.QueryClient;
2221
import tech.ydb.query.QuerySession;
2322
import tech.ydb.query.QueryStream;
@@ -197,11 +196,10 @@ public void rollback(YdbContext ctx, YdbValidator validator) throws SQLException
197196

198197
@Override
199198
public List<ResultSetReader> executeDataQuery(
200-
YdbContext ctx, YdbValidator validator, YdbQuery query, long timeout, boolean keepInCache, Params params
199+
YdbContext ctx, YdbValidator validator, String yql, long timeout, boolean keepInCache, Params params
201200
) throws SQLException {
202201
ensureOpened();
203202

204-
final String yql = query.withParams(params);
205203
ExecuteQuerySettings.Builder builder = ExecuteQuerySettings.newBuilder();
206204
if (timeout > 0) {
207205
builder = builder.withRequestTimeout(timeout, TimeUnit.SECONDS);
@@ -229,13 +227,11 @@ public List<ResultSetReader> executeDataQuery(
229227
}
230228

231229
@Override
232-
public void executeSchemeQuery(YdbContext ctx, YdbValidator validator, YdbQuery query) throws SQLException {
230+
public void executeSchemeQuery(YdbContext ctx, YdbValidator validator, String yql) throws SQLException {
233231
ensureOpened();
234232

235233
// Scheme query does not affect transactions or result sets
236234
ExecuteQuerySettings settings = ctx.withRequestTimeout(ExecuteQuerySettings.newBuilder()).build();
237-
final String yql = query.withParams(null);
238-
239235
try (QuerySession session = createNewQuerySession(validator)) {
240236
validator.call(QueryType.SCHEME_QUERY + " >>\n" + yql, () -> session
241237
.createQuery(yql, TxMode.NONE, Params.empty(), settings)
@@ -245,15 +241,14 @@ public void executeSchemeQuery(YdbContext ctx, YdbValidator validator, YdbQuery
245241
}
246242

247243
@Override
248-
public ExplainedQuery executeExplainQuery(YdbContext ctx, YdbValidator validator, YdbQuery query)
244+
public ExplainedQuery executeExplainQuery(YdbContext ctx, YdbValidator validator, String yql)
249245
throws SQLException {
250246
ensureOpened();
251247

252248
// Scheme query does not affect transactions or result sets
253249
ExecuteQuerySettings settings = ctx.withRequestTimeout(ExecuteQuerySettings.newBuilder())
254250
.withExecMode(QueryExecMode.EXPLAIN)
255251
.build();
256-
final String yql = query.withParams(null);
257252

258253
try (QuerySession session = createNewQuerySession(validator)) {
259254
QueryInfo res = validator.call(QueryType.EXPLAIN_QUERY + " >>\n" + yql, () -> session

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import tech.ydb.jdbc.YdbConst;
1111
import tech.ydb.jdbc.query.ExplainedQuery;
1212
import tech.ydb.jdbc.query.QueryType;
13-
import tech.ydb.jdbc.query.YdbQuery;
1413
import tech.ydb.table.Session;
1514
import tech.ydb.table.query.DataQueryResult;
1615
import tech.ydb.table.query.ExplainDataQueryResult;
@@ -155,11 +154,10 @@ private ExecuteDataQuerySettings dataQuerySettings(long timeout, boolean keepInC
155154
}
156155

157156
@Override
158-
public ExplainedQuery executeExplainQuery(YdbContext ctx, YdbValidator validator, YdbQuery query)
157+
public ExplainedQuery executeExplainQuery(YdbContext ctx, YdbValidator validator, String yql)
159158
throws SQLException {
160159
ensureOpened();
161160

162-
String yql = query.withParams(null);
163161
ExplainDataQuerySettings settings = ctx.withDefaultTimeout(new ExplainDataQuerySettings());
164162
try (Session session = createNewTableSession(validator)) {
165163
String msg = QueryType.EXPLAIN_QUERY + " >>\n" + yql;
@@ -170,11 +168,10 @@ public ExplainedQuery executeExplainQuery(YdbContext ctx, YdbValidator validator
170168

171169
@Override
172170
public List<ResultSetReader> executeDataQuery(
173-
YdbContext ctx, YdbValidator validator, YdbQuery query, long timeout, boolean keepInCache, Params params
171+
YdbContext ctx, YdbValidator validator, String yql, long timeout, boolean keepInCache, Params params
174172
) throws SQLException {
175173
ensureOpened();
176174

177-
final String yql = query.withParams(params);
178175
final Session session = tx.getSession(validator);
179176
try {
180177
DataQueryResult result = validator.call(

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
import tech.ydb.jdbc.YdbConst;
2020
import tech.ydb.jdbc.YdbPrepareMode;
2121
import tech.ydb.jdbc.exception.ExceptionFactory;
22-
import tech.ydb.jdbc.query.YdbPreparedParams;
22+
import tech.ydb.jdbc.query.YdbPreparedQuery;
2323
import tech.ydb.jdbc.query.YdbQuery;
24-
import tech.ydb.jdbc.query.params.BatchedParams;
25-
import tech.ydb.jdbc.query.params.InMemoryParams;
26-
import tech.ydb.jdbc.query.params.PreparedParams;
24+
import tech.ydb.jdbc.query.params.BatchedQuery;
25+
import tech.ydb.jdbc.query.params.InMemoryQuery;
26+
import tech.ydb.jdbc.query.params.PreparedQuery;
2727
import tech.ydb.jdbc.settings.YdbClientProperties;
2828
import tech.ydb.jdbc.settings.YdbConfig;
2929
import tech.ydb.jdbc.settings.YdbConnectionProperties;
@@ -270,37 +270,37 @@ public YdbQuery findOrParseYdbQuery(String sql) throws SQLException {
270270
return cached;
271271
}
272272

273-
public YdbPreparedParams findOrPrepareParams(YdbQuery query, YdbPrepareMode mode) throws SQLException {
273+
public YdbPreparedQuery findOrPrepareParams(YdbQuery query, YdbPrepareMode mode) throws SQLException {
274274
if (!query.isPlainYQL()
275275
|| mode == YdbPrepareMode.IN_MEMORY
276276
|| !queryOptions.isPrepareDataQueries()) {
277-
return new InMemoryParams(query.getStatements());
277+
return new InMemoryQuery(query, queryOptions.isDeclareJdbcParameters());
278278
}
279279

280-
String yql = query.withParams(null);
280+
String yql = query.getPreparedYql();
281281
PrepareDataQuerySettings settings = withDefaultTimeout(new PrepareDataQuerySettings());
282282
try {
283-
Map<String, Type> types = queryParamsCache.getIfPresent(query.getOriginSQL());
283+
Map<String, Type> types = queryParamsCache.getIfPresent(query.getOriginQuery());
284284
if (types == null) {
285285
types = retryCtx.supplyResult(session -> session.prepareDataQuery(yql, settings))
286286
.join()
287287
.getValue()
288288
.types();
289-
queryParamsCache.put(query.getOriginSQL(), types);
289+
queryParamsCache.put(query.getOriginQuery(), types);
290290
}
291291

292292
boolean requireBatch = mode == YdbPrepareMode.DATA_QUERY_BATCH;
293293
if (requireBatch || (mode == YdbPrepareMode.AUTO && queryOptions.isDetectBatchQueries())) {
294-
BatchedParams params = BatchedParams.tryCreateBatched(types);
294+
BatchedQuery params = BatchedQuery.tryCreateBatched(query, types);
295295
if (params != null) {
296296
return params;
297297
}
298298

299299
if (requireBatch) {
300-
throw new SQLDataException(YdbConst.STATEMENT_IS_NOT_A_BATCH + query.getOriginSQL());
300+
throw new SQLDataException(YdbConst.STATEMENT_IS_NOT_A_BATCH + query.getOriginQuery());
301301
}
302302
}
303-
return new PreparedParams(types);
303+
return new PreparedQuery(query, types);
304304
} catch (UnexpectedResultException ex) {
305305
throw ExceptionFactory.createException("Cannot prepare data query: " + ex.getMessage(), ex);
306306
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import tech.ydb.jdbc.YdbConst;
77
import tech.ydb.jdbc.query.ExplainedQuery;
8-
import tech.ydb.jdbc.query.YdbQuery;
98
import tech.ydb.table.query.Params;
109
import tech.ydb.table.result.ResultSetReader;
1110

@@ -33,15 +32,15 @@ default void ensureOpened() throws SQLException {
3332
void setReadOnly(boolean readOnly) throws SQLException;
3433
void setAutoCommit(boolean autoCommit) throws SQLException;
3534

36-
void executeSchemeQuery(YdbContext ctx, YdbValidator validator, YdbQuery query) throws SQLException;
35+
void executeSchemeQuery(YdbContext ctx, YdbValidator validator, String yql) throws SQLException;
3736

38-
List<ResultSetReader> executeDataQuery(YdbContext ctx, YdbValidator validator, YdbQuery query,
37+
List<ResultSetReader> executeDataQuery(YdbContext ctx, YdbValidator validator, String yql,
3938
long timeout, boolean poolable, Params params) throws SQLException;
4039

41-
ResultSetReader executeScanQuery(YdbContext ctx, YdbValidator validator, YdbQuery query, Params params)
40+
ResultSetReader executeScanQuery(YdbContext ctx, YdbValidator validator, String yql, Params params)
4241
throws SQLException;
4342

44-
ExplainedQuery executeExplainQuery(YdbContext ctx, YdbValidator validator, YdbQuery query)
43+
ExplainedQuery executeExplainQuery(YdbContext ctx, YdbValidator validator, String yql)
4544
throws SQLException;
4645

4746
void commit(YdbContext ctx, YdbValidator validator) throws SQLException;

jdbc/src/main/java/tech/ydb/jdbc/impl/BaseYdbStatement.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ protected boolean updateState(List<YdbResult> results) {
166166
}
167167

168168
protected List<YdbResult> executeSchemeQuery(YdbQuery query) throws SQLException {
169-
connection.executeSchemeQuery(query, validator);
169+
connection.executeSchemeQuery(query.getPreparedYql(), validator);
170170

171171
int expressionsCount = query.getStatements().isEmpty() ? 1 : query.getStatements().size();
172172
List<YdbResult> results = new ArrayList<>();
@@ -177,7 +177,7 @@ protected List<YdbResult> executeSchemeQuery(YdbQuery query) throws SQLException
177177
}
178178

179179
protected List<YdbResult> executeExplainQuery(YdbQuery query) throws SQLException {
180-
ExplainedQuery explainedQuery = connection.executeExplainQuery(query, validator);
180+
ExplainedQuery explainedQuery = connection.executeExplainQuery(query.getPreparedYql(), validator);
181181

182182
ResultSetReader result = EXPLAIN_RS_FACTORY.createResultSet()
183183
.newRow()
@@ -189,14 +189,14 @@ protected List<YdbResult> executeExplainQuery(YdbQuery query) throws SQLExceptio
189189
return Collections.singletonList(new YdbResult(new YdbResultSetImpl(this, result)));
190190
}
191191

192-
protected List<YdbResult> executeScanQuery(YdbQuery query, Params params) throws SQLException {
193-
ResultSetReader result = connection.executeScanQuery(query, validator, params);
192+
protected List<YdbResult> executeScanQuery(String yql, Params params) throws SQLException {
193+
ResultSetReader result = connection.executeScanQuery(yql, validator, params);
194194
return Collections.singletonList(new YdbResult(new YdbResultSetImpl(this, result)));
195195
}
196196

197-
protected List<YdbResult> executeDataQuery(YdbQuery query, Params params) throws SQLException {
197+
protected List<YdbResult> executeDataQuery(YdbQuery query, String yql, Params params) throws SQLException {
198198
List<ResultSetReader> resultSets = connection
199-
.executeDataQuery(query, validator, getQueryTimeout(), isPoolable(), params);
199+
.executeDataQuery(yql, validator, getQueryTimeout(), isPoolable(), params);
200200

201201
List<YdbResult> results = new ArrayList<>();
202202
int idx = 0;

jdbc/src/main/java/tech/ydb/jdbc/impl/YdbConnectionImpl.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import tech.ydb.jdbc.context.YdbValidator;
3434
import tech.ydb.jdbc.query.ExplainedQuery;
3535
import tech.ydb.jdbc.query.QueryType;
36-
import tech.ydb.jdbc.query.YdbPreparedParams;
36+
import tech.ydb.jdbc.query.YdbPreparedQuery;
3737
import tech.ydb.jdbc.query.YdbQuery;
3838
import tech.ydb.jdbc.settings.FakeTxMode;
3939
import tech.ydb.jdbc.settings.YdbOperationProperties;
@@ -76,7 +76,7 @@ public YdbPreparedStatement prepareStatement(String sql) throws SQLException {
7676
@Override
7777
public String nativeSQL(String sql) {
7878
try {
79-
return ctx.parseYdbQuery(sql).withParams(null);
79+
return ctx.parseYdbQuery(sql).getPreparedYql();
8080
} catch (SQLException ex) {
8181
return ex.getMessage();
8282
}
@@ -185,7 +185,7 @@ public void clearWarnings() throws SQLException {
185185
}
186186

187187
@Override
188-
public void executeSchemeQuery(YdbQuery query, YdbValidator validator) throws SQLException {
188+
public void executeSchemeQuery(String yql, YdbValidator validator) throws SQLException {
189189
executor.ensureOpened();
190190

191191
if (executor.isInsideTransaction()) {
@@ -202,17 +202,17 @@ public void executeSchemeQuery(YdbQuery query, YdbValidator validator) throws SQ
202202
}
203203
}
204204

205-
executor.executeSchemeQuery(ctx, validator, query);
205+
executor.executeSchemeQuery(ctx, validator, yql);
206206
}
207207

208208
@Override
209-
public List<ResultSetReader> executeDataQuery(YdbQuery query, YdbValidator validator,
209+
public List<ResultSetReader> executeDataQuery(String yql, YdbValidator validator,
210210
int timeout, boolean poolable, Params params) throws SQLException {
211-
return executor.executeDataQuery(ctx, validator, query, timeout, poolable, params);
211+
return executor.executeDataQuery(ctx, validator, yql, timeout, poolable, params);
212212
}
213213

214214
@Override
215-
public ResultSetReader executeScanQuery(YdbQuery query, YdbValidator validator, Params params) throws SQLException {
215+
public ResultSetReader executeScanQuery(String yql, YdbValidator validator, Params params) throws SQLException {
216216
executor.ensureOpened();
217217

218218
if (executor.isInsideTransaction()) {
@@ -228,12 +228,12 @@ public ResultSetReader executeScanQuery(YdbQuery query, YdbValidator validator,
228228
}
229229
}
230230

231-
return executor.executeScanQuery(ctx, validator, query, params);
231+
return executor.executeScanQuery(ctx, validator, yql, params);
232232
}
233233

234234
@Override
235-
public ExplainedQuery executeExplainQuery(YdbQuery query, YdbValidator validator) throws SQLException {
236-
return executor.executeExplainQuery(ctx, validator, query);
235+
public ExplainedQuery executeExplainQuery(String yql, YdbValidator validator) throws SQLException {
236+
return executor.executeExplainQuery(ctx, validator, yql);
237237
}
238238

239239
@Override
@@ -311,7 +311,7 @@ private YdbPreparedStatement prepareStatement(String sql, int resultSetType, Ydb
311311
throw new SQLException(YdbConst.UNSUPPORTED_QUERY_TYPE_IN_PS + query.getType());
312312
}
313313

314-
YdbPreparedParams params = ctx.findOrPrepareParams(query, mode);
314+
YdbPreparedQuery params = ctx.findOrPrepareParams(query, mode);
315315
return new YdbPreparedStatementImpl(this, query, params, resultSetType);
316316
}
317317

0 commit comments

Comments
 (0)