22 using namespace impala;
45 int row_idx = out_batch->
AddRows(max_added_rows);
47 uint8_t* out_row_mem =
reinterpret_cast<uint8_t*
>(out_batch->
GetRow(row_idx));
51 int probe_rows = probe_batch->
num_rows();
65 if (
join_op_ == TJoinOp::LEFT_SEMI_JOIN) {
68 if (num_other_conjunct_ctxs > 0) {
79 other_conjunct_ctxs, num_other_conjunct_ctxs, out_row)) {
85 if (
EvalConjuncts(conjunct_ctxs, num_conjunct_ctxs, out_row)) {
88 if (
UNLIKELY(rows_returned == max_added_rows))
goto end;
91 out_row =
reinterpret_cast<TupleRow*
>(out_row_mem);
105 if (
EvalConjuncts(conjunct_ctxs, num_conjunct_ctxs, out_row)) {
107 if (
UNLIKELY(rows_returned == max_added_rows))
goto end;
110 out_row =
reinterpret_cast<TupleRow*
>(out_row_mem);
131 for (
int i = 0; i < build_batch->
num_rows(); ++i) {
OldHashTable::Iterator hash_tbl_iterator_
void CreateOutputRow(TupleRow *out_row, TupleRow *probe_row, TupleRow *build_row)
TupleRow * current_probe_row_
TupleRow * GetRow(int row_idx)
bool AtEnd() const
Returns true if this iterator is at the end, i.e. GetRow() cannot be called.
const std::vector< ExprContext * > & conjunct_ctxs() const
boost::scoped_ptr< OldHashTable > hash_tbl_
int ProcessProbeBatch(RowBatch *out_batch, RowBatch *probe_batch, int max_added_rows)
std::vector< ExprContext * > other_join_conjunct_ctxs_
non-equi-join conjuncts from the JOIN clause
void ProcessBuildBatch(RowBatch *build_batch)
Construct the build hash table, adding all the rows in 'build_batch'.
bool IR_NO_INLINE EvalOtherJoinConjuncts2(ExprContext *const *ctxs, int num_ctxs, TupleRow *row)
int64_t rows_returned() const
void IR_ALWAYS_INLINE Next()
void CopyRow(TupleRow *src, TupleRow *dest)
static bool EvalConjuncts(ExprContext *const *ctxs, int num_ctxs, TupleRow *row)
TupleRow * semi_join_staging_row_
std::vector< ExprContext * > conjunct_ctxs_
bool match_one_build_
Match at most one build row to each probe row. Used in LEFT_SEMI_JOIN.
static const int INVALID_ROW_INDEX