diff --git a/runtime-parent/runtime-core/src/main/java/com/speedment/runtime/core/internal/component/sql/optimizer/FilterSortedSkipOptimizer.java b/runtime-parent/runtime-core/src/main/java/com/speedment/runtime/core/internal/component/sql/optimizer/FilterSortedSkipOptimizer.java
index 57ce6a2a26..836d38d0f6 100644
--- a/runtime-parent/runtime-core/src/main/java/com/speedment/runtime/core/internal/component/sql/optimizer/FilterSortedSkipOptimizer.java
+++ b/runtime-parent/runtime-core/src/main/java/com/speedment/runtime/core/internal/component/sql/optimizer/FilterSortedSkipOptimizer.java
@@ -24,20 +24,18 @@
import com.speedment.runtime.core.db.DbmsType;
import static com.speedment.runtime.core.db.DbmsType.SkipLimitSupport.NONE;
import static com.speedment.runtime.core.db.DbmsType.SkipLimitSupport.ONLY_AFTER_SORTED;
-import com.speedment.runtime.core.db.FieldPredicateView;
-import com.speedment.runtime.core.db.SqlPredicateFragment;
import com.speedment.runtime.core.internal.stream.builder.action.reference.FilterAction;
import com.speedment.runtime.core.internal.stream.builder.action.reference.LimitAction;
import com.speedment.runtime.core.internal.stream.builder.action.reference.SkipAction;
import com.speedment.runtime.core.internal.stream.builder.action.reference.SortedComparatorAction;
-import static com.speedment.runtime.core.internal.stream.builder.streamterminator.StreamTerminatorUtil.isFilterActionWithFieldPredicate;
+import com.speedment.runtime.core.internal.stream.builder.streamterminator.StreamTerminatorUtil;
+import com.speedment.runtime.core.internal.stream.builder.streamterminator.StreamTerminatorUtil.RenderResult;
+import static com.speedment.runtime.core.internal.stream.builder.streamterminator.StreamTerminatorUtil.isContainingOnlyFieldPredicate;
import static com.speedment.runtime.core.internal.stream.builder.streamterminator.StreamTerminatorUtil.isSortedActionWithFieldPredicate;
import com.speedment.runtime.core.stream.Pipeline;
import com.speedment.runtime.core.stream.action.Action;
-import com.speedment.runtime.field.Field;
import com.speedment.runtime.field.comparator.FieldComparator;
import com.speedment.runtime.field.predicate.FieldPredicate;
-import com.speedment.runtime.typemapper.TypeMapper;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -46,7 +44,7 @@
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
-import static java.util.stream.Collectors.joining;
+import java.util.function.Predicate;
import static java.util.stream.Collectors.toList;
/**
@@ -144,36 +142,52 @@ public
P optimize(
sql.append(info.getSqlSelect());
if (!filters.isEmpty()) {
- final FieldPredicateView spv = info.getDbmsType().getFieldPredicateView();
-
@SuppressWarnings("unchecked")
- final List fragments = filters.stream()
- .map(f -> f.getPredicate())
- .map(p -> (FieldPredicate) p)
- .map(sp -> spv.transform(info.getSqlColumnNamer(), info.getSqlDatabaseTypeFunction(), sp))
+ List> predicates = filters.stream()
+ .map(FilterAction::getPredicate)
+ .map(p -> (Predicate) p)
+// .map(p -> (FieldPredicate) p)
.collect(toList());
- // Todo: Make this in one sweep
- String expression = fragments.stream()
- .map(SqlPredicateFragment::getSql)
- .collect(joining(" AND "));
-
- sql.append(" WHERE ").append(expression);
-
- for (int i = 0; i < fragments.size(); i++) {
-
- @SuppressWarnings("unchecked")
- final FieldPredicate p = (FieldPredicate) filters.get(i).getPredicate();
- final Field referenceFieldTrait = p.getField();
-
- @SuppressWarnings("unchecked")
- final TypeMapper