/**
*
* Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); You may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.speedment.runtime.core.internal.manager.sql;
import com.speedment.runtime.core.db.FieldPredicateView;
import com.speedment.runtime.core.db.SqlPredicateFragment;
import com.speedment.runtime.field.predicate.FieldPredicate;
import static com.speedment.runtime.field.internal.predicate.PredicateUtil.getFirstOperandAsRaw;
/**
* Created by fdirlikl on 11/18/2015.
*
* @author Fatih Dirlikli
*/
public class PostgresSpeedmentPredicateView extends AbstractFieldPredicateView implements FieldPredicateView {
// Info from:
// http://stackoverflow.com/questions/23320945/postgresql-select-if-string-contains
// We cannot use collation for PostgreSQL. See https://github.com/speedment/speedment/issues/401
@Override
protected SqlPredicateFragment equalIgnoreCaseHelper(String cn, FieldPredicate<?> model, boolean negated) {
return of("(LOWER(" + cn + ") = LOWER(?))", negated).add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment startsWithHelper(String cn, FieldPredicate<?> model, boolean negated) {
return of("(" + cn + " LIKE ? || '%')", negated).add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment startsWithIgnoreCaseHelper(String cn, FieldPredicate<?> model, boolean negated) {
return of("(" + cn + " ILIKE ? || '%')", negated).add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment endsWithHelper(String cn, FieldPredicate<?> model, boolean negated) {
return of("(" + cn + " LIKE '%' || ?)", negated).add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment endsWithIgnoreCaseHelper(String cn, FieldPredicate<?> model, boolean negated) {
return of("(" + cn + " ILIKE '%' || ?)", negated).add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment containsHelper(String cn, FieldPredicate<?> model, boolean negated) {
return of("(" + cn + " LIKE '%' || ? || '%')", negated).add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment containsIgnoreCaseHelper(String cn, FieldPredicate<?> model, boolean negated) {
return of("(" + cn + " ILIKE '%' || ? || '%')", negated).add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment lessOrEqualString(String cn, FieldPredicate<?> model) {
return of("(" + cn + "::bytea <= ?::bytea)").add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment lessThanString(String cn, FieldPredicate<?> model) {
return of("(" + cn + "::bytea < ?::bytea)").add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment greaterOrEqualString(String cn, FieldPredicate<?> model) {
return of("(" + cn + "::bytea >= ?::bytea)").add(getFirstOperandAsRaw(model));
}
@Override
protected SqlPredicateFragment greaterThanString(String cn, FieldPredicate<?> model) {
return of("(" + cn + "::bytea > ?::bytea)").add(getFirstOperandAsRaw(model));
}
}