// Path: src/main/java/fm/liu/timo/server/response/SelectIdentity.java
// public class SelectIdentity {
// 
//     private static final int                   FIELD_COUNT = 1;
//     private static final ResultSetHeaderPacket header      = PacketUtil.getHeader(FIELD_COUNT);
// 
//     static {
//         byte packetId = 0;
//         header.packetId = ++packetId;
//     }
// 
//     public static void response(ServerConnection c, String stmt, int aliasIndex,
//             final String orgName) {
//         String alias = ParseUtil.parseAlias(stmt, aliasIndex);
//         if (alias == null) {
//             alias = orgName;
//         }
// 
//         ByteBuffer buffer = c.allocate();
// 
//         // write header
//         buffer = header.write(buffer, c);
// 
//         // write fields
//         byte packetId = header.packetId;
//         FieldPacket field = PacketUtil.getField(alias, orgName, Fields.FIELD_TYPE_LONGLONG);
//         field.packetId = ++packetId;
//         buffer = field.write(buffer, c);
// 
//         // write eof
//         EOFPacket eof = new EOFPacket();
//         eof.packetId = ++packetId;
//         buffer = eof.write(buffer, c);
// 
//         // write rows
//         RowDataPacket row = new RowDataPacket(FIELD_COUNT);
//         row.add(LongUtil.toBytes(c.getLastInsertId()));
//         row.packetId = ++packetId;
//         buffer = row.write(buffer, c);
// 
//         // write last eof
//         EOFPacket lastEof = new EOFPacket();
//         lastEof.packetId = ++packetId;
//         buffer = lastEof.write(buffer, c);
// 
//         // post write
//         c.write(buffer);
//     }
// 
// }
// 
// Path: src/main/java/fm/liu/timo/server/response/SelectVersion.java
// public class SelectVersion {
// 
//     private static final int                   FIELD_COUNT = 1;
//     private static final ResultSetHeaderPacket header      = PacketUtil.getHeader(FIELD_COUNT);
//     private static final FieldPacket[]         fields      = new FieldPacket[FIELD_COUNT];
//     private static final EOFPacket             eof         = new EOFPacket();
// 
//     static {
//         int i = 0;
//         byte packetId = 0;
//         header.packetId = ++packetId;
//         fields[i] = PacketUtil.getField("VERSION()", Fields.FIELD_TYPE_VAR_STRING);
//         fields[i++].packetId = ++packetId;
//         eof.packetId = ++packetId;
//     }
// 
//     public static void response(ServerConnection c) {
//         ByteBuffer buffer = c.allocate();
//         buffer = header.write(buffer, c);
//         for (FieldPacket field : fields) {
//             buffer = field.write(buffer, c);
//         }
//         buffer = eof.write(buffer, c);
//         byte packetId = eof.packetId;
//         RowDataPacket row = new RowDataPacket(FIELD_COUNT);
//         row.add(Versions.SERVER_VERSION);
//         row.packetId = ++packetId;
//         buffer = row.write(buffer, c);
//         EOFPacket lastEof = new EOFPacket();
//         lastEof.packetId = ++packetId;
//         buffer = lastEof.write(buffer, c);
//         c.write(buffer);
//     }
// 
// }


import fm.liu.timo.parser.util.ParseUtil;
import fm.liu.timo.server.ServerConnection;
import fm.liu.timo.server.parser.ServerParse;
import fm.liu.timo.server.parser.ServerParseSelect;
import fm.liu.timo.server.response.SelectDatabase;
import fm.liu.timo.server.response.SelectIdentity;
import fm.liu.timo.server.response.SelectLastInsertId;
import fm.liu.timo.server.response.SelectUser;
import fm.liu.timo.server.response.SelectVersion;
import fm.liu.timo.server.response.SelectVersionComment;
/*
 * 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.handler;


/**
 * @author xianmao.hexm
 */
public final class SelectHandler {

