解决耗时判断错误;优化对 executeQuery 还是 executeUpdate 的判断,兼容 nGQL, openCypher 等图… · APIJSON/APIJSON-Demo@00d1452
@@ -1364,31 +1364,38 @@ public String execute(@RequestBody String request, HttpSession session) {
13641364config.setPrepared(true);
13651365config.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+13671372Statement statement = executor.getStatement(config, sql);
13681373if (statement instanceof PreparedStatement) {
13691374if (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 }
13761381else {
13771382 ((PreparedStatement) statement).execute();
13781383 }
13791384 } else {
13801385if (EXECUTE_STRICTLY) {
1381-if (sql.startsWith("SELECT ")) {
1382-statement.executeQuery(sql);
1383- } else {
1386+if (isWrite) {
13841387statement.executeUpdate(sql);
1388+ } else {
1389+statement.executeQuery(sql);
13851390 }
13861391 }
13871392else {
13881393statement.execute(sql);
13891394 }
13901395 }
139113961397+long executeDuration = System.currentTimeMillis() - executeStartTime;
1398+13921399ResultSet rs = statement.getResultSet();
13931400ResultSetMetaData rsmd = rs.getMetaData();
13941401int length = rsmd.getColumnCount();
@@ -1424,14 +1431,17 @@ public String execute(@RequestBody String request, HttpSession session) {
14241431long endTime = System.currentTimeMillis();
14251432long duration = endTime - startTime;
142614331427-long sqlDuration = cursorDuration + rsDuration;
1434+long sqlDuration = executeDuration + cursorDuration + rsDuration;
14281435long parseDuration = duration - sqlDuration;
1429143614301437result.put("time:start|duration|end|parse|sql", startTime + "|" + duration + "|" + endTime + "|" + parseDuration + "|" + sqlDuration);
1431143814321439return 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 }