Mercurial > hg > monetdb-java
changeset 114:2867df9b4d2e embedded
Small bug fixes
author | Pedro Ferreira <pedro.ferreira@monetdbsolutions.com> |
---|---|
date | Wed, 01 Feb 2017 18:06:36 +0100 (2017-02-01) |
parents | 0cfaeec9afcb |
children | 595d455b70a2 |
files | src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java src/main/java/nl/cwi/monetdb/mcl/protocol/AbstractProtocol.java src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiProtocol.java |
diffstat | 3 files changed, 17 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java +++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java @@ -1514,7 +1514,7 @@ public abstract class MonetConnection ex int size = (cachesize != 0 && !isEmbedded) ? cachesize : MonetConnection.this.getDefFetchsize(); size = maxrows != 0 ? Math.min(maxrows, size) : size; // don't do work if it's not needed - if (!language.getRepresentation().equals("sql") && size != curReplySize && + if (!isEmbedded && language.getRepresentation().equals("sql") && size != curReplySize && !Arrays.deepEquals(templ, language.getCommandTemplates())) { sendControlCommand(ControlCommands.REPLY_SIZE, size); // store the reply size after a successful change @@ -1557,7 +1557,7 @@ public abstract class MonetConnection ex case StarterHeaders.Q_TABLE: case StarterHeaders.Q_PREPARE: { res = protocol.getNextResultSetResponse(MonetConnection.this, - ResponseList.this, this.seqnr); + ResponseList.this, this.seqnr, this.maxrows); ResultSetResponse rsreponse = (ResultSetResponse) res; // only add this resultset to the hashmap if it can possibly // have an additional datablock
--- a/src/main/java/nl/cwi/monetdb/mcl/protocol/AbstractProtocol.java +++ b/src/main/java/nl/cwi/monetdb/mcl/protocol/AbstractProtocol.java @@ -9,11 +9,7 @@ package nl.cwi.monetdb.mcl.protocol; import nl.cwi.monetdb.jdbc.MonetConnection; -import nl.cwi.monetdb.mcl.responses.AutoCommitResponse; -import nl.cwi.monetdb.mcl.responses.SchemaResponse; -import nl.cwi.monetdb.mcl.responses.UpdateResponse; -import nl.cwi.monetdb.mcl.responses.DataBlockResponse; -import nl.cwi.monetdb.mcl.responses.ResultSetResponse; +import nl.cwi.monetdb.mcl.responses.*; import java.io.IOException; import java.text.ParsePosition; @@ -177,11 +173,12 @@ public abstract class AbstractProtocol { * @param con The current MonetDB's JDBC connection * @param list The Response List this result set will belong to * @param seqnr The sequence number of this result set on the Response List + * @param maxrows A maxrows to set if so * @return The ResultSet instance * @throws ProtocolException If an error in the underlying connection happened. */ public abstract ResultSetResponse getNextResultSetResponse(MonetConnection con, MonetConnection.ResponseList list, - int seqnr) throws ProtocolException; + int seqnr, int maxrows) throws ProtocolException; /** * Gets the next UpdateResponse response from the server.
--- a/src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiProtocol.java +++ b/src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiProtocol.java @@ -10,14 +10,14 @@ package nl.cwi.monetdb.mcl.protocol.oldm import nl.cwi.monetdb.jdbc.MonetConnection; import nl.cwi.monetdb.mcl.connection.mapi.OldMapiSocket; +import nl.cwi.monetdb.mcl.protocol.AbstractProtocol; import nl.cwi.monetdb.mcl.protocol.ProtocolException; -import nl.cwi.monetdb.mcl.protocol.AbstractProtocol; import nl.cwi.monetdb.mcl.protocol.ServerResponses; import nl.cwi.monetdb.mcl.protocol.StarterHeaders; import nl.cwi.monetdb.mcl.responses.AutoCommitResponse; -import nl.cwi.monetdb.mcl.responses.UpdateResponse; import nl.cwi.monetdb.mcl.responses.DataBlockResponse; import nl.cwi.monetdb.mcl.responses.ResultSetResponse; +import nl.cwi.monetdb.mcl.responses.UpdateResponse; import java.io.IOException; import java.nio.CharBuffer; @@ -121,9 +121,11 @@ public class OldMapiProtocol extends Abs this.currentServerResponseHeader = OldMapiServerResponseParser.ParseOldMapiServerResponse(this); if (this.currentServerResponseHeader == ServerResponses.ERROR && !this.lineBuffer.toString() .matches("^[0-9A-Z]{5}!.+")) { + int limit = this.lineBuffer.limit(); CharBuffer newbuffer = CharBuffer.wrap(new char[this.lineBuffer.capacity() + 7]); - newbuffer.put("!22000!"); - newbuffer.put(this.lineBuffer.array()); + newbuffer.put("!22000"); + newbuffer.put(this.lineBuffer.array(), 0, limit); + newbuffer.limit(limit + 6); newbuffer.flip(); this.lineBuffer = newbuffer; } @@ -146,16 +148,20 @@ public class OldMapiProtocol extends Abs * @param con The current MonetDB's JDBC connection * @param list The Response List this result set will belong to * @param seqnr The sequence number of this result set on the Response List + * @param maxrows A maxrows to set if so * @return The ResultSet instance * @throws ProtocolException If an error in the underlying connection happened. */ @Override - public ResultSetResponse getNextResultSetResponse(MonetConnection con, MonetConnection.ResponseList list, int seqnr) - throws ProtocolException { + public ResultSetResponse getNextResultSetResponse(MonetConnection con, MonetConnection.ResponseList list, int seqnr, + int maxrows) throws ProtocolException { int id = OldMapiStartOfHeaderParser.GetNextResponseDataAsInt(this); //The order cannot be switched!! int tuplecount = OldMapiStartOfHeaderParser.GetNextResponseDataAsInt(this); int columncount = OldMapiStartOfHeaderParser.GetNextResponseDataAsInt(this); int rowcount = OldMapiStartOfHeaderParser.GetNextResponseDataAsInt(this); + if (maxrows != 0 && tuplecount > maxrows) { + tuplecount = maxrows; + } return new ResultSetResponse(con, list, id, seqnr, rowcount, tuplecount, columncount); }