1
0
mirror of https://github.com/russ-p/sqlbuilder.git synced 2025-12-13 16:54:24 +00:00

joins
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2019-07-27 00:51:04 +03:00
parent 20ee041f01
commit a723e4cf2b
6 changed files with 75 additions and 38 deletions

View File

@@ -1,6 +1,6 @@
package com.github.russ_p.sqlbuilder.select;
public class FromBuilder extends AbstractQueryBuilder<SelectQuery> {
public class FromBuilder extends AbstractQueryBuilder<SelectQuery> implements JoinMixin {
FromBuilder(SelectQuery query, String table) {
super(query);
@@ -15,23 +15,9 @@ public class FromBuilder extends AbstractQueryBuilder<SelectQuery> {
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);
}
}

View File

@@ -2,13 +2,41 @@ package com.github.russ_p.sqlbuilder.select;
public class JoinBuilder extends AbstractQueryBuilder<SelectQuery> {
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;
}
}

View File

@@ -1,6 +1,6 @@
package com.github.russ_p.sqlbuilder.select;
public class JoinConditionBuilder extends AbstractQueryBuilder<SelectQuery> {
public class JoinConditionBuilder extends AbstractQueryBuilder<SelectQuery> implements JoinMixin {
public JoinConditionBuilder(SelectQuery query, String condition) {
super(query);
@@ -11,23 +11,9 @@ public class JoinConditionBuilder extends AbstractQueryBuilder<SelectQuery> {
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);
}
}

View File

@@ -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();
}

View File

@@ -0,0 +1,10 @@
package com.github.russ_p.sqlbuilder.select;
enum JoinType {
INNER,
LEFT,
RIGHT,
CROSS,
}

View File

@@ -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 ")));
}