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

#3205 PostgreSQL: schema DDL, schema comments edit support


Former-commit-id: 63ebdf78
上级 65df2077
...@@ -348,6 +348,7 @@ ...@@ -348,6 +348,7 @@
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreExtension"/> <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.PostgreForeignServer"/>
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreForeignDataWrapper"/> <objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreForeignDataWrapper"/>
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema"/>
</editor> </editor>
<editor id="postgresql.source.ddl" class="org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgreSourceViewEditor" <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" 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; ...@@ -20,8 +20,8 @@ import org.eclipse.jface.dialogs.IDialogConstants;
import org.jkiss.code.Nullable; import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.DBeaverUI; 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.PostgreDatabase;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreRole;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema; import org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema;
import org.jkiss.dbeaver.ext.postgresql.ui.PostgreCreateSchemaDialog; import org.jkiss.dbeaver.ext.postgresql.ui.PostgreCreateSchemaDialog;
import org.jkiss.dbeaver.model.DBPDataSource; import org.jkiss.dbeaver.model.DBPDataSource;
...@@ -34,6 +34,7 @@ import org.jkiss.dbeaver.model.impl.edit.SQLDatabasePersistAction; ...@@ -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.impl.sql.edit.SQLObjectEditor;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.ui.UITask; import org.jkiss.dbeaver.ui.UITask;
import java.util.List; import java.util.List;
...@@ -116,5 +117,18 @@ public class PostgreSchemaManager extends SQLObjectEditor<PostgreSchema, Postgre ...@@ -116,5 +117,18 @@ public class PostgreSchemaManager extends SQLObjectEditor<PostgreSchema, Postgre
processObjectRename(commandContext, schema, newName); 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; ...@@ -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.Association;
import org.jkiss.dbeaver.model.meta.Property; import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; 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.DBSDataType;
import org.jkiss.dbeaver.model.struct.DBSEntity; import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSEntityConstraintType; import org.jkiss.dbeaver.model.struct.DBSEntityConstraintType;
import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureContainer; import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureContainer;
import org.jkiss.dbeaver.model.struct.rdb.DBSSchema; import org.jkiss.dbeaver.model.struct.rdb.DBSSchema;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.sql.ResultSet; import java.sql.ResultSet;
...@@ -54,7 +56,7 @@ import java.util.stream.Collectors; ...@@ -54,7 +56,7 @@ import java.util.stream.Collectors;
/** /**
* PostgreSchema * 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); private static final Log log = Log.getLog(PostgreSchema.class);
...@@ -127,13 +129,17 @@ public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObj ...@@ -127,13 +129,17 @@ public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObj
return PostgreUtils.getObjectById(monitor, database.roleCache, database, ownerId); return PostgreUtils.getObjectById(monitor, database.roleCache, database, ownerId);
} }
@Property(viewable = true, order = 100) @Property(viewable = true, editable = true, updatable = true, order = 100)
@Nullable @Nullable
@Override @Override
public String getDescription() { public String getDescription() {
return description; return description;
} }
public void setDescription(String description) {
this.description = description;
}
@Override @Override
public PostgreDatabase getParentObject() public PostgreDatabase getParentObject()
{ {
...@@ -338,6 +344,28 @@ public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObj ...@@ -338,6 +344,28 @@ public class PostgreSchema implements DBSSchema, DBPNamedObject2, DBPSaveableObj
return PostgreConstants.CATALOG_SCHEMA_NAME.equals(name); 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> { class CollationCache extends JDBCObjectCache<PostgreSchema, PostgreCollation> {
@Override @Override
......
...@@ -17,9 +17,6 @@ ...@@ -17,9 +17,6 @@
package org.jkiss.dbeaver.ext.postgresql.ui.editors; 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.e4.core.services.events.IEventBroker;
import org.eclipse.jface.action.ControlContribution; import org.eclipse.jface.action.ControlContribution;
import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.IContributionManager;
...@@ -30,13 +27,9 @@ import org.eclipse.swt.widgets.Button; ...@@ -30,13 +27,9 @@ import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.jkiss.dbeaver.ext.postgresql.PostgreActivator; import org.jkiss.dbeaver.ext.postgresql.PostgreActivator;
import org.jkiss.dbeaver.ext.postgresql.PostgreConstants; import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.ext.postgresql.model.PostgrePermissionsOwner; import org.jkiss.dbeaver.ext.postgresql.model.*;
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.model.DBPScriptObject; import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
...@@ -46,6 +39,8 @@ import org.jkiss.dbeaver.utils.GeneralUtils; ...@@ -46,6 +39,8 @@ import org.jkiss.dbeaver.utils.GeneralUtils;
import org.osgi.service.event.Event; import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler; import org.osgi.service.event.EventHandler;
import java.util.Map;
/** /**
* PostgreSourceViewEditor * PostgreSourceViewEditor
*/ */
...@@ -98,7 +93,11 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject ...@@ -98,7 +93,11 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
@Override @Override
protected boolean isReadOnly() protected boolean isReadOnly()
{ {
return false; PostgreScriptObject sourceObject = getSourceObject();
if (sourceObject instanceof PostgreProcedure || sourceObject instanceof PostgreTrigger) {
return false;
}
return true;
} }
public boolean getShowPermissions() { public boolean getShowPermissions() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册