diff --git a/src/main/java/com/github/russ_p/sqlbuilder/select/FromBuilder.java b/src/main/java/com/github/russ_p/sqlbuilder/select/FromBuilder.java index 60e3884..fea76f3 100644 --- a/src/main/java/com/github/russ_p/sqlbuilder/select/FromBuilder.java +++ b/src/main/java/com/github/russ_p/sqlbuilder/select/FromBuilder.java @@ -1,6 +1,6 @@ package com.github.russ_p.sqlbuilder.select; -public class FromBuilder extends AbstractQueryBuilder { +public class FromBuilder extends AbstractQueryBuilder implements JoinMixin { FromBuilder(SelectQuery query, String table) { super(query); @@ -15,23 +15,9 @@ public class FromBuilder extends AbstractQueryBuilder { return new WhereBuilder(query, condition); } - public JoinBuilder join(String table) { - return innerJoin(table); + @Override + public SelectQuery getQuery() { + return query; } - public JoinBuilder innerJoin(String table) { - return new JoinBuilder(query, "inner", table); - } - - public JoinBuilder leftJoin(String table) { - return new JoinBuilder(query, "left", table); - } - - public JoinBuilder rightJoin(String table) { - return new JoinBuilder(query, "right", table); - } - - public JoinBuilder crossJoin(String table) { - return new JoinBuilder(query, "cross", table); - } } diff --git a/src/main/java/com/github/russ_p/sqlbuilder/select/JoinBuilder.java b/src/main/java/com/github/russ_p/sqlbuilder/select/JoinBuilder.java index 5b707cc..3063ae9 100644 --- a/src/main/java/com/github/russ_p/sqlbuilder/select/JoinBuilder.java +++ b/src/main/java/com/github/russ_p/sqlbuilder/select/JoinBuilder.java @@ -2,13 +2,41 @@ package com.github.russ_p.sqlbuilder.select; public class JoinBuilder extends AbstractQueryBuilder { - public JoinBuilder(SelectQuery query, String joinType, String table) { + JoinBuilder(SelectQuery query, JoinType joinType, String table) { super(query); - query.addJoin("\n " + joinType.toUpperCase() + " JOIN " + table); + join(joinType, table); } public JoinConditionBuilder on(String condition) { return new JoinConditionBuilder(query, condition); } + public JoinBuilder join(String table) { + return innerJoin(table); + } + + public JoinBuilder innerJoin(String table) { + return join(JoinType.INNER, table); + } + + public JoinBuilder leftJoin(String table) { + return join(JoinType.LEFT, table); + } + + public JoinBuilder rightJoin(String table) { + return join(JoinType.RIGHT, table); + } + + public JoinBuilder crossJoin(String table) { + return join(JoinType.CROSS, table); + } + + public WhereBuilder where(String condition) { + return new WhereBuilder(query, condition); + } + + private JoinBuilder join(JoinType joinType, String table) { + query.addJoin(" " + joinType.toString() + " JOIN " + table); + return this; + } } diff --git a/src/main/java/com/github/russ_p/sqlbuilder/select/JoinConditionBuilder.java b/src/main/java/com/github/russ_p/sqlbuilder/select/JoinConditionBuilder.java index e4ea0f3..6cadb83 100644 --- a/src/main/java/com/github/russ_p/sqlbuilder/select/JoinConditionBuilder.java +++ b/src/main/java/com/github/russ_p/sqlbuilder/select/JoinConditionBuilder.java @@ -1,6 +1,6 @@ package com.github.russ_p.sqlbuilder.select; -public class JoinConditionBuilder extends AbstractQueryBuilder { +public class JoinConditionBuilder extends AbstractQueryBuilder implements JoinMixin { public JoinConditionBuilder(SelectQuery query, String condition) { super(query); @@ -11,23 +11,9 @@ public class JoinConditionBuilder extends AbstractQueryBuilder { return new WhereBuilder(query, condition); } - public JoinBuilder join(String table) { - return innerJoin(table); + @Override + public SelectQuery getQuery() { + return query; } - public JoinBuilder innerJoin(String table) { - return new JoinBuilder(query, "inner", table); - } - - public JoinBuilder leftJoin(String table) { - return new JoinBuilder(query, "left", table); - } - - public JoinBuilder rightJoin(String table) { - return new JoinBuilder(query, "right", table); - } - - public JoinBuilder crossJoin(String table) { - return new JoinBuilder(query, "cross", table); - } } diff --git a/src/main/java/com/github/russ_p/sqlbuilder/select/JoinMixin.java b/src/main/java/com/github/russ_p/sqlbuilder/select/JoinMixin.java new file mode 100644 index 0000000..c9a8238 --- /dev/null +++ b/src/main/java/com/github/russ_p/sqlbuilder/select/JoinMixin.java @@ -0,0 +1,26 @@ +package com.github.russ_p.sqlbuilder.select; + +interface JoinMixin { + + default JoinBuilder join(String table) { + return innerJoin(table); + } + + default JoinBuilder innerJoin(String table) { + return new JoinBuilder(getQuery(), JoinType.INNER, table); + } + + default JoinBuilder leftJoin(String table) { + return new JoinBuilder(getQuery(), JoinType.LEFT, table); + } + + default JoinBuilder rightJoin(String table) { + return new JoinBuilder(getQuery(), JoinType.RIGHT, table); + } + + default JoinBuilder crossJoin(String table) { + return new JoinBuilder(getQuery(), JoinType.CROSS, table); + } + + SelectQuery getQuery(); +} diff --git a/src/main/java/com/github/russ_p/sqlbuilder/select/JoinType.java b/src/main/java/com/github/russ_p/sqlbuilder/select/JoinType.java new file mode 100644 index 0000000..7f548a1 --- /dev/null +++ b/src/main/java/com/github/russ_p/sqlbuilder/select/JoinType.java @@ -0,0 +1,10 @@ +package com.github.russ_p.sqlbuilder.select; + +enum JoinType { + + INNER, + LEFT, + RIGHT, + CROSS, + +} diff --git a/src/main/java/com/github/russ_p/sqlbuilder/select/SelectQuery.java b/src/main/java/com/github/russ_p/sqlbuilder/select/SelectQuery.java index 79d016b..984bffd 100644 --- a/src/main/java/com/github/russ_p/sqlbuilder/select/SelectQuery.java +++ b/src/main/java/com/github/russ_p/sqlbuilder/select/SelectQuery.java @@ -79,6 +79,7 @@ class SelectQuery { sb.append(tables.stream().collect(Collectors.joining(", "))); if (!join.isEmpty()) { + sb.append("\n"); sb.append(join.stream().collect(Collectors.joining("\n "))); }