package com.meidusa.amoeba.aladdin.handler; import java.util.concurrent.CountDownLatch; import com.meidusa.amoeba.aladdin.io.PreparedResultPacket; import com.meidusa.amoeba.aladdin.io.ResultPacket; import com.meidusa.amoeba.context.ProxyRuntimeContext; import com.meidusa.amoeba.mysql.handler.PreparedStatmentInfo; import com.meidusa.amoeba.mysql.net.MysqlClientConnection; import com.meidusa.amoeba.net.DatabaseConnection; import com.meidusa.amoeba.net.poolable.ObjectPool; import com.meidusa.amoeba.net.poolable.PoolableObject; /** * @author struct * @author hexianmao */ public class PreparedStatmentMessageHandler extends CommandMessageHandler { protected static class PreparedQueryRunnable extends QueryRunnable { protected PreparedQueryRunnable(CountDownLatch latch, PoolableObject conn, String query, Object parameter, ResultPacket packet){ super(latch, conn, query, parameter, packet); } @Override protected void doRun(PoolableObject conn) { int count = ProxyRuntimeContext.getInstance().getQueryRouter().parseParameterCount((DatabaseConnection) this.source, query); PreparedResultPacket preparedPacket = (PreparedResultPacket) packet; PreparedStatmentInfo preparedInfo = (PreparedStatmentInfo) parameter; preparedPacket.setStatementId(preparedInfo.getStatmentId()); preparedPacket.setParameterCount(count); } } public PreparedStatmentMessageHandler(MysqlClientConnection conn, PreparedStatmentInfo preparedInf, ObjectPool[] pools, long timeout){ super(conn, preparedInf.getPreparedStatment(), preparedInf, pools, timeout); } @Override protected QueryRunnable newQueryRunnable(CountDownLatch latch, PoolableObject conn, String query, Object parameter, ResultPacket packet) { return new PreparedQueryRunnable(latch, conn, query, parameter, packet); } @Override protected ResultPacket newResultPacket(String query) { PreparedResultPacket resultPacket = new PreparedResultPacket(); return resultPacket; } }