package com.yanzuoguang.dao.cond;


import com.yanzuoguang.dao.impl.SqlData;
import com.yanzuoguang.dao.impl.SqlDataField;

import java.util.List;
import java.util.Map;

/**
 * 判断值是否满足条件
 *
 * @author 颜佐光
 */
public interface SqlCond<T extends SqlCond> {

    /**
     * 条件不满足
     */
    int COND_TYPE_NONE = 0;

    /**
     * 仅仅只是输入条件
     */
    int COND_TYPE_CONST_ONLY_PARA = 1;

    /**
     * 输入条件代码
     */
    int COND_TYPE_CODE_COND = 2;

    /**
     * 获取包含的字段
     *
     * @return
     */
    List<String> getFields();

    /**
     * 获取字段值
     *
     * @param model
     * @return
     */
    List<Object> getValues(Object model);

    /**
     * 获取新的SQL语句
     *
     * @param sql
     * @param sqlData
     * @param model
     * @param codeMap
     * @return
     */
    String getSql(String sql, SqlData sqlData, SqlDataField field, Object model, Map<String, List<String>> codeMap);

    /**
     * 将当前条件复制为新的对象
     *
     * @return
     */
    SqlCond copy();

    /**
     * 判断条件是否相等
     *
     * @param cond
     * @return
     */
    boolean equalsExecute(T cond);
}