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

net.sf.jsqlparser.statement.alter.AlterExpression Maven / Gradle / Ivy

The newest version!
/*
 * #%L
 * JSQLParser library
 * %%
 * Copyright (C) 2004 - 2016 JSQLParser
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 2.1 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 * #L%
 */
package net.sf.jsqlparser.statement.alter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import net.sf.jsqlparser.statement.create.table.ColDataType;
import net.sf.jsqlparser.statement.create.table.Index;
import net.sf.jsqlparser.statement.select.PlainSelect;

/**
 *
 * @author toben & wrobstory
 */
public class AlterExpression {

    private AlterOperation operation;
    private String columnName;
    //private ColDataType dataType;

    private List colDataTypeList;

    private List pkColumns;
    private List ukColumns;
    private String ukName;
    private Index index = null;
    private String constraintName;
    private boolean constraintIfExists;
    private boolean onDeleteRestrict;
    private boolean onDeleteSetNull;
    private boolean onDeleteCascade;
    private List fkColumns;
    private String fkSourceTable;
    private List fkSourceColumns;

    private List constraints;
    private List parameters;

    public AlterOperation getOperation() {
        return operation;
    }

    public void setOperation(AlterOperation operation) {
        this.operation = operation;
    }

    public boolean isOnDeleteCascade() {
        return onDeleteCascade;
    }

    public void setOnDeleteCascade(boolean onDeleteCascade) {
        this.onDeleteCascade = onDeleteCascade;
    }

    public boolean isOnDeleteRestrict() {
        return onDeleteRestrict;
    }

    public void setOnDeleteRestrict(boolean onDeleteRestrict) {
        this.onDeleteRestrict = onDeleteRestrict;
    }

    public boolean isOnDeleteSetNull() {
        return onDeleteSetNull;
    }

    public void setOnDeleteSetNull(boolean onDeleteSetNull) {
        this.onDeleteSetNull = onDeleteSetNull;
    }

    public List getFkColumns() {
        return fkColumns;
    }

    public void setFkColumns(List fkColumns) {
        this.fkColumns = fkColumns;
    }

    public String getFkSourceTable() {
        return fkSourceTable;
    }

    public void setFkSourceTable(String fkSourceTable) {
        this.fkSourceTable = fkSourceTable;
    }

    public List getColDataTypeList() {
        return colDataTypeList;
    }

    public void addColDataType(String columnName, ColDataType colDataType) {
        addColDataType(new ColumnDataType(columnName, false, colDataType, null));
    }

    public void addColDataType(ColumnDataType columnDataType) {
        if (colDataTypeList == null) {
            colDataTypeList = new ArrayList();
        }
        colDataTypeList.add(columnDataType);
    }

    public List getFkSourceColumns() {
        return fkSourceColumns;
    }

    public void setFkSourceColumns(List fkSourceColumns) {
        this.fkSourceColumns = fkSourceColumns;
    }

    public String getColumnName() {
        return columnName;
    }

    public void setColumnName(String columnName) {
        this.columnName = columnName;
    }

    public String getConstraintName() {
        return this.constraintName;
    }

    public void setConstraintName(final String constraintName) {
        this.constraintName = constraintName;
    }
    
    public boolean isConstraintIfExists() {
        return constraintIfExists;
    }
    
    public void setConstraintIfExists( boolean constraintIfExists ) {
        this.constraintIfExists = constraintIfExists;
    }

    public List getPkColumns() {
        return pkColumns;
    }

    public void setPkColumns(List pkColumns) {
        this.pkColumns = pkColumns;
    }

    public List getUkColumns() {
        return ukColumns;
    }

    public void setUkColumns(List ukColumns) {
        this.ukColumns = ukColumns;
    }

    public String getUkName() {
        return ukName;
    }

    public void setUkName(String ukName) {
        this.ukName = ukName;
    }

    public Index getIndex() {
        return index;
    }

    public void setIndex(Index index) {
        this.index = index;
    }

    public List getConstraints() {
        return constraints;
    }

    public void setConstraints(List constraints) {
        this.constraints = constraints;
    }

    public void addParameters(String... params) {
        if (parameters == null) {
            parameters = new ArrayList();
        }
        parameters.addAll(Arrays.asList(params));
    }

    public List getParameters() {
        return parameters;
    }

    @Override
    public String toString() {

        StringBuilder b = new StringBuilder();

        b.append(operation).append(" ");

        if (columnName != null) {
            b.append("COLUMN ").append(columnName);
        } else if (getColDataTypeList() != null) {
            if (colDataTypeList.size() > 1) {
                b.append("(");
            } else {
                b.append("COLUMN ");
            }
            b.append(PlainSelect.getStringList(colDataTypeList));
            if (colDataTypeList.size() > 1) {
                b.append(")");
            }
        } else if (constraintName != null) {
            b.append("CONSTRAINT ");
            if(constraintIfExists) {
               b.append("IF EXISTS ");
            }
            b.append(constraintName);
        } else if (pkColumns != null) {
            b.append("PRIMARY KEY (").append(PlainSelect.getStringList(pkColumns)).append(')');
        } else if (ukColumns != null) {
            b.append("UNIQUE");
            if (ukName != null) {
              b.append(" KEY ").append(ukName);    
            }
            b.append(" (").append(PlainSelect.getStringList(ukColumns)).append(")");
        } else if (fkColumns != null) {
            b.append("FOREIGN KEY (").append(PlainSelect.getStringList(fkColumns)).
                    append(") REFERENCES ").append(fkSourceTable).append(" (").append(
                    PlainSelect.getStringList(fkSourceColumns)).append(")");
            if (isOnDeleteCascade()) {
                b.append(" ON DELETE CASCADE");
            } else if (isOnDeleteRestrict()) {
                b.append(" ON DELETE RESTRICT");
            } else if (isOnDeleteSetNull()) {
                b.append(" ON DELETE SET NULL");
            }
        } else if (index != null) {
            b.append(index);
        }
        if (getConstraints() != null && !getConstraints().isEmpty()) {
            b.append(' ').append(PlainSelect.getStringList(constraints, false, false));
        }
        if (parameters!=null && !parameters.isEmpty()) {
            b.append(' ').append(PlainSelect.getStringList(parameters, false, false));
        }

        return b.toString();
    }

    public static class ColumnDataType {

        private final String columnName;
        private final boolean withType;
        private final ColDataType colDataType;
        private final List columnSpecs;

        public ColumnDataType(String columnName, boolean withType, ColDataType colDataType, List columnSpecs) {
            this.columnName = columnName;
            this.withType = withType;
            this.colDataType = colDataType;
            this.columnSpecs = columnSpecs;
        }

        public String getColumnName() {
            return columnName;
        }

        public ColDataType getColDataType() {
            return colDataType;
        }

        public List getColumnSpecs() {
            if (columnSpecs == null) {
                return Collections.emptyList();
            }
            return Collections.unmodifiableList(columnSpecs);
        }

        @Override
        public String toString() {
            return columnName + ( withType ? " TYPE " : " " ) + colDataType + parametersToString();
        }

        private String parametersToString() {
            if (columnSpecs == null || columnSpecs.isEmpty()) {
                return "";
            }
            return " " + PlainSelect.getStringList(columnSpecs, false, false);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy