This repository has been archived by the owner on Mar 2, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #8 from alexfu/feature/composition-builder
Improve statement string builder
- Loading branch information
Showing
41 changed files
with
378 additions
and
380 deletions.
There are no files selected for viewing
14 changes: 0 additions & 14 deletions
14
src/main/java/com/alexfu/sqlitequerybuilder/QueryBuilder.java
This file was deleted.
Oops, something went wrong.
12 changes: 7 additions & 5 deletions
12
src/main/java/com/alexfu/sqlitequerybuilder/SQLiteQueryBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,15 @@ | ||
package com.alexfu.sqlitequerybuilder; | ||
|
||
import com.alexfu.sqlitequerybuilder.impl.SelectImpl; | ||
import com.alexfu.sqlitequerybuilder.builder.SelectBuilder; | ||
import com.alexfu.sqlitequerybuilder.builder.SelectFieldBuilder; | ||
import com.alexfu.sqlitequerybuilder.builder.SelectTypeBuilder; | ||
|
||
public class SQLiteQueryBuilder { | ||
public static Select select(String... fields) { | ||
return new SelectImpl(fields); | ||
public static SelectBuilder select(String... fields) { | ||
return new SelectFieldBuilder(fields); | ||
} | ||
|
||
public static Select select() { | ||
return new SelectImpl(); | ||
public static SelectBuilder select(SelectType type) { | ||
return new SelectTypeBuilder(type); | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
src/main/java/com/alexfu/sqlitequerybuilder/SegmentBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.alexfu.sqlitequerybuilder; | ||
|
||
public interface SegmentBuilder { | ||
public String build(); | ||
} |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
4 changes: 0 additions & 4 deletions
4
src/main/java/com/alexfu/sqlitequerybuilder/SelectGroupBy.java
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
6 changes: 0 additions & 6 deletions
6
src/main/java/com/alexfu/sqlitequerybuilder/SelectOrderBy.java
This file was deleted.
Oops, something went wrong.
6 changes: 0 additions & 6 deletions
6
src/main/java/com/alexfu/sqlitequerybuilder/SelectOrderStep.java
This file was deleted.
Oops, something went wrong.
30 changes: 28 additions & 2 deletions
30
src/main/java/com/alexfu/sqlitequerybuilder/SelectType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,31 @@ | ||
package com.alexfu.sqlitequerybuilder; | ||
|
||
public interface SelectType { | ||
public SelectFrom from(String table); | ||
import com.alexfu.sqlitequerybuilder.utils.StringUtils; | ||
|
||
public class SelectType implements SegmentBuilder { | ||
|
||
private enum Type { | ||
DISTINCT, ALL | ||
} | ||
|
||
private Type type; | ||
private String[] fields; | ||
|
||
private SelectType(Type type, String...fields) { | ||
this.type = type; | ||
this.fields = fields; | ||
} | ||
|
||
public static SelectType DISTINCT(String... fields) { | ||
return new SelectType(Type.DISTINCT, fields); | ||
} | ||
|
||
public static SelectType ALL(String... fields) { | ||
return new SelectType(Type.ALL, fields); | ||
} | ||
|
||
@Override | ||
public String build() { | ||
return StringUtils.join(" ", type.toString(), StringUtils.join(",", fields)); | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
28 changes: 28 additions & 0 deletions
28
src/main/java/com/alexfu/sqlitequerybuilder/builder/JoinOnBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.alexfu.sqlitequerybuilder.builder; | ||
|
||
import com.alexfu.sqlitequerybuilder.SegmentBuilder; | ||
import com.alexfu.sqlitequerybuilder.utils.StringUtils; | ||
|
||
public class JoinOnBuilder implements SegmentBuilder { | ||
|
||
private SelectJoinBuilder prefix; | ||
private String condition; | ||
|
||
public JoinOnBuilder(SelectJoinBuilder prefix, String condition) { | ||
this.prefix = prefix; | ||
this.condition = condition; | ||
} | ||
|
||
public SelectWhereBuilder where(String condition) { | ||
return new SelectWhereBuilder(this, condition); | ||
} | ||
|
||
public SelectJoinBuilder join(String table) { | ||
return new SelectJoinBuilder(this, table); | ||
} | ||
|
||
@Override | ||
public String build() { | ||
return StringUtils.join(" ", prefix.build(), "ON", condition); | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
src/main/java/com/alexfu/sqlitequerybuilder/builder/SelectAndBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.alexfu.sqlitequerybuilder.builder; | ||
|
||
import com.alexfu.sqlitequerybuilder.SegmentBuilder; | ||
import com.alexfu.sqlitequerybuilder.utils.StringUtils; | ||
|
||
public class SelectAndBuilder implements SegmentBuilder { | ||
|
||
private SelectWhereBuilder prefix; | ||
private String condition; | ||
|
||
public SelectAndBuilder(SelectWhereBuilder prefix, String condition) { | ||
this.prefix = prefix; | ||
this.condition = condition; | ||
} | ||
|
||
@Override | ||
public String build() { | ||
return StringUtils.join(" ", prefix.build(), "AND", condition); | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/com/alexfu/sqlitequerybuilder/builder/SelectBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.alexfu.sqlitequerybuilder.builder; | ||
|
||
import com.alexfu.sqlitequerybuilder.SegmentBuilder; | ||
|
||
public abstract class SelectBuilder implements SegmentBuilder { | ||
public SelectFromBuilder from(String table) { | ||
return new SelectFromBuilder(this, table); | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/com/alexfu/sqlitequerybuilder/builder/SelectFieldBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.alexfu.sqlitequerybuilder.builder; | ||
|
||
import com.alexfu.sqlitequerybuilder.utils.StringUtils; | ||
|
||
public class SelectFieldBuilder extends SelectBuilder { | ||
|
||
private String[] fields; | ||
|
||
public SelectFieldBuilder(String...fields) { | ||
this.fields = fields; | ||
} | ||
|
||
@Override | ||
public String build() { | ||
return StringUtils.join(" ", "SELECT", StringUtils.join(",", fields)); | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
src/main/java/com/alexfu/sqlitequerybuilder/builder/SelectFromBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package com.alexfu.sqlitequerybuilder.builder; | ||
|
||
import com.alexfu.sqlitequerybuilder.SegmentBuilder; | ||
import com.alexfu.sqlitequerybuilder.utils.StringUtils; | ||
|
||
public class SelectFromBuilder implements SegmentBuilder { | ||
|
||
private SelectBuilder prefix; | ||
private String[] tables; | ||
|
||
public SelectFromBuilder(SelectBuilder prefix, String...tables) { | ||
this.prefix = prefix; | ||
this.tables = tables; | ||
} | ||
|
||
public SelectWhereBuilder where(String condition) { | ||
return new SelectWhereBuilder(this, condition); | ||
} | ||
|
||
public SelectJoinBuilder join(String table) { | ||
return new SelectJoinBuilder(this, table); | ||
} | ||
|
||
public SelectOrderByBuilder orderBy(String column) { | ||
return new SelectOrderByBuilder(this, column); | ||
} | ||
|
||
public SelectGroupByBuilder groupBy(String column) { | ||
return new SelectGroupByBuilder(this, column); | ||
} | ||
|
||
@Override | ||
public String build() { | ||
return StringUtils.join(" ", prefix.build(), "FROM", StringUtils.join(",", tables)); | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
src/main/java/com/alexfu/sqlitequerybuilder/builder/SelectGroupByBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.alexfu.sqlitequerybuilder.builder; | ||
|
||
import com.alexfu.sqlitequerybuilder.SegmentBuilder; | ||
import com.alexfu.sqlitequerybuilder.utils.StringUtils; | ||
|
||
public class SelectGroupByBuilder implements SegmentBuilder { | ||
|
||
private SelectFromBuilder prefix; | ||
private String column; | ||
|
||
public SelectGroupByBuilder(SelectFromBuilder prefix, String column) { | ||
this.prefix = prefix; | ||
this.column = column; | ||
} | ||
|
||
@Override | ||
public String build() { | ||
return StringUtils.join(" ", prefix.build(), "GROUP BY", column); | ||
} | ||
} |
25 changes: 25 additions & 0 deletions
25
src/main/java/com/alexfu/sqlitequerybuilder/builder/SelectJoinBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package com.alexfu.sqlitequerybuilder.builder; | ||
|
||
import com.alexfu.sqlitequerybuilder.SegmentBuilder; | ||
|
||
import static com.alexfu.sqlitequerybuilder.utils.StringUtils.join; | ||
|
||
public class SelectJoinBuilder implements SegmentBuilder { | ||
|
||
private SegmentBuilder prefix; | ||
private String table; | ||
|
||
public SelectJoinBuilder(SegmentBuilder prefix, String table) { | ||
this.prefix = prefix; | ||
this.table = table; | ||
} | ||
|
||
public JoinOnBuilder on(String condition) { | ||
return new JoinOnBuilder(this, condition); | ||
} | ||
|
||
@Override | ||
public String build() { | ||
return join(" ", prefix.build(), "JOIN", table); | ||
} | ||
} |
35 changes: 35 additions & 0 deletions
35
src/main/java/com/alexfu/sqlitequerybuilder/builder/SelectLimitBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package com.alexfu.sqlitequerybuilder.builder; | ||
|
||
import com.alexfu.sqlitequerybuilder.SegmentBuilder; | ||
import com.alexfu.sqlitequerybuilder.utils.StringUtils; | ||
|
||
public class SelectLimitBuilder implements SegmentBuilder { | ||
|
||
private SegmentBuilder prefix; | ||
private int limit = -1; | ||
private int offset = -1; | ||
|
||
public SelectLimitBuilder(SegmentBuilder prefix, int limit) { | ||
this.prefix = prefix; | ||
this.limit = limit; | ||
} | ||
|
||
public SelectLimitBuilder offset(int offset) { | ||
this.offset = offset; | ||
return this; | ||
} | ||
|
||
@Override | ||
public String build() { | ||
String offsetString = null; | ||
if (offset != -1) { | ||
offsetString = StringUtils.join(" ", "OFFSET", String.valueOf(offset)); | ||
} | ||
|
||
String result = StringUtils.join(" ", prefix.build(), "LIMIT", String.valueOf(limit)); | ||
if (offsetString != null) { | ||
result = StringUtils.join(" ", result, offsetString); | ||
} | ||
return result; | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
src/main/java/com/alexfu/sqlitequerybuilder/builder/SelectOrderByBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.alexfu.sqlitequerybuilder.builder; | ||
|
||
import com.alexfu.sqlitequerybuilder.SegmentBuilder; | ||
import com.alexfu.sqlitequerybuilder.utils.StringUtils; | ||
|
||
public class SelectOrderByBuilder implements SegmentBuilder { | ||
|
||
private SegmentBuilder prefix; | ||
private String column; | ||
|
||
public SelectOrderByBuilder(SegmentBuilder prefix, String column) { | ||
this.prefix = prefix; | ||
this.column = column; | ||
} | ||
|
||
public SelectOrderTermBuilder asc() { | ||
return new SelectOrderTermBuilder(this, SelectOrderTermBuilder.Term.ASC); | ||
} | ||
|
||
public SelectOrderTermBuilder desc() { | ||
return new SelectOrderTermBuilder(this, SelectOrderTermBuilder.Term.DESC); | ||
} | ||
|
||
@Override | ||
public String build() { | ||
return StringUtils.join(" ", prefix.build(), "ORDER BY", column); | ||
} | ||
} |
Oops, something went wrong.