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; } /***********************************************************************/ }