
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