From e39af893cd7d8f11f63d2ff6eeab6e1caeefaea2 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Tue, 8 May 2018 10:19:49 +0300 Subject: [PATCH] QM filters - use criteria --- .../runtime/qm/DefaultEventFilter.java | 42 ++++--------------- .../ui/controls/querylog/QueryLogViewer.java | 3 +- .../dbeaver/model/qm/QMEventCriteria.java | 9 ++++ .../org/jkiss/dbeaver/model/qm/QMUtils.java | 23 +++++++++- 4 files changed, 41 insertions(+), 36 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/qm/DefaultEventFilter.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/qm/DefaultEventFilter.java index 5b9763e952..ba20e5f4dd 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/qm/DefaultEventFilter.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/qm/DefaultEventFilter.java @@ -1,6 +1,6 @@ /* * DBeaver - Universal Database Manager - * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) + * Copyright (C) 2010-2018 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. @@ -18,28 +18,15 @@ package org.jkiss.dbeaver.runtime.qm; import org.jkiss.dbeaver.core.DBeaverCore; -import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose; -import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; -import org.jkiss.dbeaver.model.qm.QMConstants; -import org.jkiss.dbeaver.model.qm.QMEventFilter; -import org.jkiss.dbeaver.model.qm.QMMetaEvent; -import org.jkiss.dbeaver.model.qm.QMObjectType; +import org.jkiss.dbeaver.model.qm.*; import org.jkiss.dbeaver.model.qm.meta.*; -import org.jkiss.utils.CommonUtils; - -import java.util.ArrayList; -import java.util.Collection; /** * Default event filter based on preference settings. */ public class DefaultEventFilter implements QMEventFilter { - private boolean showSessions = false; - private boolean showTransactions = false; - private boolean showQueries = false; - - private java.util.List showPurposes = new ArrayList<>(); + private QMEventCriteria eventCriteria = new QMEventCriteria(); public DefaultEventFilter() { @@ -48,21 +35,7 @@ public class DefaultEventFilter implements QMEventFilter { public void reloadPreferences() { - DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore(); - - Collection objectTypes = QMObjectType.fromString(store.getString(QMConstants.PROP_OBJECT_TYPES)); - this.showSessions = objectTypes.contains(QMObjectType.session); - this.showTransactions = objectTypes.contains(QMObjectType.txn); - this.showQueries = objectTypes.contains(QMObjectType.query); - - this.showPurposes.clear(); - for (String queryType : CommonUtils.splitString(store.getString(QMConstants.PROP_QUERY_TYPES), ',')) { - try { - this.showPurposes.add(DBCExecutionPurpose.valueOf(queryType)); - } catch (IllegalArgumentException e) { - // ignore - } - } + eventCriteria = QMUtils.createDefaultCriteria(DBeaverCore.getGlobalPreferenceStore()); } @Override @@ -70,11 +43,12 @@ public class DefaultEventFilter implements QMEventFilter { { QMMObject object = event.getObject(); if (object instanceof QMMStatementExecuteInfo) { - return showQueries && showPurposes.contains(((QMMStatementExecuteInfo) object).getStatement().getPurpose()); + return eventCriteria.hasObjectType(QMObjectType.query) && + eventCriteria.hasQueryType(((QMMStatementExecuteInfo) object).getStatement().getPurpose()); } else if (object instanceof QMMTransactionInfo || object instanceof QMMTransactionSavepointInfo) { - return showTransactions; + return eventCriteria.hasObjectType(QMObjectType.txn); } else if (object instanceof QMMSessionInfo) { - return showSessions; + return eventCriteria.hasObjectType(QMObjectType.session); } return true; } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/querylog/QueryLogViewer.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/querylog/QueryLogViewer.java index 33d49eb9c4..cb62c5975b 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/querylog/QueryLogViewer.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/querylog/QueryLogViewer.java @@ -1084,8 +1084,9 @@ public class QueryLogViewer extends Viewer implements QMMetaListener, DBPPrefere final List events = new ArrayList<>(); QMEventBrowser eventBrowser = QMUtils.getEventBrowser(); if (eventBrowser != null) { - QMEventCriteria criteria = new QMEventCriteria(); + QMEventCriteria criteria = QMUtils.createDefaultCriteria(DBeaverCore.getGlobalPreferenceStore()); criteria.setSearchString(CommonUtils.isEmptyTrimmed(searchString) ? null : searchString.trim()); + monitor.beginTask("Load query history", 1); if (!CommonUtils.isEmpty(searchString)) { monitor.subTask("Search queries: " + searchString); diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/qm/QMEventCriteria.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/qm/QMEventCriteria.java index 339b7f1d7a..19f67140ac 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/qm/QMEventCriteria.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/qm/QMEventCriteria.java @@ -19,6 +19,7 @@ package org.jkiss.dbeaver.model.qm; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose; +import org.jkiss.utils.ArrayUtils; /** * QM event criteria @@ -60,6 +61,10 @@ public class QMEventCriteria { this.objectTypes = objectTypes; } + public boolean hasObjectType(QMObjectType type) { + return !ArrayUtils.isEmpty(objectTypes) && ArrayUtils.contains(objectTypes, type); + } + public DBCExecutionPurpose[] getQueryTypes() { return queryTypes; } @@ -68,6 +73,10 @@ public class QMEventCriteria { this.queryTypes = queryTypes; } + public boolean hasQueryType(DBCExecutionPurpose type) { + return !ArrayUtils.isEmpty(queryTypes) && ArrayUtils.contains(queryTypes, type); + } + public String getSearchString() { return searchString; } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/qm/QMUtils.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/qm/QMUtils.java index 4711869335..06bf8442b0 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/qm/QMUtils.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/qm/QMUtils.java @@ -1,6 +1,6 @@ /* * DBeaver - Universal Database Manager - * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) + * Copyright (C) 2010-2018 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. @@ -23,12 +23,16 @@ import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.app.DBPPlatform; import org.jkiss.dbeaver.model.exec.DBCExecutionContext; import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose; +import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; import org.jkiss.dbeaver.model.qm.meta.QMMSessionInfo; import org.jkiss.dbeaver.model.qm.meta.QMMStatementExecuteInfo; import org.jkiss.dbeaver.model.qm.meta.QMMTransactionInfo; import org.jkiss.dbeaver.model.qm.meta.QMMTransactionSavepointInfo; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; +import org.jkiss.utils.CommonUtils; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; /** @@ -146,6 +150,23 @@ public class QMUtils { return new QMTransactionState(execCount, updateCount, txnMode, txnStartTime); } + public static QMEventCriteria createDefaultCriteria(DBPPreferenceStore store) { + QMEventCriteria criteria = new QMEventCriteria(); + + Collection objectTypes = QMObjectType.fromString(store.getString(QMConstants.PROP_OBJECT_TYPES)); + criteria.setObjectTypes(objectTypes.toArray(new QMObjectType[0])); + List queryTypes = new ArrayList<>(); + for (String queryType : CommonUtils.splitString(store.getString(QMConstants.PROP_QUERY_TYPES), ',')) { + try { + queryTypes.add(DBCExecutionPurpose.valueOf(queryType)); + } catch (IllegalArgumentException e) { + // ignore + } + } + criteria.setQueryTypes(queryTypes.toArray(new DBCExecutionPurpose[0])); + return criteria; + } + public static class ListCursorImpl implements QMEventCursor { private final List events; -- GitLab