From 54bea1442e790b09a791a64cab0b4131563d2696 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Thu, 1 Sep 2016 14:48:04 +0200 Subject: [PATCH] [#5518] Add inverse Type.xxx(Record) operations for Record.xxx(Type) methods --- jOOQ/src/main/java/org/jooq/Field.java | 101 ++++++++++++++++++ jOOQ/src/main/java/org/jooq/Table.java | 19 ++++ .../java/org/jooq/impl/AbstractField.java | 40 +++++++ .../java/org/jooq/impl/AbstractTable.java | 9 ++ 4 files changed, 169 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/Field.java b/jOOQ/src/main/java/org/jooq/Field.java index ee9bf96c95..73d145db19 100644 --- a/jOOQ/src/main/java/org/jooq/Field.java +++ b/jOOQ/src/main/java/org/jooq/Field.java @@ -3342,5 +3342,106 @@ public interface Field extends SelectField, GroupField, FieldOrRow { + + // ------------------------------------------------------------------------ + // [#5518] Record method inversions, e.g. for use as method references + // ------------------------------------------------------------------------ + + /** + * The inverse operation of {@link Record#field(Field)}. + *

+ * This method can be used in its method reference form conveniently on a + * generated table, for instance, when mapping records in a stream. + */ + Field field(Record record); + + /** + * The inverse operation of {@link Record#get(Field)}. + *

+ * This method can be used in its method reference form conveniently on a + * generated table, for instance, when mapping records in a stream: + *

+     * DSL.using(configuration)
+     *    .fetch("select * from t")
+     *    .stream()
+     *    .map(MY_TABLE.ID::get)
+     *    .forEach(System.out::println);
+     * 
+ */ + T get(Record record); + + /** + * The inverse operation of {@link Record#getValue(Field)}. + *

+ * This method can be used in its method reference form conveniently on a + * generated table, for instance, when mapping records in a stream: + *

+     * DSL.using(configuration)
+     *    .fetch("select * from t")
+     *    .stream()
+     *    .map(MY_TABLE.ID::getValue)
+     *    .forEach(System.out::println);
+     * 
+ */ + T getValue(Record record); + + /** + * The inverse operation of {@link Record#original(Field)}. + *

+ * This method can be used in its method reference form conveniently on a + * generated table, for instance, when mapping records in a stream: + *

+     * DSL.using(configuration)
+     *    .fetch("select * from t")
+     *    .stream()
+     *    .map(MY_TABLE.ID::original)
+     *    .forEach(System.out::println);
+     * 
+ */ + T original(Record record); + + /** + * The inverse operation of {@link Record#changed(Field)}. + *

+ * This method can be used in its method reference form conveniently on a + * generated table, for instance, when mapping records in a stream: + *

+     * DSL.using(configuration)
+     *    .fetch("select * from t")
+     *    .stream()
+     *    .map(MY_TABLE.ID::changed)
+     *    .forEach(System.out::println);
+     * 
+ */ + boolean changed(Record record); + + /** + * The inverse operation of {@link Record#reset(Field)}. + *

+ * This method can be used in its method reference form conveniently on a + * generated table, for instance, when mapping records in a stream: + *

+     * DSL.using(configuration)
+     *    .fetch("select * from t")
+     *    .stream()
+     *    .forEach(MY_TABLE.ID::reset);
+     * 
+ */ + void reset(Record record); + + /** + * The inverse operation of {@link Record#into(Field)}. + *

+ * This method can be used in its method reference form conveniently on a + * generated table, for instance, when mapping records in a stream: + *

+     * DSL.using(configuration)
+     *    .fetch("select * from t")
+     *    .stream()
+     *    .map(MY_TABLE.ID::from)
+     *    .forEach(System.out::println);
+     * 
+ */ + Record1 from(Record record); } diff --git a/jOOQ/src/main/java/org/jooq/Table.java b/jOOQ/src/main/java/org/jooq/Table.java index 29aea275e9..04e858f855 100644 --- a/jOOQ/src/main/java/org/jooq/Table.java +++ b/jOOQ/src/main/java/org/jooq/Table.java @@ -2257,4 +2257,23 @@ public interface Table extends TableLike { + + // ------------------------------------------------------------------------ + // [#5518] Record method inversions, e.g. for use as method references + // ------------------------------------------------------------------------ + + /** + * The inverse operation of {@link Record#into(Table)}. + *

+ * This method can be used in its method reference form conveniently on a + * generated table, for instance, when mapping records in a stream: + *

+     * DSL.using(configuration)
+     *    .fetch("select * from t")
+     *    .stream()
+     *    .map(MY_TABLE::into)
+     *    .forEach(System.out::println);
+     * 
+ */ + R from(Record record); } diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java index 8242024471..5acc3ebfff 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java @@ -93,6 +93,7 @@ import org.jooq.DataType; import org.jooq.DatePart; import org.jooq.Field; import org.jooq.QuantifiedSelect; +import org.jooq.Record; import org.jooq.Record1; import org.jooq.Result; import org.jooq.Select; @@ -142,6 +143,45 @@ abstract class AbstractField extends AbstractQueryPart implements Field { return CLAUSES; } + // ------------------------------------------------------------------------ + // [#5518] Record method inversions, e.g. for use as method references + // ------------------------------------------------------------------------ + + @Override + public final Field field(Record record) { + return record.field(this); + } + + @Override + public final T get(Record record) { + return record.get(this); + } + + @Override + public final T getValue(Record record) { + return record.getValue(this); + } + + @Override + public final T original(Record record) { + return record.original(this); + } + + @Override + public final boolean changed(Record record) { + return record.changed(this); + } + + @Override + public final void reset(Record record) { + record.reset(this); + } + + @Override + public final Record1 from(Record record) { + return record.into(this); + } + // ------------------------------------------------------------------------ // XXX: API // ------------------------------------------------------------------------ diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java index 57ef89e84e..b893f03825 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java @@ -142,6 +142,15 @@ abstract class AbstractTable extends AbstractQueryPart impleme return CLAUSES; } + // ------------------------------------------------------------------------ + // [#5518] Record method inversions, e.g. for use as method references + // ------------------------------------------------------------------------ + + @Override + public final R from(Record record) { + return record.into(this); + } + // ------------------------------------------------------------------------ // XXX: TableLike API // ------------------------------------------------------------------------