提交 7b328afb 编写于 作者: J jurgen

Data searcher

Former-commit-id: 73ab3733
上级 2a20a147
......@@ -41,6 +41,7 @@ import org.jkiss.dbeaver.model.sql.SQLDialect;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.struct.DBSAttributeBase;
import org.jkiss.dbeaver.model.struct.DBSDataManipulator;
import org.jkiss.dbeaver.model.struct.DBSDataSearcher;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
......@@ -52,7 +53,7 @@ import java.util.List;
*/
public abstract class JDBCTable<DATASOURCE extends DBPDataSource, CONTAINER extends DBSObjectContainer>
extends AbstractTable<DATASOURCE, CONTAINER>
implements DBSDataManipulator, DBPSaveableObject
implements DBSDataManipulator, DBSDataSearcher, DBPSaveableObject
{
static final Log log = LogFactory.getLog(JDBCTable.class);
public static final String DEFAULT_TABLE_ALIAS = "x";
......@@ -295,6 +296,13 @@ public abstract class JDBCTable<DATASOURCE extends DBPDataSource, CONTAINER exte
}
}
@Override
public DBCStatistics findRows(@NotNull DBCSession session, @NotNull DBDDataReceiver dataReceiver, @NotNull String searchString, long flags) throws DBCException {
DBCStatistics statistics = new DBCStatistics();
return statistics;
}
@NotNull
@Override
public ExecuteBatch insertData(@NotNull DBCSession session, @NotNull DBSAttributeBase[] attributes, @Nullable DBDDataReceiver keysReceiver)
......
......@@ -34,16 +34,15 @@ public interface DBSDataSearcher extends DBSDataContainer {
public static final long FLAG_FAST_SEARCH = 1 >> 16;
public static final long FLAG_SEARCH_LOBS = 1 >> 17;
public static final long FLAG_SEARCH_BINARY = 1 >> 18;
public static final long FLAG_SEARCH_NUMBERS = 1 >> 18;
public static final long FLAG_CASE_SENSITIVE = 1 >> 18;
@NotNull
DBCStatistics findRows(
@NotNull DBCSession session,
@NotNull DBDDataReceiver dataReceiver,
@NotNull String searchString,
int maxResults,
long flags)
@NotNull DBCSession session,
@NotNull DBDDataReceiver dataReceiver,
@NotNull String searchString,
long flags)
throws DBCException;
}
......@@ -21,9 +21,23 @@ package org.jkiss.dbeaver.ui.search.data;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.data.DBDDataReceiver;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose;
import org.jkiss.dbeaver.model.exec.DBCResultSet;
import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSDataSearcher;
import org.jkiss.dbeaver.model.struct.DBSFolder;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
import org.jkiss.dbeaver.ui.search.IObjectSearchListener;
import org.jkiss.dbeaver.ui.search.IObjectSearchQuery;
import org.jkiss.utils.CommonUtils;
import java.util.*;
public class SearchDataQuery implements IObjectSearchQuery {
......@@ -50,8 +64,52 @@ public class SearchDataQuery implements IObjectSearchQuery {
try {
String searchString = params.getSearchString();
monitor.subTask("Collect tables");
List<DBSDataSearcher> searchers = new ArrayList<DBSDataSearcher>();
for (DBSObject object : params.sources) {
addSearchers(monitor, searchers, object);
}
Set<DBPDataSource> dataSources = new HashSet<DBPDataSource>();
for (DBSDataSearcher searcher : searchers) {
dataSources.add(searcher.getDataSource());
}
// Search
long flags = 0;
if (params.caseSensitive) flags |= DBSDataSearcher.FLAG_CASE_SENSITIVE;
if (params.fastSearch) flags |= DBSDataSearcher.FLAG_FAST_SEARCH;
if (params.searchNumbers) flags |= DBSDataSearcher.FLAG_SEARCH_NUMBERS;
if (params.searchLOBs) flags |= DBSDataSearcher.FLAG_SEARCH_LOBS;
int objectsFound = 0;
monitor.beginTask(
"Search \"" + searchString + "\" in " + searchers.size() + " table(s) / " + dataSources.size() + " database(s)",
searchers.size());
try {
for (DBSDataSearcher searcher : searchers) {
if (monitor.isCanceled()) {
break;
}
DBCSession session = searcher.getDataSource().openSession(monitor, DBCExecutionPurpose.UTIL, DBUtils.getObjectFullName(searcher));
try {
DBDDataReceiver dataReceiver = new TestDataReceiver();
searcher.findRows(session, dataReceiver, searchString, flags);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
finally {
session.close();
}
if (objectsFound >= params.maxResults) {
break;
}
monitor.worked(1);
}
/*
DBNModel navigatorModel = DBeaverCore.getInstance().getNavigatorModel();
Collection<DBSObjectReference> objects = structureAssistant.findObjectsByMask(
monitor,
params.getParentObject(),
......@@ -80,16 +138,67 @@ public class SearchDataQuery implements IObjectSearchQuery {
listener.objectsFound(monitor, nodes);
}
*/
} finally {
monitor.done();
}
} finally {
listener.searchFinished();
}
}
private void addSearchers(DBRProgressMonitor monitor, List<DBSDataSearcher> searchers, DBSObject object) throws DBException {
if (monitor.isCanceled()) {
return;
}
Collection<? extends DBSObject> children = null;
if (object instanceof DBSDataSearcher) {
if (!searchers.contains(object)) {
searchers.add((DBSDataSearcher) object);
}
} else if (object instanceof DBSObjectContainer) {
children = ((DBSObjectContainer) object).getChildren(monitor);
} else if (object instanceof DBSFolder) {
children = ((DBSFolder) object).getChildrenObjects(monitor);
}
if (!CommonUtils.isEmpty(children)) {
for (DBSObject child : children) {
if (monitor.isCanceled()) {
return;
}
addSearchers(monitor, searchers, child);
}
}
}
public static SearchDataQuery createQuery(SearchDataParams params)
throws DBException
{
return new SearchDataQuery(params);
}
private class TestDataReceiver implements DBDDataReceiver {
@Override
public void fetchStart(DBCSession session, DBCResultSet resultSet) throws DBCException {
}
@Override
public void fetchRow(DBCSession session, DBCResultSet resultSet) throws DBCException {
}
@Override
public void fetchEnd(DBCSession session) throws DBCException {
}
@Override
public void close() {
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册