diff --git a/query_optimizer/ExecutionGenerator.cpp b/query_optimizer/ExecutionGenerator.cpp
index 8dd93d0..f8f7c9d 100644
--- a/query_optimizer/ExecutionGenerator.cpp
+++ b/query_optimizer/ExecutionGenerator.cpp
@@ -687,7 +687,7 @@
 
 void ExecutionGenerator::convertSelection(
     const P::SelectionPtr &physical_selection) {
-  const P::PhysicalPtr input = physical_selection->input();
+  const P::PhysicalPtr &input = physical_selection->input();
   const CatalogRelationInfo *input_relation_info =
       findRelationInfoOutputByPhysical(input);
   DCHECK(input_relation_info != nullptr);
@@ -829,7 +829,7 @@
 }
 
 void ExecutionGenerator::convertFilterJoin(const P::FilterJoinPtr &physical_plan) {
-  P::PhysicalPtr probe_physical = physical_plan->left();
+  const P::PhysicalPtr &probe_physical = physical_plan->left();
   P::PhysicalPtr build_physical = physical_plan->right();
 
   // Let B denote the build side child. If B is also a FilterJoin, then the
@@ -891,13 +891,13 @@
   // HashJoin is converted to three operators:
   //     BuildHash, HashJoin, DestroyHash. The second is the primary operator.
 
-  P::PhysicalPtr probe_physical = physical_plan->left();
-  P::PhysicalPtr build_physical = physical_plan->right();
+  const P::PhysicalPtr &probe_physical = physical_plan->left();
+  const P::PhysicalPtr &build_physical = physical_plan->right();
 
   std::vector<attribute_id> probe_attribute_ids;
   std::vector<attribute_id> build_attribute_ids;
 
-  std::size_t build_cardinality =
+  const std::size_t build_cardinality =
       cost_model_for_hash_join_->estimateCardinality(build_physical);
 
   bool any_probe_attributes_nullable = false;
@@ -1487,7 +1487,6 @@
       *catalog_database_->getRelationById(
           input_relation_info->relation->getID());
 
-
   // Construct the tuple proto to be inserted.
   std::vector<QueryContext::tuple_id> tuple_indexes;
 
diff --git a/query_optimizer/expressions/AggregateFunction.hpp b/query_optimizer/expressions/AggregateFunction.hpp
index 108c661..22c7adb 100644
--- a/query_optimizer/expressions/AggregateFunction.hpp
+++ b/query_optimizer/expressions/AggregateFunction.hpp
@@ -164,7 +164,7 @@
   }
 
   const ::quickstep::AggregateFunction &aggregate_;
-  std::vector<ScalarPtr> arguments_;
+  const std::vector<ScalarPtr> arguments_;
   const bool is_vector_aggregate_;
   const bool is_distinct_;
 
