diff --git a/orientdb/pom.xml b/orientdb/pom.xml index 8540497bc318600dd92421d26e9862236c609ee1..32745ae331d914b5dd54d349a03ab85e3db96fad 100644 --- a/orientdb/pom.xml +++ b/orientdb/pom.xml @@ -28,7 +28,7 @@ <dependency> <groupId>com.orientechnologies</groupId> <artifactId>orientdb-core</artifactId> - <version>1.0.1</version> + <version>1.7.10</version> </dependency> </dependencies> </project> diff --git a/orientdb/src/main/java/com/yahoo/ycsb/db/OrientDBClient.java b/orientdb/src/main/java/com/yahoo/ycsb/db/OrientDBClient.java index 490851a72d79597e436cdc1b5edcfaa90dacb6c2..692d56d6e528a850132bbdae2a9fffd3bd05c849 100644 --- a/orientdb/src/main/java/com/yahoo/ycsb/db/OrientDBClient.java +++ b/orientdb/src/main/java/com/yahoo/ycsb/db/OrientDBClient.java @@ -7,16 +7,11 @@ package com.yahoo.ycsb.db; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map.Entry; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; - import com.orientechnologies.orient.core.config.OGlobalConfiguration; import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx; +import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.dictionary.ODictionary; +import com.orientechnologies.orient.core.index.OIndexCursor; import com.orientechnologies.orient.core.intent.OIntentMassiveInsert; import com.orientechnologies.orient.core.record.ORecordInternal; import com.orientechnologies.orient.core.record.impl.ODocument; @@ -25,6 +20,12 @@ import com.yahoo.ycsb.DB; import com.yahoo.ycsb.DBException; import com.yahoo.ycsb.StringByteIterator; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; + /** * OrientDB client for YCSB framework. * @@ -40,8 +41,8 @@ import com.yahoo.ycsb.StringByteIterator; */ public class OrientDBClient extends DB { - private ODatabaseDocumentTx db; private static final String CLASS = "usertable"; + private ODatabaseDocumentTx db; private ODictionary<ORecordInternal<?>> dictionary; /** @@ -51,7 +52,12 @@ public class OrientDBClient extends DB { // initialize OrientDB driver Properties props = getProperties(); - String url = props.getProperty("orientdb.url", "local:C:/temp/databases/ycsb"); + String url; + if (System.getProperty("os.name").toLowerCase().contains("win")) + url = props.getProperty("orientdb.url", "plocal:C:/temp/databases/ycsb"); + else + url = props.getProperty("orientdb.url", "plocal:/temp/databases/ycsb"); + String user = props.getProperty("orientdb.user", "admin"); String password = props.getProperty("orientdb.password", "admin"); Boolean newdb = Boolean.parseBoolean(props.getProperty("orientdb.newdb", "false")); @@ -206,13 +212,16 @@ public class OrientDBClient extends DB { */ public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { try { - final Collection<ODocument> documents = dictionary.getIndex().getEntriesMajor(startkey, true, recordcount); - for (ODocument document : documents) { - final HashMap<String, ByteIterator> entry = new HashMap<String, ByteIterator>(fields.size()); - result.add(entry); + final OIndexCursor entries = dictionary.getIndex().iterateEntriesMajor(startkey, true, true); + while (entries.hasNext()) { + final Entry<Object, OIdentifiable> entry = entries.nextEntry(); + final ODocument document = entry.getValue().getRecord(); + + final HashMap<String, ByteIterator> map = new HashMap<String, ByteIterator>(); + result.add(map); for (String field : fields) - entry.put(field, new StringByteIterator((String) document.field(field))); + map.put(field, new StringByteIterator((String) document.field(field))); } return 0;