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

db.sql.api.impl.cmd.basic.DatasetField Maven / Gradle / Ivy

package db.sql.api.impl.cmd.basic;


import db.sql.api.Cmd;
import db.sql.api.DbType;
import db.sql.api.SqlBuilderContext;
import db.sql.api.impl.cmd.struct.insert.InsertFields;
import db.sql.api.impl.cmd.struct.query.Select;
import db.sql.api.impl.tookit.SqlConst;
import db.sql.api.tookit.CmdUtils;

import java.util.Objects;

public class DatasetField, DATASET extends Dataset> extends Field {

    private final DATASET table;

    private final String name;

    public DatasetField(DATASET table, String name) {
        this.table = table;
        this.name = name;
    }

    public DATASET getTable() {
        return table;
    }

    public String getName() {
        return name;
    }

    public String getName(DbType dbType) {
        return dbType.wrap(this.name);
    }

    @Override
    public StringBuilder sql(Cmd module, Cmd parent, SqlBuilderContext context, StringBuilder sqlBuilder) {
        // insert 直接名字
        if (parent instanceof InsertFields) {
            sqlBuilder.append(getName(context.getDbType()));
            return sqlBuilder;
        }

        if (this.table.getAlias() != null) {
            sqlBuilder.append(SqlConst.BLANK).append(this.table.getAlias()).append(SqlConst.DOT);
        } else {
            sqlBuilder.append(SqlConst.BLANK);
        }
        sqlBuilder.append(getName(context.getDbType()));

        //拼接 select 的别名
        if (parent instanceof Select) {
            String prefix = null;
            if (getTable() instanceof Table) {
                prefix = ((Table) getTable()).getPrefix();
            }
            if (this.getAlias() != null || prefix != null) {
                sqlBuilder.append(SqlConst.AS(context.getDbType()));
                if (prefix != null) {
                    sqlBuilder.append(prefix);
                }
                if (this.getAlias() != null) {
                    sqlBuilder.append(this.getAlias());
                } else {
                    sqlBuilder.append(Objects.isNull(prefix) ? getName(context.getDbType()) : getName());
                }
            }
            return sqlBuilder;
        }

        return sqlBuilder;
    }

    @Override
    public boolean contain(Cmd cmd) {
        return CmdUtils.contain(cmd, this.table);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy