[#4918] Add Key.constraint() and improve Key.toString() accordingly

This commit is contained in:
lukaseder 2016-01-08 18:23:11 +01:00
parent 1c069c7d5e
commit 1cbbc23923
4 changed files with 21 additions and 49 deletions

View File

@ -74,4 +74,9 @@ public interface Key<R extends Record> extends Serializable {
* @see #getFields()
*/
TableField<R, ?>[] getFieldsArray();
/**
* Get this <code>KEY</code> as a formal {@link Constraint} specification.
*/
Constraint constraint();
}

View File

@ -132,4 +132,9 @@ abstract class AbstractKey<R extends Record> implements Key<R> {
return false;
return true;
}
@Override
public String toString() {
return constraint().toString();
}
}

View File

@ -50,6 +50,7 @@ import java.util.Collection;
import java.util.List;
import org.jooq.AttachableInternal;
import org.jooq.Constraint;
import org.jooq.DSLContext;
import org.jooq.Field;
import org.jooq.ForeignKey;
@ -215,36 +216,10 @@ class ReferenceImpl<R extends Record, O extends Record> extends AbstractKey<R> i
}
}
// -------------------------------------------------------------------------
// XXX: Object API
// -------------------------------------------------------------------------
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("FOREIGN KEY (");
String s1 = "";
for (Field<?> field : getFields()) {
sb.append(s1);
sb.append(DSL.name(field.getName()));
s1 = ", ";
}
sb.append(") REFERENCES ");
sb.append(key.getTable());
sb.append("(");
String s2 = "";
for (Field<?> field : key.getFields()) {
sb.append(s2);
sb.append(DSL.name(field.getName()));
s2 = ", ";
}
sb.append(")");
return sb.toString();
public Constraint constraint() {
return DSL.constraint(getName())
.foreignKey(getFieldsArray())
.references(key.getTable(), key.getFieldsArray());
}
}

View File

@ -44,7 +44,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jooq.Field;
import org.jooq.Constraint;
import org.jooq.ForeignKey;
import org.jooq.Record;
import org.jooq.Table;
@ -89,24 +89,11 @@ class UniqueKeyImpl<R extends Record> extends AbstractKey<R> implements UniqueKe
return Collections.unmodifiableList(references);
}
// -------------------------------------------------------------------------
// XXX: Object API
// -------------------------------------------------------------------------
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("UNIQUE KEY (");
String s1 = "";
for (Field<?> field : getFields()) {
sb.append(s1);
sb.append(field);
s1 = ", ";
}
sb.append(")");
return sb.toString();
public Constraint constraint() {
if (isPrimary())
return DSL.constraint(getName()).primaryKey(getFieldsArray());
else
return DSL.constraint(getName()).unique(getFieldsArray());
}
}