diff --git a/nls/bundles/org.jkiss.dbeaver.ext.generic.nls/OSGI-INF/l10n/bundle_ru.properties b/nls/bundles/org.jkiss.dbeaver.ext.generic.nls/OSGI-INF/l10n/bundle_ru.properties index 9dbf4986b2438d328d78982d9cdc70b98b8d7fdb..798d2b8168b21e9bc7bca8066cb2da0bdbb85f67 100644 --- a/nls/bundles/org.jkiss.dbeaver.ext.generic.nls/OSGI-INF/l10n/bundle_ru.properties +++ b/nls/bundles/org.jkiss.dbeaver.ext.generic.nls/OSGI-INF/l10n/bundle_ru.properties @@ -23,6 +23,10 @@ tree.reference.node.name=\u0421\u0441\u044B\u043B\u043A\u0430 tree.reference_columns.node.name=\u041A\u043E\u043B\u043E\u043D\u043A\u0438 \u0441\u0441\u044B\u043B\u043A\u0438 tree.sub_table.node.name=\u041F\u043E\u0434\u0442\u0430\u0431\u043B\u0438\u0446\u0430 tree.procedure_columns.node.name=\u041A\u043E\u043B\u043E\u043D\u043A\u0438 \u043F\u0440\u043E\u0446\u0435\u0434\u0443\u0440\u044B +tree.triggers.node.name=\u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044B +tree.trigger.node.name=\u0422\u0440\u0438\u0433\u0433\u0435\u0440 +tree.tableTriggers.node.name=\u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044B \u0442\u0430\u0431\u043B\u0438\u0446 + meta.org.jkiss.dbeaver.ext.generic.model.GenericTable.tableType.name=\u0422\u0438\u043F \u0422\u0430\u0431\u043B\u0438\u0446\u044B meta.org.jkiss.dbeaver.ext.generic.model.GenericTable.catalog.name=\u041A\u0430\u0442\u0430\u043B\u043E\u0433 meta.org.jkiss.dbeaver.ext.generic.model.GenericCatalog.name.name=\u0418\u043C\u044F \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 diff --git a/plugins/org.jkiss.dbeaver.ext.generic/OSGI-INF/l10n/bundle.properties b/plugins/org.jkiss.dbeaver.ext.generic/OSGI-INF/l10n/bundle.properties index b1bb08b46d861595d0645575ef0a5599521a6707..ed99e05d8aed68cea84777411f6eb5b50a992b8d 100644 --- a/plugins/org.jkiss.dbeaver.ext.generic/OSGI-INF/l10n/bundle.properties +++ b/plugins/org.jkiss.dbeaver.ext.generic/OSGI-INF/l10n/bundle.properties @@ -29,6 +29,7 @@ tree.sequences.node.name=Sequences tree.sequence.node.name=Sequence tree.triggers.node.name=Triggers tree.trigger.node.name=Trigger +tree.tableTriggers.node.name=Table Triggers tree.dataTypes.node.name=Data Types tree.dataType.node.name=Data Type diff --git a/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml b/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml index 4086e3a6d3b442751556850f23a5dbaf09080774..31e88ca965dfa8c8db0218463ea2add16418fb8b 100644 --- a/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml @@ -98,6 +98,9 @@ + + + diff --git a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericDataSource.java b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericDataSource.java index 988889d75e6e1dea8e2c1b566dba7c54425bea6d..f2f5435d3263a39096225a3e3e5b9ec49433ab90 100644 --- a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericDataSource.java +++ b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericDataSource.java @@ -383,6 +383,11 @@ public class GenericDataSource extends JDBCDataSource return structureContainer == null ? null : structureContainer.getTriggers(monitor); } + @Override + public Collection getTableTriggers(DBRProgressMonitor monitor) throws DBException { + return structureContainer == null ? null : structureContainer.getTableTriggers(monitor); + } + @Override public void initialize(@NotNull DBRProgressMonitor monitor) throws DBException diff --git a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericObjectContainer.java b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericObjectContainer.java index 0ce3fe73cc245ad9141f596bf0bf5c74a37860e3..1b60a1fd37ac6ceb9de785a76c14bf6169fa7861 100644 --- a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericObjectContainer.java +++ b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericObjectContainer.java @@ -312,11 +312,23 @@ public abstract class GenericObjectContainer implements GenericStructContainer,D @Override public Collection getTriggers(DBRProgressMonitor monitor) throws DBException { if (triggers == null) { - loadTriggers(monitor); + triggers = loadTriggers(monitor); } return triggers; } + @Override + public Collection getTableTriggers(DBRProgressMonitor monitor) throws DBException { + List tableTriggers = new ArrayList<>(); + for (GenericTable table : getTables(monitor)) { + Collection tt = table.getTriggers(monitor); + if (!CommonUtils.isEmpty(tt)) { + tableTriggers.addAll(tt); + } + } + return tableTriggers; + } + @Association public Collection getDataTypes(DBRProgressMonitor monitor) throws DBException { return getDataSource().getDataTypes(monitor); @@ -409,17 +421,18 @@ public abstract class GenericObjectContainer implements GenericStructContainer,D } } - private synchronized void loadTriggers(DBRProgressMonitor monitor) + private synchronized List loadTriggers(DBRProgressMonitor monitor) throws DBException { - triggers = dataSource.getMetaModel().loadTriggers(monitor, this, null); + List triggers = dataSource.getMetaModel().loadTriggers(monitor, this, null); // Order procedures - if (triggers == null) { - triggers = new ArrayList<>(); + if (this.triggers == null) { + this.triggers = new ArrayList<>(); } else { - DBUtils.orderObjects(triggers); + DBUtils.orderObjects(this.triggers); } + return triggers; } } diff --git a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericStructContainer.java b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericStructContainer.java index cb9d1d3baf6825a8f2824a94c4b9e6f7b34e6b61..aabcf62a5e73ad9e70c1c8f2f4f1c453be533592 100644 --- a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericStructContainer.java +++ b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericStructContainer.java @@ -72,6 +72,8 @@ public interface GenericStructContainer extends DBSObjectContainer, DBSProcedure Collection getTriggers(DBRProgressMonitor monitor) throws DBException; + Collection getTableTriggers(DBRProgressMonitor monitor) throws DBException; + Collection getDataTypes(DBRProgressMonitor monitor) throws DBException; diff --git a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java index efa808a0ce7b0fa86b8c02c6299e24d5e7352ff0..c919e46af21415e2714b39affb3e37b1d570929c 100644 --- a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java +++ b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java @@ -75,19 +75,25 @@ public class SQLServerMetaModel extends GenericMetaModel implements DBCQueryTran @Override public List loadTriggers(DBRProgressMonitor monitor, @NotNull GenericStructContainer container, @Nullable GenericTable table) throws DBException { - assert table != null; try (JDBCSession session = DBUtils.openMetaSession(monitor, container.getDataSource(), "Read triggers")) { String schema = getSystemSchema(getServerType(container.getDataSource())); - String catalog = DBUtils.getQuotedIdentifier(table.getCatalog()); - String query = - "SELECT triggers.name FROM " + catalog + "." + schema + ".sysobjects tables, " + catalog + "." + schema + ".sysobjects triggers\n" + - "WHERE triggers.type = 'TR'\n" + - "AND triggers.deltrig = tables.id\n" + - "AND user_name(tables.uid) = ? AND tables.name = ?"; - - try (JDBCPreparedStatement dbStat = session.prepareStatement(query)) { - dbStat.setString(1, table.getSchema().getName()); - dbStat.setString(2, table.getName()); + String catalog = DBUtils.getQuotedIdentifier(container.getCatalog()); + StringBuilder query = new StringBuilder("SELECT triggers.name FROM " + catalog + "." + schema + ".sysobjects triggers"); + if (table != null) { + query.append(",").append(catalog).append(".").append(schema).append(".sysobjects tables"); + } + query.append("\nWHERE triggers.type = 'TR'\n"); + if (table != null) { + query.append( + "AND triggers.deltrig = tables.id\n" + + "AND user_name(tables.uid) = ? AND tables.name = ?"); + } + + try (JDBCPreparedStatement dbStat = session.prepareStatement(query.toString())) { + if (table != null) { + dbStat.setString(1, table.getSchema().getName()); + dbStat.setString(2, table.getName()); + } List result = new ArrayList<>(); try (JDBCResultSet dbResult = dbStat.executeQuery()) {