From 05d9391536ec8922f2d942d5b2ff0f9dd6e48c25 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Thu, 14 Apr 2016 22:26:49 +0300 Subject: [PATCH] Unique index creation --- .../dbeaver/ui/dialogs/struct/EditIndexDialog.java | 13 +++++++++++++ .../dbeaver/ext/db2/manager/DB2IndexManager.java | 7 ++++++- .../org/jkiss/dbeaver/ext/db2/model/DB2Index.java | 5 +++-- .../ext/generic/edit/GenericIndexManager.java | 2 +- .../dbeaver/ext/mysql/edit/MySQLIndexManager.java | 2 +- .../dbeaver/ext/oracle/edit/OracleIndexManager.java | 2 +- .../ext/postgresql/edit/PostgreIndexManager.java | 3 ++- .../dbeaver/ext/postgresql/model/PostgreIndex.java | 3 ++- .../model/impl/sql/edit/struct/SQLIndexManager.java | 7 +++++-- 9 files changed, 34 insertions(+), 10 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/struct/EditIndexDialog.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/struct/EditIndexDialog.java index 98d2048c9e..e2a306412e 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/struct/EditIndexDialog.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/struct/EditIndexDialog.java @@ -23,6 +23,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; @@ -45,6 +46,7 @@ public class EditIndexDialog extends AttributesSelectorDialog { private List indexTypes; private DBSIndexType selectedIndexType; + private boolean unique; public EditIndexDialog( Shell shell, @@ -78,6 +80,14 @@ public class EditIndexDialog extends AttributesSelectorDialog { selectedIndexType = indexTypes.get(typeCombo.getSelectionIndex()); } }); + + final Button uniqueButton = UIUtils.createLabelCheckbox(panel, "Unique", false); + uniqueButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + unique = uniqueButton.getSelection(); + } + }); } public DBSIndexType getIndexType() @@ -85,4 +95,7 @@ public class EditIndexDialog extends AttributesSelectorDialog { return selectedIndexType; } + public boolean isUnique() { + return unique; + } } diff --git a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/manager/DB2IndexManager.java b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/manager/DB2IndexManager.java index 68dec50298..e51e113db1 100644 --- a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/manager/DB2IndexManager.java +++ b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/manager/DB2IndexManager.java @@ -27,6 +27,7 @@ import org.jkiss.dbeaver.ext.db2.model.DB2IndexColumn; import org.jkiss.dbeaver.ext.db2.model.DB2TableBase; import org.jkiss.dbeaver.ext.db2.model.DB2TableColumn; import org.jkiss.dbeaver.ext.db2.model.dict.DB2IndexType; +import org.jkiss.dbeaver.ext.db2.model.dict.DB2UniqueRule; import org.jkiss.dbeaver.model.edit.DBECommandContext; import org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer; import org.jkiss.dbeaver.model.impl.DBSObjectCache; @@ -89,7 +90,11 @@ public class DB2IndexManager extends SQLIndexManager { String indexBaseName = String.format(CONS_IX_NAME, tableName, colName); String indexName = DBObjectNameCaseTransformer.transformName(db2Table.getDataSource(), indexBaseName); - DB2Index index = new DB2Index(db2Table, indexName, editDialog.getIndexType()); + DB2Index index = new DB2Index( + db2Table, + indexName, + editDialog.getIndexType(), + editDialog.isUnique() ? DB2UniqueRule.U : DB2UniqueRule.D); int colIndex = 1; for (DBSEntityAttribute tableColumn : editDialog.getSelectedAttributes()) { diff --git a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2Index.java b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2Index.java index 68cde29464..4ca4a062be 100644 --- a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2Index.java +++ b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2Index.java @@ -113,12 +113,13 @@ public class DB2Index extends JDBCTableIndex { // DF: Could have been done in constructor. More "readable" to do it here this.db2IndexType = CommonUtils.valueOf(DB2IndexType.class, JDBCUtils.safeGetStringTrimmed(dbResult, "INDEXTYPE")); - this.indexType = db2IndexType.getDBSIndexType(); + this.indexType = db2IndexType == null ? DBSIndexType.UNKNOWN : db2IndexType.getDBSIndexType(); } - public DB2Index(DB2TableBase db2Table, String indexName, DBSIndexType indexType) + public DB2Index(DB2TableBase db2Table, String indexName, DBSIndexType indexType, DB2UniqueRule uniqueRule) { super(db2Table.getSchema(), db2Table, indexName, indexType, false); + this.uniqueRule = uniqueRule; } // ----------------- diff --git a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/edit/GenericIndexManager.java b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/edit/GenericIndexManager.java index 1817910c11..dbd98c2fa8 100644 --- a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/edit/GenericIndexManager.java +++ b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/edit/GenericIndexManager.java @@ -64,7 +64,7 @@ public class GenericIndexManager extends SQLIndexManager