package cd.casic.framework.mongo.core.sdk;

import java.io.Serializable;
import java.util.Collection;

public interface Compare<LambdaQueryWrapper, R> extends Serializable {

    default LambdaQueryWrapper eq(R column, Object value){
        return eq(true, column, value);
    }

    default LambdaQueryWrapper ne(R column, Object value){
        return ne(true,column,value);
    }

    default LambdaQueryWrapper le(R column, Object value){
        return le(true,column,value);
    }

    default LambdaQueryWrapper lt(R column, Object value){
        return lt(true,column,value);
    }

    default LambdaQueryWrapper ge(R column, Object value){
        return ge(true,column,value);
    }

    default LambdaQueryWrapper gt(R column, Object value){
        return gt(true,column,value);
    }

    default LambdaQueryWrapper between(R column, Object leftValue, Object rightValue){
        return between(true,column,leftValue,rightValue);
    }

    default LambdaQueryWrapper in(R column, Collection<?> values){
        return in(true,column,values);
    }

    default LambdaQueryWrapper notIn(R column, Collection<?> values){
        return notIn(true,column,values);
    }

    default LambdaQueryWrapper isNull(R column){
        return isNull(true, column);
    }

    LambdaQueryWrapper eq(Boolean condition,R column, Object value);

    LambdaQueryWrapper ne(Boolean condition,R column, Object value);

    LambdaQueryWrapper le(Boolean condition,R column, Object value);

    LambdaQueryWrapper lt(Boolean condition,R column, Object value);

    LambdaQueryWrapper ge(Boolean condition,R column, Object value);

    LambdaQueryWrapper gt(Boolean condition,R column, Object value);

    LambdaQueryWrapper between(Boolean condition,R column, Object leftValue, Object rightValue);

    LambdaQueryWrapper in(Boolean condition, R column, Collection<?> values);

    LambdaQueryWrapper notIn(Boolean condition,R column, Collection<?> values);

    LambdaQueryWrapper isNull(Boolean condition, R column);
}
