summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian S. O'Neill <bronee@gmail.com>2007-08-09 17:57:59 +0000
committerBrian S. O'Neill <bronee@gmail.com>2007-08-09 17:57:59 +0000
commitd803c7dca98da1a487e2549dd0038801eb346b72 (patch)
treec666129e1737ffa4eb33abbe747e5fcda72a2915 /src
parenta28709aabca96f19023370dd072cb3dc131e0e99 (diff)
Yanked out support for fast skipping of JDBC results. JDBC drivers leak memory when this option is used.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/amazon/carbonado/repo/jdbc/JDBCCursor.java52
-rw-r--r--src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorage.java17
2 files changed, 7 insertions, 62 deletions
diff --git a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCCursor.java b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCCursor.java
index 28b73c7..985232c 100644
--- a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCCursor.java
+++ b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCCursor.java
@@ -37,27 +37,22 @@ class JDBCCursor<S extends Storable> extends AbstractCursor<S> {
private final JDBCStorage<S> mStorage;
private final Connection mConnection;
private final PreparedStatement mStatement;
- private final boolean mScrollInsensitiveReadOnly;
private ResultSet mResultSet;
private boolean mHasNext;
/**
- * @param scrollInsensitiveReadOnly when true, statement is
- * TYPE_SCROLL_INSENSITIVE and CONCUR_READ_ONLY.
* @throws SQLException from executeQuery on statement. Caller must clean
* up when this happens by closing statement and connection.
*/
JDBCCursor(JDBCStorage<S> storage,
Connection con,
- PreparedStatement statement,
- boolean scrollInsensitiveReadOnly)
+ PreparedStatement statement)
throws SQLException
{
mStorage = storage;
mConnection = con;
mStatement = statement;
- mScrollInsensitiveReadOnly = scrollInsensitiveReadOnly;
mResultSet = statement.executeQuery();
}
@@ -127,48 +122,11 @@ class JDBCCursor<S extends Storable> extends AbstractCursor<S> {
int actual = 0;
- if (amount > 1 && mScrollInsensitiveReadOnly) {
- // Skip a relative amount, which is preferred.
+ while (amount > 0) {
if (hasNext()) {
- ResultSet rs = mResultSet;
- try {
- int rowStart = rs.getRow();
- mHasNext = rs.relative(amount);
- int rowEnd = rs.getRow();
- if (rowEnd == 0) {
- // Skipped past the end. Move back to find the last row number.
- if (rs.previous() && (rowEnd = rs.getRow()) != 0) {
- rowEnd++;
- } else if (rs.last() && (rowEnd = rs.getRow()) != 0) {
- rowEnd++;
- } else {
- // No clue how many were skipped. It's at least one.
- rowEnd = rowStart + 1;
- }
- // Make sure ResultSet is closed below.
- mHasNext = false;
- }
- actual += rowEnd - rowStart;
- } catch (SQLException e) {
- try {
- close();
- } catch (FetchException e2) {
- // Don't care.
- }
- throw mStorage.getJDBCRepository().toFetchException(e);
- }
- if (!mHasNext) {
- close();
- }
- }
- } else {
- // Call next a bunch, which is likely slower than relative skipping.
- while (amount > 0) {
- if (hasNext()) {
- actual++;
- amount--;
- mHasNext = false;
- }
+ actual++;
+ amount--;
+ mHasNext = false;
}
}
diff --git a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorage.java b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorage.java
index 384f1bc..2421be7 100644
--- a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorage.java
+++ b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCStorage.java
@@ -488,24 +488,11 @@ class JDBCStorage<S extends Storable> extends StandardQueryFactory<S>
boolean forUpdate = mRepository.localTxnManager().isForUpdate();
Connection con = mRepository.getConnection();
try {
- boolean scrollInsensitiveReadOnly =
- mRepository.supportsScrollInsensitiveReadOnly();
-
- PreparedStatement ps;
-
- if (scrollInsensitiveReadOnly) {
- // Can support fast skipping.
- ps = con.prepareStatement
- (prepareSelect(values, forUpdate),
- ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
- } else {
- // Can't support fast skipping.
- ps = con.prepareStatement(prepareSelect(values, forUpdate));
- }
+ PreparedStatement ps = con.prepareStatement(prepareSelect(values, forUpdate));
try {
setParameters(ps, values);
- return new JDBCCursor<S>(JDBCStorage.this, con, ps, scrollInsensitiveReadOnly);
+ return new JDBCCursor<S>(JDBCStorage.this, con, ps);
} catch (Exception e) {
// in case of exception, close statement
try {