Search in sources :

Example 6 with DMLResponseHandler

use of com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler in project dble by actiontech.

the class ExplainHandler method buildHandlerTree.

private static String buildHandlerTree(DMLResponseHandler endHandler, Map<String, RefHandlerInfo> refMap, Map<DMLResponseHandler, RefHandlerInfo> handlerMap, Map<String, Integer> nameMap, Set<String> dependencies) {
    String rootName = null;
    int mergeNodeSize = endHandler.getMerges().size();
    for (int i = 0; i < mergeNodeSize; i++) {
        DMLResponseHandler startHandler = endHandler.getMerges().get(i);
        MultiNodeMergeHandler mergeHandler = (MultiNodeMergeHandler) startHandler;
        List<BaseSelectHandler> mergeList = new ArrayList<>();
        mergeList.addAll(((MultiNodeMergeHandler) startHandler).getExeHandlers());
        String mergeNode = genHandlerName("MERGE", nameMap);
        RefHandlerInfo refInfo = new RefHandlerInfo(mergeNode, "MERGE");
        handlerMap.put(mergeHandler, refInfo);
        refMap.put(mergeNode, refInfo);
        for (BaseSelectHandler exeHandler : mergeList) {
            RouteResultsetNode rrss = exeHandler.getRrss();
            String dateNode = rrss.getName() + "." + rrss.getMultiplexNum();
            refInfo.addChild(dateNode);
            String type = "BASE SQL";
            if (dependencies != null && dependencies.size() > 0) {
                type += "(May No Need)";
            }
            RefHandlerInfo baseSQLInfo = new RefHandlerInfo(dateNode, type, rrss.getStatement());
            refMap.put(dateNode, baseSQLInfo);
            if (dependencies != null && dependencies.size() > 0) {
                baseSQLInfo.addAllStepChildren(dependencies);
            }
        }
        String mergeRootName = getAllNodesFromLeaf(mergeHandler, refMap, handlerMap, nameMap);
        if (rootName == null) {
            if (mergeRootName == null) {
                rootName = mergeNode;
            } else {
                rootName = mergeRootName;
            }
        }
    }
    return rootName;
}
Also used : DMLResponseHandler(com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler) RouteResultsetNode(com.actiontech.dble.route.RouteResultsetNode)

Example 7 with DMLResponseHandler

use of com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler in project dble by actiontech.

the class BaseHandlerBuilder method handleSubQuery.

private void handleSubQuery(final ReentrantLock lock, final Condition finishSubQuery, final AtomicBoolean finished, final AtomicInteger subNodes, final CopyOnWriteArrayList<ErrorPacket> errorPackets, final PlanNode planNode, final SubQueryHandler tempHandler) {
    DbleServer.getInstance().getComplexQueryExecutor().execute(new Runnable() {

        @Override
        public void run() {
            try {
                DMLResponseHandler endHandler = hBuilder.buildNode(session, planNode, false);
                endHandler.setNextHandler(tempHandler);
                CallBackHandler tempDone = new CallBackHandler() {

                    @Override
                    public void call() throws Exception {
                        if (tempHandler.getErrorPacket() != null) {
                            errorPackets.add(tempHandler.getErrorPacket());
                        }
                        subQueryFinished(subNodes, lock, finished, finishSubQuery);
                    }
                };
                tempHandler.setTempDoneCallBack(tempDone);
                HandlerBuilder.startHandler(endHandler);
            } catch (Exception e) {
                LOGGER.info("execute ItemScalarSubQuery error", e);
                ErrorPacket errorPackage = new ErrorPacket();
                errorPackage.setErrNo(ErrorCode.ER_UNKNOWN_ERROR);
                String errorMsg = e.getMessage() == null ? e.toString() : e.getMessage();
                errorPackage.setMessage(errorMsg.getBytes(StandardCharsets.UTF_8));
                errorPackets.add(errorPackage);
            }
        }
    });
}
Also used : CallBackHandler(com.actiontech.dble.backend.mysql.nio.handler.util.CallBackHandler) ErrorPacket(com.actiontech.dble.net.mysql.ErrorPacket) DMLResponseHandler(com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler) MySQLOutPutException(com.actiontech.dble.plan.common.exception.MySQLOutPutException)

