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

org.jooq.TableOptions Maven / Gradle / Ivy

There is a newer version: 3.19.15
Show newest version
/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Other licenses:
 * -----------------------------------------------------------------------------
 * Commercial licenses for this work are available. These replace the above
 * Apache-2.0 license and offer limited warranties, support, maintenance, and
 * commercial database integrations.
 *
 * For more information, please visit: http://www.jooq.org/licenses
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
package org.jooq;

// ...
// ...
import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.TableOptions.OnCommit.DELETE_ROWS;
import static org.jooq.TableOptions.OnCommit.DROP;
import static org.jooq.TableOptions.OnCommit.PRESERVE_ROWS;

import java.io.Serializable;

import org.jooq.impl.QOM.TableCommitAction;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/**
 * A description of various additional {@link Table} options to describe the
 * table runtime meta model.
 *
 * @author Lukas Eder
 */
public final class TableOptions implements Serializable {

    private static final TableOptions C_EXPRESSION        = new TableOptions(TableType.EXPRESSION);
    private static final TableOptions C_FUNCTION          = new TableOptions(TableType.FUNCTION);
    private static final TableOptions C_MATERIALIZED_VIEW = materializedView(null);
    private static final TableOptions C_TABLE             = new TableOptions(TableType.TABLE);
    private static final TableOptions C_TEMPORARY         = new TableOptions(TableType.TEMPORARY);
    private static final TableOptions C_VIEW              = view((String) null);

    private final TableType           type;
    private final OnCommit            onCommit;
    private final Select           select;
    private final String              source;

    private TableOptions(TableType type) {
        this.type = type;
        this.onCommit = null;
        this.select = null;
        this.source = null;
    }

    private TableOptions(OnCommit onCommit) {
        this.type = TableType.TEMPORARY;
        this.onCommit = onCommit;
        this.select = null;
        this.source = null;
    }

    private TableOptions(TableType type, Select select) {
        this.type = type;
        this.onCommit = null;
        this.select = select;
        this.source = select == null ? null : select.toString();
    }

    private TableOptions(TableType type, String source) {
        this.type = type;
        this.onCommit = null;
        this.select = null;
        this.source = source;
    }

    /**
     * Get a new {@link TableOptions} object for a given table type.
     */
    @NotNull
    public static final TableOptions of(TableType tableType) {
        switch (tableType) {
            case EXPRESSION:
                return expression();
            case FUNCTION:
                return function();
            case MATERIALIZED_VIEW:
                return materializedView();
            case TEMPORARY:
                return temporaryTable();
            case VIEW:
                return view();
            case TABLE:
            case UNKNOWN:
            default:
                return table();
        }
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#TABLE}.
     */
    @NotNull
    public static final TableOptions table() {
        return C_TABLE;
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#TEMPORARY}.
     */
    @NotNull
    public static final TableOptions temporaryTable() {
        return C_TEMPORARY;
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#TEMPORARY}.
     */
    @NotNull
    public static final TableOptions temporaryTable(OnCommit onCommit) {
        return new TableOptions(onCommit);
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#TEMPORARY}.
     */
    @NotNull
    public static final TableOptions temporaryTable(TableCommitAction onCommit) {
        if (onCommit == null)
            return new TableOptions((OnCommit) null);

        switch (onCommit) {
            case DELETE_ROWS: return temporaryTable(DELETE_ROWS);
            case PRESERVE_ROWS: return temporaryTable(PRESERVE_ROWS);
            case DROP: return temporaryTable(DROP);
            default: throw new IllegalArgumentException("TableCommitAction not supported: " + onCommit);
        }
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#VIEW} of
     * unknown content.
     */
    @NotNull
    public static final TableOptions view() {
        return C_VIEW;
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#VIEW}.
     */
    @NotNull
    public static final TableOptions view(Select select) {
        return new TableOptions(TableType.VIEW, select);
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#VIEW}.
     */
    @NotNull
    public static final TableOptions view(String source) {
        return new TableOptions(TableType.VIEW, source);
    }

    /**
     * Create a new {@link TableOptions} object for a
     * {@link TableType#MATERIALIZED_VIEW} of unknown content.
     */
    @NotNull
    public static final TableOptions materializedView() {
        return C_MATERIALIZED_VIEW;
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#MATERIALIZED_VIEW}.
     */
    @NotNull
    public static final TableOptions materializedView(Select select) {
        return new TableOptions(TableType.MATERIALIZED_VIEW, select);
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#EXPRESSION}.
     */
    @NotNull
    public static final TableOptions expression() {
        return C_EXPRESSION;
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#FUNCTION}.
     */
    @NotNull
    public static final TableOptions function() {
        return C_FUNCTION;
    }

    /**
     * Create a new {@link TableOptions} object for a {@link TableType#FUNCTION}.
     */
    @NotNull
    public static final TableOptions function(String source) {
        return new TableOptions(TableType.FUNCTION, source);
    }

    /**
     * The table type.
     * 

* This is never null. */ @NotNull public final TableType type() { return type; } /** * The ON COMMIT flag for {@link TableType#TEMPORARY} tables. *

* This may be null, if it is undefined, or unknown, or if the * table is not a {@link TableType#TEMPORARY} table. */ @Nullable public final OnCommit onCommit() { return onCommit; } /** * The SELECT statement defining this {@link TableType#VIEW} or * {@link TableType#MATERIALIZED_VIEW}. *

* This may be null, if it is undefined, or unknown, or if the * table is not a view. */ @Nullable public final Select select() { return select; } /** * The SELECT statement defining this {@link TableType#VIEW} or * {@link TableType#MATERIALIZED_VIEW}, in source form. *

* This may be null, if it is undefined, or unknown, or if the * table is not a view. */ @Nullable public final String source() { return source; } /** * A description of the type of a {@link Table}. */ public enum TableType { /** * An ordinary table that is stored in the schema. */ TABLE, /** * A global temporary table that is stored in the schema and visible to * everyone. */ TEMPORARY, /** * A view that is defined by a {@link Select} statement. */ VIEW, /** * A materialised view that is defined by a {@link Select} statement, and * whose data is materialised in the schema. */ MATERIALIZED_VIEW, /** * A table valued function that is defined by a {@link Routine}. */ FUNCTION, /** * A table expression, such as a derived table, a joined table, a common * table expression, etc. */ EXPRESSION, /** * A table type that is unknown to jOOQ. */ UNKNOWN; /** * Whether the type is a view. */ public final boolean isView() { return this == VIEW || this == MATERIALIZED_VIEW; } /** * Whether the type is a function. */ public final boolean isFunction() { return this == FUNCTION; } /** * Whether the type is a view. */ public final boolean isTable() { return this == TABLE || this == TEMPORARY; } } /** * The ON COMMIT flag for {@link TableType#TEMPORARY} tables. */ public enum OnCommit { @Support({ POSTGRES }) DELETE_ROWS, @Support({ POSTGRES }) PRESERVE_ROWS, @Support({ POSTGRES }) DROP; } // ------------------------------------------------------------------------- // XXX: Object API // ------------------------------------------------------------------------- @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((onCommit == null) ? 0 : onCommit.hashCode()); result = prime * result + ((select == null) ? 0 : select.hashCode()); result = prime * result + ((source == null) ? 0 : source.hashCode()); result = prime * result + ((type == null) ? 0 : type.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; TableOptions other = (TableOptions) obj; if (onCommit != other.onCommit) return false; if (select == null) { if (other.select != null) return false; } else if (!select.equals(other.select)) return false; if (source == null) { if (other.source != null) return false; } else if (!source.equals(other.source)) return false; if (type != other.type) return false; return true; } @Override public String toString() { return "TableOptions[" + type + "]"; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy