use of io.mycat.net.mysql.FieldPacket in project Mycat-Server by MyCATApache.
the class ShowDatabases method response.
public static void response(ServerConnection c) {
ByteBuffer buffer = c.allocate();
// write header
buffer = header.write(buffer, c, true);
// write fields
for (FieldPacket field : fields) {
buffer = field.write(buffer, c, true);
}
// write eof
buffer = eof.write(buffer, c, true);
// write rows
byte packetId = eof.packetId;
MycatConfig conf = MycatServer.getInstance().getConfig();
Map<String, UserConfig> users = conf.getUsers();
UserConfig user = users == null ? null : users.get(c.getUser());
if (user != null) {
TreeSet<String> schemaSet = new TreeSet<String>();
Set<String> schemaList = user.getSchemas();
if (schemaList == null || schemaList.size() == 0) {
schemaSet.addAll(conf.getSchemas().keySet());
} else {
for (String schema : schemaList) {
schemaSet.add(schema);
}
}
for (String name : schemaSet) {
RowDataPacket row = new RowDataPacket(FIELD_COUNT);
row.add(StringUtil.encode(name, c.getCharset()));
row.packetId = ++packetId;
buffer = row.write(buffer, c, true);
}
}
// write last eof
EOFPacket lastEof = new EOFPacket();
lastEof.packetId = ++packetId;
buffer = lastEof.write(buffer, c, true);
// post write
c.write(buffer);
}
use of io.mycat.net.mysql.FieldPacket in project Mycat-Server by MyCATApache.
the class ShowFullTables method response.
/**
* response method.
* @param c
*/
public static void response(ServerConnection c, String stmt, int type) {
String showSchemal = SchemaUtil.parseShowTableSchema(stmt);
String cSchema = showSchemal == null ? c.getSchema() : showSchemal;
SchemaConfig schema = MycatServer.getInstance().getConfig().getSchemas().get(cSchema);
if (schema != null) {
//不分库的schema,show tables从后端 mysql中查
String node = schema.getDataNode();
if (!Strings.isNullOrEmpty(node)) {
c.execute(stmt, ServerParse.SHOW);
return;
}
} else {
c.writeErrMessage(ErrorCode.ER_NO_DB_ERROR, "No database selected");
}
//分库的schema,直接从SchemaConfig中获取所有表名
Map<String, String> parm = buildFields(c, stmt);
Set<String> tableSet = getTableSet(c, parm);
int i = 0;
byte packetId = 0;
header.packetId = ++packetId;
fields[i] = PacketUtil.getField("Tables in " + parm.get(SCHEMA_KEY), Fields.FIELD_TYPE_VAR_STRING);
fields[i].packetId = ++packetId;
fields[i + 1] = PacketUtil.getField("Table_type ", Fields.FIELD_TYPE_VAR_STRING);
fields[i + 1].packetId = ++packetId;
eof.packetId = ++packetId;
ByteBuffer buffer = c.allocate();
// write header
buffer = header.write(buffer, c, true);
// write fields
for (FieldPacket field : fields) {
buffer = field.write(buffer, c, true);
}
// write eof
buffer = eof.write(buffer, c, true);
// write rows
packetId = eof.packetId;
for (String name : tableSet) {
RowDataPacket row = new RowDataPacket(FIELD_COUNT);
row.add(StringUtil.encode(name.toLowerCase(), c.getCharset()));
row.add(StringUtil.encode("BASE TABLE", c.getCharset()));
row.packetId = ++packetId;
buffer = row.write(buffer, c, true);
}
// write last eof
EOFPacket lastEof = new EOFPacket();
lastEof.packetId = ++packetId;
buffer = lastEof.write(buffer, c, true);
// post write
c.write(buffer);
}
use of io.mycat.net.mysql.FieldPacket in project Mycat-Server by MyCATApache.
the class OneRawSQLQueryResultHandler method onHeader.
public void onHeader(String dataNode, byte[] header, List<byte[]> fields) {
fieldCount = fields.size();
fetchColPosMap = new HashMap<String, Integer>();
for (String watchFd : fetchCols) {
for (int i = 0; i < fieldCount; i++) {
byte[] field = fields.get(i);
FieldPacket fieldPkg = new FieldPacket();
fieldPkg.read(field);
String fieldName = new String(fieldPkg.name);
if (watchFd.equalsIgnoreCase(fieldName)) {
fetchColPosMap.put(fieldName, i);
}
}
}
}
use of io.mycat.net.mysql.FieldPacket in project Mycat-Server by MyCATApache.
the class PacketUtil method getField.
public static final FieldPacket getField(String name, String orgName, int type) {
FieldPacket packet = new FieldPacket();
packet.charsetIndex = CharsetUtil.getIndex(CODE_PAGE_1252);
packet.name = encode(name, CODE_PAGE_1252);
packet.orgName = encode(orgName, CODE_PAGE_1252);
packet.type = (byte) type;
return packet;
}
Aggregations