From 5463637ae1ad5764dc4ebaec4f3184c10da9faca Mon Sep 17 00:00:00 2001 From: Anastasiya <45152336+LonwoLonwo@users.noreply.github.com> Date: Wed, 18 Jan 2023 21:00:33 +0100 Subject: [PATCH] #16397 ability to disable metadata objects comment reading (#18781) * #16397 ability to disable metadata objects comment reading for performance increasing added * #16397 change setting description * #16397 move connection setting to the separate connection page; remove constraints comments reading Co-authored-by: Serge Rider --- .../META-INF/MANIFEST.MF | 7 ++ .../build.properties | 1 + .../icons/vertica_logo.png | Bin 0 -> 4349 bytes .../plugin.xml | 4 +- .../ui/internal/VerticaUIMessages.java | 37 +++++++ .../ui/internal/VerticaUIMessages.properties | 3 + .../internal/VerticaUIMessages_ru.properties | 3 + .../ui/views/VerticaConnectionPage.java | 51 ++++++++++ .../views/VerticaConnectionPageAdvanced.java | 91 ++++++++++++++++++ .../dbeaver/ext/vertica/VerticaConstants.java | 2 + .../internal/VerticaMessages_ru.properties | 2 + .../ext/vertica/model/VerticaDataSource.java | 14 +++ .../ext/vertica/model/VerticaMetaModel.java | 33 +++---- .../ext/vertica/model/VerticaSchema.java | 11 ++- .../model/VerticaStructureAssistant.java | 89 ++++++++++------- .../ext/vertica/model/VerticaTable.java | 4 +- .../ext/vertica/model/VerticaView.java | 4 +- 17 files changed, 297 insertions(+), 59 deletions(-) create mode 100644 plugins/org.jkiss.dbeaver.ext.vertica.ui/icons/vertica_logo.png create mode 100644 plugins/org.jkiss.dbeaver.ext.vertica.ui/src/org/jkiss/dbeaver/ext/vertica/ui/internal/VerticaUIMessages.java create mode 100644 plugins/org.jkiss.dbeaver.ext.vertica.ui/src/org/jkiss/dbeaver/ext/vertica/ui/internal/VerticaUIMessages.properties create mode 100644 plugins/org.jkiss.dbeaver.ext.vertica.ui/src/org/jkiss/dbeaver/ext/vertica/ui/internal/VerticaUIMessages_ru.properties create mode 100644 plugins/org.jkiss.dbeaver.ext.vertica.ui/src/org/jkiss/dbeaver/ext/vertica/ui/views/VerticaConnectionPage.java create mode 100644 plugins/org.jkiss.dbeaver.ext.vertica.ui/src/org/jkiss/dbeaver/ext/vertica/ui/views/VerticaConnectionPageAdvanced.java create mode 100644 plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/internal/VerticaMessages_ru.properties diff --git a/plugins/org.jkiss.dbeaver.ext.vertica.ui/META-INF/MANIFEST.MF b/plugins/org.jkiss.dbeaver.ext.vertica.ui/META-INF/MANIFEST.MF index 36b809d40cd6..b4141bed3f77 100644 --- a/plugins/org.jkiss.dbeaver.ext.vertica.ui/META-INF/MANIFEST.MF +++ b/plugins/org.jkiss.dbeaver.ext.vertica.ui/META-INF/MANIFEST.MF @@ -5,8 +5,15 @@ Bundle-SymbolicName: org.jkiss.dbeaver.ext.vertica.ui;singleton:=true Bundle-Version: 1.0.89.qualifier Bundle-Release-Date: 20230123 Require-Bundle: org.jkiss.dbeaver.model, + org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.jface.text, + org.eclipse.ui.views, + org.eclipse.ui.workbench, + org.jkiss.dbeaver.model, org.jkiss.dbeaver.ui, org.jkiss.dbeaver.ui.editors.base, + org.jkiss.dbeaver.ui.editors.connection, org.jkiss.dbeaver.ext.vertica, org.jkiss.dbeaver.ext.generic, org.jkiss.dbeaver.ext.generic.ui diff --git a/plugins/org.jkiss.dbeaver.ext.vertica.ui/build.properties b/plugins/org.jkiss.dbeaver.ext.vertica.ui/build.properties index 3c833df018f8..13a8aa73a617 100644 --- a/plugins/org.jkiss.dbeaver.ext.vertica.ui/build.properties +++ b/plugins/org.jkiss.dbeaver.ext.vertica.ui/build.properties @@ -3,4 +3,5 @@ output.. = target/classes/ bin.includes = .,\ META-INF/,\ OSGI-INF/,\ + icons/,\ plugin.xml diff --git a/plugins/org.jkiss.dbeaver.ext.vertica.ui/icons/vertica_logo.png b/plugins/org.jkiss.dbeaver.ext.vertica.ui/icons/vertica_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..93a43ee5ae26bca7b93cf9722bfbc07f7cdeaa4f GIT binary patch literal 4349 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 Rr}pnH2I3wPUaf8w@;`&;b)NtL literal 0 HcmV?d00001 diff --git a/plugins/org.jkiss.dbeaver.ext.vertica.ui/plugin.xml b/plugins/org.jkiss.dbeaver.ext.vertica.ui/plugin.xml index 839229755d24..a5f122828e06 100644 --- a/plugins/org.jkiss.dbeaver.ext.vertica.ui/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ext.vertica.ui/plugin.xml @@ -9,11 +9,11 @@ dataSource="vertica" targetID="org.jkiss.dbeaver.ext.ui.newConnectionWizard" label="%dialog.connection.header" - class="org.jkiss.dbeaver.ext.generic.views.GenericConnectionPage" + class="org.jkiss.dbeaver.ext.vertica.ui.views.VerticaConnectionPage" icon="platform:/plugin/org.jkiss.dbeaver.ext.vertica/icons/icons/vertica_icon.png"> "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F".\n\u0415\u0441\u043B\u0438 \u0432\u044B \u043D\u0435 \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u043C\u0435\u043D\u044F\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C, \u0442\u043E \u043E\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044C \u043A \u0432\u0430\u0448\u0435\u043C\u0443 DBA. \ No newline at end of file diff --git a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaDataSource.java b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaDataSource.java index bbd897cf5a78..e0186f8fd117 100644 --- a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaDataSource.java +++ b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaDataSource.java @@ -23,6 +23,7 @@ import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ext.generic.model.GenericDataSource; import org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel; +import org.jkiss.dbeaver.ext.vertica.VerticaConstants; import org.jkiss.dbeaver.ext.vertica.internal.VerticaMessages; import org.jkiss.dbeaver.model.DBPDataKind; import org.jkiss.dbeaver.model.DBPDataSourceContainer; @@ -191,6 +192,10 @@ public T getAdapter(Class adapter) { public boolean isChildCommentColumnAvailable(@NotNull DBRProgressMonitor monitor) { // child_object is very helpful column in v_catalog.comments table, but it's not childObjectColumnAvailable in Vertica versions < 9.3 and in some other cases if (childObjectColumnAvailable == null) { + if (avoidCommentsReading()) { + childObjectColumnAvailable = false; + return false; + } try { try (JDBCSession session = DBUtils.openMetaSession(monitor, this, "Check child comment column existence")) { try (final JDBCPreparedStatement dbStat = session.prepareStatement( @@ -207,6 +212,15 @@ public boolean isChildCommentColumnAvailable(@NotNull DBRProgressMonitor monitor return childObjectColumnAvailable; } + /** + * + * v_catalog.comments dramatically reduces data loading speed. User can disable metadata objects comments reading to avoid it. + */ + boolean avoidCommentsReading() { + return CommonUtils.toBoolean( + getContainer().getConnectionConfiguration().getProviderProperty(VerticaConstants.PROP_DISABLE_COMMENTS_READING)); + } + class NodeCache extends JDBCObjectCache { @NotNull diff --git a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaMetaModel.java b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaMetaModel.java index 1029b68d1637..5430ea87a491 100644 --- a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaMetaModel.java +++ b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaMetaModel.java @@ -216,10 +216,11 @@ public boolean supportsSequences(@NotNull GenericDataSource dataSource) { @Override public JDBCStatement prepareSequencesLoadStatement(@NotNull JDBCSession session, @NotNull GenericStructContainer container) throws SQLException { + boolean avoidCommentsReading = ((VerticaDataSource) container.getDataSource()).avoidCommentsReading(); JDBCPreparedStatement dbStat = session.prepareStatement( - "SELECT s.*, c.comment FROM v_catalog.sequences s\n" + - "LEFT JOIN v_catalog.comments c\n" + - "ON s.sequence_id = c.object_id\n" + + "SELECT s.*" + (avoidCommentsReading ? "" : ", c.comment") + " FROM v_catalog.sequences s\n" + + (avoidCommentsReading ? "" : "LEFT JOIN v_catalog.comments c\n" + + "ON s.sequence_id = c.object_id\n") + "WHERE sequence_schema=? ORDER BY sequence_name"); dbStat.setString(1, container.getSchema().getName()); return dbStat; @@ -259,18 +260,16 @@ public DBCQueryTransformer createQueryTransformer(@NotNull DBCQueryTransformType public JDBCStatement prepareUniqueConstraintsLoadStatement(@NotNull JDBCSession session, @NotNull GenericStructContainer owner, @Nullable GenericTableBase forParent) throws SQLException, DBException { JDBCPreparedStatement dbStat; dbStat = session.prepareStatement("SELECT col.constraint_name as PK_NAME, col.table_name as TABLE_NAME, col.column_name as COLUMN_NAME, " + - "c.ordinal_position as KEY_SEQ, col.constraint_type, tc.predicate, col.is_enabled \n" + - "FROM v_catalog.constraint_columns col\n" + - "LEFT JOIN v_catalog.columns c ON\n" + - "c.table_id = col.table_id\n" + - //"LEFT JOIN v_catalog.comments com ON com.object_id = col.constraint_id" - // v_catalog.comments dramatically reduces data loading speed. Maybe we can use another table or use lazy cache for constraints too - "JOIN v_catalog.table_constraints tc ON\n" + - "tc.constraint_id = col.constraint_id \n" + - "AND col.column_name = c.column_name \n" + - "WHERE col.constraint_type IN ('u','p','c')\n" + - "AND col.table_schema = ?" + (forParent != null ? " AND col.table_name = ?" : "") + - " ORDER BY col.table_id, KEY_SEQ, PK_NAME"); + "c.ordinal_position as KEY_SEQ, col.constraint_type, tc.predicate, col.is_enabled\n" + + "FROM v_catalog.constraint_columns col\n" + + "LEFT JOIN v_catalog.columns c ON\n" + + "c.table_id = col.table_id\n" + + "JOIN v_catalog.table_constraints tc ON\n" + + "tc.constraint_id = col.constraint_id \n" + + "AND col.column_name = c.column_name \n" + + "WHERE col.constraint_type IN ('u','p','c')\n" + + "AND col.table_schema = ?" + (forParent != null ? " AND col.table_name = ?" : "") + + " ORDER BY col.table_id, KEY_SEQ, PK_NAME"); if (forParent != null) { dbStat.setString(1, forParent.getSchema().getName()); dbStat.setString(2, forParent.getName()); @@ -297,14 +296,12 @@ public DBSEntityConstraintType getUniqueConstraintType(JDBCResultSet dbResult) t @Override public GenericUniqueKey createConstraintImpl(GenericTableBase table, String constraintName, DBSEntityConstraintType constraintType, JDBCResultSet dbResult, boolean persisted) { String checkExpression = ""; - String comment = null; boolean isEnabled = false; if (dbResult != null) { checkExpression = JDBCUtils.safeGetString(dbResult, "predicate"); - comment = JDBCUtils.safeGetString(dbResult, "comment"); isEnabled = JDBCUtils.safeGetBoolean(dbResult, "is_enabled"); } - return new VerticaConstraint(table, constraintName, comment, constraintType, persisted, CommonUtils.notEmpty(checkExpression).trim(), isEnabled); + return new VerticaConstraint(table, constraintName, null, constraintType, persisted, CommonUtils.notEmpty(checkExpression).trim(), isEnabled); } @Override diff --git a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaSchema.java b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaSchema.java index de8e557e6a0e..32a23194744b 100644 --- a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaSchema.java +++ b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaSchema.java @@ -224,9 +224,11 @@ public class ProjectionCache extends JDBCStructLookupCache references) throws DBException, SQLException { GenericSchema parentSchema = params.isGlobalSearch() ? null : params.getParentObject() instanceof GenericSchema ? (GenericSchema) params.getParentObject() : null; + boolean avoidCommentsReading = false; + JDBCDataSource dataSource = executionContext.getDataSource(); + if (dataSource instanceof VerticaDataSource) { + avoidCommentsReading = ((VerticaDataSource) dataSource).avoidCommentsReading(); + } + boolean searchInComments = !avoidCommentsReading && params.isSearchInComments(); if (objectType == RelationalObjectType.TYPE_TABLE || objectType == RelationalObjectType.TYPE_VIEW) { - findTablesAndViewsByMask(session, parentSchema, params, references); + findTablesAndViewsByMask(session, parentSchema, params, references, searchInComments); } if (objectType == VerticaObjectType.SEQUENCE) { - findSequencesByMask(session, parentSchema, params, references); + findSequencesByMask(session, parentSchema, params, references, searchInComments); } if (objectType == RelationalObjectType.TYPE_CONSTRAINT) { - findConstraintsByMask(session, parentSchema, params, references); + findConstraintsByMask(session, parentSchema, params, references, searchInComments); } if (objectType == RelationalObjectType.TYPE_TABLE_COLUMN) { findTableColumnsByMask(session, parentSchema, params, references); @@ -94,15 +101,20 @@ protected void findObjectsByMask(@NotNull JDBCExecutionContext executionContext, findViewColumnsByMask(session, parentSchema, params, references); } if (objectType == VerticaObjectType.PROJECTION) { - findProjectionsByMask(session, parentSchema, params, references); + findProjectionsByMask(session, parentSchema, params, references, searchInComments); } if (objectType == VerticaObjectType.NODE) { - findNodesByMask(session, params, references); + findNodesByMask(session, params, references, searchInComments); } } - private void findTablesAndViewsByMask(JDBCSession session, GenericSchema parentSchema, @NotNull ObjectsSearchParams params, - List result) throws SQLException { + private void findTablesAndViewsByMask( + @NotNull JDBCSession session, + @Nullable GenericSchema parentSchema, + @NotNull ObjectsSearchParams params, + @NotNull List result, + boolean searchInComments + ) throws SQLException { List objectTypesList = Arrays.asList(params.getObjectTypes()); StringBuilder objectTypeClause = new StringBuilder(100); @@ -114,7 +126,6 @@ private void findTablesAndViewsByMask(JDBCSession session, GenericSchema parentS if (addTables) objectTypeClause.append(","); objectTypeClause.append("'VIEW'"); } - boolean searchInComments = params.isSearchInComments(); String sql = "SELECT schema_name, table_name, CASE WHEN table_type = 'SYSTEM TABLE' THEN 'SYSTEM_TABLE' ELSE table_type END, remarks" + "\nFROM v_catalog.all_tables WHERE " + (searchInComments ? "(" : "") + "TABLE_NAME"; @@ -140,7 +151,7 @@ private void findTablesAndViewsByMask(JDBCSession session, GenericSchema parentS final String schemaName = dbResult.getString(1); final String objectName = dbResult.getString(2); final String tableType = dbResult.getString(3); - final String description = dbResult.getString(4); + final String description = searchInComments ? dbResult.getString(4) : ""; GenericSchema schema = parentSchema != null ? parentSchema : dataSource.getSchema(schemaName); if (schema == null) { continue; // filtered @@ -161,12 +172,17 @@ public DBSObject resolveObject(DBRProgressMonitor monitor) throws DBException { } } - private void findSequencesByMask(JDBCSession session, GenericSchema parentSchema, @NotNull ObjectsSearchParams params, - List result) throws SQLException { - boolean searchInComments = params.isSearchInComments(); - - String sql = "SELECT s.sequence_schema, s.sequence_name, c.\"comment\" FROM v_catalog.sequences s\n" + - "LEFT JOIN v_catalog.comments c ON s.sequence_id = c.object_id WHERE " + (searchInComments ? "(" : "") + " s.sequence_name"; + private void findSequencesByMask( + @NotNull JDBCSession session, + @Nullable GenericSchema parentSchema, + @NotNull ObjectsSearchParams params, + @NotNull List result, + boolean searchInComments + ) throws SQLException { + String sql = "SELECT s.sequence_schema, s.sequence_name" + (searchInComments ? ", c.\"comment\"" : "") + + " FROM v_catalog.sequences s\n" + + (searchInComments ? "LEFT JOIN v_catalog.comments c ON s.sequence_id = c.object_id\n" : "") + + "WHERE " + (searchInComments ? "(" : "") + " s.sequence_name"; sql += params.isCaseSensitive() ? " LIKE ?" : " ILIKE ?"; if (searchInComments) { sql += " OR c.\"comment\"" + (params.isCaseSensitive() ? " LIKE ?" : " ILIKE ?") + ")"; @@ -187,7 +203,7 @@ private void findSequencesByMask(JDBCSession session, GenericSchema parentSchema while (!monitor.isCanceled() && dbResult.next()) { final String schemaName = dbResult.getString(1); final String objectName = dbResult.getString(2); - final String description = dbResult.getString(3); + final String description = searchInComments ? dbResult.getString(3) : ""; GenericSchema schema = parentSchema != null ? parentSchema : dataSource.getSchema(schemaName); if (schema == null) { continue; // filtered @@ -208,13 +224,15 @@ public DBSObject resolveObject(DBRProgressMonitor monitor) throws DBException { } } - private void findConstraintsByMask(JDBCSession session, GenericSchema parentSchema, @NotNull ObjectsSearchParams params, - List result) throws SQLException { - boolean searchInComments = params.isSearchInComments(); - String sql = "SELECT s.schema_name, al.table_name, tc.constraint_name, tc.constraint_type, c.\"comment\" FROM v_catalog.table_constraints tc\n" + + private void findConstraintsByMask(@NotNull JDBCSession session, GenericSchema parentSchema, @NotNull ObjectsSearchParams params, + @NotNull List result, boolean searchInComments) throws SQLException { + String sql = "SELECT s.schema_name, al.table_name, tc.constraint_name, tc.constraint_type" + + (searchInComments ? ",c.\"comment\"" : "") + + " FROM v_catalog.table_constraints tc\n" + "LEFT JOIN v_catalog.all_tables al ON al.table_id = tc.table_id\n" + "LEFT JOIN v_catalog.schemata s ON tc.constraint_schema_id = s.schema_id\n" + - "LEFT JOIN v_catalog.comments c ON tc.constraint_id = c.object_id WHERE " + (searchInComments ? "(" : "") + "tc.constraint_name"; + (searchInComments ? "LEFT JOIN v_catalog.comments c ON tc.constraint_id = c.object_id " : "") + + " WHERE " + (searchInComments ? "(" : "") + "tc.constraint_name"; sql += params.isCaseSensitive() ? " LIKE ?" : " ILIKE ?"; if (searchInComments) { sql += " OR c.\"comment\"" + (params.isCaseSensitive() ? " LIKE ?" : " ILIKE ?") + ")"; @@ -237,7 +255,7 @@ private void findConstraintsByMask(JDBCSession session, GenericSchema parentSche final String tableName = dbResult.getString(2); final String objectName = dbResult.getString(3); final String constraintType = dbResult.getString(4); - final String description = dbResult.getString(5); + final String description = searchInComments ? dbResult.getString(5) : ""; final boolean isFK = constraintType.equals("f"); GenericSchema schema = parentSchema != null ? parentSchema : dataSource.getSchema(schemaName); if (schema == null) { @@ -269,11 +287,11 @@ public DBSObject resolveObject(DBRProgressMonitor monitor) throws DBException { } } - private void findProjectionsByMask(JDBCSession session, GenericSchema parentSchema, @NotNull ObjectsSearchParams params, - List result) throws SQLException { - boolean searchInComments = params.isSearchInComments(); - String sql = "SELECT p.projection_schema, p.projection_name, c.\"comment\" FROM v_catalog.projections p\n" + - "LEFT JOIN v_catalog.comments c ON p.projection_id = c.object_id\n" + + private void findProjectionsByMask(@NotNull JDBCSession session, GenericSchema parentSchema, @NotNull ObjectsSearchParams params, + @NotNull List result, boolean searchInComments) throws SQLException { + String sql = "SELECT p.projection_schema, p.projection_name" + (searchInComments ? ",c.\"comment\"" : "") + + " FROM v_catalog.projections p\n" + + (searchInComments ? "LEFT JOIN v_catalog.comments c ON p.projection_id = c.object_id\n" : "") + "WHERE " + (searchInComments ? "(" : "") + "p.projection_name"; sql += params.isCaseSensitive() ? " LIKE ?" : " ILIKE ?"; if (searchInComments) { @@ -295,7 +313,7 @@ private void findProjectionsByMask(JDBCSession session, GenericSchema parentSche while (!monitor.isCanceled() && dbResult.next()) { final String schemaName = dbResult.getString(1); final String objectName = dbResult.getString(2); - final String description = dbResult.getString(3); + final String description = searchInComments ? dbResult.getString(3) : ""; VerticaSchema schema = (VerticaSchema) (parentSchema != null ? parentSchema : dataSource.getSchema(schemaName)); if (schema == null) { continue; // filtered @@ -316,10 +334,15 @@ public DBSObject resolveObject(DBRProgressMonitor monitor) throws DBException { } } - private void findNodesByMask(JDBCSession session, @NotNull ObjectsSearchParams params, List result) throws SQLException { - boolean searchInComments = params.isSearchInComments(); - String sql = "SELECT n.node_name, c.\"comment\" FROM v_catalog.nodes n \n" + - "LEFT JOIN v_catalog.comments c ON n.node_id = c.object_id\n" + + private void findNodesByMask( + @NotNull JDBCSession session, + @NotNull ObjectsSearchParams params, + List result, + boolean searchInComments + ) throws SQLException { + String sql = "SELECT n.node_name" + (searchInComments ? ", c.\"comment\"" : "") + + " FROM v_catalog.nodes n \n" + + (searchInComments ? "LEFT JOIN v_catalog.comments c ON n.node_id = c.object_id\n" : "") + "WHERE n.node_name"; sql += params.isCaseSensitive() ? " LIKE ?" : " ILIKE ?"; if (searchInComments) { @@ -336,7 +359,7 @@ private void findNodesByMask(JDBCSession session, @NotNull ObjectsSearchParams p try (JDBCResultSet dbResult = dbStat.executeQuery()) { while (!monitor.isCanceled() && dbResult.next()) { final String objectName = dbResult.getString(1); - final String description = dbResult.getString(2); + final String description = searchInComments ? dbResult.getString(2) : ""; result.add(new AbstractObjectReference<>(objectName, dataSource, description, VerticaNode.class, VerticaObjectType.NODE) { @Override public DBSObject resolveObject(DBRProgressMonitor monitor) throws DBException { diff --git a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaTable.java b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaTable.java index 9e0dc6183db1..16df7115ebd2 100644 --- a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaTable.java +++ b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaTable.java @@ -98,7 +98,9 @@ public String getDescription() { @LazyProperty(cacheValidator = CommentsValidator.class) public String getDescription(DBRProgressMonitor monitor) throws DBException { if (description == null) { - VerticaUtils.readTableAndColumnsDescriptions(monitor, getDataSource(), this, false); + if (!((VerticaDataSource) getDataSource()).avoidCommentsReading()) { + VerticaUtils.readTableAndColumnsDescriptions(monitor, getDataSource(), this, false); + } if (description == null) { description = ""; } diff --git a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaView.java b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaView.java index 873dc6666bac..87fa896ef5b3 100644 --- a/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaView.java +++ b/plugins/org.jkiss.dbeaver.ext.vertica/src/org/jkiss/dbeaver/ext/vertica/model/VerticaView.java @@ -77,7 +77,9 @@ public String getDescription() { @LazyProperty(cacheValidator = CommentsValidator.class) public String getDescription(DBRProgressMonitor monitor) throws DBException { if (description == null) { - VerticaUtils.readTableAndColumnsDescriptions(monitor, getDataSource(), this, true); + if (!((VerticaDataSource) getDataSource()).avoidCommentsReading()) { + VerticaUtils.readTableAndColumnsDescriptions(monitor, getDataSource(), this, true); + } if (description == null) { description = ""; }