package com.ejlchina.searcher.bean;

import com.ejlchina.searcher.DbMapping;
import com.ejlchina.searcher.implement.DefaultSqlExecutor;

import javax.sql.DataSource;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 用于注解一个 SearchBean
 * v3.0.0 后该注解可以缺省，缺省时根据 {@link DbMapping } 自动映射数据库表
 * @author Troy.Zhou @ 2017-03-20
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface SearchBean {

	/**
	 * 指定数据源
	 * @see DefaultSqlExecutor#setDataSource(String name, DataSource)
	 * @since v3.0.0
	 * @return 数据源名称（name of DataSource）
	 */
	String dataSource() default "";

	/**
	 * 参与检索的数据库表名，例如:
	 * users u, user_role ur, roles r
	 * v3.0.0 后可空，为空时以类名映射表名
	 * @return tables
	 */
	String tables() default "";
	
	/**
	 * 参与检索的数据表的连接条件，例如：
	 * u.id = ur.user_id and ur.role_id = r.id 
	 * @return join condition
	 * */
	String joinCond() default "";
	
	/**
	 * 分组字段，例如
	 * u.id,r.name
	 * @return group information
	 */
	String groupBy() default "";
	
	/**
	 * 是否 distinct 结果
	 * @return distinct
	 * */
	boolean distinct() default false;

	/**
	 * 字段未加 {@link DbField } 注解时，指定它自动映射到那张表
	 * 只有在 {@link #tables()} 属性不空时起作用，当 {@link #tables()} 为空时，并且没有添加 {@link DbIgnore } 注解时，则字段自动映射到 {@link DbMapping } 决定的那张表）
	 * 如果 autoMapping 为空，则表示未被 @DbField 注解的字段不需要映射
	 * @since v3.0.0
	 * @return 自动映射的表名 或 别名
	 */
	String autoMapTo() default "";

	/**
	 * 继承类型
	 * @since v3.2.0
	 * @return InheritType
	 */
	InheritType inheritType() default InheritType.DEFAULT;

	/**
	 * @since v3.4.0
	 * @return 需要忽略的属性名
	 */
	String[] ignoreFields() default {};

	/**
	 * @since v3.6.0
	 * @return 默认排序字段信息
	 */
	String orderBy() default "";

	/**
	 * @since v3.6.0
	 * @return 默认的排序信息是否可被修改
	 * orderParameterized
	 */
	boolean orderModifiable() default true;

}

@@ -1759,32 +1759,88 @@
 fault %22%22;%0A%0A%09/**%0A
+%09 * %E4%B8%BA true %E8%A1%A8%E7%A4%BA%E5%8F%AF%E9%80%9A%E8%BF%87 %E6%A3%80%E7%B4%A2%E5%8F%82%E6%95%B0 %E9%87%8D%E6%96%B0%E6%8C%87%E5%AE%9A%E6%8E%92%E5%BA%8F%E4%BF%A1%E6%81%AF%EF%BC%8C%E4%B8%BA false %E8%A1%A8%E7%A4%BA%E5%B0%86%E5%BF%BD%E7%95%A5 %E6%A3%80%E7%B4%A2%E5%8F%82%E6%95%B0%E4%B8%AD%E7%9A%84%E6%8E%92%E5%BA%8F%E4%BF%A1%E6%81%AF%0A
 %09 * @since v3.6.
@@ -1908,19 +1908,12 @@
 ean 
+s
 or
-derModifi
+t
 able

rename @SearchBean.orderModifiable() to @SearchBean.sortable()