diff --git a/query_optimizer/expressions/Alias.cpp b/query_optimizer/expressions/Alias.cpp
index 30dade7..f2b2795 100644
--- a/query_optimizer/expressions/Alias.cpp
+++ b/query_optimizer/expressions/Alias.cpp
@@ -38,7 +38,7 @@
 namespace optimizer {
 namespace expressions {
 
-Alias::Alias(attribute_id id,
+Alias::Alias(const attribute_id id,
              const ExpressionPtr &expression,
              const std::string &attribute_name,
              const std::string &attribute_alias,
diff --git a/query_optimizer/expressions/Alias.hpp b/query_optimizer/expressions/Alias.hpp
index e07f9fe..e0ee959 100644
--- a/query_optimizer/expressions/Alias.hpp
+++ b/query_optimizer/expressions/Alias.hpp
@@ -97,7 +97,7 @@
    * @param relation_name The name of the source relation.
    * @return An immutable Alias.
    */
-  static AliasPtr Create(ExprId id,
+  static AliasPtr Create(const ExprId id,
                          const ExpressionPtr &expression,
                          const std::string &attribute_name,
                          const std::string &attribute_alias,
@@ -119,7 +119,7 @@
       std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override;
 
  private:
-  Alias(ExprId id,
+  Alias(const ExprId id,
         const ExpressionPtr &expression,
         const std::string &attribute_name,
         const std::string &attribute_alais,
diff --git a/query_optimizer/expressions/AttributeReference.hpp b/query_optimizer/expressions/AttributeReference.hpp
index 5ace894..ca796ba 100644
--- a/query_optimizer/expressions/AttributeReference.hpp
+++ b/query_optimizer/expressions/AttributeReference.hpp
@@ -95,7 +95,7 @@
   /**
    * @brief Creates an immutable AttributReference.
    *
-   * @param attribute_id The ExprId of the expression this AttributeReference
+   * @param attr_id The ExprId of the expression this AttributeReference
    *                     references to.
    * @param attribute_name The attribute name. This is only for printing purpose.
    * @param attribute_alias The attribute alias (or display name). This is only
@@ -107,14 +107,14 @@
    * @param scope The scope of the referenced attribute.
    * @return An immutable AttributeReference.
    */
-  static AttributeReferencePtr Create(ExprId attribute_id,
+  static AttributeReferencePtr Create(const ExprId attr_id,
                                       const std::string &attribute_name,
                                       const std::string &attribute_alias,
                                       const std::string &relation_name,
                                       const Type &type,
                                       const AttributeReferenceScope scope) {
     return AttributeReferencePtr(new AttributeReference(
-        attribute_id, attribute_name, attribute_alias, relation_name, type, scope));
+        attr_id, attribute_name, attribute_alias, relation_name, type, scope));
   }
 
  protected:
@@ -129,13 +129,13 @@
      std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override;
 
  private:
-  AttributeReference(attribute_id attribute_id,
+  AttributeReference(const ExprId attr_id,
                      const std::string &attribute_name,
                      const std::string &attribute_alias,
                      const std::string &relation_name,
                      const Type &type,
                      const AttributeReferenceScope scope)
-      : NamedExpression(attribute_id,
+      : NamedExpression(attr_id,
                         attribute_name,
                         attribute_alias,
                         relation_name),
diff --git a/query_optimizer/expressions/BinaryExpression.hpp b/query_optimizer/expressions/BinaryExpression.hpp
index 6a37679..df7454c 100644
--- a/query_optimizer/expressions/BinaryExpression.hpp
+++ b/query_optimizer/expressions/BinaryExpression.hpp
@@ -116,8 +116,8 @@
 
   const BinaryOperation &operation_;
 
-  ScalarPtr left_;
-  ScalarPtr right_;
+  const ScalarPtr left_;
+  const ScalarPtr right_;
 
   DISALLOW_COPY_AND_ASSIGN(BinaryExpression);
 };
diff --git a/query_optimizer/expressions/Cast.hpp b/query_optimizer/expressions/Cast.hpp
index 11be775..fa40242 100644
--- a/query_optimizer/expressions/Cast.hpp
+++ b/query_optimizer/expressions/Cast.hpp
@@ -110,7 +110,7 @@
     DCHECK(target_type.isCoercibleFrom(operand->getValueType()));
   }
 
-  ScalarPtr operand_;
+  const ScalarPtr operand_;
   const Type &target_type_;
 
   DISALLOW_COPY_AND_ASSIGN(Cast);
diff --git a/query_optimizer/expressions/ComparisonExpression.hpp b/query_optimizer/expressions/ComparisonExpression.hpp
index 011e04e..f119f71 100644
--- a/query_optimizer/expressions/ComparisonExpression.hpp
+++ b/query_optimizer/expressions/ComparisonExpression.hpp
@@ -121,8 +121,8 @@
                        const ScalarPtr &right);
 
   const Comparison &comparison_;
-  ScalarPtr left_;
-  ScalarPtr right_;
+  const ScalarPtr left_;
+  const ScalarPtr right_;
 
   DISALLOW_COPY_AND_ASSIGN(ComparisonExpression);
 };
diff --git a/query_optimizer/expressions/Exists.hpp b/query_optimizer/expressions/Exists.hpp
index 0b75de5..e90348e 100644
--- a/query_optimizer/expressions/Exists.hpp
+++ b/query_optimizer/expressions/Exists.hpp
@@ -113,7 +113,7 @@
     addChild(exists_subquery_);
   }
 
-  SubqueryExpressionPtr exists_subquery_;
+  const SubqueryExpressionPtr exists_subquery_;
 
   DISALLOW_COPY_AND_ASSIGN(Exists);
 };
diff --git a/query_optimizer/expressions/ExpressionUtil.cpp b/query_optimizer/expressions/ExpressionUtil.cpp
index c9541ef..a9f1a0d 100644
--- a/query_optimizer/expressions/ExpressionUtil.cpp
+++ b/query_optimizer/expressions/ExpressionUtil.cpp
@@ -40,8 +40,11 @@
 std::vector<AttributeReferencePtr> GetNullableAttributeVector(
     const std::vector<AttributeReferencePtr> &attributes) {
   std::vector<AttributeReferencePtr> nullable_attributes;
+  nullable_attributes.reserve(attributes.size());
   for (const auto &attr : attributes) {
-    if (!attr->getValueType().isNullable()) {
+    if (attr->getValueType().isNullable()) {
+      nullable_attributes.emplace_back(attr);
+    } else {
       nullable_attributes.emplace_back(
           AttributeReference::Create(attr->id(),
                                      attr->attribute_name(),
@@ -49,8 +52,6 @@
                                      attr->relation_name(),
                                      attr->getValueType().getNullableVersion(),
                                      attr->scope()));
-    } else {
-      nullable_attributes.emplace_back(attr);
     }
   }
   return nullable_attributes;
@@ -60,6 +61,7 @@
     const std::vector<AttributeReferencePtr> &attributes,
     const AttributeReferenceScope scope) {
   std::vector<AttributeReferencePtr> filtered_attributes;
+  filtered_attributes.reserve(attributes.size());
   for (const auto &attr_it : attributes) {
     if (attr_it->scope() == scope) {
       filtered_attributes.emplace_back(attr_it);
diff --git a/query_optimizer/expressions/ExpressionUtil.hpp b/query_optimizer/expressions/ExpressionUtil.hpp
index 29d90f0..576d3a2 100644
--- a/query_optimizer/expressions/ExpressionUtil.hpp
+++ b/query_optimizer/expressions/ExpressionUtil.hpp
@@ -207,6 +207,7 @@
 std::vector<AttributeReferencePtr> ToRefVector(
     const std::vector<std::shared_ptr<const NamedExpressionType>> &expressions) {
   std::vector<AttributeReferencePtr> cast_expressions;
+  cast_expressions.reserve(expressions.size());
   for (const std::shared_ptr<const NamedExpressionType> &expression :
        expressions) {
     cast_expressions.push_back(ToRef(expression));
@@ -225,6 +226,7 @@
 std::vector<NamedExpressionPtr> ToNamedExpressions(
     const std::vector<std::shared_ptr<const ExpressionType>> &expressions) {
   std::vector<NamedExpressionPtr> cast_expressions;
+  cast_expressions.reserve(expressions.size());
   for (const std::shared_ptr<const ExpressionType> &expression : expressions) {
     NamedExpressionPtr cast_expression;
     CHECK(SomeNamedExpression::MatchesWithConditionalCast(expression, &cast_expression))
diff --git a/query_optimizer/expressions/InTableQuery.hpp b/query_optimizer/expressions/InTableQuery.hpp
index 8e6d0e7..245ff0d 100644
--- a/query_optimizer/expressions/InTableQuery.hpp
+++ b/query_optimizer/expressions/InTableQuery.hpp
@@ -130,8 +130,8 @@
     addChild(table_query_);
   }
 
-  ScalarPtr test_expression_;
-  SubqueryExpressionPtr table_query_;
+  const ScalarPtr test_expression_;
+  const SubqueryExpressionPtr table_query_;
 
   DISALLOW_COPY_AND_ASSIGN(InTableQuery);
 };
diff --git a/query_optimizer/expressions/InValueList.hpp b/query_optimizer/expressions/InValueList.hpp
index 0ef3bba..e0f1f57 100644
--- a/query_optimizer/expressions/InValueList.hpp
+++ b/query_optimizer/expressions/InValueList.hpp
@@ -144,8 +144,8 @@
     }
   }
 
-  ScalarPtr test_expression_;
-  std::vector<ScalarPtr> match_expressions_;
+  const ScalarPtr test_expression_;
+  const std::vector<ScalarPtr> match_expressions_;
 
   DISALLOW_COPY_AND_ASSIGN(InValueList);
 };
diff --git a/query_optimizer/expressions/LogicalAnd.cpp b/query_optimizer/expressions/LogicalAnd.cpp
index 1497874..a3908bd 100644
--- a/query_optimizer/expressions/LogicalAnd.cpp
+++ b/query_optimizer/expressions/LogicalAnd.cpp
@@ -42,6 +42,7 @@
 
 LogicalAnd::LogicalAnd(const std::vector<PredicatePtr> &operands) {
   // Flatten the predicate tree.
+  operands_.reserve(operands.size());
   for (const PredicatePtr &operand : operands) {
     LogicalAndPtr logical_and;
     PredicateLiteralPtr literal;
diff --git a/query_optimizer/expressions/LogicalAnd.hpp b/query_optimizer/expressions/LogicalAnd.hpp
index 8152728..8785fc8 100644
--- a/query_optimizer/expressions/LogicalAnd.hpp
+++ b/query_optimizer/expressions/LogicalAnd.hpp
@@ -116,6 +116,7 @@
   explicit LogicalAnd(const std::vector<PredicatePtr> &operands);
 
   std::vector<PredicatePtr> operands_;
+
   DISALLOW_COPY_AND_ASSIGN(LogicalAnd);
 };
 
diff --git a/query_optimizer/expressions/LogicalNot.hpp b/query_optimizer/expressions/LogicalNot.hpp
index 90a98cd..7c4e660 100644
--- a/query_optimizer/expressions/LogicalNot.hpp
+++ b/query_optimizer/expressions/LogicalNot.hpp
@@ -100,7 +100,7 @@
     addChild(operand_);
   }
 
-  PredicatePtr operand_;
+  const PredicatePtr operand_;
 
   DISALLOW_COPY_AND_ASSIGN(LogicalNot);
 };
diff --git a/query_optimizer/expressions/LogicalOr.cpp b/query_optimizer/expressions/LogicalOr.cpp
index 3ae3e5d..c89fd5a 100644
--- a/query_optimizer/expressions/LogicalOr.cpp
+++ b/query_optimizer/expressions/LogicalOr.cpp
@@ -40,6 +40,7 @@
 
 LogicalOr::LogicalOr(const std::vector<PredicatePtr> &operands) {
   // Flatten the predicate tree.
+  operands_.reserve(operands.size());
   for (const PredicatePtr &operand : operands) {
     LogicalOrPtr logical_or;
     PredicateLiteralPtr literal;
diff --git a/query_optimizer/expressions/LogicalOr.hpp b/query_optimizer/expressions/LogicalOr.hpp
index f96b6cd..2e40c56 100644
--- a/query_optimizer/expressions/LogicalOr.hpp
+++ b/query_optimizer/expressions/LogicalOr.hpp
@@ -116,6 +116,7 @@
   explicit LogicalOr(const std::vector<PredicatePtr> &operands);
 
   std::vector<PredicatePtr> operands_;
+
   DISALLOW_COPY_AND_ASSIGN(LogicalOr);
 };
 
diff --git a/query_optimizer/expressions/NamedExpression.hpp b/query_optimizer/expressions/NamedExpression.hpp
index 6725567..58fc713 100644
--- a/query_optimizer/expressions/NamedExpression.hpp
+++ b/query_optimizer/expressions/NamedExpression.hpp
@@ -101,10 +101,10 @@
       std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override;
 
  private:
-  ExprId id_;
-  std::string attribute_name_;
-  std::string attribute_alias_;
-  std::string relation_name_;
+  const ExprId id_;
+  const std::string attribute_name_;
+  const std::string attribute_alias_;
+  const std::string relation_name_;
 
   DISALLOW_COPY_AND_ASSIGN(NamedExpression);
 };
diff --git a/query_optimizer/expressions/PredicateLiteral.hpp b/query_optimizer/expressions/PredicateLiteral.hpp
index 234b6e1..f354a83 100644
--- a/query_optimizer/expressions/PredicateLiteral.hpp
+++ b/query_optimizer/expressions/PredicateLiteral.hpp
@@ -94,7 +94,7 @@
  private:
   explicit PredicateLiteral(bool is_true) : is_true_(is_true) {}
 
-  bool is_true_;
+  const bool is_true_;
 
   DISALLOW_COPY_AND_ASSIGN(PredicateLiteral);
 };
diff --git a/query_optimizer/expressions/ScalarLiteral.hpp b/query_optimizer/expressions/ScalarLiteral.hpp
index bff52bb..7fab1d0 100644
--- a/query_optimizer/expressions/ScalarLiteral.hpp
+++ b/query_optimizer/expressions/ScalarLiteral.hpp
@@ -113,6 +113,7 @@
 
   const TypedValue value_;
   const Type &value_type_;
+
   DISALLOW_COPY_AND_ASSIGN(ScalarLiteral);
 };
 
diff --git a/query_optimizer/expressions/SearchedCase.hpp b/query_optimizer/expressions/SearchedCase.hpp
index 79c37a5..3466396 100644
--- a/query_optimizer/expressions/SearchedCase.hpp
+++ b/query_optimizer/expressions/SearchedCase.hpp
@@ -152,11 +152,11 @@
     }
   }
 
-  std::vector<PredicatePtr> condition_predicates_;
-  std::vector<ScalarPtr> conditional_result_expressions_;
+  const std::vector<PredicatePtr> condition_predicates_;
+  const std::vector<ScalarPtr> conditional_result_expressions_;
 
   // May be NULL.
-  ScalarPtr else_result_expression_;
+  const ScalarPtr else_result_expression_;
 
   const Type &value_type_;
 
diff --git a/query_optimizer/expressions/SimpleCase.hpp b/query_optimizer/expressions/SimpleCase.hpp
index 0820fa3..b42c034 100644
--- a/query_optimizer/expressions/SimpleCase.hpp
+++ b/query_optimizer/expressions/SimpleCase.hpp
@@ -171,12 +171,12 @@
     }
   }
 
-  ScalarPtr case_operand_;
-  std::vector<ScalarPtr> condition_operands_;
-  std::vector<ScalarPtr> conditional_result_expressions_;
+  const ScalarPtr case_operand_;
+  const std::vector<ScalarPtr> condition_operands_;
+  const std::vector<ScalarPtr> conditional_result_expressions_;
 
   // May be NULL.
-  ScalarPtr else_result_expression_;
+  const ScalarPtr else_result_expression_;
 
   const Type &value_type_;
 
diff --git a/query_optimizer/expressions/SubqueryExpression.hpp b/query_optimizer/expressions/SubqueryExpression.hpp
index a128e7f..184bc8c 100644
--- a/query_optimizer/expressions/SubqueryExpression.hpp
+++ b/query_optimizer/expressions/SubqueryExpression.hpp
@@ -116,7 +116,7 @@
     DCHECK(!subquery->getOutputAttributes().empty());
   }
 
-  logical::LogicalPtr subquery_;
+  const logical::LogicalPtr subquery_;
   // Set to the first output attribute if the subquery is a multi-column table query.
   const AttributeReferencePtr output_attribute_;
 
diff --git a/query_optimizer/expressions/UnaryExpression.hpp b/query_optimizer/expressions/UnaryExpression.hpp
index 14201ff..9b99377 100644
--- a/query_optimizer/expressions/UnaryExpression.hpp
+++ b/query_optimizer/expressions/UnaryExpression.hpp
@@ -121,7 +121,7 @@
   }
 
   const UnaryOperation &operation_;
-  ScalarPtr operand_;
+  const ScalarPtr operand_;
 
   DISALLOW_COPY_AND_ASSIGN(UnaryExpression);
 };
diff --git a/query_optimizer/expressions/WindowAggregateFunction.hpp b/query_optimizer/expressions/WindowAggregateFunction.hpp
index 04b4b51..e4a8154 100644
--- a/query_optimizer/expressions/WindowAggregateFunction.hpp
+++ b/query_optimizer/expressions/WindowAggregateFunction.hpp
@@ -229,7 +229,7 @@
   // AggregationFunction, a new class for WindowAggregationFunction should be
   // created as quickstep::WindowAggregateFunction.
   const ::quickstep::WindowAggregateFunction &window_aggregate_;
-  std::vector<ScalarPtr> arguments_;
+  const std::vector<ScalarPtr> arguments_;
   const WindowInfo window_info_;
   const std::string window_name_;
   const bool is_distinct_;
diff --git a/query_optimizer/logical/Aggregate.hpp b/query_optimizer/logical/Aggregate.hpp
index d8c02ba..0100b2c 100644
--- a/query_optimizer/logical/Aggregate.hpp
+++ b/query_optimizer/logical/Aggregate.hpp
@@ -92,7 +92,7 @@
    * @return An immutable Aggregate node.
    */
   static AggregatePtr Create(
-      LogicalPtr input,
+      const LogicalPtr &input,
       const std::vector<expressions::NamedExpressionPtr> &grouping_expressions,
       const std::vector<expressions::AliasPtr> &aggregate_expressions) {
     return AggregatePtr(
@@ -109,7 +109,7 @@
       std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override;
 
  private:
-  Aggregate(LogicalPtr input,
+  Aggregate(const LogicalPtr &input,
             const std::vector<expressions::NamedExpressionPtr> &grouping_expressions,
             const std::vector<expressions::AliasPtr> &aggregate_expressions)
       : input_(input),
@@ -120,9 +120,9 @@
     addInputExpressions(aggregate_expressions_);
   }
 
-  LogicalPtr input_;
-  std::vector<expressions::NamedExpressionPtr> grouping_expressions_;
-  std::vector<expressions::AliasPtr> aggregate_expressions_;
+  const LogicalPtr input_;
+  const std::vector<expressions::NamedExpressionPtr> grouping_expressions_;
+  const std::vector<expressions::AliasPtr> aggregate_expressions_;
 
   DISALLOW_COPY_AND_ASSIGN(Aggregate);
 };
diff --git a/query_optimizer/logical/BinaryJoin.hpp b/query_optimizer/logical/BinaryJoin.hpp
index ca68ced..2945899 100644
--- a/query_optimizer/logical/BinaryJoin.hpp
+++ b/query_optimizer/logical/BinaryJoin.hpp
@@ -89,8 +89,8 @@
       std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override;
 
  private:
-  LogicalPtr left_;
-  LogicalPtr right_;
+  const LogicalPtr left_;
+  const LogicalPtr right_;
 
   DISALLOW_COPY_AND_ASSIGN(BinaryJoin);
 };
diff --git a/query_optimizer/logical/DeleteTuples.hpp b/query_optimizer/logical/DeleteTuples.hpp
index 8ecd82f..219913b 100644
--- a/query_optimizer/logical/DeleteTuples.hpp
+++ b/query_optimizer/logical/DeleteTuples.hpp
@@ -111,8 +111,8 @@
     addChild(input_);
   }
 
-  LogicalPtr input_;
-  expressions::PredicatePtr predicate_;
+  const LogicalPtr input_;
+  const expressions::PredicatePtr predicate_;
 
   DISALLOW_COPY_AND_ASSIGN(DeleteTuples);
 };
diff --git a/query_optimizer/logical/HashJoin.hpp b/query_optimizer/logical/HashJoin.hpp
index b0e63e7..3676637 100644
--- a/query_optimizer/logical/HashJoin.hpp
+++ b/query_optimizer/logical/HashJoin.hpp
@@ -228,9 +228,9 @@
     }
   }
 
-  std::vector<expressions::AttributeReferencePtr> left_join_attributes_;
-  std::vector<expressions::AttributeReferencePtr> right_join_attributes_;
-  expressions::PredicatePtr residual_predicate_;
+  const std::vector<expressions::AttributeReferencePtr> left_join_attributes_;
+  const std::vector<expressions::AttributeReferencePtr> right_join_attributes_;
+  const expressions::PredicatePtr residual_predicate_;
   const JoinType join_type_;
 
   DISALLOW_COPY_AND_ASSIGN(HashJoin);
diff --git a/query_optimizer/logical/InsertSelection.hpp b/query_optimizer/logical/InsertSelection.hpp
index 9cdbb1c..0c0a6d6 100644
--- a/query_optimizer/logical/InsertSelection.hpp
+++ b/query_optimizer/logical/InsertSelection.hpp
@@ -107,8 +107,8 @@
     addChild(selection);
   }
 
-  LogicalPtr destination_;
-  LogicalPtr selection_;
+  const LogicalPtr destination_;
+  const LogicalPtr selection_;
 
   DISALLOW_COPY_AND_ASSIGN(InsertSelection);
 };
diff --git a/query_optimizer/logical/InsertTuple.hpp b/query_optimizer/logical/InsertTuple.hpp
index dd35510..bd4b34d 100644
--- a/query_optimizer/logical/InsertTuple.hpp
+++ b/query_optimizer/logical/InsertTuple.hpp
@@ -108,8 +108,8 @@
     addChild(input_);
   }
 
-  LogicalPtr input_;
-  std::vector<std::vector<expressions::ScalarLiteralPtr>> column_values_;
+  const LogicalPtr input_;
+  const std::vector<std::vector<expressions::ScalarLiteralPtr>> column_values_;
 
   DISALLOW_COPY_AND_ASSIGN(InsertTuple);
 };
diff --git a/query_optimizer/logical/MultiwayCartesianJoin.hpp b/query_optimizer/logical/MultiwayCartesianJoin.hpp
index 6f9121d..99570da 100644
--- a/query_optimizer/logical/MultiwayCartesianJoin.hpp
+++ b/query_optimizer/logical/MultiwayCartesianJoin.hpp
@@ -99,7 +99,8 @@
       addChild(operand);
     }
   }
-  std::vector<LogicalPtr> operands_;
+
+  const std::vector<LogicalPtr> operands_;
 
   DISALLOW_COPY_AND_ASSIGN(MultiwayCartesianJoin);
 };
diff --git a/query_optimizer/logical/NestedLoopsJoin.hpp b/query_optimizer/logical/NestedLoopsJoin.hpp
index 5950e1d..1824a1f 100644
--- a/query_optimizer/logical/NestedLoopsJoin.hpp
+++ b/query_optimizer/logical/NestedLoopsJoin.hpp
@@ -140,7 +140,7 @@
     addInputExpression(join_predicate);
   }
 
-  expressions::PredicatePtr join_predicate_;
+  const expressions::PredicatePtr join_predicate_;
 
   DISALLOW_COPY_AND_ASSIGN(NestedLoopsJoin);
 };
diff --git a/query_optimizer/logical/Project.hpp b/query_optimizer/logical/Project.hpp
index 83b352c..0dd6532 100644
--- a/query_optimizer/logical/Project.hpp
+++ b/query_optimizer/logical/Project.hpp
@@ -107,8 +107,8 @@
     addInputExpressions(project_expressions_);
   }
 
-  LogicalPtr input_;
-  std::vector<expressions::NamedExpressionPtr> project_expressions_;
+  const LogicalPtr input_;
+  const std::vector<expressions::NamedExpressionPtr> project_expressions_;
 
   DISALLOW_COPY_AND_ASSIGN(Project);
 };
diff --git a/query_optimizer/logical/Sample.hpp b/query_optimizer/logical/Sample.hpp
index e2403c5..0e8c696 100644
--- a/query_optimizer/logical/Sample.hpp
+++ b/query_optimizer/logical/Sample.hpp
@@ -119,7 +119,7 @@
      addChild(input);
   }
 
-  LogicalPtr input_;
+  const LogicalPtr input_;
   const bool is_block_sample_;
   const int percentage_;
 
diff --git a/query_optimizer/logical/SharedSubplanReference.hpp b/query_optimizer/logical/SharedSubplanReference.hpp
index 79ef4ad..825953d 100644
--- a/query_optimizer/logical/SharedSubplanReference.hpp
+++ b/query_optimizer/logical/SharedSubplanReference.hpp
@@ -105,7 +105,7 @@
    * @return An immutable SharedSubplanReference.
    */
   static SharedSubplanReferencePtr Create(
-      int subplan_id,
+      const int subplan_id,
       const std::vector<expressions::AttributeReferencePtr> &referenced_attributes,
       const std::vector<expressions::AttributeReferencePtr> &output_attributes) {
     return SharedSubplanReferencePtr(
@@ -113,7 +113,7 @@
   }
 
  private:
-  SharedSubplanReference(int subplan_id,
+  SharedSubplanReference(const int subplan_id,
                          const std::vector<expressions::AttributeReferencePtr> &referenced_attributes,
                          const std::vector<expressions::AttributeReferencePtr> &output_attributes)
     : subplan_id_(subplan_id),
@@ -122,9 +122,9 @@
     DCHECK_EQ(output_attributes_.size(), referenced_attributes_.size());
   }
 
-  int subplan_id_;
-  std::vector<expressions::AttributeReferencePtr> referenced_attributes_;
-  std::vector<expressions::AttributeReferencePtr> output_attributes_;
+  const int subplan_id_;
+  const std::vector<expressions::AttributeReferencePtr> referenced_attributes_;
+  const std::vector<expressions::AttributeReferencePtr> output_attributes_;
 
   DISALLOW_COPY_AND_ASSIGN(SharedSubplanReference);
 };
diff --git a/query_optimizer/logical/Sort.hpp b/query_optimizer/logical/Sort.hpp
index 129c6d4..5be3238 100644
--- a/query_optimizer/logical/Sort.hpp
+++ b/query_optimizer/logical/Sort.hpp
@@ -166,12 +166,12 @@
     addChild(input_);
   }
 
-  LogicalPtr input_;
-  std::vector<expressions::AttributeReferencePtr> sort_attributes_;
+  const LogicalPtr input_;
+  const std::vector<expressions::AttributeReferencePtr> sort_attributes_;
   // Has 1:1 matching with <sort_expressions_>.
-  std::vector<bool> sort_ascending_;
-  std::vector<bool> nulls_first_flags_;
-  int limit_;
+  const std::vector<bool> sort_ascending_;
+  const std::vector<bool> nulls_first_flags_;
+  const int limit_;
 
   DISALLOW_COPY_AND_ASSIGN(Sort);
 };
diff --git a/query_optimizer/logical/TableGenerator.hpp b/query_optimizer/logical/TableGenerator.hpp
index 15ca985..2f74ffc 100644
--- a/query_optimizer/logical/TableGenerator.hpp
+++ b/query_optimizer/logical/TableGenerator.hpp
@@ -99,6 +99,26 @@
     return {};
   }
 
+  /**
+   * @brief Creates a logical TableGenerator node.
+   *
+   * @param generator_function_handle The shared_ptr reference to a generator
+            function handle.
+   * @param table_alias The alias name of this table.
+   * @param optimizer_context The OptimizerContext for the query
+   * @return An immutable TableGenerator.
+   */
+  static TableGeneratorPtr Create(
+      const GeneratorFunctionHandlePtr &generator_function_handle,
+      const std::string &table_alias,
+      OptimizerContext *optimizer_context) {
+    return TableGeneratorPtr(
+        new TableGenerator(generator_function_handle,
+                           table_alias,
+                           optimizer_context));
+  }
+
+ protected:
   void getFieldStringItems(
       std::vector<std::string> *inline_field_names,
       std::vector<std::string> *inline_field_values,
@@ -119,34 +139,16 @@
     container_child_fields->push_back(CastSharedPtrVector<OptimizerTreeBase>(attribute_list_));
   }
 
-  /**
-   * @brief Creates a logical TableGenerator node.
-   *
-   * @param generator_function_handle The shared_ptr reference to a generator
-            function handle.
-   * @param table_alias The alias name of this table.
-   * @param optimizer_context The OptimizerContext for the query
-   * @return An immutable TableGenerator.
-   */
-  static TableGeneratorPtr Create(
-      const GeneratorFunctionHandlePtr &generator_function_handle,
-      const std::string &table_alias,
-      OptimizerContext *optimizer_context) {
-    return TableGeneratorPtr(
-        new TableGenerator(generator_function_handle,
-                           table_alias,
-                           optimizer_context));
-  }
-
  private:
   TableGenerator(const GeneratorFunctionHandlePtr &generator_function_handle,
                  const std::string &table_alias,
                  OptimizerContext *optimizer_context)
       : generator_function_handle_(generator_function_handle),
         table_alias_(table_alias) {
-    int num_attrs = generator_function_handle->getNumberOfOutputColumns();
+    const int num_attrs = generator_function_handle->getNumberOfOutputColumns();
     const std::string &table_name = generator_function_handle->getName();
 
+    attribute_list_.reserve(num_attrs);
     for (int i = 0; i < num_attrs; ++i) {
       attribute_list_.emplace_back(
         E::AttributeReference::Create(
@@ -167,8 +169,8 @@
         attribute_list_(attribute_list) {
   }
 
-  GeneratorFunctionHandlePtr generator_function_handle_;
-  std::string table_alias_;
+  const GeneratorFunctionHandlePtr generator_function_handle_;
+  const std::string table_alias_;
   std::vector<E::AttributeReferencePtr> attribute_list_;
 
   DISALLOW_COPY_AND_ASSIGN(TableGenerator);
diff --git a/query_optimizer/logical/TableReference.cpp b/query_optimizer/logical/TableReference.cpp
index 6d94665..0ee2d07 100644
--- a/query_optimizer/logical/TableReference.cpp
+++ b/query_optimizer/logical/TableReference.cpp
@@ -41,6 +41,7 @@
                                OptimizerContext *optimizer_context)
     : catalog_relation_(catalog_relation),
       relation_alias_(relation_alias) {
+  attribute_list_.reserve(catalog_relation_->size());
   for (CatalogRelation::const_iterator attribute_it = catalog_relation_->begin();
        attribute_it < catalog_relation_->end();
        ++attribute_it) {
diff --git a/query_optimizer/logical/TableReference.hpp b/query_optimizer/logical/TableReference.hpp
index 6788c82..03033a7 100644
--- a/query_optimizer/logical/TableReference.hpp
+++ b/query_optimizer/logical/TableReference.hpp
@@ -128,7 +128,7 @@
         attribute_list_(attribute_list) {}
 
   const CatalogRelation *catalog_relation_;
-  std::string relation_alias_;
+  const std::string relation_alias_;
   std::vector<expressions::AttributeReferencePtr> attribute_list_;
 
   DISALLOW_COPY_AND_ASSIGN(TableReference);
diff --git a/query_optimizer/logical/TopLevelPlan.hpp b/query_optimizer/logical/TopLevelPlan.hpp
index 0b8f1a4..68b2a42 100644
--- a/query_optimizer/logical/TopLevelPlan.hpp
+++ b/query_optimizer/logical/TopLevelPlan.hpp
@@ -137,11 +137,11 @@
     }
   }
 
-  LogicalPtr plan_;
+  const LogicalPtr plan_;
   // Stored in the topological ordering based on dependencies.
-  std::vector<LogicalPtr> shared_subplans_;
+  const std::vector<LogicalPtr> shared_subplans_;
 
-  std::unordered_map<expressions::ExprId, int> uncorrelated_subquery_map_;
+  const std::unordered_map<expressions::ExprId, int> uncorrelated_subquery_map_;
 
   DISALLOW_COPY_AND_ASSIGN(TopLevelPlan);
 };
diff --git a/query_optimizer/logical/UpdateTable.hpp b/query_optimizer/logical/UpdateTable.hpp
index ec0d50f..bf84842 100644
--- a/query_optimizer/logical/UpdateTable.hpp
+++ b/query_optimizer/logical/UpdateTable.hpp
@@ -125,13 +125,13 @@
     addChild(input);
   }
 
-  LogicalPtr input_;
+  const LogicalPtr input_;
   // The attributes to be assigned values to.
-  std::vector<expressions::AttributeReferencePtr> assignees_;
+  const std::vector<expressions::AttributeReferencePtr> assignees_;
   // The expressions for which the values are assigned. Has 1:1 matching with
   // <assignees_>.
-  std::vector<expressions::ScalarPtr> assignment_expressions_;
-  expressions::PredicatePtr predicate_;
+  const std::vector<expressions::ScalarPtr> assignment_expressions_;
+  const expressions::PredicatePtr predicate_;
 
   DISALLOW_COPY_AND_ASSIGN(UpdateTable);
 };
diff --git a/query_optimizer/physical/BinaryJoin.hpp b/query_optimizer/physical/BinaryJoin.hpp
index 39d5e31..a870b38 100644
--- a/query_optimizer/physical/BinaryJoin.hpp
+++ b/query_optimizer/physical/BinaryJoin.hpp
@@ -94,8 +94,8 @@
       std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override;
 
  private:
-  PhysicalPtr left_;
-  PhysicalPtr right_;
+  const PhysicalPtr left_;
+  const PhysicalPtr right_;
 
   DISALLOW_COPY_AND_ASSIGN(BinaryJoin);
 };
diff --git a/query_optimizer/physical/CrossReferenceCoalesceAggregate.hpp b/query_optimizer/physical/CrossReferenceCoalesceAggregate.hpp
index 44f8a33..2ec7741 100644
--- a/query_optimizer/physical/CrossReferenceCoalesceAggregate.hpp
+++ b/query_optimizer/physical/CrossReferenceCoalesceAggregate.hpp
@@ -168,7 +168,7 @@
       const PhysicalPtr &right_child,
       const std::vector<expressions::AttributeReferencePtr> &left_join_attributes,
       const std::vector<expressions::AttributeReferencePtr> &right_join_attributes,
