summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java34
1 files changed, 29 insertions, 5 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java b/src/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java
index f20efcec..f9582039 100644
--- a/src/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java
+++ b/src/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2011
+ Copyright (C) 2012
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.database;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.ListIterator;
import de.lmu.ifi.dbs.elki.data.type.NoSupportedDataTypeException;
import de.lmu.ifi.dbs.elki.data.type.TypeInformation;
@@ -106,7 +107,7 @@ public abstract class AbstractDatabase extends AbstractHierarchicalResult implem
}
@Override
- public Collection<Index> getIndexes() {
+ public List<Index> getIndexes() {
return Collections.unmodifiableList(this.indexes);
}
@@ -151,6 +152,14 @@ public abstract class AbstractDatabase extends AbstractHierarchicalResult implem
return (Relation<O>) relation;
}
}
+ if (getLogger().isDebugging()) {
+ StringBuffer buf = new StringBuffer();
+ buf.append("No matching relation for type ").append(restriction.toString()).append(":\n");
+ for(Relation<?> relation : relations) {
+ buf.append(relation.getDataTypeInformation().toString()).append(",");
+ }
+ getLogger().debug(buf);
+ }
throw new NoSupportedDataTypeException(restriction);
}
@@ -175,8 +184,13 @@ public abstract class AbstractDatabase extends AbstractHierarchicalResult implem
if(distanceQuery == null) {
throw new AbortException("kNN query requested for 'null' distance!");
}
- for(Index idx : getIndexes()) {
+ ListIterator<Index> iter = indexes.listIterator(indexes.size());
+ while(iter.hasPrevious()) {
+ Index idx = iter.previous();
if(idx instanceof KNNIndex) {
+ if(getLogger().isDebuggingFinest()) {
+ getLogger().debugFinest("Considering index for kNN Query: " + idx);
+ }
@SuppressWarnings("unchecked")
final KNNIndex<O> knnIndex = (KNNIndex<O>) idx;
KNNQuery<O, D> q = knnIndex.getKNNQuery(distanceQuery, hints);
@@ -200,8 +214,13 @@ public abstract class AbstractDatabase extends AbstractHierarchicalResult implem
if(distanceQuery == null) {
throw new AbortException("Range query requested for 'null' distance!");
}
- for(Index idx : getIndexes()) {
+ ListIterator<Index> iter = indexes.listIterator(indexes.size());
+ while(iter.hasPrevious()) {
+ Index idx = iter.previous();
if(idx instanceof RangeIndex) {
+ if(getLogger().isDebuggingFinest()) {
+ getLogger().debugFinest("Considering index for range query: " + idx);
+ }
@SuppressWarnings("unchecked")
final RangeIndex<O> rangeIndex = (RangeIndex<O>) idx;
RangeQuery<O, D> q = rangeIndex.getRangeQuery(distanceQuery, hints);
@@ -225,8 +244,13 @@ public abstract class AbstractDatabase extends AbstractHierarchicalResult implem
if(distanceQuery == null) {
throw new AbortException("RKNN query requested for 'null' distance!");
}
- for(Index idx : getIndexes()) {
+ ListIterator<Index> iter = indexes.listIterator(indexes.size());
+ while(iter.hasPrevious()) {
+ Index idx = iter.previous();
if(idx instanceof RKNNIndex) {
+ if(getLogger().isDebuggingFinest()) {
+ getLogger().debugFinest("Considering index for RkNN Query: " + idx);
+ }
@SuppressWarnings("unchecked")
final RKNNIndex<O> rknnIndex = (RKNNIndex<O>) idx;
RKNNQuery<O, D> q = rknnIndex.getRKNNQuery(distanceQuery, hints);