<commit_before>/*-------------------------------------------------------------------------
 *
 * hash_join.h
 * file description
 *
 * Copyright(c) 2015, CMU
 *
 * /peloton/src/executor/hash_join_executor.h
 *
 *-------------------------------------------------------------------------
 */

#pragma once

#include <vector>

#include "backend/executor/abstract_join_executor.h"
#include "backend/planner/hash_join_plan.h"
#include "backend/executor/hash_executor.h"

namespace peloton {
namespace executor {

class HashJoinExecutor : public AbstractJoinExecutor {
  HashJoinExecutor(const HashJoinExecutor &) = delete;
  HashJoinExecutor &operator=(const HashJoinExecutor &) = delete;

 public:
  explicit HashJoinExecutor(const planner::AbstractPlan *node,
                             ExecutorContext *executor_context);

 protected:
  bool DInit();

  bool DExecute();

  bool left_end_ = false;

  bool right_end_ = false;

 private:

  size_t Advance(LogicalTile *tile, size_t start_row, bool is_left);

  std::vector<std::unique_ptr<LogicalTile> > right_tiles_;

  HashExecutor *hash_executor_ = nullptr;

  bool hashed_ = false;
};

}  // namespace executor
}  // namespace peloton<commit_msg>hash join now supports all types of outer joins<commit_after>/*-------------------------------------------------------------------------
 *
 * hash_join.h
 * file description
 *
 * Copyright(c) 2015, CMU
 *
 * /peloton/src/executor/hash_join_executor.h
 *
 *-------------------------------------------------------------------------
 */

#pragma once

#include <vector>

#include "backend/executor/abstract_join_executor.h"
#include "backend/planner/hash_join_plan.h"
#include "backend/executor/hash_executor.h"

namespace peloton {
namespace executor {

class HashJoinExecutor : public AbstractJoinExecutor {
  HashJoinExecutor(const HashJoinExecutor &) = delete;
  HashJoinExecutor &operator=(const HashJoinExecutor &) = delete;

 public:
  explicit HashJoinExecutor(const planner::AbstractPlan *node,
                             ExecutorContext *executor_context);

 protected:
  bool DInit();

  bool DExecute();

  bool left_end_ = false;

  bool right_end_ = false;

 private:

  std::vector<std::unique_ptr<LogicalTile> > right_tiles_;

  HashExecutor *hash_executor_ = nullptr;

  bool hashed_ = false;
};

}  // namespace executor
}  // namespace peloton
{'fraction_non_alphanumeric': 0.21591871295512277, 'fraction_numerical': 0.003386960203217612, 'mean_word_length': 2.40981240981241, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5616921', 'n_tokens_mistral': 687, 'n_tokens_neox': 657, 'n_words': 142}