Skip to content
Snippets Groups Projects
Commit fd014207 authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

MAINT: refactor ResultSetIterator

parent f8626d56
No related branches found
No related tags found
1 merge request!65F permission checks
......@@ -40,7 +40,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.UUID;
import org.antlr.v4.runtime.CharStreams;
......@@ -57,7 +56,6 @@ import org.caosdb.server.database.access.Access;
import org.caosdb.server.database.backend.implementation.MySQL.ConnectionException;
import org.caosdb.server.database.backend.implementation.MySQL.MySQLHelper;
import org.caosdb.server.database.backend.transaction.RetrieveSparseEntity;
import org.caosdb.server.database.exceptions.TransactionException;
import org.caosdb.server.database.misc.DBHelper;
import org.caosdb.server.database.misc.TransactionBenchmark;
import org.caosdb.server.entity.Entity;
......@@ -72,6 +70,7 @@ import org.caosdb.server.permissions.EntityPermission;
import org.caosdb.server.query.CQLParser.CqContext;
import org.caosdb.server.query.CQLParsingErrorListener.ParsingError;
import org.caosdb.server.transaction.TransactionInterface;
import org.caosdb.server.utils.ResultSetIterator;
import org.jdom2.Element;
import org.slf4j.Logger;
......@@ -213,56 +212,6 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
}
}
/**
* A class for iterating over {@link ResultSet}
*
* <p>{@link ResultSet} only provides a `next` function which moves the cursor. The behavior is
* here mapped onto the functions of the Iterator interface. TODO Move this generic function?
* Check again if an implementation is available from elsewhere.
*/
public static class ResultSetIterator implements Iterator<IdVersionAclTriplet> {
public ResultSetIterator(final ResultSet resultset) {
this.resultSet = resultset;
}
private ResultSet resultSet;
private boolean cursorHasMoved = false;
private boolean currentIsValid = true;
public boolean hasNext() {
if (!this.cursorHasMoved) {
try {
this.currentIsValid = this.resultSet.next();
} catch (SQLException e) {
throw new TransactionException(e);
}
this.cursorHasMoved = true;
}
return this.currentIsValid;
};
public IdVersionAclTriplet next() {
if (!this.cursorHasMoved) {
try {
this.currentIsValid = this.resultSet.next();
} catch (SQLException e) {
throw new TransactionException(e);
}
}
this.cursorHasMoved = false;
if (!this.currentIsValid) {
throw new NoSuchElementException();
}
try {
final Integer id = resultSet.getInt("id");
final String acl_str = bytes2UTF8(resultSet.getBytes("ACL"));
return new IdVersionAclTriplet(id, "", acl_str);
} catch (SQLException e) {
throw new TransactionException(e);
}
}
}
/** A data class for storing triplets of (Entity ID, version hash, ACL string) */
public static class IdVersionAclTriplet {
public IdVersionAclTriplet(final Integer id, final String version, final String acl) {
......
package org.caosdb.server.utils;
import static org.caosdb.server.database.DatabaseUtils.bytes2UTF8;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.caosdb.server.database.exceptions.TransactionException;
import org.caosdb.server.query.Query.IdVersionAclTriplet;
/**
* A class for iterating over {@link ResultSet}
*
* <p>{@link ResultSet} only provides a `next` function which moves the cursor. The behavior is here
* mapped onto the functions of the Iterator interface. TODO Move this generic function? Check again
* if an implementation is available from elsewhere.
*/
public class ResultSetIterator implements Iterator<IdVersionAclTriplet> {
public ResultSetIterator(final ResultSet resultset) {
this.resultSet = resultset;
}
private ResultSet resultSet;
private boolean cursorHasMoved = false;
private boolean currentIsValid = true;
public boolean hasNext() {
if (!this.cursorHasMoved) {
try {
this.currentIsValid = this.resultSet.next();
} catch (SQLException e) {
throw new TransactionException(e);
}
this.cursorHasMoved = true;
}
return this.currentIsValid;
};
public IdVersionAclTriplet next() {
if (!this.cursorHasMoved) {
try {
this.currentIsValid = this.resultSet.next();
} catch (SQLException e) {
throw new TransactionException(e);
}
}
this.cursorHasMoved = false;
if (!this.currentIsValid) {
throw new NoSuchElementException();
}
try {
final Integer id = resultSet.getInt("id");
final String acl_str = bytes2UTF8(resultSet.getBytes("ACL"));
return new IdVersionAclTriplet(id, "", acl_str);
} catch (SQLException e) {
throw new TransactionException(e);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment