diff --git a/ebean-core-type/src/main/java/io/ebean/core/type/DataReader.java b/ebean-core-type/src/main/java/io/ebean/core/type/DataReader.java index 45fba0e0e..a8ace12be 100644 --- a/ebean-core-type/src/main/java/io/ebean/core/type/DataReader.java +++ b/ebean-core-type/src/main/java/io/ebean/core/type/DataReader.java @@ -11,8 +11,6 @@ public interface DataReader { boolean next() throws SQLException; - void resetColumnPosition(); - void incrementPos(int increment); byte[] getBinaryBytes() throws SQLException; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java index c12534146..3c1050faf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java @@ -1,13 +1,8 @@ package io.ebeaninternal.server.core; -import io.ebean.EbeanServer; import io.ebean.Transaction; import io.ebean.util.JdbcClose; -import io.ebeaninternal.api.BindParams; -import io.ebeaninternal.api.SpiEbeanServer; -import io.ebeaninternal.api.SpiQuery; -import io.ebeaninternal.api.SpiSqlBinding; -import io.ebeaninternal.api.SpiTransaction; +import io.ebeaninternal.api.*; import io.ebeaninternal.server.lib.Str; import io.ebeaninternal.server.persist.Binder; import io.ebeaninternal.server.persist.TrimLogSql; @@ -83,11 +78,6 @@ public abstract class AbstractSqlQueryRequest { return transaction.isLogSql(); } - /** - * Set the resultSet and associated query plan if known. - */ - abstract void setResultSet(ResultSet resultSet, Object queryPlanKey) throws SQLException; - /** * Return the bindLog for this request. */ @@ -95,12 +85,15 @@ public abstract class AbstractSqlQueryRequest { return bindLog; } + /** + * Set the resultSet and associated query plan if known. + */ + abstract void setResultSet(ResultSet resultSet, Object queryPlanKey) throws SQLException; + /** * Return true if we can navigate to the next row. */ - public boolean next() throws SQLException { - return resultSet.next(); - } + public abstract boolean next() throws SQLException; protected abstract void requestComplete(); @@ -113,7 +106,6 @@ public abstract class AbstractSqlQueryRequest { JdbcClose.close(pstmt); } - /** * Prepare the SQL taking into account named bind parameters. */ diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java index 2372ed7c3..b988c83b5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java @@ -110,9 +110,12 @@ public final class DtoQueryRequest extends AbstractSqlQueryRequest { return queryEngine.findList(this); } + public boolean next() throws SQLException { + return dataReader.next(); + } + @SuppressWarnings("unchecked") public T readNextBean() throws SQLException { - dataReader.resetColumnPosition(); return (T) plan.readRow(dataReader); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/RelationalQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/RelationalQueryRequest.java index 7850139c7..9f1413031 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/RelationalQueryRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/RelationalQueryRequest.java @@ -139,6 +139,11 @@ public final class RelationalQueryRequest extends AbstractSqlQueryRequest { rows++; } + @Override + public boolean next() throws SQLException { + return resultSet.next(); + } + public List mapList(RowMapper mapper) throws SQLException { List list = new ArrayList<>(); while (next()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQuery.java index 9f30e9a29..49182242e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQuery.java @@ -486,14 +486,11 @@ public class CQuery implements DbReadContext, CancelableQuery, SpiProfileTran * Return true if we can move to the next resultSet row. */ private boolean moveToNextRow() throws SQLException { - if (!dataReader.next()) { noMoreRows = true; return false; } - rowCount++; - dataReader.resetColumnPosition(); return true; } @@ -502,7 +499,6 @@ public class CQuery implements DbReadContext, CancelableQuery, SpiProfileTran } boolean readBean() throws SQLException { - boolean result = hasNext(); updateExecutionStatistics(); return result; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryFetchSingleAttribute.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryFetchSingleAttribute.java index 45fabfde7..9fd7278cc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryFetchSingleAttribute.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryFetchSingleAttribute.java @@ -111,7 +111,6 @@ class CQueryFetchSingleAttribute implements SpiProfileTransactionEvent { value = new CountedValue<>(value, dataReader.getLong()); } result.add(value); - dataReader.resetColumnPosition(); rowCount++; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/RsetDataReader.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/RsetDataReader.java index 3448251d5..9763a5667 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/RsetDataReader.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/RsetDataReader.java @@ -43,12 +43,8 @@ public class RsetDataReader implements DataReader { @Override public boolean next() throws SQLException { - return rset.next(); - } - - @Override - public void resetColumnPosition() { pos = 0; + return rset.next(); } @Override @@ -75,7 +71,6 @@ public class RsetDataReader implements DataReader { return rset.getBigDecimal(pos()); } - @Override public InputStream getBinaryStream() throws SQLException { return rset.getBinaryStream(pos()); @@ -84,19 +79,13 @@ public class RsetDataReader implements DataReader { @Override public Boolean getBoolean() throws SQLException { boolean v = rset.getBoolean(pos()); - if (rset.wasNull()) { - return null; - } - return v; + return rset.wasNull() ? null : v; } @Override public Byte getByte() throws SQLException { byte v = rset.getByte(pos()); - if (rset.wasNull()) { - return null; - } - return v; + return rset.wasNull() ? null : v; } @Override @@ -117,62 +106,42 @@ public class RsetDataReader implements DataReader { @Override public Double getDouble() throws SQLException { double v = rset.getDouble(pos()); - if (rset.wasNull()) { - return null; - } - return v; + return rset.wasNull() ? null : v; } @Override public Float getFloat() throws SQLException { float v = rset.getFloat(pos()); - if (rset.wasNull()) { - return null; - } - return v; + return rset.wasNull() ? null : v; } @Override public Integer getInt() throws SQLException { int v = rset.getInt(pos()); - if (rset.wasNull()) { - return null; - } - return v; + return rset.wasNull() ? null : v; } - @Override public Long getLong() throws SQLException { long v = rset.getLong(pos()); - if (rset.wasNull()) { - return null; - } - return v; + return rset.wasNull() ? null : v; } - public Ref getRef() throws SQLException { return rset.getRef(pos()); } - @Override public Short getShort() throws SQLException { short s = rset.getShort(pos()); - if (rset.wasNull()) { - return null; - } - return s; + return rset.wasNull() ? null : s; } - @Override public String getString() throws SQLException { return rset.getString(pos()); } - @Override public Time getTime() throws SQLException { Calendar cal = dataTimeZone.getTimeZone(); @@ -196,14 +165,10 @@ public class RsetDataReader implements DataReader { @Override public String getStringFromStream() throws SQLException { Reader reader = rset.getCharacterStream(pos()); - if (reader == null) { - return null; - } - return readStringLob(reader); + return reader == null ? null : readStringLob(reader); } protected String readStringLob(Reader reader) throws SQLException { - char[] buffer = new char[clobBufferSize]; int readLength; StringBuilder out = new StringBuilder(stringInitialSize); @@ -215,7 +180,6 @@ public class RsetDataReader implements DataReader { } catch (IOException e) { throw new SQLException("IOException reading Clob " + e.getMessage()); } - return out.toString(); } @@ -226,19 +190,16 @@ public class RsetDataReader implements DataReader { } protected byte[] getBinaryLob(InputStream in) throws SQLException { - if (in == null) { return null; } try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { - byte[] buf = new byte[bufferSize]; int len; while ((len = in.read(buf, 0, buf.length)) != -1) { out.write(buf, 0, len); } byte[] data = out.toByteArray(); - if (data.length == 0) { data = null; }