// 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;
                            offset = ParseUtil.comment(stmt, offset);
                            continue;
                        case 'L':
                        case 'l':
                            break loop;
                    }
                }
                offset = ServerParseSelect.indexAfterLastInsertIdFunc(stmt, offset);
                offset = ServerParseSelect.skipAs(stmt, offset);
                SelectLastInsertId.response(c, stmt, offset);
                break;
            case ServerParseSelect.IDENTITY:
                // offset = ParseUtil.move(stmt, 0, "select".length());
                loop: for (; offset < stmt.length(); ++offset) {
                    switch (stmt.charAt(offset)) {
                        case ' ':
                            continue;
                        case '/':
                        case '#':
                            offset = ParseUtil.comment(stmt, offset);
                            continue;
                        case '@':
                            break loop;
                    }
                }
                int indexOfAtAt = offset;
                offset += 2;
                offset = ServerParseSelect.indexAfterIdentity(stmt, offset);
                String orgName = stmt.substring(indexOfAtAt, offset);
                offset = ServerParseSelect.skipAs(stmt, offset);
// 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;

                            offset = ParseUtil.comment(stmt, offset);
                            continue;
                        case 'L':
                        case 'l':
                            break loop;
                    }
                }
                offset = ServerParseSelect.indexAfterLastInsertIdFunc(stmt, offset);
                offset = ServerParseSelect.skipAs(stmt, offset);
                SelectLastInsertId.response(c, stmt, offset);
                break;
            case ServerParseSelect.IDENTITY:
                // offset = ParseUtil.move(stmt, 0, "select".length());
                loop: for (; offset < stmt.length(); ++offset) {
                    switch (stmt.charAt(offset)) {
                        case ' ':
                            continue;
                        case '/':
                        case '#':
                            offset = ParseUtil.comment(stmt, offset);
                            continue;
                        case '@':
                            break loop;
                    }
                }
                int indexOfAtAt = offset;
                offset += 2;
                offset = ServerParseSelect.indexAfterIdentity(stmt, offset);
                String orgName = stmt.substring(indexOfAtAt, offset);
                offset = ServerParseSelect.skipAs(stmt, offset);
                SelectIdentity.response(c, stmt, offset, orgName);