package com.github.ryhmrt.mssqldiff.data;
import java.util.Collections;
import java.util.List;
import com.github.ryhmrt.mssqldiff.util.SqlUtil;
public class TableDiff extends Diff<Table> {
private List<ColumnDiff> columnDiffs = Collections.emptyList();
private List<PermissionDiff> permissionDiffs = Collections.emptyList();
public void setColumnDiffs(List<ColumnDiff> columnDiffs) {
this.columnDiffs = columnDiffs;
}
public List<ColumnDiff> getColumnDiffs() {
return columnDiffs;
}
public void setPermissionDiffs(List<PermissionDiff> permissionDiffs) {
this.permissionDiffs = permissionDiffs;
}
public List<PermissionDiff> getPermissionDiffs() {
return permissionDiffs;
}
@Override
public String getName() {
return getType() == Type.CREATED ? getTo().getName() : getFrom().getName();
}
@Override
public String toCreateSql() {
return toCreateSql(true);
}
protected String toCreateSql(boolean withPermission) {
Table table = getTo();
StringBuilder sb = new StringBuilder();
if (table.getType().equals("U")) {
sb.append("-- missing table [");
sb.append(getName());
sb.append("]");
sb.append("\n");
sb.append(SqlUtil.createTable(getTo()));
} else if (table.getType().equals("V")) {
sb.append("-- missing view [");
sb.append(getName());
sb.append("]");
sb.append("\n");
}
if (withPermission) {
for (PermissionDiff p : getPermissionDiffs()) {
sb.append(p.toSql());
}
}
return sb.toString();
}
@Override
public String toDropSql() {
Table table = getFrom();
StringBuilder sb = new StringBuilder();
if (table.getType().equals("U")) {
sb.append("-- unnecessary table [");
sb.append(getName());
sb.append("]");
sb.append("\n");
sb.append("DROP TABLE [");
sb.append(getName());
sb.append("]");
sb.append("\n");
} else if (table.getType().equals("V")) {
sb.append("-- unnecessary view [");
sb.append(getName());
sb.append("]");
sb.append("\n");
sb.append("DROP VIEW [");
sb.append(getName());
sb.append("]");
sb.append("\n");
}
return sb.toString();
}
@Override
public String toModifySql() {
return toModifySql(true);
}
protected String toModifySql(boolean withPermission) {
Table table = getFrom();
StringBuilder sb = new StringBuilder();
if (table.getType().equals("U")) {
sb.append("-- different table [");
sb.append(getName());
sb.append("]");
sb.append("\n");
for (ColumnDiff c : getColumnDiffs()) {
sb.append(c.toSql());
}
} else if (table.getType().equals("V")) {
sb.append("-- different view [");
sb.append(getName());
sb.append("]");
sb.append("\n");
}
if (withPermission) {
for (PermissionDiff p : getPermissionDiffs()) {
sb.append(p.toSql());
}
}
return sb.toString();
}
public String toSqlWithoutPermissions() {
switch (getType()) {
case CREATED:
return toCreateSql(false);
case DROPPED:
return toDropSql();
case MODIFIED:
return toModifySql(false);
}
return null;
}
}