-      const expressions::PredicatePtr right_filter_predicate,
+      const expressions::PredicatePtr &right_filter_predicate,
       const std::vector<expressions::AliasPtr> &aggregate_expressions,
       const std::size_t group_by_key_value_range) {
     return CrossReferenceCoalesceAggregatePtr(
@@ -196,7 +196,7 @@
       const PhysicalPtr &right_child,
       const std::vector<expressions::AttributeReferencePtr> &left_join_attributes,
       const std::vector<expressions::AttributeReferencePtr> &right_join_attributes,
-      const expressions::PredicatePtr right_filter_predicate,
+      const expressions::PredicatePtr &right_filter_predicate,
       const std::vector<expressions::AliasPtr> &aggregate_expressions,
       const std::size_t group_by_key_value_range)
       : left_child_(left_child),
@@ -212,13 +212,13 @@
 
   // TODO(jianqiao): For the left child, support filter predicate fusing and
   // attachment of LIPFilters.
-  PhysicalPtr left_child_;
-  PhysicalPtr right_child_;
-  std::vector<expressions::AttributeReferencePtr> left_join_attributes_;
-  std::vector<expressions::AttributeReferencePtr> right_join_attributes_;
-  expressions::PredicatePtr right_filter_predicate_;
-  std::vector<expressions::AliasPtr> aggregate_expressions_;
-  std::size_t group_by_key_value_range_;
+  const PhysicalPtr left_child_;
+  const PhysicalPtr right_child_;
+  const std::vector<expressions::AttributeReferencePtr> left_join_attributes_;
+  const std::vector<expressions::AttributeReferencePtr> right_join_attributes_;
+  const expressions::PredicatePtr right_filter_predicate_;
+  const std::vector<expressions::AliasPtr> aggregate_expressions_;
+  const std::size_t group_by_key_value_range_;
 
   DISALLOW_COPY_AND_ASSIGN(CrossReferenceCoalesceAggregate);
 };
diff --git a/query_optimizer/physical/DeleteTuples.hpp b/query_optimizer/physical/DeleteTuples.hpp
index bd1e847..a11f671 100644
--- a/query_optimizer/physical/DeleteTuples.hpp
+++ b/query_optimizer/physical/DeleteTuples.hpp
@@ -123,8 +123,8 @@
     addChild(input_);
   }
 
-  PhysicalPtr input_;
-  expressions::PredicatePtr predicate_;
+  const PhysicalPtr input_;
+  const expressions::PredicatePtr predicate_;
 
   DISALLOW_COPY_AND_ASSIGN(DeleteTuples);
 };
diff --git a/query_optimizer/physical/HashJoin.hpp b/query_optimizer/physical/HashJoin.hpp
index 1f0df0c..ee51bbb 100644
--- a/query_optimizer/physical/HashJoin.hpp
+++ b/query_optimizer/physical/HashJoin.hpp
@@ -218,11 +218,11 @@
         join_type_(join_type) {
   }
 
-  std::vector<expressions::AttributeReferencePtr> left_join_attributes_;
-  std::vector<expressions::AttributeReferencePtr> right_join_attributes_;
-  expressions::PredicatePtr residual_predicate_;
-  expressions::PredicatePtr build_predicate_;
-  JoinType join_type_;
+  const std::vector<expressions::AttributeReferencePtr> left_join_attributes_;
+  const std::vector<expressions::AttributeReferencePtr> right_join_attributes_;
+  const expressions::PredicatePtr residual_predicate_;
+  const expressions::PredicatePtr build_predicate_;
+  const JoinType join_type_;
 
   DISALLOW_COPY_AND_ASSIGN(HashJoin);
 };
diff --git a/query_optimizer/physical/InsertSelection.hpp b/query_optimizer/physical/InsertSelection.hpp
index 4e22a6e..eb64b87 100644
--- a/query_optimizer/physical/InsertSelection.hpp
+++ b/query_optimizer/physical/InsertSelection.hpp
@@ -116,8 +116,8 @@
     addChild(selection_);
   }
 
-  PhysicalPtr destination_;
-  PhysicalPtr selection_;
+  const PhysicalPtr destination_;
+  const PhysicalPtr selection_;
 
   DISALLOW_COPY_AND_ASSIGN(InsertSelection);
 };
diff --git a/query_optimizer/physical/InsertTuple.hpp b/query_optimizer/physical/InsertTuple.hpp
index 10c7c5b..f1417ce 100644
--- a/query_optimizer/physical/InsertTuple.hpp
+++ b/query_optimizer/physical/InsertTuple.hpp
@@ -123,8 +123,8 @@
     addChild(input_);
   }
 
-  PhysicalPtr input_;
-  std::vector<std::vector<expressions::ScalarLiteralPtr>> column_values_;
+  const PhysicalPtr input_;
+  const std::vector<std::vector<expressions::ScalarLiteralPtr>> column_values_;
 
   DISALLOW_COPY_AND_ASSIGN(InsertTuple);
 };
diff --git a/query_optimizer/physical/Join.hpp b/query_optimizer/physical/Join.hpp
index 63f67c8..c50a131 100644
--- a/query_optimizer/physical/Join.hpp
+++ b/query_optimizer/physical/Join.hpp
@@ -74,14 +74,14 @@
    * @param partition_scheme_header The optional output partition scheme header.
    */
   explicit Join(
-      const std::vector<expressions::NamedExpressionPtr>& project_expressions,
+      const std::vector<expressions::NamedExpressionPtr> &project_expressions,
       const bool has_repartition = false,
       PartitionSchemeHeader *partition_scheme_header = nullptr)
       : Physical(has_repartition, partition_scheme_header),
         project_expressions_(project_expressions) {}
 
  private:
-  std::vector<expressions::NamedExpressionPtr> project_expressions_;
+  const std::vector<expressions::NamedExpressionPtr> project_expressions_;
 
   DISALLOW_COPY_AND_ASSIGN(Join);
 };
diff --git a/query_optimizer/physical/NestedLoopsJoin.hpp b/query_optimizer/physical/NestedLoopsJoin.hpp
index 87db5c3..92d90a7 100644
--- a/query_optimizer/physical/NestedLoopsJoin.hpp
+++ b/query_optimizer/physical/NestedLoopsJoin.hpp
@@ -140,7 +140,7 @@
     DCHECK(join_predicate_ != nullptr);
   }
 
