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

org.sql.assistant.select.join.Join Maven / Gradle / Ivy

package org.sql.assistant.select.join;

import org.sql.assistant.common.SqlProvider;
import org.sql.assistant.common.column.Column;
import org.sql.assistant.common.condition.Condition;

/**
 * @author menfre
 */
public interface Join extends SqlProvider {
    /**
     * 左链接
     *
     * @param join      待链接对象
     * @param condition 链接条件
     * @return 链接对象
     */
    default Join left(Join join, Condition condition) {
        return completeJoin(join, condition, JoinType.LEFT);
    }

    /**
     * 右链接
     *
     * @param join      待链接对象
     * @param condition 链接条件
     * @return 链接对象
     */
    default Join right(Join join, Condition condition) {
        return completeJoin(join, condition, JoinType.RIGHT);
    }

    /**
     * 内链接
     *
     * @param join      待链接对象
     * @param condition 链接条件
     * @return 链接对象
     */
    default Join inner(Join join, Condition condition) {
        return completeJoin(join, condition, JoinType.INNER);
    }

    /**
     * 全链接
     *
     * @param join      待链接对象
     * @param condition 链接条件
     * @return 链接对象
     */
    default Join full(Join join, Condition condition) {
        return completeJoin(join, condition, JoinType.FULL);
    }

    /**
     * 完成 Join 操作
     *
     * @param join      待链接对象
     * @param condition 链接条件
     * @param joinType  链接类型
     * @return 链接对象
     */
    default Join completeJoin(Join join, Condition condition, JoinType joinType) {
        return new CompleteJoin(this, join, joinType, condition);
    }

    /**
     * Join 构造入口
     *
     * @param table 表名称
     * @return 链接对象
     */
    static Join of(String table) {
        return of(Column.of(table));
    }

    /**
     * Join 构造入口
     *
     * @param table 表字段
     * @return 链接对象
     */
    static Join of(Column table) {
        return new JoinTable(table);
    }

    /**
     * 获得参数
     *
     * @return 空参数组
     */
    @Override
    default Object[] getArgs() {
        return new Object[0];
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy