[#1199] Table.getFields() returns an internal representation of a table's field list. Make generated tables immutable instead!

This commit is contained in:
Lukas Eder 2012-03-18 08:25:26 +00:00
parent f5a994bbae
commit af04f261cf
4 changed files with 13 additions and 7 deletions

View File

@ -35,6 +35,7 @@
*/
package org.jooq.impl;
import java.util.ArrayList;
import java.util.List;
import org.jooq.AliasProvider;
@ -60,8 +61,7 @@ abstract class AbstractType<R extends Record> extends AbstractSchemaProviderQuer
@Override
public final List<Field<?>> getFields() {
// TODO [#1199] Make this an unmodifiable list
return getFieldList();
return new ArrayList<Field<?>>(getFieldList());
}
@Override

View File

@ -113,9 +113,7 @@ class TableAlias<R extends Record> extends AbstractTable<R> {
* Register a field for this table alias
*/
private <T> void registerTableField(Field<T> field) {
// Instanciating a TableFieldImpl will add the field to [this]
new TableFieldImpl<R, T>(field.getName(), field.getDataType(), this);
aliasedFields.add(new TableFieldImpl<R, T>(field.getName(), field.getDataType(), this));
}
@Override

View File

@ -62,7 +62,11 @@ class TableFieldImpl<R extends Record, T> extends AbstractField<T> implements Ta
super(name, type);
this.table = table;
this.table.getFields().add(this);
// [#1199] The public API of Table returns immutable field lists
if (table instanceof TableImpl) {
((TableImpl<?>) table).getFieldList().add(this);
}
}
@Override

View File

@ -62,7 +62,11 @@ class UDTFieldImpl<R extends UDTRecord<R>, T> extends AbstractField<T> implement
super(name, type);
this.udt = udt;
this.udt.getFields().add(this);
// [#1199] The public API of UDT returns immutable field lists
if (udt instanceof UDTImpl) {
((UDTImpl<?>) udt).getFieldList().add(this);
}
}
@Override