LikeClause.java

/*-
 * #%L
 * JSQLParser library
 * %%
 * Copyright (C) 2004 - 2022 JSQLParser
 * %%
 * Dual licensed under GNU LGPL 2.1 or Apache License 2.0
 * #L%
 */
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.imprt.ImportColumn;
import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.SelectItem;

import java.io.Serializable;
import java.util.List;

/**
 * Exasol Like Clause
 *
 * @see <a href="https://docs.exasol.com/db/latest/sql/create_table.htm">Like Clause in CREATE
 *      TABLE</a>
 * @see <a href="https://docs.exasol.com/db/latest/sql/import.htm">Like Clause in IMPORT</a>
 */
public class LikeClause implements ImportColumn, Serializable {
    private Table table;
    private List<SelectItem<Column>> columnsList;

    private Boolean includingDefaults;
    private Boolean includingIdentity;
    private Boolean includingComments;

    public Table getTable() {
        return table;
    }

    public void setTable(Table table) {
        this.table = table;
    }

    public List<SelectItem<Column>> getColumnsList() {
        return columnsList;
    }

    public void setColumnsList(List<SelectItem<Column>> columnsList) {
        this.columnsList = columnsList;
    }

    public Boolean isIncludingDefaults() {
        return includingDefaults;
    }

    public void setIncludingDefaults(Boolean includingDefaults) {
        this.includingDefaults = includingDefaults;
    }

    public Boolean isExcludingDefaults() {
        return includingDefaults == null ? null : !includingDefaults;
    }

    public void setExcludingDefaults(Boolean excludingDefaults) {
        this.includingDefaults = !excludingDefaults;
    }

    public Boolean isIncludingIdentity() {
        return includingIdentity;
    }

    public void setIncludingIdentity(Boolean includingIdentity) {
        this.includingIdentity = includingIdentity;
    }

    public Boolean isExcludingIdentity() {
        return includingIdentity == null ? null : !includingIdentity;
    }

    public void setExcludingIdentity(Boolean excludingIdentity) {
        this.includingIdentity = !excludingIdentity;
    }

    public Boolean isIncludingComments() {
        return includingComments;
    }

    public void setIncludingComments(Boolean includingComments) {
        this.includingComments = includingComments;
    }

    public Boolean isExcludingComments() {
        return includingComments == null ? null : !includingComments;
    }

    public void setExcludingComments(Boolean excludingComments) {
        this.includingComments = !excludingComments;
    }

    public StringBuilder appendTo(StringBuilder builder) {
        builder.append(" LIKE ");
        builder.append(table);
        if (columnsList != null) {
            builder.append(" ");
            PlainSelect.appendStringListTo(builder, columnsList, true, true);
        }

        if (includingDefaults != null) {
            if (includingDefaults) {
                builder.append(" INCLUDING ");
            } else {
                builder.append(" EXCLUDING ");
            }
            builder.append(" DEFAULTS ");
        }

        if (includingIdentity != null) {
            if (includingIdentity) {
                builder.append(" INCLUDING ");
            } else {
                builder.append(" EXCLUDING ");
            }
            builder.append(" IDENTITY ");
        }

        if (includingComments != null) {
            if (includingComments) {
                builder.append(" INCLUDING ");
            } else {
                builder.append(" EXCLUDING ");
            }
            builder.append(" COMMENTS ");
        }

        return builder;
    }

    @Override
    public String toString() {
        return appendTo(new StringBuilder()).toString();
    }
}