diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/plugin.xml b/plugins/org.jkiss.dbeaver.ext.exasol/plugin.xml index c96bbdf93061cc9802ad506016d7e5f76ac551e4..63be7537f9e5446b59d6aec1e07f65d25c3767da 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ext.exasol/plugin.xml @@ -157,8 +157,12 @@ - + + type="org.jkiss.dbeaver.ext.exasol.model.ExasolConnection"> ( - ExasolConnection.class, "SELECT * FROM EXA_DBA_CONNECTIONS ORDER BY CONNECTION_NAME"); + ExasolConnection.class, "SELECT * FROM SYS.EXA_DBA_CONNECTIONS ORDER BY CONNECTION_NAME"); + } else { + this.connectionCache = new JDBCObjectSimpleCache<>( + ExasolConnection.class, "SELECT * FROM SYS.EXA_SESSION_CONNECTIONS ORDER BY CONNECTION_NAME"); } if (exasolCurrentUserPrivileges.getUserIsAuthorizedForConnectionPrivs()) @@ -671,6 +674,11 @@ public class ExasolDataSource extends JDBCDataSource return this.exasolCurrentUserPrivileges.getUserIsAuthorizedForRolePrivs(); } + public boolean isUserAuthorizedForSessions() + { + return this.exasolCurrentUserPrivileges.isUserAuthorizedForSessions(); + } + public boolean isatLeastV6() { return this.exasolCurrentUserPrivileges.getatLeastV6(); @@ -796,5 +804,10 @@ public class ExasolDataSource extends JDBCDataSource { return dataTypeCache; } + + public ExasolCurrentUserPrivileges getUserPriviliges() + { + return exasolCurrentUserPrivileges; + } } diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolStructureAssistant.java b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolStructureAssistant.java index df80cbb69b5599748c88df7ce9638f7d8512b5c5..dc050c14ee4546d65bc86f56756020bd5304c240 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolStructureAssistant.java +++ b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolStructureAssistant.java @@ -224,7 +224,9 @@ public class ExasolStructureAssistant implements DBSStructureAssistant { if (schema != null) { sql = String.format(SQL_COLS_SCHEMA, ExasolUtils.quoteString(schema.getName()), ExasolUtils.quoteString(searchObjectNameMask)); } else { - sql = String.format(SQL_COLS_ALL, ExasolUtils.quoteString(searchObjectNameMask)); + // sql = String.format(SQL_COLS_ALL, ExasolUtils.quoteString(searchObjectNameMask)); + // search for columns is to slow in exasol + return; } diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolTableForeignKey.java b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolTableForeignKey.java index c74b113cf73c10894a6b7d4e66472af82e50c261..fb26b0c6f5d20e63075c00f985f4d492d3360f1d 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolTableForeignKey.java +++ b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolTableForeignKey.java @@ -23,6 +23,7 @@ import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.ext.exasol.tools.ExasolUtils; 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.impl.jdbc.JDBCUtils; import org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTableConstraint; @@ -40,7 +41,7 @@ import java.util.List; /** * @author Karl */ -public class ExasolTableForeignKey extends JDBCTableConstraint implements DBSTableForeignKey { +public class ExasolTableForeignKey extends JDBCTableConstraint implements DBSTableForeignKey,DBPScriptObject { private ExasolTable refTable; @@ -153,5 +154,12 @@ public class ExasolTableForeignKey extends JDBCTableConstraint impl this.enabled = enabled; } + @Override + public String getObjectDefinitionText(DBRProgressMonitor monitor) + throws DBException + { + return ExasolUtils.getFKDdl(this, monitor); + } + } diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolTableUniqueKey.java b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolTableUniqueKey.java index ff0eaa363d1ed51dd7771a27dfe14c05043e4163..b343710d2d65b6b4a4c39d8c13d204528228a742 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolTableUniqueKey.java +++ b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolTableUniqueKey.java @@ -21,8 +21,10 @@ import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.ext.exasol.ExasolConstants; +import org.jkiss.dbeaver.ext.exasol.tools.ExasolUtils; 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.impl.jdbc.JDBCUtils; import org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTableConstraint; @@ -38,7 +40,7 @@ import java.util.List; /** * @author Karl Griesser */ -public class ExasolTableUniqueKey extends JDBCTableConstraint implements DBSEntityReferrer { +public class ExasolTableUniqueKey extends JDBCTableConstraint implements DBSEntityReferrer,DBPScriptObject { private String owner; private Boolean enabled; @@ -134,5 +136,12 @@ public class ExasolTableUniqueKey extends JDBCTableConstraint imple return false; } + @Override + public String getObjectDefinitionText(DBRProgressMonitor monitor) + throws DBException + { + return ExasolUtils.getPKDdl(this, monitor); + } + } 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 8d589da7c0bd4ad32c944b8a000353c51043c56c..6f2c7dc1a549843adf190227bd916c78c669e9ed 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 @@ -131,13 +131,7 @@ public class ExasolUtils { //get only first as there is only 1 primary key ExasolTableUniqueKey pk = null; pk = pks.iterator().next(); - ArrayList columns = new ArrayList(); - - for (DBSEntityAttributeRef c : pk.getAttributeReferences(monitor)) { - columns.add("\"" + c.getAttribute().getName() + "\""); - } - - ddlOutput.append("\nALTER TABLE \"" + exasolTable.getSchema().getName() + "\".\"" + exasolTable.getName() + "\" ADD CONSTRAINT " + pk.getName() + " PRIMARY KEY (" + CommonUtils.joinStrings(",", columns) + ") " + (pk.getEnabled() ? "ENABLE" : "") + " ;\n"); + ddlOutput.append(getPKDdl(pk, monitor)); } //foreign key @@ -146,12 +140,7 @@ public class ExasolUtils { //look keys for (ExasolTableForeignKey fk : fks) { - ArrayList columns = new ArrayList(); - for (DBSEntityAttributeRef c : fk.getAttributeReferences(monitor)) { - columns.add("\"" + c.getAttribute().getName() + "\""); - } - - ddlOutput.append("\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.getEnabled() ? "ENABLE" : "") + " ;\n"); + ddlOutput.append(getFKDdl(fk, monitor)); } } @@ -164,6 +153,46 @@ public class ExasolUtils { } } + + public static String getFKDdl(ExasolTableForeignKey fk, DBRProgressMonitor monitor) throws DBException + { + ExasolTable exasolTable = fk.getTable(); + ArrayList columns = new ArrayList(); + for (DBSEntityAttributeRef c : fk.getAttributeReferences(monitor)) { + columns.add("\"" + c.getAttribute().getName() + "\""); + } + 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"; + + } + + public static String getPKDdl(ExasolTableUniqueKey pk, DBRProgressMonitor monitor) throws DBException + { + ExasolTable exasolTable = pk.getTable(); + ArrayList columns = new ArrayList(); + 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"; + } + + public static String getConnectionDdl(ExasolConnection con, DBRProgressMonitor monitor) throws DBException + { + + String userInfo = ""; + + if (con.getUserName() != null) + { + userInfo = " USER '" + con.getUserName() + "' IDENTIFIED BY '' "; + } + + + return "CREATE CONNECTION \"" + con.getName() + "\" to '" + con.getConnectionString() + "'" + userInfo + ";"; + } private ExasolUtils() { // Pure utility class, no instanciation allowed