/*
* 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.server;
import org.pmw.tinylog.Logger;
import fm.liu.timo.net.handler.FrontendQueryHandler;
import fm.liu.timo.server.handler.BeginHandler;
import fm.liu.timo.server.handler.CommitHandler;
import fm.liu.timo.server.handler.ExplainHandler;
import fm.liu.timo.server.handler.KillHandler;
import fm.liu.timo.server.handler.KillQueryHandler;
import fm.liu.timo.server.handler.RollbackHandler;
import fm.liu.timo.server.handler.SavepointHandler;
import fm.liu.timo.server.handler.SelectHandler;
import fm.liu.timo.server.handler.ServerPrepareHandler;
import fm.liu.timo.server.handler.SetHandler;
import fm.liu.timo.server.handler.ShowHandler;
import fm.liu.timo.server.handler.StartHandler;
import fm.liu.timo.server.handler.UseHandler;
import fm.liu.timo.server.parser.ServerParse;
/**
* @author xianmao.hexm
*/
public class ServerQueryHandler implements FrontendQueryHandler {
private final ServerConnection source;
public ServerQueryHandler(ServerConnection source) {
this.source = source;
}
@Override
public void query(String sql) {
ServerConnection c = this.source;
if (Logger.isDebugEnabled()) {
Logger.debug("SQL:'{}' from {}", sql, c);
}
int rs = ServerParse.parse(sql);
switch (rs & 0xff) {
case ServerParse.EXPLAIN:
ExplainHandler.handle(sql, c, rs >>> 8);
break;
case ServerParse.SET:
SetHandler.handle(sql, c, rs >>> 8);
break;
case ServerParse.SHOW:
ShowHandler.handle(sql, c, rs >>> 8);
break;
case ServerParse.SELECT:
SelectHandler.handle(sql, c, rs >>> 8);
break;
case ServerParse.START:
StartHandler.handle(sql, c, rs >>> 8);
break;
case ServerParse.BEGIN:
BeginHandler.handle(sql, c);
break;
case ServerParse.SAVEPOINT:
SavepointHandler.handle(sql, c);
break;
case ServerParse.KILL:
KillHandler.handle(sql, rs >>> 8, c);
break;
case ServerParse.KILL_QUERY:
KillQueryHandler.handle(sql, rs >>> 8, c);
break;
case ServerParse.USE:
UseHandler.handle(sql, c, rs >>> 8);
break;
case ServerParse.COMMIT:
CommitHandler.handle(c);
break;
case ServerParse.ROLLBACK:
RollbackHandler.handle(c);
break;
case ServerParse.PREPARE:
ServerPrepareHandler.prepare(sql, c);
break;
case ServerParse.EXECUTE:
ServerPrepareHandler.execute(sql, c);
break;
case ServerParse.DROP_PREPARE:
ServerPrepareHandler.close(sql, c);
break;
default:
c.execute(sql, rs);
}
}
}