提交 58f4a591 编写于 作者: S serge-rider

#3205 PostgreSQL: schema DDL, schema comments edit support


Former-commit-id: 63ebdf78
上级 65df2077
......@@ -348,6 +348,7 @@
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreExtension"/>
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreForeignServer"/>
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreForeignDataWrapper"/>
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema"/>
</editor>
<editor id="postgresql.source.ddl" class="org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgreSourceViewEditor"
label="%db.editor.ddl.name" description="%db.editor.ddl.description" icon="#sql_text" position="additions_middle"
......
......@@ -20,8 +20,8 @@ import org.eclipse.jface.dialogs.IDialogConstants;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreRole;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreRole;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema;
import org.jkiss.dbeaver.ext.postgresql.ui.PostgreCreateSchemaDialog;
import org.jkiss.dbeaver.model.DBPDataSource;
......@@ -34,6 +34,7 @@ import org.jkiss.dbeaver.model.impl.edit.SQLDatabasePersistAction;
import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.ui.UITask;
import java.util.List;
......@@ -116,5 +117,18 @@ public class PostgreSchemaManager extends SQLObjectEditor<PostgreSchema, Postgre
processObjectRename(commandContext, schema, newName);
}
protected void addObjectExtraActions(List<DBEPersistAction> actions, NestedObjectCommand<PostgreSchema, PropertyHandler> command, Map<String, Object> 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)));
}
}
}
......@@ -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<String, Object> 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<PostgreSchema, PostgreCollation> {
@Override
......
......@@ -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,8 +93,12 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
@Override
protected boolean isReadOnly()
{
PostgreScriptObject sourceObject = getSourceObject();
if (sourceObject instanceof PostgreProcedure || sourceObject instanceof PostgreTrigger) {
return false;
}
return true;
}
public boolean getShowPermissions() {
// By default permissions enabled only for tables
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册