提交 e39af893 编写于 作者: S serge-rider

QM filters - use criteria

上级 5f81737e
/*
* 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<DBCExecutionPurpose> 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<QMObjectType> 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;
}
......
......@@ -1084,8 +1084,9 @@ public class QueryLogViewer extends Viewer implements QMMetaListener, DBPPrefere
final List<QMMetaEvent> 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);
......
......@@ -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;
}
......
/*
* 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<QMObjectType> objectTypes = QMObjectType.fromString(store.getString(QMConstants.PROP_OBJECT_TYPES));
criteria.setObjectTypes(objectTypes.toArray(new QMObjectType[0]));
List<DBCExecutionPurpose> 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<QMMetaEvent> events;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册