/**
* Project: ${puma-parser.aid}
*
* File Created at 2012-6-24
* $Id$
*
* Copyright 2010 dianping.com.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Dianping Company. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with dianping.com.
*/
package com.dianping.puma.parser.mysql.event;
import com.dianping.puma.common.PumaContext;
import com.dianping.puma.parser.mysql.Metadata;
import com.dianping.puma.utils.PacketUtils;
import com.google.common.primitives.UnsignedLong;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.BitSet;
/**
* TODO Comment of TableMapEvent
*
* @author Leo Liang
*
*/
public class TableMapEvent extends AbstractBinlogEvent {
private static final long serialVersionUID = -6294463562672565471L;
private long tableId;
private int reserved;
private byte databaseNameLength;
private String databaseName;
private byte tableNameLength;
private String tableName;
private UnsignedLong columnCount;
private byte[] columnTypes;
private UnsignedLong columnMetadataCount;
private Metadata columnMetadata;
private BitSet columnNullabilities;
/**
* @return the tableId
*/
public long getTableId() {
return tableId;
}
/**
* @return the reserved
*/
public int getReserved() {
return reserved;
}
/**
* @return the databaseNameLength
*/
public byte getDatabaseNameLength() {
return databaseNameLength;
}
/**
* @return the databaseName
*/
public String getDatabaseName() {
return databaseName;
}
/**
* @return the tableNameLength
*/
public byte getTableNameLength() {
return tableNameLength;
}
/**
* @return the tableName
*/
public String getTableName() {
return tableName;
}
/**
* @return the columnCount
*/
public UnsignedLong getColumnCount() {
return columnCount;
}
/**
* @return the columnTypes
*/
public byte[] getColumnTypes() {
return columnTypes;
}
/**
* @return the columnMetadataCount
*/
public UnsignedLong getColumnMetadataCount() {
return columnMetadataCount;
}
/**
* @return the columnMetadata
*/
public Metadata getColumnMetadata() {
return columnMetadata;
}
/**
* @return the columnNullabilities
*/
public BitSet getColumnNullabilities() {
return columnNullabilities;
}
@Override
public String toString() {
return new ToStringBuilder(this).append("super", super.toString()).append("tableId", tableId)
.append("reserved", reserved).append("databaseNameLength", databaseNameLength)
.append("databaseName", databaseName).append("tableNameLength", tableNameLength)
.append("tableName", tableName).append("columnCount", columnCount).append("columnTypes", columnTypes)
.append("columnMetadataCount", columnMetadataCount).append("columnMetadata", columnMetadata)
.append("columnNullabilities", columnNullabilities).toString();
}
/*
* (non-Javadoc)
*
* @see com.dianping.puma.parser.mysql.event.AbstractBinlogEvent#doParse(java .nio.ByteBuffer,
* com.dianping.puma.common.bo.PumaContext)
*/
@Override
public void doParse(ByteBuffer buf, PumaContext context) throws IOException {
tableId = PacketUtils.readLong(buf, 6);
reserved = PacketUtils.readInt(buf, 2);
databaseNameLength = buf.get();
databaseName = PacketUtils.readNullTerminatedString(buf);
tableNameLength = buf.get();
tableName = PacketUtils.readNullTerminatedString(buf);
columnCount = PacketUtils.readLengthCodedUnsignedLong(buf);
columnTypes = PacketUtils.readBytes(buf, columnCount.intValue());
columnMetadataCount = PacketUtils.readLengthCodedUnsignedLong(buf);
columnMetadata = Metadata.valueOf(columnTypes, PacketUtils.readBytes(buf, columnMetadataCount.intValue()));
columnNullabilities = PacketUtils.readBitSet(buf, columnCount.intValue());
context.getTableMaps().put(tableId, this);
}
}