Skip to content

Commit

Permalink
runtime-join: Change API to null ref
Browse files Browse the repository at this point in the history
  • Loading branch information
julgus committed Mar 15, 2018
1 parent cda8654 commit 09e5b99
Show file tree
Hide file tree
Showing 19 changed files with 327 additions and 327 deletions.
Expand Up @@ -50,61 +50,61 @@ public interface JoinComponent {
* managers. Rows are joined from the provided {@code firstManager} * managers. Rows are joined from the provided {@code firstManager}
* depending on how subsequent managers are added to the builder. * depending on how subsequent managers are added to the builder.
* *
* @param <T1> type of entities for the first manager * @param <T0> type of entities for the first manager
* @param firstManager to use * @param firstManager to use
* @return a builder where the provided {@code firstManager} is added * @return a builder where the provided {@code firstManager} is added
* *
* @throws NullPointerException if the provided {@code firstManager} is * @throws NullPointerException if the provided {@code firstManager} is
* {@code null} * {@code null}
*/ */
<T1> JoinBuilder1<T1> from(TableIdentifier<T1> firstManager); <T0> JoinBuilder1<T0> from(TableIdentifier<T0> firstManager);


interface JoinBuilder1<T1> extends interface JoinBuilder1<T0> extends
HasJoins<JoinBuilder1.AfterJoin<T1, ?>, JoinBuilder1.JoinBuilder2<T1, ?>>, HasJoins<JoinBuilder1.AfterJoin<T0, ?>, JoinBuilder1.JoinBuilder2<T0, ?>>,
HasWhere<T1, JoinBuilder1<T1>> { HasWhere<T0, JoinBuilder1<T0>> {


@Override @Override
<T2> AfterJoin<T1, T2> innerJoinOn(HasComparableOperators<T2, ?> joinedField); <T1> AfterJoin<T0, T1> innerJoinOn(HasComparableOperators<T1, ?> joinedField);


@Override @Override
<T2> AfterJoin<T1, T2> leftJoinOn(HasComparableOperators<T2, ?> joinedField); <T1> AfterJoin<T0, T1> leftJoinOn(HasComparableOperators<T1, ?> joinedField);


@Override @Override
<T2> AfterJoin<T1, T2> rightJoinOn(HasComparableOperators<T2, ?> joinedField); <T1> AfterJoin<T0, T1> rightJoinOn(HasComparableOperators<T1, ?> joinedField);


// @Override // @Override
// <T2> AfterJoin<T1, T2> fullOuterJoinOn(HasComparableOperators<T2, ?> joinedField); // <T1> AfterJoin<T0, T1> fullOuterJoinOn(HasComparableOperators<T1, ?> joinedField);


@Override @Override
<T2> JoinBuilder2<T1, T2> crossJoin(TableIdentifier<T2> joinedTable); <T1> JoinBuilder2<T0, T1> crossJoin(TableIdentifier<T1> joinedTable);


interface AfterJoin<T1, T2> extends interface AfterJoin<T0, T1> extends
HasOnPredicates<JoinBuilder2<T1, T2>> { HasOnPredicates<JoinBuilder2<T0, T1>> {


} }


interface JoinBuilder2<T1, T2> extends interface JoinBuilder2<T0, T1> extends
HasJoins<JoinBuilder2.AfterJoin<T1, T2, ?>, JoinBuilder2.JoinBuilder3<T1, T2, ?>>, HasJoins<JoinBuilder2.AfterJoin<T0, T1, ?>, JoinBuilder2.JoinBuilder3<T0, T1, ?>>,
HasWhere<T2, JoinBuilder2<T1, T2>>, HasWhere<T1, JoinBuilder2<T0, T1>>,
HasDefaultBuild<Tuple2OfNullables<T1, T2>> { HasDefaultBuild<Tuple2OfNullables<T0, T1>> {


@Override @Override
<T3> AfterJoin<T1, T2, T3> innerJoinOn(HasComparableOperators<T3, ?> joinedField); <T2> AfterJoin<T0, T1, T2> innerJoinOn(HasComparableOperators<T2, ?> joinedField);


@Override @Override
<T3> AfterJoin<T1, T2, T3> leftJoinOn(HasComparableOperators<T3, ?> joinedField); <T2> AfterJoin<T0, T1, T2> leftJoinOn(HasComparableOperators<T2, ?> joinedField);


@Override @Override
<T3> AfterJoin<T1, T2, T3> rightJoinOn(HasComparableOperators<T3, ?> joinedField); <T2> AfterJoin<T0, T1, T2> rightJoinOn(HasComparableOperators<T2, ?> joinedField);


// @Override // @Override
// <T3> AfterJoin<T1, T2, T3> fullOuterJoinOn(HasComparableOperators<T3, ?> joinedField); // <T2> AfterJoin<T0, T1, T2> fullOuterJoinOn(HasComparableOperators<T2, ?> joinedField);


@Override @Override
<T3> JoinBuilder3<T1, T2, T3> crossJoin(TableIdentifier<T3> joinedTable); <T2> JoinBuilder3<T0, T1, T2> crossJoin(TableIdentifier<T2> joinedTable);


@Override @Override
default Join<Tuple2OfNullables<T1, T2>> build() { default Join<Tuple2OfNullables<T0, T1>> build() {
return build(TuplesOfNullables::ofNullables); return build(TuplesOfNullables::ofNullables);
} }


Expand All @@ -122,35 +122,35 @@ default Join<Tuple2OfNullables<T1, T2>> build() {
* @throws NullPointerException if the provided {@code constructor } * @throws NullPointerException if the provided {@code constructor }
* is {@code null} * is {@code null}
*/ */
<T> Join<T> build(BiFunction<T1, T2, T> constructor); <T> Join<T> build(BiFunction<T0, T1, T> constructor);


interface AfterJoin<T1, T2, T3> extends interface AfterJoin<T0, T1, T2> extends
HasOnPredicates<JoinBuilder3<T1, T2, T3>> { HasOnPredicates<JoinBuilder3<T0, T1, T2>> {


} }


interface JoinBuilder3<T1, T2, T3> extends interface JoinBuilder3<T0, T1, T2> extends
HasJoins<JoinBuilder3.AfterJoin<T1, T2, T3, ?>, JoinBuilder3.JoinBuilder4<T1, T2, T3, ?>>, HasJoins<JoinBuilder3.AfterJoin<T0, T1, T2, ?>, JoinBuilder3.JoinBuilder4<T0, T1, T2, ?>>,
HasWhere<T3, JoinBuilder3<T1, T2, T3>>, HasWhere<T2, JoinBuilder3<T0, T1, T2>>,
HasDefaultBuild<Tuple3OfNullables<T1, T2, T3>> { HasDefaultBuild<Tuple3OfNullables<T0, T1, T2>> {


@Override @Override
<T4> AfterJoin<T1, T2, T3, T4> innerJoinOn(HasComparableOperators<T4, ?> joinedField); <T3> AfterJoin<T0, T1, T2, T3> innerJoinOn(HasComparableOperators<T3, ?> joinedField);


@Override @Override
<T4> AfterJoin<T1, T2, T3, T4> leftJoinOn(HasComparableOperators<T4, ?> joinedField); <T3> AfterJoin<T0, T1, T2, T3> leftJoinOn(HasComparableOperators<T3, ?> joinedField);


@Override @Override
<T4> AfterJoin<T1, T2, T3, T4> rightJoinOn(HasComparableOperators<T4, ?> joinedField); <T3> AfterJoin<T0, T1, T2, T3> rightJoinOn(HasComparableOperators<T3, ?> joinedField);


// @Override // @Override
// <T4> AfterJoin<T1, T2, T3, T4> fullOuterJoinOn(HasComparableOperators<T4, ?> joinedField); // <T3> AfterJoin<T0, T1, T2, T3> fullOuterJoinOn(HasComparableOperators<T3, ?> joinedField);


@Override @Override
<T4> JoinBuilder4<T1, T2, T3, T4> crossJoin(TableIdentifier<T4> joinedTable); <T3> JoinBuilder4<T0, T1, T2, T3> crossJoin(TableIdentifier<T3> joinedTable);


@Override @Override
default Join<Tuple3OfNullables<T1, T2, T3>> build() { default Join<Tuple3OfNullables<T0, T1, T2>> build() {
return build(TuplesOfNullables::ofNullables); return build(TuplesOfNullables::ofNullables);
} }


Expand All @@ -168,35 +168,35 @@ default Join<Tuple3OfNullables<T1, T2, T3>> build() {
* @throws NullPointerException if the provided {@code constructor * @throws NullPointerException if the provided {@code constructor
* } is {@code null} * } is {@code null}
*/ */
<T> Join<T> build(TriFunction<T1, T2, T3, T> constructor); <T> Join<T> build(TriFunction<T0, T1, T2, T> constructor);


interface AfterJoin<T1, T2, T3, T4> extends interface AfterJoin<T0, T1, T2, T3> extends
HasOnPredicates<JoinBuilder4<T1, T2, T3, T4>> { HasOnPredicates<JoinBuilder4<T0, T1, T2, T3>> {


} }


interface JoinBuilder4<T1, T2, T3, T4> extends interface JoinBuilder4<T0, T1, T2, T3> extends
HasJoins<JoinBuilder4.AfterJoin<T1, T2, T3, T4, ?>, JoinBuilder4.JoinBuilder5<T1, T2, T3, T4, ?>>, HasJoins<JoinBuilder4.AfterJoin<T0, T1, T2, T3, ?>, JoinBuilder4.JoinBuilder5<T0, T1, T2, T3, ?>>,
HasWhere<T4, JoinBuilder4<T1, T2, T3, T4>>, HasWhere<T3, JoinBuilder4<T0, T1, T2, T3>>,
HasDefaultBuild<Tuple4OfNullables<T1, T2, T3, T4>> { HasDefaultBuild<Tuple4OfNullables<T0, T1, T2, T3>> {


@Override @Override
<T5> AfterJoin<T1, T2, T3, T4, T5> innerJoinOn(HasComparableOperators<T5, ?> joinedField); <T4> AfterJoin<T0, T1, T2, T3, T4> innerJoinOn(HasComparableOperators<T4, ?> joinedField);


@Override @Override
<T5> AfterJoin<T1, T2, T3, T4, T5> leftJoinOn(HasComparableOperators<T5, ?> joinedField); <T4> AfterJoin<T0, T1, T2, T3, T4> leftJoinOn(HasComparableOperators<T4, ?> joinedField);


@Override @Override
<T5> AfterJoin<T1, T2, T3, T4, T5> rightJoinOn(HasComparableOperators<T5, ?> joinedField); <T4> AfterJoin<T0, T1, T2, T3, T4> rightJoinOn(HasComparableOperators<T4, ?> joinedField);


// @Override // @Override
// <T5> AfterJoin<T1, T2, T3, T4, T5> fullOuterJoinOn(HasComparableOperators<T5, ?> joinedField); // <T4> AfterJoin<T0, T1, T2, T3, T4> fullOuterJoinOn(HasComparableOperators<T4, ?> joinedField);


@Override @Override
<T5> JoinBuilder5<T1, T2, T3, T4, T5> crossJoin(TableIdentifier<T5> joinedTable); <T4> JoinBuilder5<T0, T1, T2, T3, T4> crossJoin(TableIdentifier<T4> joinedTable);


@Override @Override
default Join<Tuple4OfNullables<T1, T2, T3, T4>> build() { default Join<Tuple4OfNullables<T0, T1, T2, T3>> build() {
return build(TuplesOfNullables::ofNullables); return build(TuplesOfNullables::ofNullables);
} }


Expand All @@ -218,35 +218,35 @@ default Join<Tuple4OfNullables<T1, T2, T3, T4>> build() {
* } method refers to tables that are not a part of the * } method refers to tables that are not a part of the
* join. * join.
*/ */
<T> Join<T> build(QuadFunction<T1, T2, T3, T4, T> constructor); <T> Join<T> build(QuadFunction<T0, T1, T2, T3, T> constructor);


interface AfterJoin<T1, T2, T3, T4, T5> extends interface AfterJoin<T0, T1, T2, T3, T4> extends
HasOnPredicates<JoinBuilder5<T1, T2, T3, T4, T5>> { HasOnPredicates<JoinBuilder5<T0, T1, T2, T3, T4>> {


} }


interface JoinBuilder5<T1, T2, T3, T4, T5> extends interface JoinBuilder5<T0, T1, T2, T3, T4> extends
HasJoins<JoinBuilder5.AfterJoin<T1, T2, T3, T4, T5, ?>, JoinBuilder5.JoinBuilder6<T1, T2, T3, T4, T5, ?>>, HasJoins<JoinBuilder5.AfterJoin<T0, T1, T2, T3, T4, ?>, JoinBuilder5.JoinBuilder6<T0, T1, T2, T3, T4, ?>>,
HasWhere<T5, JoinBuilder5<T1, T2, T3, T4, T5>>, HasWhere<T4, JoinBuilder5<T0, T1, T2, T3, T4>>,
HasDefaultBuild<Tuple5OfNullables<T1, T2, T3, T4, T5>> { HasDefaultBuild<Tuple5OfNullables<T0, T1, T2, T3, T4>> {


@Override @Override
<T6> AfterJoin<T1, T2, T3, T4, T5, T6> innerJoinOn(HasComparableOperators<T6, ?> joinedField); <T5> AfterJoin<T0, T1, T2, T3, T4, T5> innerJoinOn(HasComparableOperators<T5, ?> joinedField);


@Override @Override
<T6> AfterJoin<T1, T2, T3, T4, T5, T6> leftJoinOn(HasComparableOperators<T6, ?> joinedField); <T5> AfterJoin<T0, T1, T2, T3, T4, T5> leftJoinOn(HasComparableOperators<T5, ?> joinedField);


@Override @Override
<T6> AfterJoin<T1, T2, T3, T4, T5, T6> rightJoinOn(HasComparableOperators<T6, ?> joinedField); <T5> AfterJoin<T0, T1, T2, T3, T4, T5> rightJoinOn(HasComparableOperators<T5, ?> joinedField);


// @Override // @Override
// <T6> AfterJoin<T1, T2, T3, T4, T5, T6> fullOuterJoinOn(HasComparableOperators<T6, ?> joinedField); // <T5> AfterJoin<T0, T1, T2, T3, T4, T5> fullOuterJoinOn(HasComparableOperators<T5, ?> joinedField);


@Override @Override
<T6> JoinBuilder6<T1, T2, T3, T4, T5, T6> crossJoin(TableIdentifier<T6> joinedTable); <T5> JoinBuilder6<T0, T1, T2, T3, T4, T5> crossJoin(TableIdentifier<T5> joinedTable);


@Override @Override
default Join<Tuple5OfNullables<T1, T2, T3, T4, T5>> build() { default Join<Tuple5OfNullables<T0, T1, T2, T3, T4>> build() {
return build(TuplesOfNullables::ofNullables); return build(TuplesOfNullables::ofNullables);
} }


Expand All @@ -269,19 +269,19 @@ default Join<Tuple5OfNullables<T1, T2, T3, T4, T5>> build() {
* } method refers to tables that are not a part of the * } method refers to tables that are not a part of the
* join. * join.
*/ */
<T> Join<T> build(Function5<T1, T2, T3, T4, T5, T> constructor); <T> Join<T> build(Function5<T0, T1, T2, T3, T4, T> constructor);


interface AfterJoin<T1, T2, T3, T4, T5, T6> extends interface AfterJoin<T0, T1, T2, T3, T4, T5> extends
HasOnPredicates<JoinBuilder6<T1, T2, T3, T4, T5, T6>> { HasOnPredicates<JoinBuilder6<T0, T1, T2, T3, T4, T5>> {


} }


interface JoinBuilder6<T1, T2, T3, T4, T5, T6> extends interface JoinBuilder6<T0, T1, T2, T3, T4, T5> extends
HasWhere<T6, JoinBuilder6<T1, T2, T3, T4, T5, T6>>, HasWhere<T5, JoinBuilder6<T0, T1, T2, T3, T4, T5>>,
HasDefaultBuild<Tuple6OfNullables<T1, T2, T3, T4, T5, T6>> { HasDefaultBuild<Tuple6OfNullables<T0, T1, T2, T3, T4, T5>> {


@Override @Override
default Join<Tuple6OfNullables<T1, T2, T3, T4, T5, T6>> build() { default Join<Tuple6OfNullables<T0, T1, T2, T3, T4, T5>> build() {
return build(TuplesOfNullables::ofNullables); return build(TuplesOfNullables::ofNullables);
} }


Expand All @@ -305,7 +305,7 @@ default Join<Tuple6OfNullables<T1, T2, T3, T4, T5, T6>> build() {
* } method refers to tables that are not a part of * } method refers to tables that are not a part of
* the join. * the join.
*/ */
<T> Join<T> build(Function6<T1, T2, T3, T4, T5, T6, T> constructor); <T> Join<T> build(Function6<T0, T1, T2, T3, T4, T5, T> constructor);


} }


Expand Down
Expand Up @@ -67,67 +67,67 @@ void init(
} }


@Override @Override
public <T1, T2, T> Join<T> createJoin( public <T0, T1, T> Join<T> createJoin(
final List<Stage<?>> stages, final List<Stage<?>> stages,
final BiFunction<T1, T2, T> constructor, final BiFunction<T0, T1, T> constructor,
final TableIdentifier<T1> t1, final TableIdentifier<T0> t0,
final TableIdentifier<T2> t2 final TableIdentifier<T1> t1
) { ) {
return join2Creator.createJoin(stages, constructor, t1, t2); return join2Creator.createJoin(stages, constructor, t0, t1);
} }


@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T1, T2, T3, T> Join<T> createJoin( public <T0, T1, T2, T> Join<T> createJoin(
final List<Stage<?>> stages, final List<Stage<?>> stages,
final TriFunction<T1, T2, T3, T> constructor, final TriFunction<T0, T1, T2, T> constructor,
final TableIdentifier<T0> t0,
final TableIdentifier<T1> t1, final TableIdentifier<T1> t1,
final TableIdentifier<T2> t2, final TableIdentifier<T2> t2
final TableIdentifier<T3> t3
) { ) {
return join3Creator.createJoin(stages, constructor, t1, t2, t3); return join3Creator.createJoin(stages, constructor, t0, t1, t2);
} }


@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T1, T2, T3, T4, T> Join<T> createJoin( public <T0, T1, T2, T3, T> Join<T> createJoin(
final List<Stage<?>> stages, final List<Stage<?>> stages,
final QuadFunction<T1, T2, T3, T4, T> constructor, final QuadFunction<T0, T1, T2, T3, T> constructor,
final TableIdentifier<T0> t0,
final TableIdentifier<T1> t1, final TableIdentifier<T1> t1,
final TableIdentifier<T2> t2, final TableIdentifier<T2> t2,
final TableIdentifier<T3> t3, final TableIdentifier<T3> t3
final TableIdentifier<T4> t4
) { ) {
return join4Creator.createJoin(stages, constructor, t1, t2, t3, t4); return join4Creator.createJoin(stages, constructor, t0, t1, t2, t3);
} }


@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T1, T2, T3, T4, T5, T> Join<T> createJoin( public <T0, T1, T2, T3, T4, T> Join<T> createJoin(
final List<Stage<?>> stages, final List<Stage<?>> stages,
final Function5<T1, T2, T3, T4, T5, T> constructor, final Function5<T0, T1, T2, T3, T4, T> constructor,
final TableIdentifier<T0> t0,
final TableIdentifier<T1> t1, final TableIdentifier<T1> t1,
final TableIdentifier<T2> t2, final TableIdentifier<T2> t2,
final TableIdentifier<T3> t3, final TableIdentifier<T3> t3,
final TableIdentifier<T4> t4, final TableIdentifier<T4> t4
final TableIdentifier<T5> t5
) { ) {
return join5Creator.createJoin(stages, constructor, t1, t2, t3, t4, t5); return join5Creator.createJoin(stages, constructor, t0, t1, t2, t3, t4);
} }


@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T1, T2, T3, T4, T5, T6, T> Join<T> createJoin( public <T0, T1, T2, T3, T4, T5, T> Join<T> createJoin(
final List<Stage<?>> stages, final List<Stage<?>> stages,
final Function6<T1, T2, T3, T4, T5, T6, T> constructor, final Function6<T0, T1, T2, T3, T4, T5, T> constructor,
final TableIdentifier<T0> t0,
final TableIdentifier<T1> t1, final TableIdentifier<T1> t1,
final TableIdentifier<T2> t2, final TableIdentifier<T2> t2,
final TableIdentifier<T3> t3, final TableIdentifier<T3> t3,
final TableIdentifier<T4> t4, final TableIdentifier<T4> t4,
final TableIdentifier<T5> t5, final TableIdentifier<T5> t5
final TableIdentifier<T6> t6
) { ) {
return join6Creator.createJoin(stages, constructor, t1, t2, t3, t4, t5, t6); return join6Creator.createJoin(stages, constructor, t0, t1, t2, t3, t4, t5);
} }


private <ENTITY> SqlAdapter<ENTITY> sqlAdapterMapper(TableIdentifier<ENTITY> identifier) { private <ENTITY> SqlAdapter<ENTITY> sqlAdapterMapper(TableIdentifier<ENTITY> identifier) {
Expand Down
Expand Up @@ -29,14 +29,14 @@ public SqlHasCreateJoin2(
} }


@Override @Override
public <T1, T2, T> Join<T> createJoin( public <T0, T1, T> Join<T> createJoin(
final List<Stage<?>> stages, final List<Stage<?>> stages,
final BiFunction<T1, T2, T> constructor, final BiFunction<T0, T1, T> constructor,
final TableIdentifier<T1> t1, final TableIdentifier<T0> t0,
final TableIdentifier<T2> t2 final TableIdentifier<T1> t1
) { ) {
final SqlFunction<ResultSet, T1> rsMapper1 = rsMapper(stages, 0, t1); final SqlFunction<ResultSet, T0> rsMapper1 = rsMapper(stages, 0, t0);
final SqlFunction<ResultSet, T2> rsMapper2 = rsMapper(stages, 1, t2); final SqlFunction<ResultSet, T1> rsMapper2 = rsMapper(stages, 1, t1);
final SqlFunction<ResultSet, T> rsMapper = rs -> constructor.apply( final SqlFunction<ResultSet, T> rsMapper = rs -> constructor.apply(
rsMapper1.apply(rs), rsMapper1.apply(rs),
rsMapper2.apply(rs) rsMapper2.apply(rs)
Expand Down

0 comments on commit 09e5b99

Please sign in to comment.