diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/META-INF/MANIFEST.MF b/plugins/org.jkiss.dbeaver.ext.exasol/META-INF/MANIFEST.MF index 541619bcb88d768192ce8a5e28ea9595fd9de035..de9f4c8671593d046295082d592a4cb633038776 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/META-INF/MANIFEST.MF +++ b/plugins/org.jkiss.dbeaver.ext.exasol/META-INF/MANIFEST.MF @@ -14,7 +14,8 @@ Require-Bundle: org.eclipse.ui, org.jkiss.dbeaver.core, org.eclipse.ui.workbench.texteditor, org.eclipse.ui.editors, - org.jkiss.dbeaver.ext.ui.locks + org.jkiss.dbeaver.ext.ui.locks, + org.eclipse.core.resources Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-Vendor: JKISS diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/plugin.properties b/plugins/org.jkiss.dbeaver.ext.exasol/plugin.properties index 1c1407feb72ad28733c1f4435b4bd69f5e85c0a1..5b93fea61346c3ab07ad0b75f052000f9dbd1b15 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/plugin.properties +++ b/plugins/org.jkiss.dbeaver.ext.exasol/plugin.properties @@ -239,3 +239,7 @@ tree.virtualschema.node.name = Virtual Schema tree.virtualschemaparameters.node.name = Virtual Schema Parameters tree.virtualschemas.node.name = Virtual Schemas tree.locks.node.name = Lock Manager + + +meta.org.jkiss.dbeaver.model.struct.rdb.DBSTableConstraintColumn.attribute.name=Column Name +meta.org.jkiss.dbeaver.model.struct.rdb.DBSTableConstraintColumn.ordinalPosition.name=Ordinal Position diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/plugin.xml b/plugins/org.jkiss.dbeaver.ext.exasol/plugin.xml index 26c2b06362341bdaa160d8781d92f1a7779f707e..45f59d3bc9ed2fb9572433cb54b010a31c2db43d 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ext.exasol/plugin.xml @@ -447,6 +447,10 @@ class="org.jkiss.dbeaver.ext.exasol.manager.ExasolConnectionManager" objectType="org.jkiss.dbeaver.ext.exasol.model.ExasolConnection"> + + implements DBSTableForeignKey,DBPScriptObject { +public class ExasolTableForeignKey extends JDBCTableConstraint implements DBSTableForeignKey,DBPScriptObject, DBPNamedObject2 { private ExasolTable refTable; - + private String constName; private Boolean enabled; private List columns; - + + private ExasolTableUniqueKey referencedKey; @@ -60,18 +62,22 @@ public class ExasolTableForeignKey extends JDBCTableConstraint impl String refSchemaName = JDBCUtils.safeGetString(dbResult, "REFERENCED_SCHEMA"); String refTableName = JDBCUtils.safeGetString(dbResult, "REFERENCED_TABLE"); - String constName = JDBCUtils.safeGetString(dbResult, "REF_PK_NAME"); + this.constName = JDBCUtils.safeGetString(dbResult, "CONSTRAINT_NAME"); + + String refConstName = JDBCUtils.safeGetString(dbResult, "REF_PK_NAME"); refTable = ExasolUtils.findTableBySchemaNameAndName(monitor, exasolTable.getDataSource(), refSchemaName, refTableName); enabled = JDBCUtils.safeGetBoolean(dbResult, "CONSTRAINT_ENABLED"); - referencedKey = refTable.getConstraint(monitor, constName); + referencedKey = refTable.getConstraint(monitor, refConstName); } - public ExasolTableForeignKey(ExasolTable exasolTable, ExasolTableUniqueKey referencedKey, Boolean enabled) { - super(exasolTable, null, null, DBSEntityConstraintType.FOREIGN_KEY, true); + public ExasolTableForeignKey(ExasolTable exasolTable, ExasolTableUniqueKey referencedKey, Boolean enabled, String name) { + super(exasolTable, name, "", DBSEntityConstraintType.FOREIGN_KEY, true); this.referencedKey = referencedKey; this.enabled = enabled; + this.constName = name; + this.refTable = referencedKey.getTable(); } @@ -160,6 +166,19 @@ public class ExasolTableForeignKey extends JDBCTableConstraint impl { return ExasolUtils.getFKDdl(this, monitor); } - + + @Override + @Property(viewable = true) + public String getName() + { + return this.constName; + } + + @Override + public void setName(String name) + { + this.constName = name; + } + } diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/tools/ExasolUtils.java b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/tools/ExasolUtils.java index 6f2c7dc1a549843adf190227bd916c78c669e9ed..05d2474561e7c74ca98e354a83af61ea950a7a00 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/tools/ExasolUtils.java +++ b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/tools/ExasolUtils.java @@ -21,6 +21,7 @@ import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ext.exasol.model.*; import org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession; +import org.jkiss.dbeaver.model.DBPEvaluationContext; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet; import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession; @@ -131,7 +132,7 @@ public class ExasolUtils { //get only first as there is only 1 primary key ExasolTableUniqueKey pk = null; pk = pks.iterator().next(); - ddlOutput.append(getPKDdl(pk, monitor)); + ddlOutput.append("\n" + getPKDdl(pk, monitor) + ";\n"); } //foreign key @@ -140,7 +141,7 @@ public class ExasolUtils { //look keys for (ExasolTableForeignKey fk : fks) { - ddlOutput.append(getFKDdl(fk, monitor)); + ddlOutput.append("\n" + getFKDdl(fk, monitor) + ";\n"); } } @@ -158,15 +159,25 @@ public class ExasolUtils { { ExasolTable exasolTable = fk.getTable(); ArrayList columns = new ArrayList(); + ArrayList refColumns = new ArrayList(); for (DBSEntityAttributeRef c : fk.getAttributeReferences(monitor)) { - columns.add("\"" + c.getAttribute().getName() + "\""); + columns.add(DBUtils.getQuotedIdentifier(c.getAttribute())); + } + + for (DBSEntityAttributeRef c : fk.getReferencedConstraint().getAttributeReferences(monitor)) + { + refColumns.add(DBUtils.getQuotedIdentifier(c.getAttribute())); } String fk_enabled = " DISABLE "; if (fk.getEnabled()) fk_enabled = " ENABLE "; - return "\nALTER TABLE \"" + exasolTable.getSchema().getName() + "\".\"" + exasolTable.getName() + "\" ADD CONSTRAINT " + fk.getName() + " FOREIGN KEY (" + CommonUtils.joinStrings(",", columns) + ") REFERENCES \"" + fk.getReferencedTable().getSchema().getName() + "\".\"" + fk.getReferencedTable().getName() + "\" " + fk_enabled + " ;\n"; + return "ALTER TABLE " + DBUtils.getObjectFullName(exasolTable, DBPEvaluationContext.DDL) + + " ADD CONSTRAINT " + DBUtils.getQuotedIdentifier(fk) + + " FOREIGN KEY (" + CommonUtils.joinStrings(",", columns) + + ") REFERENCES " + DBUtils.getObjectFullName(fk.getAssociatedEntity(), DBPEvaluationContext.DDL) + " (" + + CommonUtils.joinStrings(",", refColumns) + ")" + fk_enabled; } @@ -177,7 +188,7 @@ public class ExasolUtils { for (DBSEntityAttributeRef c : pk.getAttributeReferences(monitor)) { columns.add("\"" + c.getAttribute().getName() + "\""); } - return "\nALTER TABLE \"" + exasolTable.getSchema().getName() + "\".\"" + exasolTable.getName() + "\" ADD CONSTRAINT " + pk.getName() + " PRIMARY KEY (" + CommonUtils.joinStrings(",", columns) + ") " + (pk.getEnabled() ? " ENABLE " : " DISABLE ") + " ;\n"; + return "ALTER TABLE " + DBUtils.getObjectFullName(exasolTable, DBPEvaluationContext.DDL) + " ADD CONSTRAINT " + DBUtils.getQuotedIdentifier(pk) + " PRIMARY KEY (" + CommonUtils.joinStrings(",", columns) + ") " + (pk.getEnabled() ? " ENABLE " : " DISABLE "); } public static String getConnectionDdl(ExasolConnection con, DBRProgressMonitor monitor) throws DBException diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/ui/ExasolConnectionDialog.java b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/ui/ExasolConnectionDialog.java index e2a333bc21c42db8dcf73db8a8a8f91317226abf..1d041b3a1fe18c14b29481266fe8385f97070ba3 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/ui/ExasolConnectionDialog.java +++ b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/ui/ExasolConnectionDialog.java @@ -59,12 +59,10 @@ public class ExasolConnectionDialog extends BaseDialog { final Composite group = new Composite(composite, SWT.NONE); group.setLayout(new GridLayout(2, false)); - final Text nameText = UIUtils.createLabelText(group, "Schema Name", ""); + final Text nameText = UIUtils.createLabelText(group, "Connection Name", ""); final Text urlText = UIUtils.createLabelText(group,"Connection URL", ""); - - final Group configGroup = UIUtils.createControlGroup(group, "Credentials", 1, GridData.FILL_HORIZONTAL, 0); Button saveCred = UIUtils.createCheckbox(configGroup, "Provide Credentials", false); @@ -80,6 +78,7 @@ public class ExasolConnectionDialog extends BaseDialog { public void modifyText(ModifyEvent e) { name = nameText.getText(); user = userText.getText(); + url = urlText.getText(); password = passwordText.getText(); comment = commentText.getText(); getButton(IDialogConstants.OK_ID).setEnabled(!name.isEmpty()); diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/ui/ExasolCreateSchemaDialog.java b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/ui/ExasolCreateSchemaDialog.java index e48ac64d94cb2ae80be3d101da669f2621271b03..01e924c6469e66605d965fa459de4d770f794c6b 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/ui/ExasolCreateSchemaDialog.java +++ b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/ui/ExasolCreateSchemaDialog.java @@ -1,3 +1,21 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2016-2017 Karl Griesser (fullref@gmail.com) + * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.jkiss.dbeaver.ext.exasol.ui; import java.util.ArrayList; @@ -40,7 +58,6 @@ public class ExasolCreateSchemaDialog extends BaseDialog { this.datasource = datasource; } - @SuppressWarnings("unchecked") @Override protected Composite createDialogArea(Composite parent) { @@ -71,7 +88,6 @@ public class ExasolCreateSchemaDialog extends BaseDialog { @Override protected IStatus run(DBRProgressMonitor monitor) { try { - final List granteeNames = new ArrayList<>(); grantees = new ArrayList<>(datasource.getAllGrantees(monitor)); DBeaverUI.syncExec(new Runnable() {