From dbfacdc4afe3420d0a6e8f65ed546b0255d8d3bc Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Wed, 13 Sep 2023 21:40:28 +0800 Subject: [PATCH] [improvement](jdbc catalog) Optimize Loop Performance by Caching `isNebula` Method Result (#24260) --- .../org/apache/doris/jdbc/JdbcExecutor.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutor.java index 4541de0f4c..74e65c73ab 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutor.java @@ -148,11 +148,15 @@ public class JdbcExecutor { int columnCount = resultSetMetaData.getColumnCount(); resultColumnTypeNames = new ArrayList<>(columnCount); block = new ArrayList<>(columnCount); - for (int i = 0; i < columnCount; ++i) { - if (!isNebula()) { - resultColumnTypeNames.add(resultSetMetaData.getColumnClassName(i + 1)); + if (isNebula()) { + for (int i = 0; i < columnCount; ++i) { + block.add((Object[]) Array.newInstance(Object.class, batchSizeNum)); + } + } else { + for (int i = 0; i < columnCount; ++i) { + resultColumnTypeNames.add(resultSetMetaData.getColumnClassName(i + 1)); + block.add((Object[]) Array.newInstance(Object.class, batchSizeNum)); } - block.add((Object[]) Array.newInstance(Object.class, batchSizeNum)); } return columnCount; } catch (SQLException e) { @@ -367,16 +371,22 @@ public class JdbcExecutor { try { int columnCount = resultSetMetaData.getColumnCount(); curBlockRows = 0; - do { - for (int i = 0; i < columnCount; ++i) { - if (isNebula()) { + + if (isNebula()) { + do { + for (int i = 0; i < columnCount; ++i) { block.get(i)[curBlockRows] = UdfUtils.convertObject((ValueWrapper) resultSet.getObject(i + 1)); - } else { + } + curBlockRows++; + } while (curBlockRows < batchSize && resultSet.next()); + } else { + do { + for (int i = 0; i < columnCount; ++i) { block.get(i)[curBlockRows] = resultSet.getObject(i + 1); } - } - curBlockRows++; - } while (curBlockRows < batchSize && resultSet.next()); + curBlockRows++; + } while (curBlockRows < batchSize && resultSet.next()); + } } catch (SQLException e) { throw new UdfRuntimeException("get next block failed: ", e); }