diff --git a/jOOQ/src/main/java/org/jooq/RecordType.java b/jOOQ/src/main/java/org/jooq/RecordType.java index d502d020f6..8c6fbe4a07 100644 --- a/jOOQ/src/main/java/org/jooq/RecordType.java +++ b/jOOQ/src/main/java/org/jooq/RecordType.java @@ -81,6 +81,24 @@ public interface RecordType { */ Field field(String fieldName); + /** + * Get a specific field from this record type coerced to type. + * + * @param fieldName The field to fetch + * @param type The type to coerce the resulting field to + * @return The field with the given name + */ + Field field(String fieldName, Class type); + + /** + * Get a specific field from this record type coerced to dataType. + * + * @param fieldName The field to fetch + * @param dataType The data type to coerce the resulting field to + * @return The field with the given name + */ + Field field(String fieldName, DataType dataType); + /** * Get a specific field from this record type. * @@ -89,6 +107,24 @@ public interface RecordType { */ Field field(int fieldIndex); + /** + * Get a specific field from this record type coerced to type. + * + * @param fieldIndex The field's index of the field to fetch + * @param type The type to coerce the resulting field to + * @return The field with the given name + */ + Field field(int fieldIndex, Class type); + + /** + * Get a specific field from this record type coerced to dataType. + * + * @param fieldIndex The field's index of the field to fetch + * @param dataType The data type to coerce the resulting field to + * @return The field with the given name + */ + Field field(int fieldIndex, DataType dataType); + /** * Get all fields from this record type. * diff --git a/jOOQ/src/main/java/org/jooq/Result.java b/jOOQ/src/main/java/org/jooq/Result.java index 15e8d33679..df720b8b3e 100644 --- a/jOOQ/src/main/java/org/jooq/Result.java +++ b/jOOQ/src/main/java/org/jooq/Result.java @@ -96,6 +96,20 @@ public interface Result extends List, Attachable { */ Field field(String name); + /** + * Get a specific field from this Result, coerced to type. + * + * @see Row#field(String, Class) + */ + Field field(String name, Class type); + + /** + * Get a specific field from this Result, coerced to dataType. + * + * @see Row#field(String, DataType) + */ + Field field(String name, DataType dataType); + /** * Get a specific field from this Result. * @@ -103,6 +117,20 @@ public interface Result extends List, Attachable { */ Field field(int index); + /** + * Get a specific field from this Result, coerced to type. + * + * @see Row#field(int, Class) + */ + Field field(int index, Class type); + + /** + * Get a specific field from this Result, coerced to dataType. + * + * @see Row#field(int, DataType) + */ + Field field(int index, DataType dataType); + /** * Get all fields from this Result. * diff --git a/jOOQ/src/main/java/org/jooq/Row.java b/jOOQ/src/main/java/org/jooq/Row.java index 1b4f2e4f21..4fce5fcd4c 100644 --- a/jOOQ/src/main/java/org/jooq/Row.java +++ b/jOOQ/src/main/java/org/jooq/Row.java @@ -77,6 +77,24 @@ public interface Row extends QueryPart { */ Field field(String fieldName); + /** + * Get a specific field from this row and coerce it to type. + * + * @param fieldName The field to fetch + * @param type The type to coerce the resulting field to + * @return The field with the given name + */ + Field field(String fieldName, Class type); + + /** + * Get a specific field from this row and coerce it to dataType. + * + * @param fieldName The field to fetch + * @param dataType The type to coerce the resulting field to + * @return The field with the given name + */ + Field field(String fieldName, DataType dataType); + /** * Get a specific field from this row. * @@ -85,6 +103,24 @@ public interface Row extends QueryPart { */ Field field(int fieldIndex); + /** + * Get a specific field from this row and coerce it to type. + * + * @param fieldIndex The field's index of the field to fetch + * @param type The type to coerce the resulting field to + * @return The field with the given name + */ + Field field(int fieldIndex, Class type); + + /** + * Get a specific field from this row and coerce it to dataType. + * + * @param fieldIndex The field's index of the field to fetch + * @param dataType The type to coerce the resulting field to + * @return The field with the given name + */ + Field field(int fieldIndex, DataType dataType); + /** * Get all fields from this row. * diff --git a/jOOQ/src/main/java/org/jooq/TableLike.java b/jOOQ/src/main/java/org/jooq/TableLike.java index 9ca056c3d4..ea104da2fe 100644 --- a/jOOQ/src/main/java/org/jooq/TableLike.java +++ b/jOOQ/src/main/java/org/jooq/TableLike.java @@ -67,6 +67,21 @@ public interface TableLike extends QueryPart { */ Field field(String name); + /** + * Get a specific field from this Record and coerce it to type. + * + * @see Row#field(String, Class) + */ + Field field(String name, Class type); + + /** + * Get a specific field from this Record and coerce it to + * dataType. + * + * @see Row#field(String, DataType) + */ + Field field(String name, DataType dataType); + /** * Get a specific field from this Record. * @@ -74,6 +89,21 @@ public interface TableLike extends QueryPart { */ Field field(int index); + /** + * Get a specific field from this Record and coerce it to type. + * + * @see Row#field(int, Class) + */ + Field field(int index, Class type); + + /** + * Get a specific field from this Record and coerce it to + * dataType. + * + * @see Row#field(int, DataType) + */ + Field field(int index, DataType dataType); + /** * Get all fields from this Record. * diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java index 6a44cc8a08..4339601be2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java @@ -98,9 +98,9 @@ abstract class AbstractTable extends AbstractQueryPart impleme private static final long serialVersionUID = 3155496238969274871L; private static final Clause[] CLAUSES = { TABLE }; - private final Schema schema; - private final String name; - private final String comment; + private final Schema tableschema; + private final String tablename; + private final String tablecomment; AbstractTable(String name) { this(name, null, null); @@ -113,9 +113,9 @@ abstract class AbstractTable extends AbstractQueryPart impleme AbstractTable(String name, Schema schema, String comment) { super(); - this.schema = schema; - this.name = name; - this.comment = comment; + this.tableschema = schema; + this.tablename = name; + this.tablecomment = comment; } // ------------------------------------------------------------------------ @@ -165,11 +165,31 @@ abstract class AbstractTable extends AbstractQueryPart impleme return fieldsRow().field(string); } + @Override + public final Field field(String name, Class type) { + return fieldsRow().field(name, type); + } + + @Override + public final Field field(String name, DataType dataType) { + return fieldsRow().field(name, dataType); + } + @Override public final Field field(int index) { return fieldsRow().field(index); } + @Override + public final Field field(int index, Class type) { + return fieldsRow().field(index, type); + } + + @Override + public final Field field(int index, DataType dataType) { + return fieldsRow().field(index, dataType); + } + @Override public final Field[] fields() { return fieldsRow().fields(); @@ -196,17 +216,17 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public final Schema getSchema() { - return schema; + return tableschema; } @Override public final String getName() { - return name; + return tablename; } @Override public final String getComment() { - return comment; + return tablecomment; } /** @@ -811,7 +831,7 @@ abstract class AbstractTable extends AbstractQueryPart impleme // [#2144] Non-equality can be decided early, without executing the // rather expensive implementation of AbstractQueryPart.equals() if (that instanceof AbstractTable) { - if (StringUtils.equals(name, (((AbstractTable) that).name))) { + if (StringUtils.equals(tablename, (((AbstractTable) that).tablename))) { return super.equals(that); } @@ -826,6 +846,6 @@ abstract class AbstractTable extends AbstractQueryPart impleme // [#1938] This is a much more efficient hashCode() implementation // compared to that of standard QueryParts - return name.hashCode(); + return tablename.hashCode(); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Fields.java b/jOOQ/src/main/java/org/jooq/impl/Fields.java index c4cca2cae8..277d32e1b0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Fields.java +++ b/jOOQ/src/main/java/org/jooq/impl/Fields.java @@ -116,6 +116,18 @@ class Fields extends AbstractQueryPart implements RecordType Field field(String fieldName, Class type) { + Field result = field(fieldName); + return result == null ? null : result.coerce(type); + } + + @Override + public final Field field(String fieldName, DataType dataType) { + Field result = field(fieldName); + return result == null ? null : result.coerce(dataType); + } + @Override public final Field field(int index) { if (index >= 0 && index < fields.length) { @@ -125,6 +137,18 @@ class Fields extends AbstractQueryPart implements RecordType Field field(int fieldIndex, Class type) { + Field result = field(fieldIndex); + return result == null ? null : result.coerce(type); + } + + @Override + public final Field field(int fieldIndex, DataType dataType) { + Field result = field(fieldIndex); + return result == null ? null : result.coerce(dataType); + } + @Override public final Field[] fields() { return fields; diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index f5965d9257..599b7b4aa5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -79,6 +79,7 @@ import org.jooq.AttachableInternal; import org.jooq.Configuration; import org.jooq.Converter; import org.jooq.DSLContext; +import org.jooq.DataType; import org.jooq.EnumType; import org.jooq.Field; import org.jooq.ForeignKey; @@ -206,11 +207,31 @@ class ResultImpl implements Result, AttachableInternal { return fields.field(name); } + @Override + public final Field field(String name, Class type) { + return fields.field(name, type); + } + + @Override + public final Field field(String name, DataType dataType) { + return fields.field(name, dataType); + } + @Override public final Field field(int index) { return fields.field(index); } + @Override + public final Field field(int index, Class type) { + return fields.field(index, type); + } + + @Override + public final Field field(int index, DataType dataType) { + return fields.field(index, dataType); + } + @Override public final Field[] fields() { return fields.fields().clone(); diff --git a/jOOQ/src/main/java/org/jooq/impl/RowImpl.java b/jOOQ/src/main/java/org/jooq/impl/RowImpl.java index dfb8484229..c2460bcfd7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RowImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/RowImpl.java @@ -49,7 +49,16 @@ import java.util.Collection; import javax.annotation.Generated; +import org.jooq.BetweenAndStepN; import org.jooq.BetweenAndStep1; +import org.jooq.BetweenAndStep2; +import org.jooq.BetweenAndStep3; +import org.jooq.BetweenAndStep4; +import org.jooq.BetweenAndStep5; +import org.jooq.BetweenAndStep6; +import org.jooq.BetweenAndStep7; +import org.jooq.BetweenAndStep8; +import org.jooq.BetweenAndStep9; import org.jooq.BetweenAndStep10; import org.jooq.BetweenAndStep11; import org.jooq.BetweenAndStep12; @@ -60,18 +69,9 @@ import org.jooq.BetweenAndStep16; import org.jooq.BetweenAndStep17; import org.jooq.BetweenAndStep18; import org.jooq.BetweenAndStep19; -import org.jooq.BetweenAndStep2; import org.jooq.BetweenAndStep20; import org.jooq.BetweenAndStep21; import org.jooq.BetweenAndStep22; -import org.jooq.BetweenAndStep3; -import org.jooq.BetweenAndStep4; -import org.jooq.BetweenAndStep5; -import org.jooq.BetweenAndStep6; -import org.jooq.BetweenAndStep7; -import org.jooq.BetweenAndStep8; -import org.jooq.BetweenAndStep9; -import org.jooq.BetweenAndStepN; import org.jooq.Clause; import org.jooq.Comparator; import org.jooq.Condition; @@ -81,6 +81,14 @@ import org.jooq.Field; import org.jooq.QuantifiedSelect; import org.jooq.Record; import org.jooq.Record1; +import org.jooq.Record2; +import org.jooq.Record3; +import org.jooq.Record4; +import org.jooq.Record5; +import org.jooq.Record6; +import org.jooq.Record7; +import org.jooq.Record8; +import org.jooq.Record9; import org.jooq.Record10; import org.jooq.Record11; import org.jooq.Record12; @@ -91,20 +99,20 @@ import org.jooq.Record16; import org.jooq.Record17; import org.jooq.Record18; import org.jooq.Record19; -import org.jooq.Record2; import org.jooq.Record20; import org.jooq.Record21; import org.jooq.Record22; -import org.jooq.Record3; -import org.jooq.Record4; -import org.jooq.Record5; -import org.jooq.Record6; -import org.jooq.Record7; -import org.jooq.Record8; -import org.jooq.Record9; -import org.jooq.Result; import org.jooq.Row; +import org.jooq.RowN; import org.jooq.Row1; +import org.jooq.Row2; +import org.jooq.Row3; +import org.jooq.Row4; +import org.jooq.Row5; +import org.jooq.Row6; +import org.jooq.Row7; +import org.jooq.Row8; +import org.jooq.Row9; import org.jooq.Row10; import org.jooq.Row11; import org.jooq.Row12; @@ -115,18 +123,10 @@ import org.jooq.Row16; import org.jooq.Row17; import org.jooq.Row18; import org.jooq.Row19; -import org.jooq.Row2; import org.jooq.Row20; import org.jooq.Row21; import org.jooq.Row22; -import org.jooq.Row3; -import org.jooq.Row4; -import org.jooq.Row5; -import org.jooq.Row6; -import org.jooq.Row7; -import org.jooq.Row8; -import org.jooq.Row9; -import org.jooq.RowN; +import org.jooq.Result; import org.jooq.Select; /** @@ -198,7 +198,7 @@ implements xxxxxxxxxxxxxxxxxxxxxxxxxxxx xxx xx [/pro] */ - context.sql('('); + context.sql("("); String separator = ""; for (Field field : fields.fields) { @@ -208,7 +208,7 @@ implements separator = ", "; } - context.sql(')'); + context.sql(")"); } @Override @@ -235,11 +235,31 @@ implements return fields.field(name); } + @Override + public final Field field(String name, Class type) { + return fields.field(name, type); + } + + @Override + public final Field field(String name, DataType dataType) { + return fields.field(name, dataType); + } + @Override public final Field field(int index) { return fields.field(index); } + @Override + public final Field field(int index, Class type) { + return fields.field(index, type); + } + + @Override + public final Field field(int index, DataType dataType) { + return fields.field(index, dataType); + } + @Override public final Field[] fields() { return fields.fields(); diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java index d1db731100..a1745f6270 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java @@ -60,6 +60,7 @@ import org.jooq.Condition; import org.jooq.Configuration; import org.jooq.Converter; import org.jooq.Cursor; +import org.jooq.DataType; import org.jooq.Field; import org.jooq.ForeignKey; import org.jooq.GroupField; @@ -2948,11 +2949,31 @@ class SelectImpl Field field(String name, Class type) { + return getDelegate().field(name, type); + } + + @Override + public final Field field(String name, DataType dataType) { + return getDelegate().field(name, dataType); + } + @Override public final Field field(int index) { return getDelegate().field(index); } + @Override + public final Field field(int index, Class type) { + return getDelegate().field(index, type); + } + + @Override + public final Field field(int index, DataType dataType) { + return getDelegate().field(index, dataType); + } + @Override public final Field[] fields() { return getDelegate().fields(); diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 0d80b99ef9..1854d4be9e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -271,11 +271,31 @@ class SelectQueryImpl extends AbstractResultQuery implement return asTable().field(string); } + @Override + public final Field field(String name, Class type) { + return asTable().field(name, type); + } + + @Override + public final Field field(String name, DataType dataType) { + return asTable().field(name, dataType); + } + @Override public final Field field(int index) { return asTable().field(index); } + @Override + public final Field field(int index, Class type) { + return asTable().field(index, type); + } + + @Override + public final Field field(int index, DataType dataType) { + return asTable().field(index, dataType); + } + @Override public final Field[] fields() { return asTable().fields();