AlterExpressionDrop.java

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

import net.sf.jsqlparser.statement.select.PlainSelect;

/**
 * Internal subclass for DROP operations within ALTER TABLE. Handles DROP column, DROP CONSTRAINT,
 * DROP INDEX/KEY, DROP PRIMARY KEY, DROP UNIQUE, DROP FOREIGN KEY, and DROP PARTITION.
 */
public class AlterExpressionDrop extends AlterExpression {

    @Override
    protected void appendBody(StringBuilder b) {
        switch (getOperation()) {
            case DROP_PRIMARY_KEY:
                b.append("DROP PRIMARY KEY ");
                break;
            case DROP_UNIQUE:
                b.append("DROP UNIQUE (")
                        .append(PlainSelect.getStringList(getPkColumns())).append(')');
                break;
            case DROP_FOREIGN_KEY:
                b.append("DROP FOREIGN KEY (")
                        .append(PlainSelect.getStringList(getPkColumns())).append(')');
                break;
            case DROP_PARTITION:
                b.append("DROP PARTITION ")
                        .append(PlainSelect.getStringList(getPartitions()));
                break;
            default:
                toStringDropDefault(b);
                break;
        }
    }

    private void toStringDropDefault(StringBuilder b) {
        b.append("DROP ");
        if (getColumnName() == null && getPkColumns() != null && !getPkColumns().isEmpty()) {
            // Oracle Multi Column Drop
            b.append("(").append(PlainSelect.getStringList(getPkColumns())).append(')');
        } else if (getConstraintName() != null) {
            b.append("CONSTRAINT ");
            if (isUsingIfExists()) {
                b.append("IF EXISTS ");
            }
            b.append(getConstraintName());
        } else if (getColumnName() != null) {
            if (hasColumn()) {
                b.append("COLUMN ");
            }
            if (isUsingIfExists()) {
                b.append("IF EXISTS ");
            }
            b.append(getColumnName());
        } else if (getIndex() != null) {
            b.append(getIndex());
        }
    }
}