Search in sources :

Example 36 with RouteResultsetNode

use of io.mycat.route.RouteResultsetNode in project Mycat-Server by MyCATApache.

the class ServerLoadDataInfileHandler method parseOneLine.

private void parseOneLine(List<SQLExpr> columns, String tableName, String[] line, boolean toFile, String lineEnd) {
    RouteResultset rrs = tryDirectRoute(sql, line);
    if (rrs == null || rrs.getNodes() == null || rrs.getNodes().length == 0) {
        String insertSql = makeSimpleInsert(columns, line, tableName, true);
        rrs = serverConnection.routeSQL(insertSql, ServerParse.INSERT);
    }
    if (rrs == null || rrs.getNodes() == null || rrs.getNodes().length == 0) {
    //无路由处理
    } else {
        for (RouteResultsetNode routeResultsetNode : rrs.getNodes()) {
            String name = routeResultsetNode.getName();
            LoadData data = routeResultMap.get(name);
            if (data == null) {
                data = new LoadData();
                data.setCharset(loadData.getCharset());
                data.setEnclose(loadData.getEnclose());
                data.setFieldTerminatedBy(loadData.getFieldTerminatedBy());
                data.setLineTerminatedBy(loadData.getLineTerminatedBy());
                data.setEscape(loadData.getEscape());
                routeResultMap.put(name, data);
            }
            String jLine = joinField(line, data);
            if (shoudAddSlot) {
                jLine = jLine + loadData.getFieldTerminatedBy() + routeResultsetNode.getSlot();
            }
            if (data.getData() == null) {
                data.setData(Lists.newArrayList(jLine));
            } else {
                data.getData().add(jLine);
            }
            if (toFile && //避免当导入数据跨多分片时内存溢出的情况
            data.getData().size() > 10000) {
                saveDataToFile(data, name);
            }
        }
    }
}
Also used : LoadData(io.mycat.sqlengine.mpp.LoadData) RouteResultsetNode(io.mycat.route.RouteResultsetNode) RouteResultset(io.mycat.route.RouteResultset)

Example 37 with RouteResultsetNode

use of io.mycat.route.RouteResultsetNode in project Mycat-Server by MyCATApache.

the class Explain2Handler method handle.

public static void handle(String stmt, ServerConnection c, int offset) {
    try {
        stmt = stmt.substring(offset);
        if (!stmt.toLowerCase().contains("datanode=") || !stmt.toLowerCase().contains("sql=")) {
            showerror(stmt, c, "explain2 datanode=? sql=?");
            return;
        }
        String dataNode = stmt.substring(stmt.indexOf("=") + 1, stmt.indexOf("sql=")).trim();
        String sql = "explain " + stmt.substring(stmt.indexOf("sql=") + 4, stmt.length()).trim();
        if (dataNode == null || dataNode.isEmpty() || sql == null || sql.isEmpty()) {
            showerror(stmt, c, "dataNode or sql is null or empty");
            return;
        }
        RouteResultsetNode node = new RouteResultsetNode(dataNode, ServerParse.SELECT, sql);
        RouteResultset rrs = new RouteResultset(sql, ServerParse.SELECT);
        node.setSource(rrs);
        EMPTY_ARRAY[0] = node;
        rrs.setNodes(EMPTY_ARRAY);
        SingleNodeHandler singleNodeHandler = new SingleNodeHandler(rrs, c.getSession2());
        singleNodeHandler.execute();
    } catch (Exception e) {
        logger.error(e.getMessage(), e.getCause());
        showerror(stmt, c, e.getMessage());
    }
}
Also used : SingleNodeHandler(io.mycat.backend.mysql.nio.handler.SingleNodeHandler) RouteResultsetNode(io.mycat.route.RouteResultsetNode) RouteResultset(io.mycat.route.RouteResultset)

Example 38 with RouteResultsetNode

use of io.mycat.route.RouteResultsetNode in project Mycat-Server by MyCATApache.

the class ExplainHandler method handle.

