提交 5624d8f5 编写于 作者: S serge-rider

#1956 PostgreSQL tablespace edit. WITH OID edit.


Former-commit-id: e811cab7
上级 3a0f23d1
......@@ -101,7 +101,7 @@ public class DB2TableManager extends SQLTableManager<DB2Table, DB2Schema> implem
@Override
@SuppressWarnings("rawtypes")
public void appendTableModifiers(DB2Table db2Table, NestedObjectCommand tableProps, StringBuilder ddl)
public void appendTableModifiers(DB2Table db2Table, NestedObjectCommand tableProps, StringBuilder ddl, boolean alter)
{
try {
......@@ -164,7 +164,7 @@ public class DB2TableManager extends SQLTableManager<DB2Table, DB2Schema> implem
sb.append(db2Table.getFullyQualifiedName(DBPEvaluationContext.DDL));
sb.append(" ");
appendTableModifiers(command.getObject(), command, sb);
appendTableModifiers(command.getObject(), command, sb, true);
actionList.add(new SQLDatabasePersistAction(CMD_ALTER, sb.toString()));
}
......
......@@ -89,7 +89,7 @@ public class ExasolTableManager extends SQLTableManager<ExasolTable, ExasolSchem
@Override
@SuppressWarnings("rawtypes")
public void appendTableModifiers(ExasolTable exasolTable, NestedObjectCommand tableProps, StringBuilder ddl) {
public void appendTableModifiers(ExasolTable exasolTable, NestedObjectCommand tableProps, StringBuilder ddl, boolean alter) {
}
......@@ -117,7 +117,7 @@ public class ExasolTableManager extends SQLTableManager<ExasolTable, ExasolSchem
sb.append(exasolTable.getFullyQualifiedName(DBPEvaluationContext.DDL));
sb.append(" ");
appendTableModifiers(command.getObject(), command, sb);
appendTableModifiers(command.getObject(), command, sb, true);
actionList.add(new SQLDatabasePersistAction(CMD_ALTER, sb.toString()));
}
......
......@@ -90,7 +90,7 @@ public class MySQLTableManager extends SQLTableManager<MySQLTableBase, MySQLCata
{
StringBuilder query = new StringBuilder("ALTER TABLE "); //$NON-NLS-1$
query.append(command.getObject().getFullyQualifiedName(DBPEvaluationContext.DDL)).append(" "); //$NON-NLS-1$
appendTableModifiers(command.getObject(), command, query);
appendTableModifiers(command.getObject(), command, query, true);
actionList.add(
new SQLDatabasePersistAction(query.toString())
......@@ -111,7 +111,7 @@ public class MySQLTableManager extends SQLTableManager<MySQLTableBase, MySQLCata
}
@Override
protected void appendTableModifiers(MySQLTableBase tableBase, NestedObjectCommand tableProps, StringBuilder ddl)
protected void appendTableModifiers(MySQLTableBase tableBase, NestedObjectCommand tableProps, StringBuilder ddl, boolean alter)
{
if (tableBase instanceof MySQLTable) {
MySQLTable table =(MySQLTable)tableBase;
......
......@@ -75,7 +75,7 @@ public class OracleTableManager extends SQLTableManager<OracleTable, OracleSchem
if (command.getProperties().size() > 1 || command.getProperty("comment") == null) {
StringBuilder query = new StringBuilder("ALTER TABLE "); //$NON-NLS-1$
query.append(command.getObject().getFullyQualifiedName(DBPEvaluationContext.DDL)).append(" "); //$NON-NLS-1$
appendTableModifiers(command.getObject(), command, query);
appendTableModifiers(command.getObject(), command, query, true);
actionList.add(new SQLDatabasePersistAction(query.toString()));
}
}
......@@ -91,7 +91,7 @@ public class OracleTableManager extends SQLTableManager<OracleTable, OracleSchem
}
@Override
protected void appendTableModifiers(OracleTable table, NestedObjectCommand tableProps, StringBuilder ddl)
protected void appendTableModifiers(OracleTable table, NestedObjectCommand tableProps, StringBuilder ddl, boolean alter)
{
// ALTER
if (tableProps.getProperty("tablespace") != null) { //$NON-NLS-1$
......
......@@ -269,13 +269,11 @@ public abstract class OracleTablePhysical extends OracleTableBase implements DBS
{
final List<OracleTablespace> tablespaces = new ArrayList<>();
try {
for (OracleTablespace ts : object.getDataSource().getTablespaces(new VoidProgressMonitor())) {
tablespaces.add(ts);
}
tablespaces.addAll(object.getDataSource().getTablespaces(new VoidProgressMonitor()));
} catch (DBException e) {
log.error(e);
}
Collections.sort(tablespaces, DBUtils.<OracleTablespace>nameComparator());
tablespaces.sort(DBUtils.<OracleTablespace>nameComparator());
return tablespaces.toArray(new OracleTablespace[tablespaces.size()]);
}
}
......
......@@ -20,6 +20,7 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.postgresql.model.*;
import org.jkiss.dbeaver.model.DBConstants;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.edit.DBECommandContext;
......@@ -71,23 +72,37 @@ public class PostgreTableManager extends PostgreTableManagerBase implements DBEO
@Override
protected void addObjectModifyActions(List<DBEPersistAction> actionList, ObjectChangeCommand command, Map<String, Object> options)
{
final PostgreTableBase table = command.getObject();
if (command.getProperties().size() > 1 || command.getProperty("description") == null) {
StringBuilder query = new StringBuilder("ALTER TABLE "); //$NON-NLS-1$
query.append(table.getFullyQualifiedName(DBPEvaluationContext.DDL)).append(" "); //$NON-NLS-1$
appendTableModifiers(table, command, query);
if (command.getProperties().size() > 1 || command.getProperty(DBConstants.PROP_ID_DESCRIPTION) == null) {
if (command.getObject() instanceof PostgreTableRegular) {
try {
generateAlterActions(actionList, command);
} catch (DBException e) {
log.error(e);
}
}
}
}
actionList.add(new SQLDatabasePersistAction(query.toString()));
private void generateAlterActions(List<DBEPersistAction> actionList, ObjectChangeCommand command) throws DBException {
final PostgreTableRegular table = (PostgreTableRegular) command.getObject();
final String alterPrefix = "ALTER TABLE " + command.getObject().getFullyQualifiedName(DBPEvaluationContext.DDL) + " ";
final VoidProgressMonitor monitor = new VoidProgressMonitor();
if (command.getProperty("hasOids") != null) {
actionList.add(new SQLDatabasePersistAction(alterPrefix + (table.isHasOids() ? "SET WITH OIDS" : "SET WITHOUT OIDS")));
}
if (command.getProperty("tablespace") != null) {
actionList.add(new SQLDatabasePersistAction(alterPrefix + "SET TABLESPACE " + table.getTablespace(monitor).getName()));
}
}
@Override
protected void appendTableModifiers(PostgreTableBase tableBase, NestedObjectCommand tableProps, StringBuilder ddl)
protected void appendTableModifiers(PostgreTableBase tableBase, NestedObjectCommand tableProps, StringBuilder ddl, boolean alter)
{
if (tableBase instanceof PostgreTableRegular) {
final VoidProgressMonitor monitor = new VoidProgressMonitor();
PostgreTableRegular table =(PostgreTableRegular)tableBase;
try {
if (!alter) {
final List<PostgreTableInheritance> superTables = table.getSuperInheritance(monitor);
if (!CommonUtils.isEmpty(superTables)) {
ddl.append("\nINHERITS (");
......@@ -99,13 +114,16 @@ public class PostgreTableManager extends PostgreTableManagerBase implements DBEO
}
ddl.append("\nWITH (\n\tOIDS=").append(table.isHasOids() ? "TRUE" : "FALSE");
ddl.append("\n)");
}
boolean hasOtherSpecs = false;
PostgreTablespace tablespace = table.getTablespace(monitor);
if (tablespace != null && table.isTablespaceSpecified()) {
if (!alter) {
ddl.append("\nTABLESPACE ").append(tablespace.getName());
}
hasOtherSpecs = true;
}
if (hasOtherSpecs) {
if (!alter && hasOtherSpecs) {
ddl.append("\n");
}
} catch (DBException e) {
......
......@@ -31,8 +31,10 @@ import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.SimpleObjectCache;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.meta.Association;
import org.jkiss.dbeaver.model.meta.IPropertyValueListProvider;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSEntityAssociation;
import org.jkiss.utils.CommonUtils;
......@@ -89,7 +91,7 @@ public abstract class PostgreTable extends PostgreTableReal implements DBDPseudo
return tablespaceId != 0;
}
@Property(viewable = true, order = 20)
@Property(viewable = true, editable = true, updatable = true, order = 20, listProvider = TablespaceListProvider.class)
public PostgreTablespace getTablespace(DBRProgressMonitor monitor) throws DBException {
if (tablespaceId == 0) {
return getDatabase().getDefaultTablespace(monitor);
......@@ -97,17 +99,25 @@ public abstract class PostgreTable extends PostgreTableReal implements DBDPseudo
return PostgreUtils.getObjectById(monitor, getDatabase().tablespaceCache, getDatabase(), tablespaceId);
}
public void setTablespace(PostgreTablespace tablespace) {
this.tablespaceId = tablespace.getObjectId();
}
@Override
public boolean isView()
{
return false;
}
@Property(viewable = false, order = 40)
@Property(viewable = false, editable = true, updatable = true, order = 40)
public boolean isHasOids() {
return hasOids;
}
public void setHasOids(boolean hasOids) {
this.hasOids = hasOids;
}
@Override
public Collection<PostgreIndex> getIndexes(DBRProgressMonitor monitor) throws DBException {
return getSchema().indexCache.getObjects(monitor, getSchema(), this);
......@@ -308,4 +318,23 @@ public abstract class PostgreTable extends PostgreTableReal implements DBDPseudo
return result;
}
public static class TablespaceListProvider implements IPropertyValueListProvider<PostgreTable> {
@Override
public boolean allowCustomValue()
{
return false;
}
@Override
public Object[] getPossibleValues(PostgreTable object)
{
try {
Collection<PostgreTablespace> tablespaces = object.getDatabase().getTablespaces(new VoidProgressMonitor());
return tablespaces.toArray(new Object[tablespaces.size()]);
} catch (DBException e) {
log.error(e);
return new Object[0];
}
}
}
}
......@@ -128,7 +128,7 @@ public abstract class SQLTableManager<OBJECT_TYPE extends JDBCTable, CONTAINER_T
}
createQuery.append(lineSeparator).append(")"); //$NON-NLS-1$
appendTableModifiers(table, tableProps, createQuery);
appendTableModifiers(table, tableProps, createQuery, false);
actions.add( 0, new SQLDatabasePersistAction(ModelMessages.model_jdbc_create_new_table, createQuery.toString()) );
}
......@@ -151,7 +151,7 @@ public abstract class SQLTableManager<OBJECT_TYPE extends JDBCTable, CONTAINER_T
);
}
protected void appendTableModifiers(OBJECT_TYPE table, NestedObjectCommand tableProps, StringBuilder ddl)
protected void appendTableModifiers(OBJECT_TYPE table, NestedObjectCommand tableProps, StringBuilder ddl, boolean alter)
{
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册