package com.spun.util.database;
import com.spun.util.DatabaseUtils;
public class ColumnMetadata
{
private Metadata tableMetadata;
private String name;
private Class type;
private int length;
private boolean nullable;
private int sqlType;
private int decimalDigits;
private String comments;
private int columnPosition;
private String foreignTable;
private ColumnMetadata foreignColumn;
/**************************************************************************/
public ColumnMetadata(Metadata tableMetadata, String name, Class type, int length, int columnPosition, boolean nullable, int sqlType,
int decimalDigits, String comments)
{
this(tableMetadata, name, type, length, columnPosition, nullable, sqlType, decimalDigits, comments, null, null);
}
/**************************************************************************/
public ColumnMetadata(Metadata tableMetadata, String name, Class type, int length, int columnPosition, boolean nullable, int sqlType,
int decimalDigits, String comments, String foreignTable, ColumnMetadata foreignColumn)
{
this.columnPosition = columnPosition;
this.tableMetadata = tableMetadata;
this.name = name;
this.type = type;
this.length = length;
this.nullable = nullable;
this.sqlType = sqlType;
this.decimalDigits = decimalDigits;
this.comments = comments;
this.foreignTable = foreignTable;
this.foreignColumn = foreignColumn;
}
/***********************************************************************/
public int getLength()
{
return length;
}
/***********************************************************************/
public int getSqlType()
{
return sqlType;
}
/***********************************************************************/
public String getSqlTypeName()
{
String name = DatabaseUtils.findDatabaseName(sqlType);
if (name == null)
name = "unknown: " + getType();
else if (name == "decimal" || name.startsWith("numeric"))
{
name += "(" + length + ", " + decimalDigits + ")";
}
else if (name == "varchar" || name == "char")
{
name += "(" + length + ")";
}
return name;
}
/***********************************************************************/
public int getColumnPosition()
{
return columnPosition;
}
/***********************************************************************/
public String getName()
{
return name;
}
/***********************************************************************/
public boolean isNullable()
{
return nullable;
}
/***********************************************************************/
public Class getType()
{
return type;
}
/***********************************************************************/
public int getDecimalDigits()
{
return decimalDigits;
}
/***********************************************************************/
public String getComments()
{
return comments;
}
/***********************************************************************/
public String getForeignTable()
{
return foreignTable;
}
/***********************************************************************/
public ColumnMetadata getForeignColumn()
{
return foreignColumn;
}
/***********************************************************************/
public String getNameWithPrefix(String alias)
{
return alias + "." + getName();
}
/***********************************************************************/
public String getSequenceName(int databaseType)
{
if (databaseType == DatabaseUtils.POSTGRESQL) { return String.format("%s_%s_seq", tableMetadata.getTableName(), this.getName()); }
return null;
}
/************************************************************************/
/**
* A convenience function to turn a vector of com.spun.util.database.ColumnMetadata objects
* into an Array of the com.spun.util.database.ColumnMetadata objects.
* @param vectorOf a Vector of com.spun.util.database.ColumnMetadata objects
* @return the array of com.spun.util.database.ColumnMetadata.
* @throws Error if an element of vectorOf is not a com.spun.util.database.ColumnMetadata object.
**/
public static com.spun.util.database.ColumnMetadata[] toArray(java.util.Collection<ColumnMetadata> vectorOf)
{
if (vectorOf == null) { return new com.spun.util.database.ColumnMetadata[0]; }
com.spun.util.database.ColumnMetadata array[] = new com.spun.util.database.ColumnMetadata[vectorOf.size()];
java.util.Iterator<ColumnMetadata> iterator = vectorOf.iterator();
int i = 0;
while (iterator.hasNext())
{
java.lang.Object rowObject = iterator.next();
if (rowObject instanceof com.spun.util.database.ColumnMetadata)
{
array[i++] = (com.spun.util.database.ColumnMetadata) rowObject;
}
else
{
throw new Error("toArray[" + i + "] is not an instance of com.spun.util.database.ColumnMetadata but a " + rowObject.getClass().getName());
}
}
return array;
}
/***********************************************************************/
}