@Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("FOREIGN KEY ("); String s1 = ""; for (Field<?> field : getFields()) { sb.append(s1); sb.append(field); s1 = ", "; } sb.append(") REFERENCES "); sb.append(key.getTable()); sb.append("("); String s2 = ""; for (Field<?> field : getFields()) { sb.append(s2); sb.append(field); s2 = ", "; } sb.append(")"); return sb.toString(); } }
/** * Determines if a table's primary key is referenced at all by other tables. * * @param table * @param others * @return */ public static boolean isReferencedBy(Table<?> table, List<Table<?>> others) { for (Table<?> other : others) { for (ForeignKey<?, ?> key : other.getReferences()) { if (key.getKey().getTable().equals(table)) { return true; } } } return false; }
/** * {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public final <O extends Record> List<ForeignKey<R, O>> getReferencesTo(Table<O> other) { List<ForeignKey<R, O>> result = new ArrayList<ForeignKey<R, O>>(); for (ForeignKey<R, ?> reference : getReferences()) { if (other.equals(reference.getKey().getTable())) { result.add((ForeignKey<R, O>) reference); } // TODO: Refactor the following two blocks and make things more OO // [#1460] In case the other table was aliased using else if (other instanceof TableImpl) { Table<O> aliased = ((TableImpl<O>) other).getAliasedTable(); if (aliased != null && aliased.equals(reference.getKey().getTable())) { result.add((ForeignKey<R, O>) reference); } } // [#1460] In case the other table was aliased using else if (other instanceof TableAlias) { Table<O> aliased = ((TableAlias<O>) other).getAliasedTable(); if (aliased != null && aliased.equals(reference.getKey().getTable())) { result.add((ForeignKey<R, O>) reference); } } } return Collections.unmodifiableList(result); }
/** * {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public final <O extends Record> List<ForeignKey<R, O>> getReferencesTo(Table<O> other) { List<ForeignKey<R, O>> result = new ArrayList<ForeignKey<R, O>>(); for (ForeignKey<R, ?> reference : getReferences()) { if (other.equals(reference.getKey().getTable())) { result.add((ForeignKey<R, O>) reference); } // [#1460] [#6304] In case the other table was aliased else { Table<O> aliased = Tools.aliased(other); if (aliased != null && aliased.equals(reference.getKey().getTable())) { result.add((ForeignKey<R, O>) reference); } } } return Collections.unmodifiableList(result); }
private String findForeignKeyReference(ForeignKey<?, ?> fk) { UniqueKey<?> pk = fk.getKey(); if (pk != null) { Field<?>[] pks = pk.getFieldsArray(); if (pks.length == 1) { return pk.getTable().getName(); } } return null; }
private List<Constraint> foreignKeys(Table<?> table) { List<Constraint> result = new ArrayList<Constraint>(); if (flags.contains(FOREIGN_KEY)) for (ForeignKey<?, ?> key : table.getReferences()) result.add(constraint(key.getName()).foreignKey(key.getFieldsArray()).references(key.getKey().getTable(), key.getKey().getFieldsArray())); return result; }
@Override public final Result<O> fetchParents(Collection<? extends R> records) { if (records == null || records.size() == 0) { return new ResultImpl<O>(new DefaultConfiguration(), key.getFields()); } else { return fetch(records, key.getTable(), key.getFieldsArray(), getFieldsArray()); } }
@Override public final Result<O> fetchParents(Collection<? extends R> records) { if (records == null || records.size() == 0) { return new ResultImpl<O>(new DefaultConfiguration(), key.getFields()); } else { return fetch(records, key.getTable(), key.getFieldsArray(), getFieldsArray()); } }
Table<?> childTable = JooqUtils.getTableFromRecordClass(child); for (ForeignKey<?, ?> foreignKeyTest : childTable.getReferences()) { if (foreignKeyTest.getKey().getTable().getRecordType() == parent) { if (propertyField != null) { if (foreignKeyTest.getFields().get(0).getName().equals(propertyField.getName())) {
@Override public Constraint constraint() { return DSL.constraint(getName()) .foreignKey(getFieldsArray()) .references(key.getTable(), key.getFieldsArray()); } }
protected void register(ForeignKey<?, ?> foreignKey) { TableField<?, ?>[] fields = foreignKey.getFieldsArray(); if (fields.length == 0 || fields.length > 1) { return; } TableField<?, ?> field = fields[0]; if (!field.getDataType().isNumeric()) { return; } String propertyName = getNameFromField(field.getTable().getRecordType(), field.getName()); String referenceName = propertyName; if (field.getName().endsWith(ID_FIELD)) { referenceName = referenceName.substring(0, referenceName.length() - 2); } Class<?> localType = foreignKey.getTable().getRecordType(); Class<?> foreignType = foreignKey.getKey().getTable().getRecordType(); Schema localSchema = schemaFactory.getSchema(localType); String childName = localSchema.getPluralName(); String childNameOverride = ArchaiusUtil.getString( String.format("object.link.name.%s.%s.override", localType.getSimpleName(), propertyName).toLowerCase()).get(); if (childNameOverride != null) { childName = childNameOverride; } register(localType, new ForeignKeyRelationship(REFERENCE, referenceName, propertyName, foreignType, foreignKey)); register(foreignType, new ForeignKeyRelationship(CHILD, childName, propertyName, localType, foreignKey)); }
@Override protected void loadUniqueKeys(DefaultRelations relations) throws SQLException { for (Schema schema : getSchemasFromMeta()) { SchemaDefinition s = getSchema(schema.getName()); if (s != null) { for (Table<?> table : schema.getTables()) { TableDefinition t = getTable(s, table.getName()); if (t != null) { UniqueKey<?> key = table.getPrimaryKey(); if (key != null) { for (Field<?> field : key.getFields()) { ColumnDefinition c = t.getColumn(field.getName()); relations.addPrimaryKey("PK_" + key.getTable().getName(), c); } } } } } } }
if (includedTables.contains(fk.getKey().getTable())) exportKey0(result, t, fk, FOREIGN_KEY);