/*
* Copyright (c) 2003, PostgreSQL Global Development Group
* See the LICENSE file in the project root for more information.
*/
package org.postgresql.core;
import org.postgresql.jdbc.
FieldMetadata;
/*
*/
public class
Field {
// The V3 protocol defines two constants for the format of data
public static final int
TEXT_FORMAT = 0;
public static final int
BINARY_FORMAT = 1;
private final int
length; // Internal Length of this field
private final int
oid; // OID of the type
private final int
mod; // type modifier of this field
private final
String columnLabel; // Column label
private int
format =
TEXT_FORMAT; // In the V3 protocol each field has a format
// 0 = text, 1 = binary
// In the V2 protocol all fields in a
// binary cursor are binary and all
// others are text
private final int
tableOid; // OID of table ( zero if no table )
private final int
positionInTable;
// Cache fields filled in by AbstractJdbc2ResultSetMetaData.fetchFieldMetaData.
// Don't use unless that has been called.
private
FieldMetadata metadata;
private int
sqlType;
private
String pgType =
NOT_YET_LOADED;
// New string to avoid clashes with other strings
private static final
String NOT_YET_LOADED = new
String("pgType is not yet loaded");
/**
* Construct a field based on the information fed to it.
*
* @param name the name (column name and label) of the field
* @param oid the OID of the field
* @param length the length of the field
* @param mod modifier
*/
public
Field(
String name, int
oid, int
length, int
mod) {
this(
name,
oid,
length,
mod, 0, 0);
}
/**
* Constructor without mod parameter.
*
* @param name the name (column name and label) of the field
* @param oid the OID of the field
*/
public
Field(
String name, int
oid) {
this(
name,
oid, 0, -1);
}
/**
* Construct a field based on the information fed to it.
* @param columnLabel the column label of the field
* @param oid the OID of the field
* @param length the length of the field
* @param mod modifier
* @param tableOid the OID of the columns' table
* @param positionInTable the position of column in the table (first column is 1, second column is 2, etc...)
*/
public
Field(
String columnLabel, int
oid, int
length, int
mod, int
tableOid,
int
positionInTable) {
this.
columnLabel =
columnLabel;
this.
oid =
oid;
this.
length =
length;
this.
mod =
mod;
this.
tableOid =
tableOid;
this.
positionInTable =
positionInTable;
this.
metadata =
tableOid == 0 ? new
FieldMetadata(
columnLabel) : null;
}
/**
* @return the oid of this Field's data type
*/
public int
getOID() {
return
oid;
}
/**
* @return the mod of this Field's data type
*/
public int
getMod() {
return
mod;
}
/**
* @return the column label of this Field's data type
*/
public
String getColumnLabel() {
return
columnLabel;
}
/**
* @return the length of this Field's data type
*/
public int
getLength() {
return
length;
}
/**
* @return the format of this Field's data (text=0, binary=1)
*/
public int
getFormat() {
return
format;
}
/**
* @param format the format of this Field's data (text=0, binary=1)
*/
public void
setFormat(int
format) {
this.
format =
format;
}
/**
* @return the columns' table oid, zero if no oid available
*/
public int
getTableOid() {
return
tableOid;
}
public int
getPositionInTable() {
return
positionInTable;
}
public
FieldMetadata getMetadata() {
return
metadata;
}
public void
setMetadata(
FieldMetadata metadata) {
this.
metadata =
metadata;
}
public
String toString() {
return "Field(" + (
columnLabel != null ?
columnLabel : "")
+ "," +
Oid.
toString(
oid)
+ "," +
length
+ "," + (
format ==
TEXT_FORMAT ? 'T' : 'B')
+ ")";
}
public void
setSQLType(int
sqlType) {
this.
sqlType =
sqlType;
}
public int
getSQLType() {
return
sqlType;
}
public void
setPGType(
String pgType) {
this.
pgType =
pgType;
}
public
String getPGType() {
return
pgType;
}
public boolean
isTypeInitialized() {
return
pgType !=
NOT_YET_LOADED;
}
}