From af04f261cf833ec3449dc48f7d569460431c4ed6 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sun, 18 Mar 2012 08:25:26 +0000 Subject: [PATCH] [#1199] Table.getFields() returns an internal representation of a table's field list. Make generated tables immutable instead! --- jOOQ/src/main/java/org/jooq/impl/AbstractType.java | 4 ++-- jOOQ/src/main/java/org/jooq/impl/TableAlias.java | 4 +--- jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java | 6 +++++- jOOQ/src/main/java/org/jooq/impl/UDTFieldImpl.java | 6 +++++- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractType.java b/jOOQ/src/main/java/org/jooq/impl/AbstractType.java index 53507ff992..83876ac45c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractType.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractType.java @@ -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 extends AbstractSchemaProviderQuer @Override public final List> getFields() { - // TODO [#1199] Make this an unmodifiable list - return getFieldList(); + return new ArrayList>(getFieldList()); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/TableAlias.java b/jOOQ/src/main/java/org/jooq/impl/TableAlias.java index d6e64b012e..3d47b38b44 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableAlias.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableAlias.java @@ -113,9 +113,7 @@ class TableAlias extends AbstractTable { * Register a field for this table alias */ private void registerTableField(Field field) { - - // Instanciating a TableFieldImpl will add the field to [this] - new TableFieldImpl(field.getName(), field.getDataType(), this); + aliasedFields.add(new TableFieldImpl(field.getName(), field.getDataType(), this)); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java index edf56e21d9..ff8714bf0a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java @@ -62,7 +62,11 @@ class TableFieldImpl extends AbstractField 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 diff --git a/jOOQ/src/main/java/org/jooq/impl/UDTFieldImpl.java b/jOOQ/src/main/java/org/jooq/impl/UDTFieldImpl.java index b0265e6a02..3f7b154f7a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UDTFieldImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UDTFieldImpl.java @@ -62,7 +62,11 @@ class UDTFieldImpl, T> extends AbstractField 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