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

com.jgcomptech.tools.databasetools.jbdc.WhereBuilder Maven / Gradle / Ivy

package com.jgcomptech.tools.databasetools.jbdc;

/**
 * A builder class for creating a WHERE sql statement to set a constraint on another statement.
 * @since 1.4.0
 */
public class WhereBuilder {
    private final StringBuilder sql;

    WhereBuilder(final StringBuilder sql) { this.sql = sql; }

    void where(final String columnName, final boolean useNot,
                                     final boolean useOr, final String value) {
        assertSQLIsNotEmpty();
        if(!columnName.isEmpty()) {
            if(!value.isEmpty()) {
                String compare = useNot ? "NOT " : "";
                sql.append(sql.toString().contains("WHERE") ? (useOr ? "OR " : "AND ") : "WHERE ");
                sql.append(compare).append(columnName).append(" = '").append(value).append("' ");
            } else throw new IllegalArgumentException("Value Cannot Be Empty!");
        } else throw new IllegalArgumentException("Field Name Cannot Be Empty!");
    }

    void whereIsNull(final String columnName, final boolean useNot, final boolean useOr) {
        assertSQLIsNotEmpty();
        if(!columnName.isEmpty()) {
            String compare = useNot ? " IS NOT NULL " : " IS NULL ";
            sql.append(sql.toString().contains("WHERE") ? (useOr ? "OR " : "AND ") : "WHERE ");
            sql.append(columnName).append(compare);
        } else throw new IllegalArgumentException("Field Name Cannot Be Empty!");
    }

    void whereIn(final String columnName, final boolean useNot,
                                        final boolean useOr, final String[] values) {
        assertSQLIsNotEmpty();
        if(!columnName.isEmpty()) {
            if(values == null || values.length == 0) {
                throw new IllegalArgumentException("Values Cannot Be Empty!");
            } else {
                String compare = useNot ? " NOT IN (" : " IN (";
                sql.append(sql.toString().contains("WHERE") ? (useOr ? "OR " : "AND ") : "WHERE ");
                sql.append(columnName).append(compare);
                boolean firstAdded = false;
                for (String value : values) {
                    if(firstAdded) {
                        sql.append(", '").append(value).append('\'');
                    } else sql.append('\'').append(value).append('\'');
                    firstAdded = true;
                }
                sql.append(") ");
            }
        } else throw new IllegalArgumentException("Field Name Cannot Be Empty!");
    }

    void whereBetween(final String columnName, final boolean useNot,
                                             final boolean useOr, final String start, final String stop) {
        assertSQLIsNotEmpty();
        if(!columnName.isEmpty()) {
            if(start.isEmpty() || stop.isEmpty()) {
                throw new IllegalArgumentException("Values Cannot Be Empty!");
            } else {
                String compare = useNot ? " NOT BETWEEN " : " BETWEEN ";

                sql.append(sql.toString().contains("WHERE") ? useOr ? "OR " : "AND " : "WHERE ");
                sql.append(columnName).append(compare)
                        .append('\'').append(start).append("' AND '").append(stop).append("' ");
            }
        } else throw new IllegalArgumentException("Field Name Cannot Be Empty!");
    }

    void whereExists(final QueryBuilder builder, final boolean useNot, final boolean useOr) {
        assertSQLIsNotEmpty();
        if(builder == null || builder.toString().isEmpty()) {
            throw new IllegalArgumentException("Builder Cannot Be Null Or Empty!");
        } else {
            String compare = useNot ? "NOT EXISTS (" : "EXISTS (";

            sql.append(sql.toString().contains("WHERE") ? useOr ? "OR " : "AND " : "WHERE ");
            sql.append(compare).append(builder.toString().replace(";", "")).append(") ");
        }
    }

    private void assertSQLIsNotEmpty() {
        if(sql.toString().isEmpty()) {
            throw new IllegalStateException("Statement Empty, Please Add Statement!");
        }
    }

    @Override
    public String toString() {
        return sql.toString();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy