Skip to content

Commit

Permalink
[CONJ-817] correction handling default data when resultset is using b…
Browse files Browse the repository at this point in the history
…inary protocol
  • Loading branch information
rusher committed Sep 4, 2020
1 parent 79a9b64 commit a8f9b5f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public class SelectResultSet implements ResultSet {
private boolean isEof;
private boolean callableResult;
private MariaDbStatement statement;
private RowProtocol row;
protected RowProtocol row;
private int dataFetchTime;
private boolean streaming;
private byte[][] data;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
import org.mariadb.jdbc.*;
import org.mariadb.jdbc.internal.ColumnType;
import org.mariadb.jdbc.internal.com.read.dao.Results;
import org.mariadb.jdbc.internal.com.read.resultset.rowprotocol.BinaryRowProtocol;
import org.mariadb.jdbc.internal.com.send.parameters.*;
import org.mariadb.jdbc.internal.io.input.PacketInputStream;
import org.mariadb.jdbc.internal.protocol.Protocol;
Expand Down Expand Up @@ -1060,22 +1061,26 @@ public void insertRow() throws SQLException {
StringBuilder valueClause = new StringBuilder();
StringBuilder returningClause = new StringBuilder();
int fieldsIndex = 0;
boolean firstParam = true;

for (int pos = 0; pos < columnInformationLength; pos++) {
UpdatableColumnDefinition colInfo = getUpdatableColumns()[pos];

if (pos != 0) {
insertSql.append(",");
valueClause.append(", ");
returningClause.append(", ");
}

insertSql.append("`").append(colInfo.getOriginalName()).append("`");
returningClause.append("`").append(colInfo.getOriginalName()).append("`");
valueClause.append("?");

ParameterHolder value = parameterHolders[pos];
if (value != null) {
if (!firstParam) {
insertSql.append(",");
valueClause.append(", ");
}
insertSql.append("`").append(colInfo.getOriginalName()).append("`");
valueClause.append("?");
paramMap.put((fieldsIndex++) + 1, value);
firstParam = false;
} else {
if (colInfo.isPrimary()) {
if (colInfo.isAutoIncrement() || colInfo.hasDefault()) {
Expand All @@ -1098,20 +1103,29 @@ public void insertRow() throws SQLException {
"Cannot call insertRow() not setting value for primary key %s",
colInfo.getOriginalName()));
}
paramMap.put((fieldsIndex++) + 1, new DefaultParameter());
} else {
paramMap.put(
(fieldsIndex++) + 1,
colInfo.hasDefault() ? new DefaultParameter() : new NullParameter());
// paramMap.put((fieldsIndex++) + 1, new DefaultParameter());
} else if (!colInfo.hasDefault()) {
if (!firstParam) {
insertSql.append(",");
valueClause.append(", ");
}
firstParam = false;
insertSql.append("`").append(colInfo.getOriginalName()).append("`");
valueClause.append("?");

paramMap.put((fieldsIndex++) + 1, new NullParameter());
}
}
}
insertSql.append(") VALUES (").append(valueClause).append(")");
if (connection.isServerMariaDb() && connection.versionGreaterOrEqual(10, 5, 1)) {
insertSql.append(" RETURNING ").append(returningClause);
}
ClientSidePreparedStatement insertPreparedStatement =
connection.clientPrepareStatement(insertSql.toString());

BasePrepareStatement insertPreparedStatement =
(row instanceof BinaryRowProtocol)
? connection.serverPrepareStatement(insertSql.toString())
: connection.clientPrepareStatement(insertSql.toString());

for (Map.Entry<Integer, ParameterHolder> entry : paramMap.entrySet()) {
insertPreparedStatement.setParameter(entry.getKey(), entry.getValue());
Expand Down

0 comments on commit a8f9b5f

Please sign in to comment.