Skip to content
This repository has been archived by the owner on Mar 2, 2019. It is now read-only.

Commit

Permalink
Merge pull request #8 from alexfu/feature/composition-builder
Browse files Browse the repository at this point in the history
Improve statement string builder
  • Loading branch information
alexfu committed Mar 28, 2015
2 parents 77f925e + 3265fed commit 02795d6
Show file tree
Hide file tree
Showing 41 changed files with 378 additions and 380 deletions.
14 changes: 0 additions & 14 deletions src/main/java/com/alexfu/sqlitequerybuilder/QueryBuilder.java

This file was deleted.

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);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.alexfu.sqlitequerybuilder;

public interface SegmentBuilder {
public String build();
}
7 changes: 0 additions & 7 deletions src/main/java/com/alexfu/sqlitequerybuilder/Select.java

This file was deleted.

8 changes: 0 additions & 8 deletions src/main/java/com/alexfu/sqlitequerybuilder/SelectAnd.java

This file was deleted.

8 changes: 0 additions & 8 deletions src/main/java/com/alexfu/sqlitequerybuilder/SelectFrom.java

This file was deleted.

This file was deleted.

5 changes: 0 additions & 5 deletions src/main/java/com/alexfu/sqlitequerybuilder/SelectJoin.java

This file was deleted.

4 changes: 0 additions & 4 deletions src/main/java/com/alexfu/sqlitequerybuilder/SelectLimit.java

This file was deleted.

6 changes: 0 additions & 6 deletions src/main/java/com/alexfu/sqlitequerybuilder/SelectOn.java

This file was deleted.

This file was deleted.

This file was deleted.

30 changes: 28 additions & 2 deletions src/main/java/com/alexfu/sqlitequerybuilder/SelectType.java
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));
}
}
7 changes: 0 additions & 7 deletions src/main/java/com/alexfu/sqlitequerybuilder/SelectWhere.java

This file was deleted.

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);
}
}
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);
}
}
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);
}
}
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));
}
}
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));
}
}
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);
}
}
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);
}
}
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;
}
}
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);
}
}
Loading

0 comments on commit 02795d6

Please sign in to comment.