/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 com.google.code.or.net.impl.packet;
import java.io.IOException;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import com.google.code.or.common.glossary.column.StringColumn;
import com.google.code.or.io.util.XDeserializer;
import com.google.code.or.io.util.XSerializer;
import com.google.code.or.net.Packet;
/**
*
* @author Jingqi Xu
*/
public class ResultSetFieldPacket extends AbstractPacket {
//
private static final long serialVersionUID = -6484191963940716299L;
//
private StringColumn catalog;
private StringColumn db;
private StringColumn table;
private StringColumn orginalTable;
private StringColumn column;
private StringColumn originalColumn;
private int fixed12;
private int charset;
private long fieldLength;
private int fieldType;
private int fieldOptions;
private int decimalPrecision;
private int reserved;
private StringColumn defaultValue; // Optional
/**
*
*/
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
.append("catalog", catalog)
.append("db", db)
.append("table", table)
.append("orginalTable", orginalTable)
.append("column", column)
.append("originalColumn", originalColumn)
.append("fixed12", fixed12)
.append("charset", charset)
.append("fieldLength", fieldLength)
.append("fieldType", fieldType)
.append("fieldOptions", fieldOptions)
.append("decimalPrecision", decimalPrecision)
.append("reserved", reserved)
.append("defaultValue", defaultValue).toString();
}
/**
*
*/
public byte[] getPacketBody() {
final XSerializer s = new XSerializer(256);
s.writeLengthCodedString(this.catalog);
s.writeLengthCodedString(this.db);
s.writeLengthCodedString(this.table);
s.writeLengthCodedString(this.orginalTable);
s.writeLengthCodedString(this.column);
s.writeLengthCodedString(this.originalColumn);
s.writeInt(this.fixed12, 1);
s.writeInt(this.charset, 2);
s.writeLong(this.fieldLength, 4);
s.writeInt(this.fieldType, 1);
s.writeInt(this.fieldOptions, 2);
s.writeInt(this.decimalPrecision, 1);
s.writeInt(this.reserved, 2);
if(this.defaultValue != null) s.writeLengthCodedString(this.defaultValue);
return s.toByteArray();
}
/**
*
*/
public StringColumn getCatalog() {
return catalog;
}
public void setCatalog(StringColumn catalog) {
this.catalog = catalog;
}
public StringColumn getDb() {
return db;
}
public void setDb(StringColumn db) {
this.db = db;
}
public StringColumn getTable() {
return table;
}
public void setTable(StringColumn table) {
this.table = table;
}
public StringColumn getOrginalTable() {
return orginalTable;
}
public void setOrginalTable(StringColumn orginalTable) {
this.orginalTable = orginalTable;
}
public StringColumn getColumn() {
return column;
}
public void setColumn(StringColumn column) {
this.column = column;
}
public StringColumn getOriginalColumn() {
return originalColumn;
}
public void setOriginalColumn(StringColumn originalColumn) {
this.originalColumn = originalColumn;
}
public int getFixed12() {
return fixed12;
}
public void setFixed12(int fixed12) {
this.fixed12 = fixed12;
}
public int getCharset() {
return charset;
}
public void setCharset(int charset) {
this.charset = charset;
}
public long getFieldLength() {
return fieldLength;
}
public void setFieldLength(long fieldLength) {
this.fieldLength = fieldLength;
}
public int getFieldType() {
return fieldType;
}
public void setFieldType(int fieldType) {
this.fieldType = fieldType;
}
public int getFieldOptions() {
return fieldOptions;
}
public void setFieldOptions(int fieldOptions) {
this.fieldOptions = fieldOptions;
}
public int getDecimalPrecision() {
return decimalPrecision;
}
public void setDecimalPrecision(int decimalPrecision) {
this.decimalPrecision = decimalPrecision;
}
public int getReserved() {
return reserved;
}
public void setReserved(int reserved) {
this.reserved = reserved;
}
public StringColumn getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(StringColumn defaultValue) {
this.defaultValue = defaultValue;
}
/**
*
*/
public static ResultSetFieldPacket valueOf(Packet packet) throws IOException {
final XDeserializer d = new XDeserializer(packet.getPacketBody());
final ResultSetFieldPacket r = new ResultSetFieldPacket();
r.fieldLength = packet.getLength();
r.sequence = packet.getSequence();
r.catalog = d.readLengthCodedString();
r.db = d.readLengthCodedString();
r.table = d.readLengthCodedString();
r.orginalTable = d.readLengthCodedString();
r.column = d.readLengthCodedString();
r.originalColumn = d.readLengthCodedString();
r.fixed12 = d.readInt(1);
r.charset = d.readInt(2);
r.fieldLength = d.readLong(4);
r.fieldType = d.readInt(1);
r.fieldOptions = d.readInt(2);
r.decimalPrecision = d.readInt(1);
r.reserved = d.readInt(2);
if(d.available() > 0) r.defaultValue = d.readLengthCodedString();
return r;
}
}