diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml b/plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml index b32f611526ac6dc6c1d7064907c1fae2fb75042a..d9db9b1c841e0dd67219c74fb1062c534865aeeb 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml @@ -348,6 +348,7 @@ + actions, NestedObjectCommand command, Map options) + { + PostgreSchema schema = command.getObject(); + String comment = schema.getDescription(); + + if (comment != null) { + actions.add(new SQLDatabasePersistAction( + "Comment schema", + "COMMENT ON SCHEMA " + DBUtils.getQuotedIdentifier(schema) + + " IS " + SQLUtils.quoteString(schema, comment))); + } + } + } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java index 60f6434f033b032f9bd165308d5159cf6f35080c..beed7b61c852d5a049d283d976ed4bff3b51636d 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreSchema.java @@ -35,12 +35,14 @@ import org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCStructLookupCache; import org.jkiss.dbeaver.model.meta.Association; import org.jkiss.dbeaver.model.meta.Property; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; +import org.jkiss.dbeaver.model.sql.SQLUtils; import org.jkiss.dbeaver.model.struct.DBSDataType; import org.jkiss.dbeaver.model.struct.DBSEntity; import org.jkiss.dbeaver.model.struct.DBSEntityConstraintType; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureContainer; import org.jkiss.dbeaver.model.struct.rdb.DBSSchema; +import org.jkiss.utils.CommonUtils; import java.lang.reflect.Array; import java.sql.ResultSet; @@ -54,7 +56,7 @@ import java.util.stream.Collectors; /** * PostgreSchema */ -public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObject, DBPRefreshableObject, DBPSystemObject, DBSProcedureContainer, PostgreObject { +public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObject, DBPRefreshableObject, DBPSystemObject, DBSProcedureContainer, PostgreObject, PostgreScriptObject { private static final Log log = Log.getLog(PostgreSchema.class); @@ -127,13 +129,17 @@ public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObj return PostgreUtils.getObjectById(monitor, database.roleCache, database, ownerId); } - @Property(viewable = true, order = 100) + @Property(viewable = true, editable = true, updatable = true, order = 100) @Nullable @Override public String getDescription() { return description; } + public void setDescription(String description) { + this.description = description; + } + @Override public PostgreDatabase getParentObject() { @@ -338,6 +344,28 @@ public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObj return PostgreConstants.CATALOG_SCHEMA_NAME.equals(name); } + @Override + public String getObjectDefinitionText(DBRProgressMonitor monitor, Map options) throws DBException { + StringBuilder sql = new StringBuilder(); + sql.append("-- DROP SCHEMA ").append(DBUtils.getQuotedIdentifier(this)).append(";\n\n"); + sql.append("CREATE SCHEMA ").append(DBUtils.getQuotedIdentifier(this)); + PostgreRole owner = getOwner(monitor); + if (owner != null) { + sql.append(" AUTHORIZATION ").append(DBUtils.getQuotedIdentifier(owner)); + } + sql.append(";\n\n"); + if (!CommonUtils.isEmpty(getDescription())) { + sql.append("COMMENT ON SCHEMA ").append(DBUtils.getQuotedIdentifier(this)) + .append(" IS ").append(SQLUtils.quoteString(this, getDescription())); + } + return sql.toString(); + } + + @Override + public void setObjectDefinitionText(String sourceText) throws DBException { + throw new DBException("Schema DDL is read-only"); + } + class CollationCache extends JDBCObjectCache { @Override diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgreSourceViewEditor.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgreSourceViewEditor.java index 3a781b80ede8cd06908bee1bff27aa28eb5b2712..7b5e70271beee21c22020a44131e573d75dc8ef0 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgreSourceViewEditor.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/ui/editors/PostgreSourceViewEditor.java @@ -17,9 +17,6 @@ package org.jkiss.dbeaver.ext.postgresql.ui.editors; -import java.util.Map; - -import org.eclipse.core.runtime.CoreException; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.jface.action.ControlContribution; import org.eclipse.jface.action.IContributionManager; @@ -30,13 +27,9 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IEditorInput; import org.jkiss.dbeaver.ext.postgresql.PostgreActivator; import org.jkiss.dbeaver.ext.postgresql.PostgreConstants; -import org.jkiss.dbeaver.ext.postgresql.model.PostgrePermissionsOwner; -import org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedure; -import org.jkiss.dbeaver.ext.postgresql.model.PostgreScriptObject; -import org.jkiss.dbeaver.ext.postgresql.model.PostgreTableBase; +import org.jkiss.dbeaver.ext.postgresql.model.*; import org.jkiss.dbeaver.model.DBPScriptObject; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.ui.UIUtils; @@ -46,6 +39,8 @@ import org.jkiss.dbeaver.utils.GeneralUtils; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; +import java.util.Map; + /** * PostgreSourceViewEditor */ @@ -98,7 +93,11 @@ public class PostgreSourceViewEditor extends SQLSourceViewer