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

#3753 Full-text search: UI update, search in foreign tables option

上级 1a1d15d0
......@@ -186,8 +186,14 @@ public class DatabaseObjectsTreeManager implements ICheckStateListener {
foundChild = true;
break;
}
} else if (collectChildren(monitor, child, collectInfo, false)) {
foundChild = true;
} else {
try {
if (collectChildren(monitor, child, collectInfo, false)) {
foundChild = true;
}
} catch (DBException e) {
log.debug("Error reading child nodes of '" + child.getName() + "'", e);
}
}
}
if (foundChild) {
......
......@@ -55,6 +55,7 @@ public class SearchDataPage extends AbstractSearchPage {
private static final String PROP_FAST_SEARCH = "search.data.fast-search"; //$NON-NLS-1$
private static final String PROP_SEARCH_NUMBERS = "search.data.search-numbers"; //$NON-NLS-1$
private static final String PROP_SEARCH_LOBS = "search.data.search-lobs"; //$NON-NLS-1$
private static final String PROP_SEARCH_FOREIGN = "search.data.search-foreign"; //$NON-NLS-1$
private static final String PROP_HISTORY = "search.data.history"; //$NON-NLS-1$
private static final String PROP_SOURCES = "search.data.object-source"; //$NON-NLS-1$
......@@ -162,12 +163,11 @@ public class SearchDataPage extends AbstractSearchPage {
params.maxResults = 10;
}
final Spinner maxResultsSpinner = UIUtils.createLabelSpinner(optionsGroup2, "Sample rows", params.maxResults, 1, Integer.MAX_VALUE);
final Spinner maxResultsSpinner = UIUtils.createLabelSpinner(optionsGroup2, "Sample rows", "Maximum number of rows to search. Don't set to a big number, this might greatly reduce search performance.", params.maxResults, 1, Integer.MAX_VALUE);
maxResultsSpinner.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
maxResultsSpinner.addModifyListener(e -> params.maxResults = maxResultsSpinner.getSelection());
final Button caseCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, CoreMessages.dialog_search_objects_case_sensitive, params.caseSensitive);
caseCheckbox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
final Button caseCheckbox = UIUtils.createCheckbox(optionsGroup2, CoreMessages.dialog_search_objects_case_sensitive, "Case sensitive search", params.caseSensitive, 2);
caseCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
......@@ -176,8 +176,7 @@ public class SearchDataPage extends AbstractSearchPage {
}
});
final Button fastSearchCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, "Fast search (indexed)", params.fastSearch);
fastSearchCheckbox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
final Button fastSearchCheckbox = UIUtils.createCheckbox(optionsGroup2, "Fast search (indexed)", "Search only in indexed columns", params.fastSearch, 2);
fastSearchCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
......@@ -187,8 +186,7 @@ public class SearchDataPage extends AbstractSearchPage {
});
final Button searchNumbersCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, "Search in numbers", params.searchNumbers);
searchNumbersCheckbox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
final Button searchNumbersCheckbox = UIUtils.createCheckbox(optionsGroup2, "Search in numbers", "Search in numeric columns (search value must be a number)", params.searchNumbers, 2);
searchNumbersCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
......@@ -197,8 +195,7 @@ public class SearchDataPage extends AbstractSearchPage {
}
});
final Button searchLOBCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, "Search in LOBs", params.searchLOBs);
searchLOBCheckbox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
final Button searchLOBCheckbox = UIUtils.createCheckbox(optionsGroup2, "Search in LOBs", "Search in BLOB/CLOB/binary columns", params.searchLOBs, 2);
searchLOBCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
......@@ -206,6 +203,15 @@ public class SearchDataPage extends AbstractSearchPage {
params.searchLOBs = searchNumbersCheckbox.getSelection();
}
});
final Button searchForeignCheckbox = UIUtils.createCheckbox(optionsGroup2, "Search in foreign objects", "Search in foreign tables or DB links. Searching in such tables may cause performance issues.", params.searchForeignObjects, 2);
searchForeignCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
params.searchForeignObjects = searchForeignCheckbox.getSelection();
}
});
}
//restoreCheckedNodes();
updateEnablement();
......@@ -268,6 +274,7 @@ public class SearchDataPage extends AbstractSearchPage {
params.fastSearch = store.getBoolean(PROP_FAST_SEARCH);
params.searchNumbers = store.getString(PROP_SEARCH_NUMBERS) == null || store.getBoolean(PROP_SEARCH_NUMBERS);
params.searchLOBs = store.getBoolean(PROP_SEARCH_LOBS);
params.searchForeignObjects = store.getBoolean(PROP_SEARCH_FOREIGN);
params.maxResults = store.getInt(PROP_SAMPLE_ROWS);
for (int i = 0; ;i++) {
String history = store.getString(PROP_HISTORY + "." + i); //$NON-NLS-1$
......@@ -288,6 +295,7 @@ public class SearchDataPage extends AbstractSearchPage {
store.setValue(PROP_FAST_SEARCH, params.fastSearch);
store.setValue(PROP_SEARCH_NUMBERS, params.searchNumbers);
store.setValue(PROP_SEARCH_LOBS, params.searchLOBs);
store.setValue(PROP_SEARCH_FOREIGN, params.searchForeignObjects);
//saveTreeState(store, PROP_SOURCES, dataSourceTree);
{
......
......@@ -32,6 +32,7 @@ public class SearchDataParams {
boolean fastSearch; // Indexed
boolean searchNumbers;
boolean searchLOBs;
boolean searchForeignObjects;
int maxResults;
public SearchDataParams()
......@@ -86,6 +87,14 @@ public class SearchDataParams {
this.searchLOBs = searchLOBs;
}
public boolean isSearchForeignObjects() {
return searchForeignObjects;
}
public void setSearchForeignObjects(boolean searchForeignObjects) {
this.searchForeignObjects = searchForeignObjects;
}
public int getMaxResults() {
return maxResults;
}
......
......@@ -26,10 +26,7 @@ import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBConstants;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.data.DBDAttributeConstraint;
import org.jkiss.dbeaver.model.data.DBDDataFilter;
import org.jkiss.dbeaver.model.data.DBDDataReceiver;
......@@ -123,6 +120,10 @@ public class SearchDataQuery implements ISearchQuery {
}
private void searchDataInContainer(DBRProgressMonitor monitor, DBNModel dbnModel, DBSDataContainer dataContainer) {
if (!params.searchForeignObjects && dataContainer instanceof DBPForeignObject && ((DBPForeignObject) dataContainer).isForeignObject()) {
return;
}
String objectName = DBUtils.getObjectFullName(dataContainer, DBPEvaluationContext.DML);
DBNDatabaseNode node = dbnModel.findNode(dataContainer);
if (node == null) {
......
......@@ -19,10 +19,7 @@ package org.jkiss.dbeaver.ext.postgresql.model;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.model.DBPImageProvider;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
......@@ -37,7 +34,7 @@ import java.sql.SQLException;
/**
* PostgreTableForeign
*/
public class PostgreTableForeign extends PostgreTable implements DBPImageProvider
public class PostgreTableForeign extends PostgreTable implements DBPForeignObject, DBPImageProvider
{
private long foreignServerId;
private String[] foreignOptions;
......@@ -91,4 +88,8 @@ public class PostgreTableForeign extends PostgreTable implements DBPImageProvide
return DBIcon.TREE_TABLE_LINK;
}
@Override
public boolean isForeignObject() {
return true;
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.model;
/**
* Foreign object is an object which is actually lives in some remote database.
* Like DBLink or foreign table in PostgreSQL
*/
public interface DBPForeignObject
{
boolean isForeignObject();
}
......@@ -17,8 +17,6 @@
package org.jkiss.dbeaver.model;
import org.jkiss.dbeaver.DBException;
/**
* Object with order.
* Supports reordering
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册