/*
* Copyright 1999-2012 Alibaba Group.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package fm.liu.timo.manager;
import org.pmw.tinylog.Logger;
import fm.liu.timo.manager.handler.DescHandler;
import fm.liu.timo.manager.handler.ReloadHandler;
import fm.liu.timo.manager.handler.RollbackHandler;
import fm.liu.timo.manager.handler.SelectHandler;
import fm.liu.timo.manager.handler.ShowHandler;
import fm.liu.timo.manager.handler.StopHandler;
import fm.liu.timo.manager.handler.HandoverHandler;
import fm.liu.timo.manager.parser.ManagerParse;
import fm.liu.timo.manager.response.KillConnection;
import fm.liu.timo.manager.response.Offline;
import fm.liu.timo.manager.response.Online;
import fm.liu.timo.manager.response.ResponseUtil;
import fm.liu.timo.mysql.packet.OkPacket;
import fm.liu.timo.net.handler.FrontendQueryHandler;
/**
* @author xianmao.hexm
*/
public class ManagerQueryHandler implements FrontendQueryHandler {
private final ManagerConnection source;
public ManagerQueryHandler(ManagerConnection source) {
this.source = source;
}
@Override
public void query(String sql) {
ManagerConnection c = this.source;
if (Logger.isDebugEnabled()) {
Logger.debug("SQL:'{}' from {}", sql, c);
}
int rs = ManagerParse.parse(sql);
switch (rs & 0xff) {
case ManagerParse.DESC:
DescHandler.handle(sql, c, rs);
break;
case ManagerParse.SELECT:
SelectHandler.handle(sql, c, rs >>> 8);
break;
case ManagerParse.SET:
c.write(c.writeToBuffer(OkPacket.OK, c.allocate()));
break;
case ManagerParse.SHOW:
ShowHandler.handle(sql, c, rs >>> 8);
break;
case ManagerParse.HANDOVER:
HandoverHandler.handler(sql, c, rs >>> 8);
break;
case ManagerParse.KILL_CONN:
KillConnection.response(sql, rs >>> 8, c);
break;
case ManagerParse.OFFLINE:
Offline.execute(sql, c);
break;
case ManagerParse.ONLINE:
Online.execute(sql, c);
break;
case ManagerParse.STOP:
StopHandler.handle(sql, c, rs >>> 8);
break;
case ManagerParse.RELOAD:
ReloadHandler.handle(sql, c, rs >>> 8);
break;
case ManagerParse.ROLLBACK:
RollbackHandler.handle(sql, c, rs >>> 8);
break;
default:
ResponseUtil.error(c);
}
}
}