提交 e79e20cb 编写于 作者: S SA357

PostgreSQL table does not show comment in DDL. #9387

Added OPTION_INCLUDE_COMMENTS, OPTION_INCLUDE_NESTED_OBJECTS, OPTION_INCLUDE_PERMISSIONS. Fixed bug: Postgres schema always showed it's description


Former-commit-id: f2518e1b
上级 6feb58f6
......@@ -41,9 +41,9 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
private static final String PROP_COLUMN_COMMENTS = "pg.source.editor.showColumnComments";
private static final String PROP_FULL_DDL = "pg.source.editor.showFullDDL";
private Boolean showPermissions;
private Boolean showColumnComments;
private Boolean showFullDDL;
// private Boolean showPermissions;
// private Boolean showColumnComments;
// private Boolean showFullDDL;
public PostgreSourceViewEditor() {
......@@ -59,26 +59,26 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
return true;
}
private boolean getShowPermissions() {
if (showPermissions == null) {
showPermissions = getPreferenceStore().getBoolean(PROP_SHOW_PERMISSIONS);
}
return showPermissions;
}
private Boolean getShowColumnComments() {
if (showColumnComments == null) {
showColumnComments = getPreferenceStore().getBoolean(PROP_COLUMN_COMMENTS);
}
return showColumnComments;
}
private Boolean getShowFullDDL() {
if (showFullDDL == null) {
showFullDDL = getPreferenceStore().getBoolean(PROP_FULL_DDL);
}
return showFullDDL;
}
// private boolean getShowPermissions() {
// if (showPermissions == null) {
// showPermissions = getPreferenceStore().getBoolean(PROP_SHOW_PERMISSIONS);
// }
// return showPermissions;
// }
//
// private Boolean getShowColumnComments() {
// if (showColumnComments == null) {
// showColumnComments = getPreferenceStore().getBoolean(PROP_COLUMN_COMMENTS);
// }
// return showColumnComments;
// }
//
// private Boolean getShowFullDDL() {
// if (showFullDDL == null) {
// showFullDDL = getPreferenceStore().getBoolean(PROP_FULL_DDL);
// }
// return showFullDDL;
// }
@Override
protected boolean isAnnotationRulerVisible() {
......@@ -96,22 +96,6 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
{
super.contributeEditorCommands(contributionManager);
PostgreScriptObject sourceObject = getSourceObject();
if (sourceObject instanceof PostgreSchema) {
contributionManager.add(ActionUtils.makeActionContribution(
new Action("Show full DDL", Action.AS_CHECK_BOX) {
{
setImageDescriptor(DBeaverIcons.getImageDescriptor(DBIcon.TREE_TABLE_EXTERNAL));
setToolTipText("Show DDL for all schema objects");
setChecked(getShowFullDDL());
}
@Override
public void run() {
showFullDDL = isChecked();
getPreferenceStore().setValue(PROP_FULL_DDL, showFullDDL);
refreshPart(PostgreSourceViewEditor.this, true);
}
}, true));
}
if (sourceObject instanceof PostgreProcedure) {
contributionManager.add(new Separator());
......@@ -129,38 +113,6 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
}
}, true));
}
if (sourceObject instanceof PostgrePrivilegeOwner) {
contributionManager.add(ActionUtils.makeActionContribution(
new Action("Show permissions", Action.AS_CHECK_BOX) {
{
setImageDescriptor(DBeaverIcons.getImageDescriptor(DBIcon.TREE_PERMISSIONS));
setToolTipText("Shows object permission grants");
setChecked(getShowPermissions());
}
@Override
public void run() {
showPermissions = isChecked();
getPreferenceStore().setValue(PROP_SHOW_PERMISSIONS, showPermissions);
refreshPart(PostgreSourceViewEditor.this, true);
}
}, true));
}
if (sourceObject instanceof PostgreTableBase || sourceObject instanceof PostgreSchema) {
contributionManager.add(ActionUtils.makeActionContribution(
new Action("Show comments", Action.AS_CHECK_BOX) {
{
setImageDescriptor(DBeaverIcons.getImageDescriptor(DBIcon.TYPE_TEXT));
setToolTipText("Show column comments in table definition");
setChecked(getShowColumnComments());
}
@Override
public void run() {
showColumnComments = isChecked();
getPreferenceStore().setValue(PROP_COLUMN_COMMENTS, showPermissions);
refreshPart(PostgreSourceViewEditor.this, true);
}
}, true));
}
}
@Override
......@@ -168,9 +120,10 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
Map<String, Object> options = super.getSourceOptions();
boolean inDebug = isInDebugMode();
options.put(DBPScriptObject.OPTION_DEBUGGER_SOURCE, inDebug);
options.put(PostgreConstants.OPTION_DDL_SHOW_PERMISSIONS, getShowPermissions());
options.put(PostgreConstants.OPTION_DDL_SHOW_COLUMN_COMMENTS, getShowColumnComments());
options.put(PostgreConstants.OPTION_DDL_SHOW_FULL, getShowFullDDL());
options.put(DBPScriptObject.OPTION_INCLUDE_NESTED_OBJECTS, getShowFullDDL());
options.put(DBPScriptObject.OPTION_INCLUDE_COMMENTS, getShowColumnComments());
options.put(DBPScriptObject.OPTION_INCLUDE_PERMISSIONS, getShowPermissions());
return options;
}
......
......@@ -53,10 +53,6 @@ public class PostgreConstants {
public static final String PROP_SSL_PROXY = "sslProxyServer";
public static final String PROP_SERVER_TYPE = "serverType";
public static final String OPTION_DDL_SHOW_PERMISSIONS = "pg.ddl.show.permissions";
public static final String OPTION_DDL_SHOW_COLUMN_COMMENTS = "pg.ddl.show.column.comments";
public static final String OPTION_DDL_SHOW_FULL = "pg.ddl.show.full";
public static final DBSObjectState STATE_UNAVAILABLE = new DBSObjectState("Unavailable", DBIcon.OVER_EXTERNAL);
public static final DBSEntityConstraintType CONSTRAINT_TRIGGER = new DBSEntityConstraintType("trigger", "TRIGGER", "Trigger constraint", false, false, false, false); //$NON-NLS-1$
public static final DBSEntityConstraintType CONSTRAINT_EXCLUSIVE = new DBSEntityConstraintType("exclusive", "EXCLUSIVE", "Exclusive constraint", false, false, false, false); //$NON-NLS-1$
......
......@@ -30,6 +30,7 @@ import org.jkiss.dbeaver.ext.postgresql.model.impls.PostgreServerType;
import org.jkiss.dbeaver.ext.postgresql.model.impls.PostgreServerTypeRegistry;
import org.jkiss.dbeaver.model.DBPDataKind;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.edit.DBEPersistAction;
......@@ -612,7 +613,7 @@ public class PostgreUtils {
}
public static void getObjectGrantPermissionActions(DBRProgressMonitor monitor, PostgrePrivilegeOwner object, List<DBEPersistAction> actions, Map<String, Object> options) throws DBException {
if (object.isPersisted() && CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_PERMISSIONS)) {
if (object.isPersisted() && CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_PERMISSIONS)) {
DBCExecutionContext executionContext = DBUtils.getDefaultContext(object, true);
actions.add(new SQLDatabasePersistActionComment(object.getDataSource(), "Permissions"));
......
......@@ -21,9 +21,7 @@ import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
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.*;
import org.jkiss.dbeaver.model.edit.DBECommandContext;
import org.jkiss.dbeaver.model.edit.DBEObjectRenamer;
import org.jkiss.dbeaver.model.edit.DBEPersistAction;
......@@ -46,7 +44,8 @@ import java.util.Map;
/**
* Postgre table column manager
*/
public class PostgreTableColumnManager extends SQLTableColumnManager<PostgreTableColumn, PostgreTableBase> implements DBEObjectRenamer<PostgreTableColumn> {
public class PostgreTableColumnManager extends SQLTableColumnManager<PostgreTableColumn, PostgreTableBase>
implements DBEObjectRenamer<PostgreTableColumn>, DBPScriptObjectExt2 {
protected final ColumnModifier<PostgreTableColumn> PostgreDataTypeModifier = (monitor, column, sql, command) -> {
sql.append(' ');
......@@ -169,7 +168,7 @@ public class PostgreTableColumnManager extends SQLTableColumnManager<PostgreTabl
protected ColumnModifier[] getSupportedModifiers(PostgreTableColumn column, Map<String, Object> options)
{
ColumnModifier[] modifiers = {PostgreDataTypeModifier, NullNotNullModifier, PostgreDefaultModifier, PostgreIdentityModifier, PostgreCollateModifier};
if (CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_COLUMN_COMMENTS)) {
if (CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_COMMENTS)) {
modifiers = ArrayUtils.add(ColumnModifier.class, modifiers, PostgreCommentModifier);
}
return modifiers;
......@@ -274,4 +273,8 @@ public class PostgreTableColumnManager extends SQLTableColumnManager<PostgreTabl
DBUtils.getQuotedIdentifier(column.getDataSource(), command.getNewName())));
}
@Override
public boolean supportsObjectDefinitionOption(String option) {
return DBPScriptObject.OPTION_INCLUDE_COMMENTS.equals(option);
}
}
......@@ -43,6 +43,7 @@ import java.util.Map;
*/
public abstract class PostgreTableManagerBase extends SQLTableManager<PostgreTableBase, PostgreSchema> {
@Override
protected void addObjectExtraActions(DBRProgressMonitor monitor, DBCExecutionContext executionContext, List<DBEPersistAction> actions, NestedObjectCommand<PostgreTableBase, PropertyHandler> command, Map<String, Object> options) {
boolean isDDL = CommonUtils.getOption(options, DBPScriptObject.OPTION_DDL_SOURCE);
PostgreTableBase table = command.getObject();
......@@ -55,7 +56,7 @@ public abstract class PostgreTableManagerBase extends SQLTableManager<PostgreTab
comment = table.getDescription();
}
boolean showComments =
CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_COLUMN_COMMENTS) ||
CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_COMMENTS) ||
CommonUtils.getOption(options, DBPScriptObject.OPTION_OBJECT_SAVE);
if (showComments && !CommonUtils.isEmpty(comment)) {
actions.add(new SQLDatabasePersistAction(
......
......@@ -47,7 +47,8 @@ import java.util.*;
/**
* PostgreProcedure
*/
public class PostgreProcedure extends AbstractProcedure<PostgreDataSource, PostgreSchema> implements PostgreObject, PostgreScriptObject, PostgrePrivilegeOwner, DBPUniqueObject, DBPOverloadedObject, DBPNamedObject2, DBPRefreshableObject
public class PostgreProcedure extends AbstractProcedure<PostgreDataSource, PostgreSchema>
implements PostgreObject, PostgreScriptObject, PostgrePrivilegeOwner, DBPUniqueObject, DBPOverloadedObject, DBPNamedObject2, DBPRefreshableObject, DBPScriptObjectExt2
{
private static final Log log = Log.getLog(PostgreProcedure.class);
......@@ -409,11 +410,11 @@ public class PostgreProcedure extends AbstractProcedure<PostgreDataSource, Postg
if (this.isPersisted() && !omitHeader) {
procDDL += ";\n";
if (CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_COLUMN_COMMENTS) && !CommonUtils.isEmpty(getDescription())) {
if (CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_COMMENTS) && !CommonUtils.isEmpty(getDescription())) {
procDDL += "\nCOMMENT ON FUNCTION " + getFullQualifiedSignature() + " IS " + SQLUtils.quoteString(this, getDescription()) + ";\n";
}
if (CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_PERMISSIONS)) {
if (CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_PERMISSIONS)) {
List<DBEPersistAction> actions = new ArrayList<>();
PostgreUtils.getObjectGrantPermissionActions(monitor, this, actions, options);
procDDL += "\n" + SQLUtils.generateScript(getDataSource(), actions.toArray(new DBEPersistAction[0]), false);
......@@ -664,6 +665,11 @@ public class PostgreProcedure extends AbstractProcedure<PostgreDataSource, Postg
return PostgreDependency.readDependencies(monitor, this, true);
}
@Override
public boolean supportsObjectDefinitionOption(String option) {
return DBPScriptObject.OPTION_INCLUDE_COMMENTS.equals(option) || DBPScriptObject.OPTION_INCLUDE_PERMISSIONS.equals(option);
}
@Override
public String toString() {
return overloadedName == null ? name : overloadedName;
......
......@@ -16,6 +16,7 @@
*/
package org.jkiss.dbeaver.ext.postgresql.model;
import org.h2.util.Utils;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
......@@ -68,7 +69,8 @@ public class PostgreSchema implements
DBPObjectStatisticsCollector,
PostgreObject,
PostgreScriptObject,
PostgrePrivilegeOwner
PostgrePrivilegeOwner,
DBPScriptObjectExt2
{
private static final Log log = Log.getLog(PostgreSchema.class);
......@@ -396,13 +398,13 @@ public class PostgreSchema implements
sql.append(" AUTHORIZATION ").append(DBUtils.getQuotedIdentifier(owner));
}
sql.append(";\n");
if (!CommonUtils.isEmpty(getDescription())) {
if (!CommonUtils.isEmpty(getDescription()) && CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_COMMENTS)) {
sql.append("\nCOMMENT ON SCHEMA ").append(DBUtils.getQuotedIdentifier(this))
.append(" IS ").append(SQLUtils.quoteString(this, getDescription()));
sql.append(";\n");
}
if (CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_FULL)) {
if (CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_NESTED_OBJECTS)) {
// Show DDL for all schema objects (do not include CREATE EXTENSION)
monitor.beginTask("Cache schema", 1);
cacheStructure(monitor, DBSObjectContainer.STRUCT_ALL);
......@@ -512,6 +514,12 @@ public class PostgreSchema implements
}
}
@Override
public boolean supportsObjectDefinitionOption(String option) {
return DBPScriptObject.OPTION_INCLUDE_PERMISSIONS.equals(option) || DBPScriptObject.OPTION_INCLUDE_COMMENTS.equals(option)
|| DBPScriptObject.OPTION_INCLUDE_NESTED_OBJECTS.equals(option);
}
class ExtensionCache extends JDBCObjectCache<PostgreSchema, PostgreExtension> {
@NotNull
......
......@@ -190,10 +190,10 @@ public abstract class PostgreTable extends PostgreTableReal implements PostgreTa
@Override
public String getObjectDefinitionText(DBRProgressMonitor monitor, Map<String, Object> options) throws DBException {
if (!CommonUtils.getBoolean(options.get(OPTION_SCRIPT_FORMAT_COMPACT), true)) {
options.put(DBPScriptObject.OPTION_DDL_SOURCE, true);
options.put(PostgreConstants.OPTION_DDL_SHOW_COLUMN_COMMENTS, true);
}
// if (!CommonUtils.getBoolean(options.get(OPTION_SCRIPT_FORMAT_COMPACT), true)) {
// options.put(DBPScriptObject.OPTION_DDL_SOURCE, true);
// options.put(PostgreConstants.OPTION_DDL_SHOW_COLUMN_COMMENTS, true);
// }
return DBStructUtils.generateTableDDL(monitor, this, options, false);
}
......
......@@ -20,10 +20,7 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPNamedObject2;
import org.jkiss.dbeaver.model.DBPScriptObjectExt2;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCStructCache;
......@@ -284,7 +281,8 @@ public abstract class PostgreTableBase extends JDBCTable<PostgreDataSource, Post
@Override
public boolean supportsObjectDefinitionOption(String option) {
return OPTION_DDL_ONLY_FOREIGN_KEYS.equals(option) || OPTION_DDL_SKIP_FOREIGN_KEYS.equals(option);
return DBPScriptObject.OPTION_DDL_ONLY_FOREIGN_KEYS.equals(option) || DBPScriptObject.OPTION_DDL_SKIP_FOREIGN_KEYS.equals(option)
|| DBPScriptObject.OPTION_INCLUDE_PERMISSIONS.equals(option) || DBPScriptObject.OPTION_INCLUDE_COMMENTS.equals(option);
}
public static class TablespaceListProvider implements IPropertyValueListProvider<PostgreTableBase> {
......
......@@ -22,10 +22,7 @@ import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPQualifiedObject;
import org.jkiss.dbeaver.model.DBPStatefulObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
......@@ -50,7 +47,7 @@ import java.util.Map;
/**
* PostgreTrigger
*/
public class PostgreTrigger implements DBSTrigger, DBSEntityElement, DBPQualifiedObject, PostgreObject, PostgreScriptObject, DBPStatefulObject
public class PostgreTrigger implements DBSTrigger, DBSEntityElement, DBPQualifiedObject, PostgreObject, PostgreScriptObject, DBPStatefulObject, DBPScriptObjectExt2
{
private static final Log log = Log.getLog(PostgreTrigger.class);
......@@ -280,7 +277,7 @@ public class PostgreTrigger implements DBSTrigger, DBSEntityElement, DBPQualifie
throw new DBException(e, getDataSource());
}
if (!CommonUtils.isEmpty(getDescription()) && CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_COLUMN_COMMENTS)) {
if (!CommonUtils.isEmpty(getDescription()) && CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_COMMENTS)) {
ddl.append("\n").append("\nCOMMENT ON TRIGGER ").append(DBUtils.getQuotedIdentifier(this))
.append(" ON ").append(getTable().getFullyQualifiedName(DBPEvaluationContext.DDL))
.append(" IS ")
......@@ -324,6 +321,11 @@ public class PostgreTrigger implements DBSTrigger, DBSEntityElement, DBPQualifie
}
@Override
public boolean supportsObjectDefinitionOption(String option) {
return DBPScriptObject.OPTION_INCLUDE_COMMENTS.equals(option);
}
@Override
public String toString() {
return getFullyQualifiedName(DBPEvaluationContext.UI);
......
......@@ -22,6 +22,7 @@ import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
import org.jkiss.dbeaver.ext.postgresql.edit.PostgreTableColumnManager;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.edit.DBEPersistAction;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
......@@ -112,7 +113,7 @@ public abstract class PostgreViewBase extends PostgreTableReal implements DBSVie
}
List<DBEPersistAction> actions = new ArrayList<>();
if (CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_COLUMN_COMMENTS)) {
if (CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_COMMENTS)) {
if (getDescription() != null) {
actions.add(
new SQLDatabasePersistAction("Comment",
......@@ -126,7 +127,7 @@ public abstract class PostgreViewBase extends PostgreTableReal implements DBSVie
}
}
if (isPersisted() && CommonUtils.getOption(options, PostgreConstants.OPTION_DDL_SHOW_PERMISSIONS)) {
if (isPersisted() && CommonUtils.getOption(options, DBPScriptObject.OPTION_INCLUDE_PERMISSIONS)) {
PostgreUtils.getObjectGrantPermissionActions(monitor, this, actions, options);
}
......
......@@ -33,6 +33,10 @@ public abstract class SQLGenerator<OBJECT> extends DBRRunnableWithResult<String>
protected List<OBJECT> objects;
private boolean fullyQualifiedNames = true;
private boolean compactSQL = false;
private boolean showComments = true;
private boolean showPermissions = false;
private boolean showFullDdl = false;
private Map<String, Object> generatorOptions = new LinkedHashMap<>();
public void initGenerator(List<OBJECT> objects) {
......@@ -59,6 +63,31 @@ public abstract class SQLGenerator<OBJECT> extends DBRRunnableWithResult<String>
this.compactSQL = compactSQL;
}
public boolean isShowComments() {
return showComments;
}
public void setShowComments(boolean showComments) {
this.showComments = showComments;
}
public boolean isIncludePermissions() {
return showPermissions;
}
public void setShowPermissions(boolean showPermissions) {
this.showPermissions = showPermissions;
}
public boolean isShowFullDdl() {
return showFullDdl;
}
public void setShowFullDdl(boolean showFullDdl) {
this.showFullDdl = showFullDdl;
}
public Object getGeneratorOption(String name) {
return generatorOptions.get(name);
}
......@@ -84,8 +113,12 @@ public abstract class SQLGenerator<OBJECT> extends DBRRunnableWithResult<String>
}
protected void addOptions(Map<String, Object> options) {
options.put(DBPScriptObject.OPTION_DDL_SOURCE, true);
options.put(DBPScriptObject.OPTION_FULLY_QUALIFIED_NAMES, isFullyQualifiedNames());
options.put(DBPScriptObject.OPTION_SCRIPT_FORMAT_COMPACT, isCompactSQL());
options.put(DBPScriptObject.OPTION_INCLUDE_PERMISSIONS, isIncludePermissions());
options.put(DBPScriptObject.OPTION_INCLUDE_COMMENTS, isShowComments());
options.put(DBPScriptObject.OPTION_INCLUDE_NESTED_OBJECTS, isShowFullDdl());
options.putAll(generatorOptions);
}
......
......@@ -55,6 +55,10 @@ public interface DBPScriptObject extends DBPObject {
String OPTION_DDL_SKIP_FOREIGN_KEYS = "ddl.skipForeignKeys"; //$NON-NLS-1$
String OPTION_DDL_ONLY_FOREIGN_KEYS = "ddl.onlyForeignKeys"; //$NON-NLS-1$
String OPTION_INCLUDE_NESTED_OBJECTS = "ddl.includeNestedObjects"; //$NON-NLS-1$
String OPTION_INCLUDE_COMMENTS = "ddl.includeComments"; //$NON-NLS-1$
String OPTION_INCLUDE_PERMISSIONS = "ddl.includePermissions"; //$NON-NLS-1$
Map<String, Object> EMPTY_OPTIONS = Collections.unmodifiableMap(new HashMap<>());
String getObjectDefinitionText(DBRProgressMonitor monitor, Map<String, Object> options)
......
......@@ -17,7 +17,7 @@
package org.jkiss.dbeaver.model;
/**
* Can check whether objet support an option or not
* Can check whether object support an option or not
*/
public interface DBPScriptObjectExt2 extends DBPObject {
......
......@@ -25,12 +25,10 @@ import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorInput;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.ui.ActionUtils;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.UIUtils;
......@@ -47,6 +45,10 @@ import java.util.Map;
*/
public class SQLSourceViewer<T extends DBPScriptObject & DBSObject> extends SQLEditorNested<T> {
protected Boolean showPermissions;
protected Boolean showColumnComments;
protected Boolean showFullDDL;
private IAction OPEN_CONSOLE_ACTION = new Action("Open in SQL console", DBeaverIcons.getImageDescriptor(UIIcon.SQL_CONSOLE)) {
@Override
public void run()
......@@ -115,6 +117,82 @@ public class SQLSourceViewer<T extends DBPScriptObject & DBSObject> extends SQLE
super.contributeEditorCommands(toolBarManager);
toolBarManager.add(new Separator());
toolBarManager.add(OPEN_CONSOLE_ACTION);
T genObject = getSourceObject();
if (genObject instanceof DBPScriptObjectExt2) {
DBPScriptObjectExt2 sourceObject = (DBPScriptObjectExt2) genObject;
if (sourceObject.supportsObjectDefinitionOption(DBPScriptObject.OPTION_INCLUDE_NESTED_OBJECTS)) {
toolBarManager.add(ActionUtils.makeActionContribution(
new Action("Show full DDL", Action.AS_CHECK_BOX) {
{
setImageDescriptor(DBeaverIcons.getImageDescriptor(DBIcon.TREE_TABLE_EXTERNAL));
setToolTipText("Show DDL for all schema objects");
setChecked(getShowFullDDL());
}
@Override
public void run() {
showFullDDL = isChecked();
getPreferenceStore().setValue(DBPScriptObject.OPTION_INCLUDE_NESTED_OBJECTS, showFullDDL);
refreshPart(SQLSourceViewer.this, true);
}
}, true));
}
if (sourceObject.supportsObjectDefinitionOption(DBPScriptObject.OPTION_INCLUDE_PERMISSIONS)) {
toolBarManager.add(ActionUtils.makeActionContribution(
new Action("Show permissions", Action.AS_CHECK_BOX) {
{
setImageDescriptor(DBeaverIcons.getImageDescriptor(DBIcon.TREE_PERMISSIONS));
setToolTipText("Shows object permission grants");
setChecked(getShowPermissions());
}
@Override
public void run() {
showPermissions = isChecked();
getPreferenceStore().setValue(DBPScriptObject.OPTION_INCLUDE_PERMISSIONS, showPermissions);
refreshPart(SQLSourceViewer.this, true);
}
}, true));
}
if (sourceObject.supportsObjectDefinitionOption(DBPScriptObject.OPTION_INCLUDE_COMMENTS)) {
toolBarManager.add(ActionUtils.makeActionContribution(
new Action("Show comments", Action.AS_CHECK_BOX) {
{
setImageDescriptor(DBeaverIcons.getImageDescriptor(DBIcon.TYPE_TEXT));
setToolTipText("Show column comments in table definition");
setChecked(getShowColumnComments());
}
@Override
public void run() {
showColumnComments = isChecked();
getPreferenceStore().setValue(DBPScriptObject.OPTION_INCLUDE_COMMENTS, showColumnComments);
refreshPart(SQLSourceViewer.this, true);
}
}, true));
}
}
}
protected boolean getShowPermissions() {
if (showPermissions == null) {
showPermissions = getPreferenceStore().getBoolean(DBPScriptObject.OPTION_INCLUDE_PERMISSIONS);
}
return showPermissions;
}
protected Boolean getShowColumnComments() {
if (showColumnComments == null) {
showColumnComments = getPreferenceStore().getBoolean(DBPScriptObject.OPTION_INCLUDE_COMMENTS);
}
return showColumnComments;
}
protected Boolean getShowFullDDL() {
if (showFullDDL == null) {
showFullDDL = getPreferenceStore().getBoolean(DBPScriptObject.OPTION_INCLUDE_NESTED_OBJECTS);
}
return showFullDDL;
}
}
......@@ -24,6 +24,7 @@ import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbenchPartSite;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.sql.generator.SQLGenerator;
import org.jkiss.dbeaver.ui.UIUtils;
......@@ -52,6 +53,15 @@ class SQLGeneratorDialog extends ViewSQLDialog {
sqlGenerator.setCompactSQL(
getDialogBoundsSettings().get(PROP_USE_COMPACT_SQL) != null &&
getDialogBoundsSettings().getBoolean(PROP_USE_COMPACT_SQL));
sqlGenerator.setShowPermissions(
getDialogBoundsSettings().get(DBPScriptObject.OPTION_INCLUDE_PERMISSIONS) != null &&
getDialogBoundsSettings().getBoolean(DBPScriptObject.OPTION_INCLUDE_PERMISSIONS));
sqlGenerator.setShowComments(
getDialogBoundsSettings().get(DBPScriptObject.OPTION_INCLUDE_COMMENTS) != null &&
getDialogBoundsSettings().getBoolean(DBPScriptObject.OPTION_INCLUDE_COMMENTS));
sqlGenerator.setShowFullDdl(
getDialogBoundsSettings().get(DBPScriptObject.OPTION_INCLUDE_NESTED_OBJECTS) != null &&
getDialogBoundsSettings().getBoolean(DBPScriptObject.OPTION_INCLUDE_NESTED_OBJECTS));
UIUtils.runInUI(sqlGenerator);
Object sql = sqlGenerator.getResult();
if (sql != null) {
......@@ -59,8 +69,7 @@ class SQLGeneratorDialog extends ViewSQLDialog {
}
Composite composite = super.createDialogArea(parent);
Group settings = UIUtils.createControlGroup(composite, "Settings", 2, GridData.FILL_HORIZONTAL, SWT.DEFAULT);
Group settings = UIUtils.createControlGroup(composite, "Settings", 5, GridData.FILL_HORIZONTAL, SWT.DEFAULT);
Button useFQNames = UIUtils.createCheckbox(settings, "Use fully qualified names", sqlGenerator.isFullyQualifiedNames());
useFQNames.addSelectionListener(new SelectionAdapter() {
@Override
......@@ -91,7 +100,51 @@ class SQLGeneratorDialog extends ViewSQLDialog {
}
}
});
Button useShowComments = UIUtils.createCheckbox(settings, "Show comments", sqlGenerator.isShowComments());
useShowComments.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
sqlGenerator.setShowComments(useShowComments.getSelection());
getDialogBoundsSettings().put(DBPScriptObject.OPTION_INCLUDE_COMMENTS, useShowComments.getSelection());
UIUtils.runInUI(sqlGenerator);
Object sql = sqlGenerator.getResult();
if (sql != null) {
setSQLText(CommonUtils.toString(sql));
updateSQL();
}
}
});
Button useShowPermissions = UIUtils.createCheckbox(settings, "Show permissions", sqlGenerator.isIncludePermissions());
useShowPermissions.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
sqlGenerator.setShowPermissions(useShowPermissions.getSelection());
getDialogBoundsSettings().put(DBPScriptObject.OPTION_INCLUDE_PERMISSIONS, useShowPermissions.getSelection());
UIUtils.runInUI(sqlGenerator);
Object sql = sqlGenerator.getResult();
if (sql != null) {
setSQLText(CommonUtils.toString(sql));
updateSQL();
}
}
});
Button useShowFullDdl = UIUtils.createCheckbox(settings, "Show full DDL", sqlGenerator.isShowFullDdl());
useShowFullDdl.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
sqlGenerator.setShowFullDdl(useShowFullDdl.getSelection());
getDialogBoundsSettings().put(DBPScriptObject.OPTION_INCLUDE_COMMENTS, useShowFullDdl.getSelection());
UIUtils.runInUI(sqlGenerator);
Object sql = sqlGenerator.getResult();
if (sql != null) {
setSQLText(CommonUtils.toString(sql));
updateSQL();
}
}
});
return composite;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册