Commit 5596a7bf authored by terrymanu's avatar terrymanu
Browse files

support COM_INIT_DB

parent c6d1f55d
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
package io.shardingjdbc.server.packet.command;

import io.shardingjdbc.server.constant.StatusFlag;
import io.shardingjdbc.server.packet.AbstractMySQLSentPacket;
import io.shardingjdbc.server.packet.MySQLPacketPayload;
import io.shardingjdbc.server.packet.ok.ErrPacket;
import io.shardingjdbc.server.packet.ok.OKPacket;
import lombok.extern.slf4j.Slf4j;

import java.util.Collections;
import java.util.List;

/**
 * COM_INIT_DB command packet.
 * @see <a href="https://dev.mysql.com/doc/internals/en/com-init-db.html#packet-COM_INIT_DB">COM_INIT_DB</a>
 *
 * @author zhangliang
 */
@Slf4j
public final class ComInitDbPacket extends AbstractCommandPacket {
    
    private static final String LOGIC_DATABASE_NAME = "sharding_db";
    
    private String schemaName;
    
    @Override
    public ComInitDbPacket read(final MySQLPacketPayload mysqlPacketPayload) {
        schemaName = mysqlPacketPayload.readStringEOF();
        log.debug("Schema name received for Sharding-JDBC-server: {}", schemaName);
        return this;
    }
    
    @Override
    public List<AbstractMySQLSentPacket> execute() {
        if (LOGIC_DATABASE_NAME.equalsIgnoreCase(schemaName)) {
            return Collections.<AbstractMySQLSentPacket>singletonList(new OKPacket(getSequenceId() + 1, 0, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, ""));
        }
        return Collections.<AbstractMySQLSentPacket>singletonList(new ErrPacket(getSequenceId() + 1, 1049, "", "", String.format("Unknown database '%s'", schemaName)));
    }
}
+1 −3
Original line number Diff line number Diff line
@@ -4,7 +4,6 @@ import io.shardingjdbc.server.constant.StatusFlag;
import io.shardingjdbc.server.packet.AbstractMySQLSentPacket;
import io.shardingjdbc.server.packet.MySQLPacketPayload;
import io.shardingjdbc.server.packet.ok.OKPacket;
import lombok.RequiredArgsConstructor;

import java.util.Collections;
import java.util.List;
@@ -15,7 +14,6 @@ import java.util.List;
 *
 * @author zhangliang
 */
@RequiredArgsConstructor
public final class ComQuitPacket extends AbstractCommandPacket {
    
    @Override
@@ -25,6 +23,6 @@ public final class ComQuitPacket extends AbstractCommandPacket {
    
    @Override
    public List<AbstractMySQLSentPacket> execute() {
        return Collections.<AbstractMySQLSentPacket>singletonList(new OKPacket(getSequenceId() + 1, 0, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, "Quit OK"));
        return Collections.<AbstractMySQLSentPacket>singletonList(new OKPacket(getSequenceId() + 1, 0, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, ""));
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -12,10 +12,11 @@ public final class CommandPacketFactory {
        switch (type) {
            case COM_QUIT:
                return new ComQuitPacket();
            case COM_INIT_DB:
                return new ComInitDbPacket();
            case COM_QUERY:
                return new ComQueryPacket();
            case COM_SLEEP:
            case COM_INIT_DB:
            case COM_FIELD_LIST:
            case COM_CREATE_DB:
            case COM_DROP_DB: