diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java | 34 |
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); |