core-jgi/migration/src/oracle/Column.java

300 lines
7.7 KiB
Java

/**
* ADempiere contribution
* Author: Karsten Thiemann, kthiemann@adempiere.org
* Compiere/Adempiere migration script generation.
*/
package oracle;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Column {
private static final int NOT_SET = -1;
private String tableName;
/** column name */
private String columnName;
/** column type */
private String dataType;
/** column can be null */
private boolean isNullable = false;
private int dataPrecision = NOT_SET;
private int dataScale = NOT_SET;
/** B for byte and C for character */
private String charUsed;
/** char length in column declaration */
private int charColDeclLength = NOT_SET;
/** columns default value */
private String defaultValue;
/** temporary sensible default value for the column */
private String tmpDefaultValue;
private boolean isStringType;
private boolean isNumberType;
private boolean nullHasChanged = false;
private boolean defaultHasChanged = false;
public int getDataPrecision() {
return dataPrecision;
}
public int getDataScale() {
return dataScale;
}
/**
* Constructor.
*
* @param columnName
*/
public Column(String columnName) {
this.columnName = columnName;
}
/**
* Constructor. The resultset must be set to the correct data with calling
* next() before!
*
* @param rs
* ResultSet with all values of this column.
*/
public Column(ResultSet rs) {
try {
if (rs != null) {
defaultValue = rs.getString("DATA_DEFAULT");
// default value of NULL is eaqual to default value not set
if (defaultValue != null) {
defaultValue = defaultValue.trim();
if (defaultValue.toUpperCase().equals("NULL")) {
defaultValue = null;
}
}
tableName = rs.getString("TABLE_NAME");
columnName = rs.getString("COLUMN_NAME");
dataType = rs.getString("DATA_TYPE");
isNumberType = "NUMBER".equals(dataType);
isStringType = dataType != null && dataType.indexOf("CHAR") != -1;
isNullable = "Y".equals(rs.getString("NULLABLE"));
dataPrecision = rs.getInt("DATA_PRECISION");
dataScale = rs.getInt("DATA_SCALE");
charUsed = rs.getString("CHAR_USED");
charColDeclLength = rs.getInt("CHAR_COL_DECL_LENGTH");
}
} catch (SQLException e) {
System.out.println("Column constructor - sql exception");
System.out.println("Don't use getString at last position...");
e.printStackTrace();
}
}
/**
* Returns a sql sniplet that defines the column.
*
* @return
*/
public String getDefinitionString() {
StringBuffer buffer = getTypeDefinitionString();
if (defaultValue != null && !defaultValue.equals("")) {
buffer = buffer.append(" DEFAULT ").append(defaultValue);
} else {
buffer = buffer.append(" DEFAULT NULL ");
}
if (!isNullable) {
buffer = buffer.append(" NOT NULL ");
} else {
buffer = buffer.append(" NULL ");
}
return buffer.toString();
}
/**
* Returns a sql sniplet that defines the column.
* Without DEFAULT NULL if no default value is set,
* because resulting create table statement looks better :)
*
* @return
*/
public String getDefinitionStringForCreateTable() {
StringBuffer buffer = getTypeDefinitionString();
if (defaultValue != null && !defaultValue.equals("")) {
buffer = buffer.append(" DEFAULT ").append(defaultValue);
}
if (!isNullable) {
buffer = buffer.append(" NOT NULL ");
} else {
buffer = buffer.append(" NULL ");
}
return buffer.toString();
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object obj) {
if (!(obj instanceof Column) || obj == null) {
return false;
}
Column col = (Column) obj;
return col.isNullable == isNullable
&& col.charColDeclLength == charColDeclLength
&& col.dataPrecision == dataPrecision
&& col.dataScale == dataScale
&& ((col.charUsed != null && col.charUsed.equals(charUsed)) || (col.charUsed == null && charUsed == null))
&& ((col.columnName != null && col.columnName.equals(columnName)) || (col.columnName == null && columnName == null))
&& ((col.dataType != null && col.dataType.equals(dataType)) || (col.dataType == null && dataType == null))
&& ((col.defaultValue != null && col.defaultValue.equals(defaultValue)) || (col.defaultValue == null && defaultValue == null))
&& ((col.tableName != null && col.tableName.equals(tableName)) || (col.tableName == null && tableName == null));
}
public String toString() {
return tableName + " - " + columnName + " - " + charUsed + " - " + charColDeclLength
+ " - " + dataPrecision + " - " + dataScale + " - " + dataType + " - "
+ defaultValue + " - " + isNullable;
}
public boolean isNullable() {
return isNullable;
}
public String getColumnName() {
return columnName;
}
public String getDataType() {
return dataType;
}
public String getTableName() {
return tableName;
}
public boolean isStringType() {
return isStringType;
}
public boolean isNumberType() {
return isNumberType;
}
public String getTmpDefaultValue() {
return tmpDefaultValue;
}
public void setTmpDefaultValue(String tmpDefaultValue) {
this.tmpDefaultValue = tmpDefaultValue;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
/**
* Returns a sql snippet with temp default value.
* @return
*/
public String getDefinitionStringWithTempDefault() {
StringBuffer buffer = getTypeDefinitionString();
buffer = buffer.append(" DEFAULT ").append(tmpDefaultValue);
if (!isNullable) {
buffer = buffer.append(" NOT NULL ");
}
return buffer.toString();
}
/**
* Returns a sql snippet to set the default value.
* @return
*/
public String getSetDefaultString() {
StringBuffer buffer = getTypeDefinitionString();
if (defaultValue == null) {
buffer = buffer.append(" DEFAULT NULL ");
} else {
buffer = buffer.append(" DEFAULT ").append(defaultValue);
}
return buffer.toString();
}
/**
* Returns a sql snippet with the column type definition
* @return
*/
public StringBuffer getTypeDefinitionString() {
StringBuffer buffer = new StringBuffer();
buffer = buffer.append(" ").append(columnName + " " + dataType);
if (charUsed != null && !charUsed.equals("")) {
buffer = buffer.append("(").append(charColDeclLength);
if ("CHAR".equals(dataType)) {
buffer = buffer.append(" ").append(("C".equals(charUsed)) ? "CHAR" : "BYTE");
}
buffer = buffer.append(") ");
}
if (dataPrecision != NOT_SET && dataPrecision != 0) {
buffer = buffer.append("(").append(dataPrecision);
if (dataScale != NOT_SET) {
buffer = buffer.append(",").append(dataScale);
}
buffer = buffer.append(")");
}
return buffer;
}
/**
* Returns a sql snippet to set column to NULL
* @return
*/
public String getNullDefinitionString() {
StringBuffer buffer = getTypeDefinitionString();
buffer = buffer.append(" NULL ");
return buffer.toString();
}
/**
* True if the default value has changed.
* @return
*/
public boolean isDefaultHasChanged() {
return defaultHasChanged;
}
public void setDefaultHasChanged(boolean defaultHasChanged) {
this.defaultHasChanged = defaultHasChanged;
}
/**
* True if the null status has changed.
* @return
*/
public boolean isNullHasChanged() {
return nullHasChanged;
}
public void setNullHasChanged(boolean nullHasChanged) {
this.nullHasChanged = nullHasChanged;
}
}