/**
* Copyright 2010 CosmoCode GmbH
*
* 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 de.cosmocode.hibernate;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
/**
* A utility class similiar to {@link Restrictions}
* containing only MySQL specific sql code.
*
* @author Willi Schoenborn
*/
public final class MySQLRestrictions {
private MySQLRestrictions() {
}
private static Criterion bit(String columnName, String binaryOperator, long flag, String operator, long value) {
return Restrictions.sqlRestriction(
"({alias}." + columnName + " " + binaryOperator + " " + flag + ") " + operator + " " + value
);
}
/**
* Apply a "contains" constraint to a bitset column.
*
* @param columnName the name of the column the constraint should be applied to
* @param flag the bits the column should contain
* @return a new {@link Criterion}
*/
public static Criterion bitContains(String columnName, long flag) {
return MySQLRestrictions.bit(columnName, "&", flag, ">", 0);
}
}