-  expressions::PredicatePtr join_predicate_;
+  const expressions::PredicatePtr join_predicate_;
 
   DISALLOW_COPY_AND_ASSIGN(NestedLoopsJoin);
 };
diff --git a/query_optimizer/physical/SharedSubplanReference.hpp b/query_optimizer/physical/SharedSubplanReference.hpp
index 849bd3a..a233f5f 100644
--- a/query_optimizer/physical/SharedSubplanReference.hpp
+++ b/query_optimizer/physical/SharedSubplanReference.hpp
@@ -116,7 +116,7 @@
    * @return An immutable SharedSubplanReference.
    */
   static SharedSubplanReferencePtr Create(
-      int subplan_id,
+      const int subplan_id,
       const std::vector<expressions::AttributeReferencePtr> &referenced_attributes,
       const std::vector<expressions::AttributeReferencePtr> &output_attributes) {
     return SharedSubplanReferencePtr(
@@ -124,7 +124,7 @@
   }
 
  private:
-  SharedSubplanReference(int subplan_id,
+  SharedSubplanReference(const int subplan_id,
                          const std::vector<expressions::AttributeReferencePtr> &referenced_attributes,
                          const std::vector<expressions::AttributeReferencePtr> &output_attributes)
     : subplan_id_(subplan_id),
@@ -133,9 +133,9 @@
     DCHECK_EQ(output_attributes_.size(), referenced_attributes_.size());
   }
 
-  int subplan_id_;
-  std::vector<expressions::AttributeReferencePtr> referenced_attributes_;
-  std::vector<expressions::AttributeReferencePtr> output_attributes_;
+  const int subplan_id_;
+  const std::vector<expressions::AttributeReferencePtr> referenced_attributes_;
+  const std::vector<expressions::AttributeReferencePtr> output_attributes_;
 
   DISALLOW_COPY_AND_ASSIGN(SharedSubplanReference);
 };
diff --git a/query_optimizer/physical/Sort.hpp b/query_optimizer/physical/Sort.hpp
index 4a49aa3..acf81a8 100644
--- a/query_optimizer/physical/Sort.hpp
+++ b/query_optimizer/physical/Sort.hpp
@@ -169,17 +169,17 @@
     addChild(input);
   }
 
-  PhysicalPtr input_;
-  std::vector<expressions::AttributeReferencePtr> sort_attributes_;
+  const PhysicalPtr input_;
+  const std::vector<expressions::AttributeReferencePtr> sort_attributes_;
   // non_sort_attributes_ is present only for Rule PruneColumns,
   // which need attributes referenced by Sort (i.e. sort_attributes_)
   // and others by its ancestors (i.e. non_sort_attributes_).
   // The output attributes by Sort may contain additional non-sorting attributes,
   // since the input physical of the Sort may not allow column pruning.
-  std::vector<expressions::AttributeReferencePtr> non_sort_attributes_;
-  std::vector<bool> sort_ascending_;
-  std::vector<bool> nulls_first_flags_;
-  int limit_;
+  const std::vector<expressions::AttributeReferencePtr> non_sort_attributes_;
+  const std::vector<bool> sort_ascending_;
+  const std::vector<bool> nulls_first_flags_;
+  const int limit_;
 
   DISALLOW_COPY_AND_ASSIGN(Sort);
 };
diff --git a/query_optimizer/physical/TableGenerator.hpp b/query_optimizer/physical/TableGenerator.hpp
index 0798165..ff0b6e7 100644
--- a/query_optimizer/physical/TableGenerator.hpp
+++ b/query_optimizer/physical/TableGenerator.hpp
@@ -162,9 +162,9 @@
         attribute_list_(attribute_list) {
   }
 
-  GeneratorFunctionHandlePtr generator_function_handle_;
-  std::string table_alias_;
-  std::vector<E::AttributeReferencePtr> attribute_list_;
+  const GeneratorFunctionHandlePtr generator_function_handle_;
+  const std::string table_alias_;
+  const std::vector<E::AttributeReferencePtr> attribute_list_;
 
   DISALLOW_COPY_AND_ASSIGN(TableGenerator);
 };
diff --git a/query_optimizer/physical/TopLevelPlan.hpp b/query_optimizer/physical/TopLevelPlan.hpp
index 9e567e1..059144f 100644
--- a/query_optimizer/physical/TopLevelPlan.hpp
+++ b/query_optimizer/physical/TopLevelPlan.hpp
@@ -192,11 +192,11 @@
     }
   }
 
-  PhysicalPtr plan_;
+  const PhysicalPtr plan_;
   // Stored in the topological ordering based on dependencies.
-  std::vector<PhysicalPtr> shared_subplans_;
-  std::unordered_map<expressions::ExprId, int> uncorrelated_subquery_map_;
-  LIPFilterConfigurationPtr lip_filter_configuration_;
+  const std::vector<PhysicalPtr> shared_subplans_;
+  const std::unordered_map<expressions::ExprId, int> uncorrelated_subquery_map_;
+  const LIPFilterConfigurationPtr lip_filter_configuration_;
 
   DISALLOW_COPY_AND_ASSIGN(TopLevelPlan);
 };
diff --git a/query_optimizer/physical/UpdateTable.hpp b/query_optimizer/physical/UpdateTable.hpp
index 1c93e17..943d74d 100644
--- a/query_optimizer/physical/UpdateTable.hpp
+++ b/query_optimizer/physical/UpdateTable.hpp
@@ -142,13 +142,13 @@
     addChild(input);
   }
 
-  PhysicalPtr input_;
+  const PhysicalPtr input_;
   // The attributes to be assigned values to.
-  std::vector<expressions::AttributeReferencePtr> assignees_;
+  const std::vector<expressions::AttributeReferencePtr> assignees_;
   // The expressions for which the values are assigned. Has 1:1 matching with
   // <assignees_>.
-  std::vector<expressions::ScalarPtr> assignment_expressions_;
-  expressions::PredicatePtr predicate_;
+  const std::vector<expressions::ScalarPtr> assignment_expressions_;
+  const expressions::PredicatePtr predicate_;
 
   DISALLOW_COPY_AND_ASSIGN(UpdateTable);
 };
