Young-Leo commented on code in PR #17027:
URL: https://github.com/apache/iotdb/pull/17027#discussion_r2759130496
##########
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java:
##########
@@ -1542,80 +1554,47 @@ public TSPrepareResp prepareStatement(TSPrepareReq req)
{
@Override
public TSExecuteStatementResp executePreparedStatement(TSExecutePreparedReq
req) {
- boolean finished = false;
- long queryId = Long.MIN_VALUE;
IClientSession clientSession =
SESSION_MANAGER.getCurrSessionAndUpdateIdleTime();
- if (!SESSION_MANAGER.checkLogin(clientSession)) {
- return RpcUtils.getTSExecuteStatementResp(getNotLoggedInStatus());
- }
-
- long startTime = System.nanoTime();
- Throwable t = null;
try {
String statementName = req.getStatementName();
+ // Deserialize parameters and build Execute statement
List<DeserializedParam> rawParams =
-
PreparedParameterSerializer.deserialize(ByteBuffer.wrap(req.getParameters()));
+
PreparedParameterSerde.deserialize(ByteBuffer.wrap(req.getParameters()));
List<Literal> parameters = new ArrayList<>(rawParams.size());
+ List<String> paramStrings = new ArrayList<>(rawParams.size());
for (DeserializedParam param : rawParams) {
- parameters.add(convertToLiteral(param));
+ Pair<Literal, String> literalAndString =
convertToLiteralWithString(param);
+ parameters.add(literalAndString.left);
+ paramStrings.add(literalAndString.right);
}
-
Execute executeStatement = new Execute(new Identifier(statementName),
parameters);
- queryId = SESSION_MANAGER.requestQueryId(clientSession,
req.getStatementId());
+ String fullStatement =
+ paramStrings.isEmpty()
+ ? "EXECUTE " + statementName
+ : "EXECUTE " + statementName + " USING " + String.join(", ",
paramStrings);
- long timeout = req.isSetTimeout() ? req.getTimeout() :
config.getQueryTimeoutThreshold();
- ExecutionResult result =
- COORDINATOR.executeForTableModel(
- executeStatement,
- relationSqlParser,
- clientSession,
- queryId,
- SESSION_MANAGER.getSessionInfo(clientSession),
- "EXECUTE " + statementName,
- metadata,
- timeout,
- true);
-
- if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
- && result.status.code !=
TSStatusCode.REDIRECTION_RECOMMEND.getStatusCode()) {
- finished = true;
- return RpcUtils.getTSExecuteStatementResp(result.status);
+ // Build a compatible TSExecuteStatementReq
+ TSExecuteStatementReq executeReq = new TSExecuteStatementReq();
+ executeReq.setSessionId(clientSession.getId());
+ executeReq.setStatement(fullStatement);
+ executeReq.setStatementId(req.getStatementId());
+ if (req.isSetFetchSize()) {
+ executeReq.setFetchSize(req.getFetchSize());
}
-
- IQueryExecution queryExecution = COORDINATOR.getQueryExecution(queryId);
-
- try (SetThreadName threadName = new
SetThreadName(result.queryId.getId())) {
- TSExecuteStatementResp resp;
- if (queryExecution != null && queryExecution.isQuery()) {
- resp = createResponse(queryExecution.getDatasetHeader(), queryId);
- resp.setStatus(result.status);
- int fetchSize =
- req.isSetFetchSize() ? req.getFetchSize() :
config.getThriftMaxFrameSize();
- finished = setResultForPrepared.apply(resp, queryExecution,
fetchSize);
- resp.setMoreData(!finished);
- } else {
- finished = true;
- resp = RpcUtils.getTSExecuteStatementResp(result.status);
- }
- return resp;
+ if (req.isSetTimeout()) {
+ executeReq.setTimeout(req.getTimeout());
}
+
+ return executeStatementInternal(executeReq, setResultForPrepared, () ->
executeStatement);
Review Comment:
Updated.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]