Example 8 with DMLResponseHandler

use of com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler in project dble by actiontech.

the class BaseHandlerBuilder method handleSubQueryForExplain.

private void handleSubQueryForExplain(final ReentrantLock lock, final Condition finishSubQuery, final AtomicBoolean finished, final AtomicInteger subNodes, final PlanNode planNode, final SubQueryHandler tempHandler) {
    tempHandler.setForExplain();
    BaseHandlerBuilder builder = hBuilder.getBuilder(session, planNode, true);
    DMLResponseHandler endHandler = builder.getEndHandler();
    endHandler.setNextHandler(tempHandler);
    this.getSubQueryBuilderList().add(builder);
    subQueryFinished(subNodes, lock, finished, finishSubQuery);
    return;
}
Also used : DMLResponseHandler(com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler)

Example 9 with DMLResponseHandler

use of com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler in project dble by actiontech.

the class HandlerBuilder method build.

public void build(boolean hasNext) throws Exception {
    final long startTime = System.nanoTime();
    DMLResponseHandler endHandler = buildNode(session, node, false);
    OutputHandler fh = new OutputHandler(BaseHandlerBuilder.getSequenceId(), session, hasNext);
    endHandler.setNextHandler(fh);
    HandlerBuilder.startHandler(fh);
    long endTime = System.nanoTime();
    logger.info("HandlerBuilder.build cost:" + (endTime - startTime));
}
Also used : DMLResponseHandler(com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler) OutputHandler(com.actiontech.dble.backend.mysql.nio.handler.query.impl.OutputHandler)

Example 10 with DMLResponseHandler

use of com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler in project dble by actiontech.

the class HandlerBuilder method startHandler.

/**
 * start all leaf handler of children of special handler
 */
public static void startHandler(DMLResponseHandler handler) throws Exception {
    for (DMLResponseHandler startHandler : handler.getMerges()) {
        MultiNodeMergeHandler mergeHandler = (MultiNodeMergeHandler) startHandler;
        mergeHandler.execute();
    }
}
Also used : DMLResponseHandler(com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler) MultiNodeMergeHandler(com.actiontech.dble.backend.mysql.nio.handler.query.impl.MultiNodeMergeHandler)

Aggregations

DMLResponseHandler (com.actiontech.dble.backend.mysql.nio.handler.query.DMLResponseHandler)13 MySQLOutPutException (com.actiontech.dble.plan.common.exception.MySQLOutPutException)3 PlanNode (com.actiontech.dble.plan.node.PlanNode)3 ArrayList (java.util.ArrayList)3 CallBackHandler (com.actiontech.dble.backend.mysql.nio.handler.util.CallBackHandler)2 MultiNodeMergeHandler (com.actiontech.dble.backend.mysql.nio.handler.query.impl.MultiNodeMergeHandler)1 OrderByHandler (com.actiontech.dble.backend.mysql.nio.handler.query.impl.OrderByHandler)1 OutputHandler (com.actiontech.dble.backend.mysql.nio.handler.query.impl.OutputHandler)1 TempTableHandler (com.actiontech.dble.backend.mysql.nio.handler.query.impl.TempTableHandler)1 ErrorPacket (com.actiontech.dble.net.mysql.ErrorPacket)1 Item (com.actiontech.dble.plan.common.item.Item)1 ItemString (com.actiontech.dble.plan.common.item.ItemString)1 TableNode (com.actiontech.dble.plan.node.TableNode)1 RouteResultsetNode (com.actiontech.dble.route.RouteResultsetNode)1