解决耗时判断错误;优化对 executeQuery 还是 executeUpdate 的判断,兼容 nGQL, openCypher 等图… · APIJSON/APIJSON-Demo@00d1452

@@ -1364,31 +1364,38 @@ public String execute(@RequestBody String request, HttpSession session) {

13641364

config.setPrepared(true);

13651365

config.setPreparedValueList(valueList);

136613661367+

String sqlPrefix = EXECUTE_STRICTLY ? sql.substring(0, 7).toUpperCase() : "";

1368+

boolean isWrite = sqlPrefix.startsWith("INSERT ") || sqlPrefix.startsWith("UPDATE ") || sqlPrefix.startsWith("DELETE ");

1369+1370+

long executeStartTime = System.currentTimeMillis();

1371+13671372

Statement statement = executor.getStatement(config, sql);

13681373

if (statement instanceof PreparedStatement) {

13691374

if (EXECUTE_STRICTLY) {

1370-

if (sql.startsWith("SELECT ")) {

1371-

((PreparedStatement) statement).executeQuery();

1372-

} else {

1375+

if (isWrite) {

13731376

((PreparedStatement) statement).executeUpdate();

1377+

} else {

1378+

((PreparedStatement) statement).executeQuery();

13741379

}

13751380

}

13761381

else {

13771382

((PreparedStatement) statement).execute();

13781383

}

13791384

} else {

13801385

if (EXECUTE_STRICTLY) {

1381-

if (sql.startsWith("SELECT ")) {

1382-

statement.executeQuery(sql);

1383-

} else {

1386+

if (isWrite) {

13841387

statement.executeUpdate(sql);

1388+

} else {

1389+

statement.executeQuery(sql);

13851390

}

13861391

}

13871392

else {

13881393

statement.execute(sql);

13891394

}

13901395

}

139113961397+

long executeDuration = System.currentTimeMillis() - executeStartTime;

1398+13921399

ResultSet rs = statement.getResultSet();

13931400

ResultSetMetaData rsmd = rs.getMetaData();

13941401

int length = rsmd.getColumnCount();

@@ -1424,14 +1431,17 @@ public String execute(@RequestBody String request, HttpSession session) {

14241431

long endTime = System.currentTimeMillis();

14251432

long duration = endTime - startTime;

142614331427-

long sqlDuration = cursorDuration + rsDuration;

1434+

long sqlDuration = executeDuration + cursorDuration + rsDuration;

14281435

long parseDuration = duration - sqlDuration;

1429143614301437

result.put("time:start|duration|end|parse|sql", startTime + "|" + duration + "|" + endTime + "|" + parseDuration + "|" + sqlDuration);

1431143814321439

return result.toJSONString();

14331440

} catch (Exception e) {

1434-

return DemoParser.newErrorResult(e).toJSONString();

1441+

JSONObject result = DemoParser.newErrorResult(e);

1442+

result.put("throw", e.getClass().getName());

1443+

result.put("trace:stack", e.getStackTrace());

1444+

return result.toJSONString();

14351445

}

1436144614371447

}