You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by hy...@apache.org on 2020/04/28 20:38:27 UTC

[calcite] branch master updated: [CALCITE-3878] Create ArrayList with initial capacity when size is known (Xu Zhang)

This is an automated email from the ASF dual-hosted git repository.

hyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/master by this push:
     new 650ce46  [CALCITE-3878] Create ArrayList with initial capacity when size is known (Xu Zhang)
650ce46 is described below

commit 650ce466abf63309dcc0452d35a71dc497fb5f3c
Author: xu <xu...@alibaba-inc.com>
AuthorDate: Sun Apr 26 11:02:40 2020 +0800

    [CALCITE-3878] Create ArrayList with initial capacity when size is known (Xu Zhang)
    
    Close #1876
---
 core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java    | 7 ++++---
 .../main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java   | 2 +-
 core/src/main/java/org/apache/calcite/prepare/Prepare.java         | 5 +++--
 core/src/main/java/org/apache/calcite/rel/RelRoot.java             | 2 +-
 core/src/main/java/org/apache/calcite/rel/core/TableScan.java      | 5 +++--
 core/src/main/java/org/apache/calcite/rel/mutable/MutableRels.java | 2 +-
 .../java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java     | 4 ++--
 7 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java b/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
index c1fb22b..e7bca05 100644
--- a/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
+++ b/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java
@@ -161,9 +161,10 @@ public class CalciteMetaImpl extends MetaImpl {
 
   private <E> MetaResultSet createResultSet(Enumerable<E> enumerable,
       Class clazz, String... names) {
-    final List<ColumnMetaData> columns = new ArrayList<>();
-    final List<Field> fields = new ArrayList<>();
-    final List<String> fieldNames = new ArrayList<>();
+    Objects.requireNonNull(names);
+    final List<ColumnMetaData> columns = new ArrayList<>(names.length);
+    final List<Field> fields = new ArrayList<>(names.length);
+    final List<String> fieldNames = new ArrayList<>(names.length);
     for (String name : names) {
       final int index = fields.size();
       final String fieldName = AvaticaUtils.toCamelCase(name);
diff --git a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
index b121f3a..8d3f9b9 100644
--- a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
+++ b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
@@ -777,7 +777,7 @@ public class CalcitePrepareImpl implements CalcitePrepare {
       int typeOrdinal = getTypeOrdinal(type);
       switch (typeOrdinal) {
       case Types.STRUCT:
-        final List<ColumnMetaData> columns = new ArrayList<>();
+        final List<ColumnMetaData> columns = new ArrayList<>(type.getFieldList().size());
         for (RelDataTypeField field : type.getFieldList()) {
           columns.add(
               metaData(typeFactory, field.getIndex(), field.getName(),
diff --git a/core/src/main/java/org/apache/calcite/prepare/Prepare.java b/core/src/main/java/org/apache/calcite/prepare/Prepare.java
index 9128cb4..5cf3b9c 100644
--- a/core/src/main/java/org/apache/calcite/prepare/Prepare.java
+++ b/core/src/main/java/org/apache/calcite/prepare/Prepare.java
@@ -138,7 +138,8 @@ public abstract class Prepare {
     final DataContext dataContext = context.getDataContext();
     planner.setExecutor(new RexExecutorImpl(dataContext));
 
-    final List<RelOptMaterialization> materializationList = new ArrayList<>();
+    final List<RelOptMaterialization> materializationList =
+        new ArrayList<>(materializations.size());
     for (Materialization materialization : materializations) {
       List<String> qualifiedTableName = materialization.materializedTable.path();
       materializationList.add(
@@ -148,7 +149,7 @@ public abstract class Prepare {
               qualifiedTableName));
     }
 
-    final List<RelOptLattice> latticeList = new ArrayList<>();
+    final List<RelOptLattice> latticeList = new ArrayList<>(lattices.size());
     for (CalciteSchema.LatticeEntry lattice : lattices) {
       final CalciteSchema.TableEntry starTable = lattice.getStarTable();
       final JavaTypeFactory typeFactory = context.getTypeFactory();
diff --git a/core/src/main/java/org/apache/calcite/rel/RelRoot.java b/core/src/main/java/org/apache/calcite/rel/RelRoot.java
index 27e8e45..bfda457 100644
--- a/core/src/main/java/org/apache/calcite/rel/RelRoot.java
+++ b/core/src/main/java/org/apache/calcite/rel/RelRoot.java
@@ -161,7 +161,7 @@ public class RelRoot {
             || rel instanceof LogicalProject)) {
       return rel;
     }
-    final List<RexNode> projects = new ArrayList<>();
+    final List<RexNode> projects = new ArrayList<>(fields.size());
     final RexBuilder rexBuilder = rel.getCluster().getRexBuilder();
     for (Pair<Integer, String> field : fields) {
       projects.add(rexBuilder.makeInputRef(rel, field.left));
diff --git a/core/src/main/java/org/apache/calcite/rel/core/TableScan.java b/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
index f4701d1..c826f3c 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
@@ -154,8 +154,9 @@ public abstract class TableScan
         && extraFields.isEmpty()) {
       return this;
     }
-    final List<RexNode> exprList = new ArrayList<>();
-    final List<String> nameList = new ArrayList<>();
+    int fieldSize = fieldsUsed.size() + extraFields.size();
+    final List<RexNode> exprList = new ArrayList<>(fieldSize);
+    final List<String> nameList = new ArrayList<>(fieldSize);
     final RexBuilder rexBuilder = getCluster().getRexBuilder();
     final List<RelDataTypeField> fields = getRowType().getFieldList();
 
diff --git a/core/src/main/java/org/apache/calcite/rel/mutable/MutableRels.java b/core/src/main/java/org/apache/calcite/rel/mutable/MutableRels.java
index 28d25c4..75a843d 100644
--- a/core/src/main/java/org/apache/calcite/rel/mutable/MutableRels.java
+++ b/core/src/main/java/org/apache/calcite/rel/mutable/MutableRels.java
@@ -180,7 +180,7 @@ public abstract class MutableRels {
    */
   public static List<RexNode> createProjects(final MutableRel child,
       final List<RexNode> projs) {
-    List<RexNode> rexNodeList = new ArrayList<>();
+    List<RexNode> rexNodeList = new ArrayList<>(projs.size());
     for (int i = 0; i < projs.size(); i++) {
       if (projs.get(i) instanceof RexInputRef) {
         RexInputRef rexInputRef = (RexInputRef) projs.get(i);
diff --git a/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java b/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
index 63df2c4..a4fcd42 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
@@ -562,7 +562,7 @@ public class RelToSqlConverter extends SqlImplementor
             ? x.builder(e, Clause.WHERE)
             : x.builder(e);
     if (!isStar(program)) {
-      final List<SqlNode> selectList = new ArrayList<>();
+      final List<SqlNode> selectList = new ArrayList<>(program.getProjectList().size());
       for (RexLocalRef ref : program.getProjectList()) {
         SqlNode sqlExpr = builder.context.toSql(program, ref);
         addSelect(selectList, sqlExpr, e.getRowType());
@@ -610,7 +610,7 @@ public class RelToSqlConverter extends SqlImplementor
         // In this case we need to construct the following query:
         // SELECT NULL as C0, NULL as C1, NULL as C2 ... FROM DUAL WHERE FALSE
         // This would return an empty result set with the same number of columns as the field names.
-        final List<SqlNode> nullColumnNames = new ArrayList<>();
+        final List<SqlNode> nullColumnNames = new ArrayList<>(fieldNames.size());
         for (String fieldName : fieldNames) {
           SqlCall nullColumnName = as(SqlLiteral.createNull(POS), fieldName);
           nullColumnNames.add(nullColumnName);