diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java index 0e980d093d..639ac54064 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java @@ -995,7 +995,7 @@ extends BaseTest implements Record { try { R result = Util.newRecord(table, getConfiguration()); - for (Field sourceField : getFields()) { - Field targetField = result.getField(sourceField); + for (Field targetField : table.getFields()) { + Field sourceField = getField(targetField); - if (targetField != null) { + if (sourceField != null) { Util.setValue(result, targetField, this, sourceField); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldList.java b/jOOQ/src/main/java/org/jooq/impl/FieldList.java index 1ce689291d..1acd9314eb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldList.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldList.java @@ -72,11 +72,40 @@ class FieldList extends QueryPartList> implements FieldProvider { return null; } - return (Field) getField(field.getName()); + Field result = null; + String name = field.getName(); + + for (Field f1 : this) { + if (f1.getName().equals(name)) { + + // Remember the first matching field by name + if (result == null) { + result = f1; + } + + // [#1802] On a colliding second matching field by name, try exact matching + else { + for (Field f2 : this) { + if (f2.equals(field)) { + result = f2; + break; + } + } + + break; + } + } + } + + return (Field) result; } @Override public final Field getField(String name) { + if (name == null) { + return null; + } + for (Field f : this) { if (f.getName().equals(name)) { return f;