com.tesora.dve.db.mysql.portal.MSPComStmtCloseRequest.java Source code

Java tutorial

Introduction

Here is the source code for com.tesora.dve.db.mysql.portal.MSPComStmtCloseRequest.java

Source

package com.tesora.dve.db.mysql.portal;

/*
 * #%L
 * Tesora Inc.
 * Database Virtualization Engine
 * %%
 * Copyright (C) 2011 - 2014 Tesora Inc.
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License, version 3,
 * as published by the Free Software Foundation.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 * #L%
 */

import java.util.concurrent.ExecutorService;

import com.tesora.dve.db.mysql.portal.protocol.MSPComStmtCloseRequestMessage;
import com.tesora.dve.db.mysql.portal.protocol.MSPMessage;
import io.netty.channel.ChannelHandlerContext;

import com.tesora.dve.db.mysql.MyPrepStmtConnectionContext;
import com.tesora.dve.db.mysql.libmy.MyPreparedStatement;
import com.tesora.dve.exceptions.PEException;
import com.tesora.dve.queryplan.QueryPlanner;
import com.tesora.dve.server.connectionmanager.SSConnection;

public class MSPComStmtCloseRequest extends MSPActionBase {

    public final static MSPComStmtCloseRequest INSTANCE = new MSPComStmtCloseRequest();

    @Override
    public void execute(ExecutorService clientExecutorService, ChannelHandlerContext ctx, SSConnection ssCon,
            MSPMessage protocolMessage) throws PEException {

        MSPComStmtCloseRequestMessage stmtCloseMessage = castProtocolMessage(MSPComStmtCloseRequestMessage.class,
                protocolMessage);
        Long stmtId = stmtCloseMessage.getStatementID();

        MyPrepStmtConnectionContext mpscc = ctx.attr(MyPrepStmtConnectionContext.PSTMT_CONTEXT_KEY).get();
        MyPreparedStatement<String> pStmt = mpscc.getPreparedStatement(stmtId);
        if (pStmt == null) {
            throw new PEException(
                    "A prepared statement with id " + stmtId + " could not be found in the connection's context");
        }
        mpscc.removePreparedStatement(stmtId);
        QueryPlanner.destroyPreparedStatement(ssCon, Long.toString(stmtId));
    }

    @Override
    public byte getMysqlMessageType() {
        return (byte) 0x19;
    }

}