package org.wonderdb.serialize.metadata;
import org.jboss.netty.buffer.ChannelBuffer;
import org.wonderdb.serialize.Serializer;
import org.wonderdb.serialize.SerializerManager;
import org.wonderdb.serialize.TypeSerializer;
import org.wonderdb.types.ColumnNameMeta;
import org.wonderdb.types.DBType;
import org.wonderdb.types.StringType;
import org.wonderdb.types.TypeMetadata;
public class ColumnNameMetaSerializer implements TypeSerializer {
public static final ColumnNameMetaSerializer instance = new ColumnNameMetaSerializer();
private ColumnNameMetaSerializer() {
}
public static final ColumnNameMetaSerializer getInstance() {
return instance;
}
@Override
public DBType unmarshal(int type, ChannelBuffer buffer, TypeMetadata meta) {
int coulmnId = buffer.readInt();
String columnName = ((StringType) Serializer.getInstance().getObject(SerializerManager.STRING, buffer, meta)).get();
String collectioName = ((StringType) Serializer.getInstance().getObject(SerializerManager.STRING, buffer, meta)).get();
int columnType = buffer.readInt();
boolean isNull = buffer.readByte() > 0 ? true : false;
boolean isVirtual = buffer.readByte() > 0 ? true : false;
ColumnNameMeta cnm = new ColumnNameMeta();
cnm.setCollectioName(collectioName);
cnm.setColumnName(columnName);
cnm.setColumnType(coulmnId);
cnm.setNull(isNull);
cnm.setColumnType(columnType);
cnm.setVirtual(isVirtual);
return cnm;
}
@Override
public void toBytes(DBType object, ChannelBuffer buffer, TypeMetadata meta) {
ColumnNameMeta cnm = (ColumnNameMeta) object;
buffer.writeInt(cnm.getCoulmnId());
Serializer.getInstance().serialize(SerializerManager.STRING, new StringType(cnm.getColumnName()), buffer, meta);
Serializer.getInstance().serialize(SerializerManager.STRING, new StringType(cnm.getCollectioName()), buffer, meta);
buffer.writeInt(cnm.getColumnType());
buffer.writeByte(cnm.isNull() ? 1 : 0);
buffer.writeByte(cnm.isVirtual() ? 1 : 0);
}
@Override
public int getSize(DBType object, TypeMetadata meta) {
ColumnNameMeta cnm = (ColumnNameMeta) object;
int size = Integer.SIZE/8;
size = size + Serializer.getInstance().getObjectSize(SerializerManager.STRING, new StringType(cnm.getColumnName()), meta);
size = size + Serializer.getInstance().getObjectSize(SerializerManager.STRING, new StringType(cnm.getCollectioName()), meta);
size = size + Integer.SIZE/8;
size = size + 1;
return size;
}
@Override
public boolean isNull(int type, DBType object) {
return false;
}
@Override
public DBType getNull(int type) {
return null;
}
@Override
public int getSQLType(int type) {
throw new RuntimeException("Method not supported");
}
@Override
public DBType convert(int type, StringType st) {
throw new RuntimeException("Method not supported");
}
}