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

db.sql.api.impl.cmd.CmdFactory Maven / Gradle / Ivy

package db.sql.api.impl.cmd;


import db.sql.api.Cmd;
import db.sql.api.Getter;
import db.sql.api.cmd.GetterColumnField;
import db.sql.api.cmd.ICmdFactory;
import db.sql.api.impl.cmd.basic.*;
import db.sql.api.impl.cmd.condition.In;
import db.sql.api.impl.tookit.LambdaUtil;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;


public class CmdFactory extends Methods implements ICmdFactory {

    protected final Map tableCache = new HashMap<>(5);
    private final String tableAsPrefix;
    protected int tableNums = 0;

    public CmdFactory() {
        this("t");
    }

    public CmdFactory(String tableAsPrefix) {
        this.tableAsPrefix = tableAsPrefix;
    }

    public NULL NULL() {
        return NULL.NULL;
    }

    protected String tableAs(int storey, int tableNums) {
        String as = this.tableAsPrefix +
                (tableNums == 1 ? "" : tableNums);
        return as;
    }

    public Table cacheTable(Class entity, int storey) {
        return this.tableCache.get(String.format("%s.%s", entity.getName(), storey));
    }

    @Override
    public Table table(Class entity, int storey) {
        return tableCache.computeIfAbsent(entity.getName(), key -> {
            Table table = new Table(entity.getSimpleName());
            table.as(tableAs(storey, ++tableNums));
            return table;
        });
    }

    @Override
    public Table table(String tableName) {
        return new Table(tableName);
    }

    @Override
    public  String columnName(Getter column) {
        return LambdaUtil.getName(column);
    }

    @Override
    public Column column(String columnName) {
        return new Column(columnName);
    }

    @Override
    public  TableField field(Getter column, int storey) {
        LambdaUtil.LambdaFieldInfo fieldInfo = LambdaUtil.getFieldInfo(column);
        return this.field(fieldInfo.getType(), 1, fieldInfo.getName());
    }

    @Override
    public  TableField[] fields(int storey, Getter... columns) {
        TableField[] tableFields = new TableField[columns.length];
        for (int i = 0; i < columns.length; i++) {
            tableFields[i] = field(columns[i], storey);
        }
        return tableFields;
    }

    @Override
    public TableField[] fields(GetterColumnField... getterColumnFields) {
        TableField[] tableFields = new TableField[getterColumnFields.length];
        for (int i = 0; i < getterColumnFields.length; i++) {
            GetterColumnField columnField = getterColumnFields[i];
            GetterColumnField getterColumnField = columnField;
            tableFields[i] = field(getterColumnField.getGetter(), getterColumnField.getStorey());
        }
        return tableFields;
    }

    public  TableField field(Table table, Getter column) {
        return new TableField(table, columnName(column));
    }

    @Override
    public  DatasetField field(Dataset dataset, Getter column) {
        String filedName = LambdaUtil.getName(column);
        return new DatasetField<>(dataset, filedName);
    }

    @Override
    public TableField field(Class entity, String filedName, int storey) {
        return this.field(entity, storey, filedName);
    }

    public TableField field(Table table, String columnName) {
        return new TableField(table, columnName);
    }

    @Override
    public DatasetField field(Dataset dataset, String columnName) {
        return new DatasetField(dataset, columnName);
    }

    @Override
    public DatasetField allField(Dataset dataset) {
        return new AllField(dataset);
    }

    @Override
    public  R create(Getter column, int storey, Function RF) {
        return RF.apply(this.field(column, storey));
    }

    protected TableField field(Class clazz, int storey, String filedName) {
        Table table = table(clazz, storey);
        return new TableField(table, filedName);
    }

    public BasicValue value(Object value) {
        return new BasicValue(value);
    }

    public AllField all(Dataset dataset) {
        return new AllField(dataset);
    }

    public In in(Cmd main) {
        return new In(main);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy