package org.jooq.meta;
import static java.util.Collections.singletonList;
import java.util.ArrayList;
import java.util.List;
import org.jooq.meta.jaxb.SyntheticIdentityType;
import org.jooq.tools.JooqLogger;
public class DefaultColumnDefinition
extends AbstractTypedElementDefinition<TableDefinition>
implements ColumnDefinition {
private static final JooqLogger log = JooqLogger.getLogger(DefaultColumnDefinition.class);
private final int position;
private final boolean isIdentity;
private transient List<EmbeddableDefinition> replacedByEmbeddables;
public DefaultColumnDefinition(TableDefinition table, String name, int position, DataTypeDefinition type,
boolean isIdentity, String comment) {
super(table, name, position, type, comment);
this.position = position;
this.isIdentity = isIdentity || isSyntheticIdentity(this);
if (type instanceof DefaultDataTypeDefinition)
((DefaultDataTypeDefinition) type).identity(this.isIdentity);
}
@SuppressWarnings("unused")
private static boolean isSyntheticIdentity(DefaultColumnDefinition column) {
AbstractDatabase db = (AbstractDatabase) column.getDatabase();
for (SyntheticIdentityType id : db.getConfiguredSyntheticIdentities()) {
for (TableDefinition t : db.filter(singletonList(column.getContainer()), id.getTables())) {
for (ColumnDefinition c : db.filter(singletonList(column), id.getFields())) {
log.info("Synthetic identity", column.getQualifiedName());
db.markUsed(id);
return true;
}
}
}
return false;
}
@Override
public final int getPosition() {
return position;
}
@Override
public final UniqueKeyDefinition getPrimaryKey() {
return getDatabase().getRelations().getPrimaryKey(this);
}
@Override
public List<UniqueKeyDefinition> getUniqueKeys() {
return getDatabase().getRelations().getUniqueKeys(this);
}
@Override
public final List<ForeignKeyDefinition> getForeignKeys() {
return getDatabase().getRelations().getForeignKeys(this);
}
@Override
public final boolean isIdentity() {
return isIdentity;
}
@Override
public final boolean isNullable() {
return getType().isNullable();
}
}