package io.ebeaninternal.server.deploy;
import io.ebeaninternal.server.core.InternString;
import io.ebeaninternal.server.deploy.meta.DeployTableJoinColumn;
A join pair of local and foreign properties.
/**
* A join pair of local and foreign properties.
*/
public class TableJoinColumn {
The local database column name.
/**
* The local database column name.
*/
private final String localDbColumn;
private final String localSqlFormula;
The foreign database column name.
/**
* The foreign database column name.
*/
private final String foreignDbColumn;
private final String foreignSqlFormula;
private final boolean insertable;
private final boolean updateable;
Hash for including in a query plan
/**
* Hash for including in a query plan
*/
private final int queryHash;
Create the pair.
/**
* Create the pair.
*/
public TableJoinColumn(DeployTableJoinColumn deploy) {
this.localDbColumn = InternString.intern(deploy.getLocalDbColumn());
this.foreignDbColumn = InternString.intern(deploy.getForeignDbColumn());
this.localSqlFormula = InternString.intern(deploy.getLocalSqlFormula());
this.foreignSqlFormula = InternString.intern(deploy.getForeignSqlFormula());
this.insertable = deploy.isInsertable();
this.updateable = deploy.isUpdateable();
this.queryHash = hash();
}
private TableJoinColumn(TableJoinColumn source, String overrideColumn) {
this.localDbColumn = InternString.intern(overrideColumn);
this.foreignDbColumn = source.foreignDbColumn;
this.localSqlFormula = null;
this.foreignSqlFormula = null;
this.insertable = source.isInsertable();
this.updateable = source.isUpdateable();
this.queryHash = hash();
}
private int hash() {
int result = localDbColumn != null ? localDbColumn.hashCode() : 0;
result = 92821 * result + (foreignDbColumn != null ? foreignDbColumn.hashCode() : 0);
result = 92821 * result + (localSqlFormula != null ? localSqlFormula.hashCode() : 0);
result = 92821 * result + (foreignSqlFormula != null ? foreignSqlFormula.hashCode() : 0);
result = 92821 * result + (insertable ? 1 : 0);
result = 92821 * result + (updateable ? 1 : 0);
return result;
}
@Override
public int hashCode() {
return queryHash;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TableJoinColumn that = (TableJoinColumn) o;
if (insertable != that.insertable) return false;
if (updateable != that.updateable) return false;
if (!localDbColumn.equals(that.localDbColumn)) return false;
return foreignDbColumn.equals(that.foreignDbColumn);
}
@Override
public String toString() {
return (localSqlFormula == null ? localDbColumn : localSqlFormula) + " = "
+ (foreignSqlFormula == null ? foreignDbColumn : foreignSqlFormula);
}
Return a hash for including in a query plan.
/**
* Return a hash for including in a query plan.
*/
int queryHash() {
return queryHash;
}
Return the foreign database column name.
/**
* Return the foreign database column name.
*/
public String getForeignDbColumn() {
return foreignDbColumn;
}
Return the local database column name.
/**
* Return the local database column name.
*/
public String getLocalDbColumn() {
return localDbColumn;
}
Return true if this column should be insertable.
/**
* Return true if this column should be insertable.
*/
public boolean isInsertable() {
return insertable;
}
Return true if this column should be updateable.
/**
* Return true if this column should be updateable.
*/
boolean isUpdateable() {
return updateable;
}
public String getLocalSqlFormula() {
return localSqlFormula;
}
public String getForeignSqlFormula() {
return foreignSqlFormula;
}
TableJoinColumn withOverrideColumn(String overrideColumn) {
return new TableJoinColumn(this, overrideColumn);
}
}