selectSubqueries = new ArrayList<>();
+ /** The defaults configuration for this builder instance. */
+ private QueryBuilderDefaults queryBuilderDefaults = QueryBuilderDefaults.global();
+
+ /**
+ * Overrides the defaults configuration for this builder instance.
+ *
+ * The change applies only to this instance; the JVM-wide global is not
+ * modified. Calling this method after construction is safe and fluent.
+ *
+ * @param defaults the defaults to apply; must not be {@code null}
+ * @return this builder instance for chaining
+ * @throws NullPointerException if {@code defaults} is {@code null}
+ */
+ public QueryBuilder withDefaults(final QueryBuilderDefaults defaults) {
+ if (defaults == null) {
+ throw new NullPointerException("QueryBuilderDefaults must not be null");
+ }
+ this.queryBuilderDefaults = defaults;
+ return this;
+ }
+
/**
* Returns a new {@link InsertBuilder}.
*
@@ -576,8 +598,6 @@ public QueryBuilder havingRaw(String clause) {
*/
public Query build() {
final Query q = new Query();
- q.setLimit(limit);
- q.setOffset(offset);
q.setConditions(new ArrayList<>(conditions));
q.setGroupBy(new ArrayList<>(groupByColumns));
q.setOrderBy(new ArrayList<>(orderByColumns));
@@ -590,6 +610,15 @@ public Query build() {
q.setFromAlias(fromAlias);
q.setJoins(new ArrayList<>(joins));
q.setSelectSubqueries(new ArrayList<>(selectSubqueries));
+ q.setDefaultSelectColumns(queryBuilderDefaults.getDefaultColumns());
+ q.setLikePrefix(queryBuilderDefaults.getLikePrefix());
+ q.setLikeSuffix(queryBuilderDefaults.getLikeSuffix());
+ final int resolvedLimit = (limit == -1 && queryBuilderDefaults.getDefaultLimit() >= 0)
+ ? queryBuilderDefaults.getDefaultLimit() : limit;
+ final int resolvedOffset = (offset == -1 && queryBuilderDefaults.getDefaultOffset() >= 0)
+ ? queryBuilderDefaults.getDefaultOffset() : offset;
+ q.setLimit(resolvedLimit);
+ q.setOffset(resolvedOffset);
return q;
}
@@ -626,6 +655,6 @@ public SqlResult buildSql(String table) {
public SqlResult buildSql(String table, SqlDialect dialect) {
final Query q = build();
q.setTable(table);
- return (dialect != null ? dialect : SqlDialect.STANDARD).render(q);
+ return (dialect != null ? dialect : queryBuilderDefaults.getDialect()).render(q);
}
}
diff --git a/src/main/java/com/github/ezframework/javaquerybuilder/query/builder/SelectBuilder.java b/src/main/java/com/github/ezframework/javaquerybuilder/query/builder/SelectBuilder.java
index 5a9304b..3a34f92 100644
--- a/src/main/java/com/github/ezframework/javaquerybuilder/query/builder/SelectBuilder.java
+++ b/src/main/java/com/github/ezframework/javaquerybuilder/query/builder/SelectBuilder.java
@@ -4,6 +4,7 @@
import java.util.Arrays;
import java.util.List;
+import com.github.ezframework.javaquerybuilder.query.QueryBuilderDefaults;
import com.github.ezframework.javaquerybuilder.query.condition.Condition;
import com.github.ezframework.javaquerybuilder.query.condition.ConditionEntry;
import com.github.ezframework.javaquerybuilder.query.condition.Connector;
@@ -63,6 +64,24 @@ public class SelectBuilder {
*/
private boolean distinct = false;
+ /** The defaults configuration for this builder instance. */
+ private QueryBuilderDefaults queryBuilderDefaults = QueryBuilderDefaults.global();
+
+ /**
+ * Overrides the defaults configuration for this builder instance.
+ *
+ * @param defaults the defaults to apply; must not be {@code null}
+ * @return this builder instance for chaining
+ * @throws NullPointerException if {@code defaults} is {@code null}
+ */
+ public SelectBuilder withDefaults(final QueryBuilderDefaults defaults) {
+ if (defaults == null) {
+ throw new NullPointerException("QueryBuilderDefaults must not be null");
+ }
+ this.queryBuilderDefaults = defaults;
+ return this;
+ }
+
/**
* Sets the table to select from.
* @param table the table name
@@ -223,7 +242,7 @@ private void buildSelectClause(final StringBuilder sql) {
sql.append("DISTINCT ");
}
if (columns.isEmpty()) {
- sql.append("*");
+ sql.append(queryBuilderDefaults.getDefaultColumns());
} else {
sql.append(String.join(", ", columns));
}
@@ -261,7 +280,10 @@ private void buildWhereClause(final StringBuilder sql, final List