Skip to content

Commit

Permalink
Fix support for wrapper values being autounboxed for constructors wit…
Browse files Browse the repository at this point in the history
…h primitives in Wirings

Remove the need for execute() call on query building
Support complex conditions with conjunctions and creating sub-expressions joined by conjunctions
  • Loading branch information
rchodava committed Aug 26, 2016
1 parent 288520a commit 1075eb5
Show file tree
Hide file tree
Showing 11 changed files with 450 additions and 303 deletions.
Expand Up @@ -325,6 +325,14 @@ private Object getValueForParameterByType(Parameter parameter) {
return value;
}

if (type.isPrimitive()) {
Class<?> wrapper = Classes.primitiveToWrapper(type);
value = getObjectOfType(wrapper);
if (value != null) {
return value;
}
}

value = getValueOfType(type);
if (value != null) {
return value;
Expand Down Expand Up @@ -396,6 +404,13 @@ private Object getValueForNamedParameter(Parameter parameter, Named name) {
return value;
}

if (type.isPrimitive()) {
Class<?> wrapper = Classes.primitiveToWrapper(type);
if (wrapper.isInstance(value)) {
return value;
}
}

if (Value.class.isAssignableFrom(value.getClass())) {
return castValueToTypeIfPossible((Value) value, type);
}
Expand Down
Expand Up @@ -53,7 +53,7 @@ public class Classes {
}
}

private static Class<?> primitiveToWrapper(final Class<?> clazz) {
public static Class<?> primitiveToWrapper(final Class<?> clazz) {
Class<?> convertedClass = clazz;
if (clazz != null && clazz.isPrimitive()) {
convertedClass = primitiveWrapperMap.get(clazz);
Expand Down
@@ -1,22 +1,39 @@
package foundation.stack.datamill.db;

import foundation.stack.datamill.reflection.Member;
import rx.functions.Func1;

import java.util.Collection;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public interface ConditionBuilder<R> {
<T> WhereBuilder<R> eq(String column, T value);
<T> WhereBuilder<R> eq(String table, String column, T value);
<T> WhereBuilder<R> eq(Member member, T value);

<T> WhereBuilder<R> is(String column, T value);
<T> WhereBuilder<R> is(String table, String column, T value);
<T> WhereBuilder<R> is(Member member, T value);

<T> WhereBuilder<R> in(String column, Collection<T> value);
<T> WhereBuilder<R> in(String table, String column, Collection<T> value);
<T> WhereBuilder<R> in(Member member, Collection<T> value);
public interface ConditionBuilder {
<T> ConjunctionBuilder eq(String column, T value);
<T> ConjunctionBuilder eq(String table, String column, T value);
<T> ConjunctionBuilder eq(Member member, T value);

<T> ConjunctionBuilder lt(String column, T value);
<T> ConjunctionBuilder lt(String table, String column, T value);
<T> ConjunctionBuilder lt(Member member, T value);

<T> ConjunctionBuilder gt(String column, T value);
<T> ConjunctionBuilder gt(String table, String column, T value);
<T> ConjunctionBuilder gt(Member member, T value);

<T> ConjunctionBuilder is(String column, T value);
<T> ConjunctionBuilder is(String table, String column, T value);
<T> ConjunctionBuilder is(Member member, T value);

<T> ConjunctionBuilder in(String column, Collection<T> value);
<T> ConjunctionBuilder in(String table, String column, Collection<T> value);
<T> ConjunctionBuilder in(Member member, Collection<T> value);

TerminalCondition and(
Func1<ConditionBuilder, TerminalCondition> left,
Func1<ConditionBuilder, TerminalCondition> right);

TerminalCondition or(
Func1<ConditionBuilder, TerminalCondition> left,
Func1<ConditionBuilder, TerminalCondition> right);
}
@@ -0,0 +1,9 @@
package foundation.stack.datamill.db;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public interface ConjunctionBuilder extends TerminalCondition {
ConditionBuilder and();
ConditionBuilder or();
}
@@ -0,0 +1,7 @@
package foundation.stack.datamill.db;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public interface TerminalCondition {
}
@@ -1,15 +1,14 @@
package foundation.stack.datamill.db;

import foundation.stack.datamill.reflection.Outline;
import rx.functions.Func1;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public interface WhereBuilder<R> {
R all();
R execute();
ConditionBuilder<R> where();
ConditionBuilder<R> and();
R where(Func1<ConditionBuilder, TerminalCondition> conditionBuilder);
JoinBuilder<R> leftJoin(String table);
JoinBuilder<R> leftJoin(Outline<?> outline);
}
@@ -0,0 +1,34 @@
package foundation.stack.datamill.db.impl;

import foundation.stack.datamill.db.InsertSuffixBuilder;
import foundation.stack.datamill.db.RowBuilder;
import foundation.stack.datamill.db.UpdateQueryExecution;
import rx.Observable;

import java.util.Map;
import java.util.function.Function;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
class EmptyUpdateSuffixBuilder implements InsertSuffixBuilder {
@Override
public Observable<Integer> count() {
return Observable.just(0);
}

@Override
public Observable<Long> getIds() {
return Observable.empty();
}

@Override
public UpdateQueryExecution onDuplicateKeyUpdate(Function<RowBuilder, Map<String, ?>> rowConstructor) {
return this;
}

@Override
public UpdateQueryExecution onDuplicateKeyUpdate(Map<String, ?> values) {
return this;
}
}

0 comments on commit 1075eb5

Please sign in to comment.