    public static void handle(String stmt, ServerConnection c, int offs) {
        int offset = offs;
        switch (ServerParseSelect.parse(stmt, offs)) {
            case ServerParseSelect.VERSION_COMMENT:
                SelectVersionComment.response(c);
                break;
            case ServerParseSelect.DATABASE:
                SelectDatabase.response(c);
                break;
            case ServerParseSelect.USER:
                SelectUser.response(c);
                break;
            case ServerParseSelect.VERSION:
// Path: src/main/java/fm/liu/timo/server/response/SelectIdentity.java
// public class SelectIdentity {
// 
//     private static final int                   FIELD_COUNT = 1;
//     private static final ResultSetHeaderPacket header      = PacketUtil.getHeader(FIELD_COUNT);
// 
//     static {
//         byte packetId = 0;
//         header.packetId = ++packetId;
//     }
// 
//     public static void response(ServerConnection c, String stmt, int aliasIndex,
//             final String orgName) {
//         String alias = ParseUtil.parseAlias(stmt, aliasIndex);
//         if (alias == null) {
//             alias = orgName;
//         }
// 
//         ByteBuffer buffer = c.allocate();
// 
//         // write header
//         buffer = header.write(buffer, c);
// 
//         // write fields
//         byte packetId = header.packetId;
//         FieldPacket field = PacketUtil.getField(alias, orgName, Fields.FIELD_TYPE_LONGLONG);
//         field.packetId = ++packetId;
//         buffer = field.write(buffer, c);
// 
//         // write eof
//         EOFPacket eof = new EOFPacket();
//         eof.packetId = ++packetId;
//         buffer = eof.write(buffer, c);
// 
//         // write rows
//         RowDataPacket row = new RowDataPacket(FIELD_COUNT);
//         row.add(LongUtil.toBytes(c.getLastInsertId()));
//         row.packetId = ++packetId;
//         buffer = row.write(buffer, c);
// 
//         // write last eof
//         EOFPacket lastEof = new EOFPacket();
//         lastEof.packetId = ++packetId;
//         buffer = lastEof.write(buffer, c);
// 
//         // post write
//         c.write(buffer);
//     }
// 
// }
// 
// Path: src/main/java/fm/liu/timo/server/response/SelectVersion.java
// public class SelectVersion {
// 
//     private static final int                   FIELD_COUNT = 1;
//     private static final ResultSetHeaderPacket header      = PacketUtil.getHeader(FIELD_COUNT);
//     private static final FieldPacket[]         fields      = new FieldPacket[FIELD_COUNT];
//     private static final EOFPacket             eof         = new EOFPacket();
// 
//     static {
//         int i = 0;
//         byte packetId = 0;
//         header.packetId = ++packetId;
//         fields[i] = PacketUtil.getField("VERSION()", Fields.FIELD_TYPE_VAR_STRING);
//         fields[i++].packetId = ++packetId;
//         eof.packetId = ++packetId;
//     }
// 
//     public static void response(ServerConnection c) {
//         ByteBuffer buffer = c.allocate();
//         buffer = header.write(buffer, c);
//         for (FieldPacket field : fields) {
//             buffer = field.write(buffer, c);
//         }
//         buffer = eof.write(buffer, c);
//         byte packetId = eof.packetId;
//         RowDataPacket row = new RowDataPacket(FIELD_COUNT);
//         row.add(Versions.SERVER_VERSION);
//         row.packetId = ++packetId;
//         buffer = row.write(buffer, c);
//         EOFPacket lastEof = new EOFPacket();
//         lastEof.packetId = ++packetId;
//         buffer = lastEof.write(buffer, c);
//         c.write(buffer);
//     }
// 
// }


// Path: src/main/java/fm/liu/timo/server/handler/SelectHandler.java
import fm.liu.timo.parser.util.ParseUtil;
import fm.liu.timo.server.ServerConnection;
import fm.liu.timo.server.parser.ServerParse;
import fm.liu.timo.server.parser.ServerParseSelect;
import fm.liu.timo.server.response.SelectDatabase;
import fm.liu.timo.server.response.SelectIdentity;
import fm.liu.timo.server.response.SelectLastInsertId;
import fm.liu.timo.server.response.SelectUser;
import fm.liu.timo.server.response.SelectVersion;
import fm.liu.timo.server.response.SelectVersionComment;

/*
 * 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.handler;


/**
 * @author xianmao.hexm
 */
public final class SelectHandler {

    public static void handle(String stmt, ServerConnection c, int offs) {
        int offset = offs;
        switch (ServerParseSelect.parse(stmt, offs)) {
            case ServerParseSelect.VERSION_COMMENT:
                SelectVersionComment.response(c);
                break;
            case ServerParseSelect.DATABASE:
                SelectDatabase.response(c);
                break;
            case ServerParseSelect.USER:
                SelectUser.response(c);
                break;
            case ServerParseSelect.VERSION:
                SelectVersion.response(c);