All Downloads are FREE. Search and download functionalities are using the official Maven repository.

db.sql.api.cmd.ICmdFactory Maven / Gradle / Ivy

There is a newer version: 1.7.6-RC2
Show newest version
package db.sql.api.cmd;

import db.sql.api.Cmd;
import db.sql.api.Getter;
import db.sql.api.cmd.basic.IDataset;
import db.sql.api.cmd.basic.IDatasetField;
import db.sql.api.cmd.basic.ITable;
import db.sql.api.cmd.basic.ITableField;

import java.util.function.Function;

public interface ICmdFactory
        , TABLE_FIELD extends ITableField> {

    default TABLE table(Class entity) {
        return this.table(entity, 1);
    }

    /**
     * 根据实体类获取TABLE对象
     *
     * @param entity 实体类
     * @param storey 存储层级
     * @return
     */
    TABLE table(Class entity, int storey);

    /**
     * 根据表名获取TABLE对象
     *
     * @param tableName
     * @return
     */
    TABLE table(String tableName);

    /**
     * 根据Lambda getter 获取列名
     *
     * @param column
     * @param 
     * @return
     */
     String columnName(Getter column);

    default  TABLE_FIELD field(Getter column) {
        return this.field(column, 1);
    }

    /**
     * 根据Lambda getter 获取列对象
     *
     * @param column
     * @param storey 存储层级
     * @param 
     * @return
     */
     TABLE_FIELD field(Getter column, int storey);

    default  TABLE_FIELD[] fields(Getter... columns) {
        return this.fields(1, columns);
    }

     TABLE_FIELD[] fields(int storey, Getter... columns);

    TABLE_FIELD[] fields(GetterField... getterFields);

    default TABLE_FIELD field(Class entity, String filedName) {
        return this.field(entity, filedName, 1);
    }

    /**
     * 根据字段名获取TABLE_FIELD
     *
     * @param entity
     * @param filedName
     * @param storey
     * @return
     */
    TABLE_FIELD field(Class entity, String filedName, int storey);


    /**
     * 根据dataset(可能是子查询 也可能是表),Lambda getter 创建列对象
     *
     * @param dataset
     * @param column
     * @param 
     * @return
     */
    , DATASET_FIELD extends IDatasetField> IDatasetField field(IDataset dataset, Getter column);

    /**
     * 根据dataset(可能是子查询 也可能是表) 列名,创建 列对象
     *
     * @param dataset
     * @param name
     * @return
     */
    , DATASET_FIELD extends IDatasetField> IDatasetField field(IDataset dataset, String name);

    /**
     * 所有列
     *
     * @param dataset
     * @return
     */
    , DATASET_FIELD extends IDatasetField> IDatasetField allField(IDataset dataset);


    /**
     * 根据Lambda getter,万能创建SQL命令方法
     *
     * @param column 列
     * @param RF     返回函数
     * @param     实体类型
     * @param     返回命令
     * @return
     */
    default  R create(Getter column, Function RF) {
        return this.create(column, 1, RF);
    }

    /**
     * 根据Lambda getter,万能创建SQL命令方法
     *
     * @param column 列
     * @param storey 缓存区
     * @param RF     返回函数
     * @param     实体类型
     * @param     返回命令
     * @return
     */
     R create(Getter column, int storey, Function RF);
}