public static void handle(String stmt, ServerConnection c, int offset) {
    stmt = stmt.substring(offset).trim();
    RouteResultset rrs = getRouteResultset(c, stmt);
    if (rrs == null) {
        return;
    }
    ByteBuffer buffer = c.allocate();
    // write header
    ResultSetHeaderPacket header = PacketUtil.getHeader(FIELD_COUNT);
    byte packetId = header.packetId;
    buffer = header.write(buffer, c, true);
    // write fields
    for (FieldPacket field : fields) {
        field.packetId = ++packetId;
        buffer = field.write(buffer, c, true);
    }
    // write eof
    EOFPacket eof = new EOFPacket();
    eof.packetId = ++packetId;
    buffer = eof.write(buffer, c, true);
    // write rows
    RouteResultsetNode[] rrsn = rrs.getNodes();
    for (RouteResultsetNode node : rrsn) {
        RowDataPacket row = getRow(node, c.getCharset());
        row.packetId = ++packetId;
        buffer = row.write(buffer, c, true);
    }
    // write last eof
    EOFPacket lastEof = new EOFPacket();
    lastEof.packetId = ++packetId;
    buffer = lastEof.write(buffer, c, true);
    // post write
    c.write(buffer);
}
Also used : ResultSetHeaderPacket(io.mycat.net.mysql.ResultSetHeaderPacket) RouteResultsetNode(io.mycat.route.RouteResultsetNode) RowDataPacket(io.mycat.net.mysql.RowDataPacket) EOFPacket(io.mycat.net.mysql.EOFPacket) ByteBuffer(java.nio.ByteBuffer) FieldPacket(io.mycat.net.mysql.FieldPacket) RouteResultset(io.mycat.route.RouteResultset)

Example 39 with RouteResultsetNode

use of io.mycat.route.RouteResultsetNode in project Mycat-Server by MyCATApache.

the class SQLJob method run.

public void run() {
    try {
        if (ds == null) {
            RouteResultsetNode node = new RouteResultsetNode(dataNodeOrDatabase, ServerParse.SELECT, sql);
            // create new connection
            MycatConfig conf = MycatServer.getInstance().getConfig();
            PhysicalDBNode dn = conf.getDataNodes().get(node.getName());
            dn.getConnection(dn.getDatabase(), true, node, this, node);
        } else {
            ds.getConnection(dataNodeOrDatabase, true, this, null);
        }
    } catch (Exception e) {
        LOGGER.info("can't get connection for sql ,error:", e);
        doFinished(true, e.getMessage());
    }
}
Also used : PhysicalDBNode(io.mycat.backend.datasource.PhysicalDBNode) RouteResultsetNode(io.mycat.route.RouteResultsetNode) MycatConfig(io.mycat.config.MycatConfig)

Example 40 with RouteResultsetNode

use of io.mycat.route.RouteResultsetNode in project Mycat-Server by MyCATApache.

the class DataMergeService method getResults.

/**
	 * return merged data
	 * @return (最多i*(offset+size)行数据)
	 */
public List<RowDataPacket> getResults(byte[] eof) {
    List<RowDataPacket> tmpResult = null;
    if (this.grouper != null) {
        tmpResult = grouper.getResult();
        grouper = null;
    }
    if (sorter != null) {
        if (tmpResult != null) {
            Iterator<RowDataPacket> itor = tmpResult.iterator();
            while (itor.hasNext()) {
                sorter.addRow(itor.next());
                itor.remove();
            }
        }
        tmpResult = sorter.getSortedResult();
        sorter = null;
    }
    //no grouper and sorter
    if (tmpResult == null) {
        tmpResult = new LinkedList<RowDataPacket>();
        for (RouteResultsetNode node : rrs.getNodes()) {
            tmpResult.addAll(result.get(node.getName()));
        }
    }
    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug("prepare mpp merge result for " + rrs.getStatement());
    }
    return tmpResult;
}
Also used : RowDataPacket(io.mycat.net.mysql.RowDataPacket) RouteResultsetNode(io.mycat.route.RouteResultsetNode)

Aggregations

RouteResultsetNode (io.mycat.route.RouteResultsetNode)43 RouteResultset (io.mycat.route.RouteResultset)15 SQLNonTransientException (java.sql.SQLNonTransientException)8 BackendConnection (io.mycat.backend.BackendConnection)7 PhysicalDBNode (io.mycat.backend.datasource.PhysicalDBNode)7 MycatConfig (io.mycat.config.MycatConfig)7 SchemaConfig (io.mycat.config.model.SchemaConfig)7 SystemConfig (io.mycat.config.model.SystemConfig)7 TableConfig (io.mycat.config.model.TableConfig)4 SlotFunction (io.mycat.route.function.SlotFunction)4 SQLStatement (com.alibaba.druid.sql.ast.SQLStatement)3 MySqlStatementParser (com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser)3 RouteCalculateUnit (io.mycat.route.parser.druid.RouteCalculateUnit)3 IOException (java.io.IOException)3 HashMap (java.util.HashMap)3 SQLCharExpr (com.alibaba.druid.sql.ast.expr.SQLCharExpr)2 SQLExprTableSource (com.alibaba.druid.sql.ast.statement.SQLExprTableSource)2 SQLTableSource (com.alibaba.druid.sql.ast.statement.SQLTableSource)2 MySQLConnection (io.mycat.backend.mysql.nio.MySQLConnection)2 CachePool (io.mycat.cache.CachePool)2