package com.taobao.tddl.executor.handler; import com.taobao.tddl.common.exception.TddlException; import com.taobao.tddl.executor.common.ExecutionContext; import com.taobao.tddl.executor.common.ExecutorContext; import com.taobao.tddl.executor.cursor.ISchematicCursor; import com.taobao.tddl.executor.spi.IRepository; import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor; import com.taobao.tddl.optimizer.core.plan.IQueryTree; import com.taobao.tddl.optimizer.core.plan.query.IJoin; public class NestedLoopJoinHandler extends QueryHandlerCommon { public NestedLoopJoinHandler(){ super(); } @Override protected ISchematicCursor doQuery(ISchematicCursor cursor, IDataNodeExecutor executor, ExecutionContext executionContext) throws TddlException { IJoin join = (IJoin) executor; IRepository repo = executionContext.getCurrentRepository(); IQueryTree leftQuery = join.getLeftNode(); ISchematicCursor cursor_left = ExecutorContext.getContext() .getTopologyExecutor() .execByExecPlanNode(leftQuery, executionContext); ISchematicCursor cursor_right = ExecutorContext.getContext() .getTopologyExecutor() .execByExecPlanNode(join.getRightNode(), executionContext); cursor = repo.getCursorFactory().blockNestedLoopJoinCursor(executionContext, cursor_left, cursor_right, join.getLeftJoinOnColumns(), join.getRightJoinOnColumns(), join.getColumns(), join); return cursor; } }