summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java66
1 files changed, 36 insertions, 30 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java b/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
index c2d66f5c..7916c75f 100644
--- a/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
+++ b/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.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) 2012
+ Copyright (C) 2013
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -43,9 +43,9 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.ObjectBundle;
import de.lmu.ifi.dbs.elki.index.Index;
import de.lmu.ifi.dbs.elki.index.IndexFactory;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.logging.statistics.Duration;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.Parameterizable;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParameter;
@@ -98,7 +98,7 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
this.idrep = null;
// Add indexes.
- if(indexFactories != null) {
+ if (indexFactories != null) {
this.indexFactories.addAll(indexFactories);
}
}
@@ -116,8 +116,8 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
*/
@Override
public void initialize() {
- if(databaseConnection != null) {
- if(LOG.isDebugging()) {
+ if (databaseConnection != null) {
+ if (LOG.isDebugging()) {
LOG.debugFine("Loading data from database connection.");
}
MultipleObjectsBundle objpackages = databaseConnection.loadData();
@@ -127,12 +127,11 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
// Find DBID column
int idrepnr = findDBIDColumn(objpackages);
// Build DBID array
- if(idrepnr == -1) {
+ if (idrepnr == -1) {
this.ids = DBIDUtil.generateStaticDBIDRange(objpackages.dataLength());
- }
- else {
+ } else {
final ArrayModifiableDBIDs newids = DBIDUtil.newArray(objpackages.dataLength());
- for(int j = 0; j < objpackages.dataLength(); j++) {
+ for (int j = 0; j < objpackages.dataLength(); j++) {
DBID newid = (DBID) objpackages.data(j, idrepnr);
newids.add(newid);
}
@@ -148,11 +147,11 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
Relation<?>[] targets = alignColumns(objpackages);
DBIDIter newid = ids.iter();
- for(int j = 0; j < objpackages.dataLength(); j++, newid.advance()) {
+ for (int j = 0; j < objpackages.dataLength(); j++, newid.advance()) {
// insert object
- for(int i = 0; i < targets.length; i++) {
+ for (int i = 0; i < targets.length; i++) {
// DBIDs were handled above.
- if(i == idrepnr) {
+ if (i == idrepnr) {
continue;
}
@SuppressWarnings("unchecked")
@@ -161,18 +160,26 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
}
}
- for(Relation<?> relation : relations) {
+ for (Relation<?> relation : relations) {
SimpleTypeInformation<?> meta = relation.getDataTypeInformation();
// Try to add indexes where appropriate
- for(IndexFactory<?, ?> factory : indexFactories) {
- if(factory.getInputTypeRestriction().isAssignableFromType(meta)) {
+ for (IndexFactory<?, ?> factory : indexFactories) {
+ if (factory.getInputTypeRestriction().isAssignableFromType(meta)) {
@SuppressWarnings("unchecked")
final IndexFactory<Object, ?> ofact = (IndexFactory<Object, ?>) factory;
@SuppressWarnings("unchecked")
final Relation<Object> orep = (Relation<Object>) relation;
final Index index = ofact.instantiate(orep);
+ Duration duration = LOG.isStatistics() ? LOG.newDuration(index.getClass().getName() + ".construction") : null;
+ if (duration != null) {
+ duration.begin();
+ }
+ index.initialize();
+ if (duration != null) {
+ duration.end();
+ LOG.statistics(duration);
+ }
addIndex(index);
- index.insertAll(ids);
}
}
}
@@ -184,7 +191,7 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
@Override
public void addIndex(Index index) {
- if(LOG.isDebuggingFiner()) {
+ if (LOG.isDebuggingFiner()) {
LOG.debugFine("Adding index: " + index);
}
this.indexes.add(index);
@@ -192,7 +199,6 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
this.addChildResult(index);
}
-
/**
* Find an DBID column.
*
@@ -200,9 +206,9 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
* @return DBID column
*/
protected int findDBIDColumn(ObjectBundle pack) {
- for(int i = 0; i < pack.metaLength(); i++) {
+ for (int i = 0; i < pack.metaLength(); i++) {
SimpleTypeInformation<?> meta = pack.meta(i);
- if(TypeUtil.DBID.isAssignableFromType(meta)) {
+ if (TypeUtil.DBID.isAssignableFromType(meta)) {
return i;
}
}
@@ -220,19 +226,19 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
// align representations.
Relation<?>[] targets = new Relation<?>[pack.metaLength()];
BitSet used = new BitSet(relations.size());
- for(int i = 0; i < targets.length; i++) {
+ for (int i = 0; i < targets.length; i++) {
SimpleTypeInformation<?> meta = pack.meta(i);
// TODO: aggressively try to match exact metas first?
// Try to match unused representations only
- for(int j = used.nextClearBit(0); j >= 0 && j < relations.size(); j = used.nextClearBit(j + 1)) {
+ for (int j = used.nextClearBit(0); j >= 0 && j < relations.size(); j = used.nextClearBit(j + 1)) {
Relation<?> relation = relations.get(j);
- if(relation.getDataTypeInformation().isAssignableFromType(meta)) {
+ if (relation.getDataTypeInformation().isAssignableFromType(meta)) {
targets[i] = relation;
used.set(j);
break;
}
}
- if(targets[i] == null) {
+ if (targets[i] == null) {
targets[i] = addNewRelation(meta);
used.set(relations.size() - 1);
}
@@ -249,7 +255,7 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
private Relation<?> addNewRelation(SimpleTypeInformation<?> meta) {
@SuppressWarnings("unchecked")
SimpleTypeInformation<Object> ometa = (SimpleTypeInformation<Object>) meta;
- Relation<?> relation = new MaterializedRelation<Object>(this, ometa, ids);
+ Relation<?> relation = new MaterializedRelation<>(this, ometa, ids);
relations.add(relation);
getHierarchy().add(this, relation);
return relation;
@@ -282,13 +288,13 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
// Get database connection.
- final ObjectParameter<DatabaseConnection> dbcP = new ObjectParameter<DatabaseConnection>(OptionID.DATABASE_CONNECTION, DatabaseConnection.class, FileBasedDatabaseConnection.class);
- if(config.grab(dbcP)) {
+ final ObjectParameter<DatabaseConnection> dbcP = new ObjectParameter<>(Database.DATABASE_CONNECTION_ID, DatabaseConnection.class, FileBasedDatabaseConnection.class);
+ if (config.grab(dbcP)) {
databaseConnection = dbcP.instantiateClass(config);
}
// Get indexes.
- final ObjectListParameter<IndexFactory<?, ?>> indexFactoryP = new ObjectListParameter<IndexFactory<?, ?>>(INDEX_ID, IndexFactory.class, true);
- if(config.grab(indexFactoryP)) {
+ final ObjectListParameter<IndexFactory<?, ?>> indexFactoryP = new ObjectListParameter<>(INDEX_ID, IndexFactory.class, true);
+ if (config.grab(indexFactoryP)) {
indexFactories = indexFactoryP.instantiateClasses(config);
}
}
@@ -298,4 +304,4 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
return new StaticArrayDatabase(databaseConnection, indexFactories);
}
}
-} \ No newline at end of file
+}