package com.yanzuoguang.dao;

import com.yanzuoguang.util.helper.StringHelper;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 途比达列明映射
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface SqlAnnotation {

    /**
     * Sql语句名称,当为空时,则为当前类名称
     *
     * @return
     */
    String[] name() default {};

    /**
     * Sql语句的类型
     *
     * @return
     */
    int sqlType() default DaoConst.SQL_TYPE_COMMON;

    /**
     * Sql语句列表,当table和sql都为空时,则根据当前注解 @TableAnnotation 生成对应类型的SQL语句
     *
     * @return
     */
    String sql() default StringHelper.EMPTY;

    /**
     * 需要移除的前台输入参数
     *
     * @return
     */
    String[] remove() default {};

    /**
     * 字段代码片段,关联到 {FIELD}
     *
     * @return
     */
    String[] field() default {};

    /**
     * inner代码片段,关联到 {INNER}
     *
     * @return
     */
    String[] inner() default {};

    /**
     * 条件代码片段,关联到 {INNER}
     *
     * @return
     */
    String[] where() default {};

    /**
     * 统计代码片段,关联到 {GROUP}
     *
     * @return
     */
    String[] group() default {};

    /**
     * 统计代码片段,关联到 {ORDER}
     *
     * @return
     */
    String[] order() default {};

    /**
     * 统计代码片段,关联到 {LIMIT}
     *
     * @return
     */
    String[] limit() default {};

    /**
     * 包含的代码片段
     *
     * @return
     */
    String[] codes() default {};
}