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

db.sql.api.impl.cmd.executor.AbstractInsert Maven / Gradle / Ivy

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

import db.sql.api.Cmd;
import db.sql.api.Getter;
import db.sql.api.cmd.executor.IInsert;
import db.sql.api.impl.cmd.CmdFactory;
import db.sql.api.impl.cmd.Methods;
import db.sql.api.impl.cmd.basic.Dataset;
import db.sql.api.impl.cmd.basic.DatasetField;
import db.sql.api.impl.cmd.basic.Table;
import db.sql.api.impl.cmd.basic.TableField;
import db.sql.api.impl.cmd.struct.insert.InsertFields;
import db.sql.api.impl.cmd.struct.insert.InsertTable;
import db.sql.api.impl.cmd.struct.insert.InsertValues;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


public abstract class AbstractInsert,
        CMD_FACTORY extends CmdFactory
        >
        extends BaseExecutor
        implements IInsert {

    protected final CMD_FACTORY $;
    protected InsertTable insertTable;
    protected InsertFields insertFields;
    protected InsertValues insertValues;

    public AbstractInsert(CMD_FACTORY $) {
        this.$ = $;
    }

    @Override
    public CMD_FACTORY $() {
        return $;
    }

    @Override
    public InsertTable $insert(Table table) {
        if (this.insertTable == null) {
            this.insertTable = new InsertTable(table);
            this.append(this.insertTable);
        }
        return this.insertTable;
    }

    @Override
    public InsertFields $field(TableField... fields) {
        if (this.insertFields == null) {
            this.insertFields = new InsertFields();
            this.append(this.insertFields);
        }
        this.insertFields.filed(fields);
        return this.insertFields;
    }

    @Override
    public InsertFields $field(List fields) {
        if (this.insertFields == null) {
            this.insertFields = new InsertFields();
            this.append(this.insertFields);
        }
        this.insertFields.filed(fields);
        return this.insertFields;
    }

    @Override
    public InsertValues $values(List values) {
        if (this.insertValues == null) {
            this.insertValues = new InsertValues();
            this.append(this.insertValues);
        }
        this.insertValues.add(values);
        return this.insertValues;
    }

    @Override
    public SELF insert(Class entity) {
        return this.insert($.table(entity));
    }

    @Override
    public  SELF field(Getter... fields) {
        TableField[] tableField = new TableField[fields.length];
        for (int i = 0; i < fields.length; i++) {
            tableField[i] = $.field(fields[i]);
        }
        return this.field(tableField);
    }

    @Override
    public SELF values(List values) {
        this.$values(values.stream().map(Methods::convert).collect(Collectors.toList()));
        return (SELF) this;
    }

    @Override
    public InsertTable getInsertTable() {
        return this.insertTable;
    }

    @Override
    public InsertFields getInsertFields() {
        return this.insertFields;
    }

    @Override
    public InsertValues getInsertValues() {
        return this.insertValues;
    }

    @Override
    void initCmdSorts(Map, Integer> cmdSorts) {
        int i = 0;
        cmdSorts.put(InsertTable.class, i += 10);
        cmdSorts.put(InsertFields.class, i += 10);
        cmdSorts.put(InsertValues.class, i += 10);
    }
}