This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push:
new 64a5c73 [LOG4J2-2762] [JDBC] MS-SQL Server JDBC driver throws
SQLServerException when inserting a null value for a VARBINARY column.
64a5c73 is described below
commit 64a5c73636cef24c5cbb70143eef99536944d188
Author: Gary Gregory <[email protected]>
AuthorDate: Sat Jan 18 10:28:04 2020 -0500
[LOG4J2-2762] [JDBC] MS-SQL Server JDBC driver throws SQLServerException
when inserting a null value for a VARBINARY column.
---
.../logging/log4j/jdbc/appender/JdbcDatabaseManager.java | 15 ++++++++-------
src/changes/changes.xml | 3 +++
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git
a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
index e2f2be5..ff7baa4 100644
---
a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
+++
b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
@@ -677,7 +677,13 @@ public final class JdbcDatabaseManager extends
AbstractDatabaseManager {
* Sets the given Object in the prepared statement. The value is truncated
if needed.
*/
private void setStatementObject(final int j, final String nameKey, final
Object value) throws SQLException {
- statement.setObject(j, truncate(nameKey, value));
+ if (value == null) {
+ // [LOG4J2-2762] [JDBC] MS-SQL Server JDBC driver throws
SQLServerException when inserting a null value for a VARBINARY column.
+ // Calling setNull() instead of setObject() for null values fixes
[LOG4J2-2762].
+ this.statement.setNull(j, columnMetaData.get(nameKey).getType());
+ } else {
+ statement.setObject(j, truncate(nameKey, value));
+ }
}
@Override
@@ -748,12 +754,7 @@ public final class JdbcDatabaseManager extends
AbstractDatabaseManager {
} else {
final Object value =
TypeConverters.convert(layout.toSerializable(event), mapping.getType(),
null);
- if (value == null) {
- // TODO We might need to always initialize the
columnMetaData to specify the type.
- this.statement.setNull(j++, Types.NULL);
- } else {
- setStatementObject(j++, mapping.getNameKey(),
value);
- }
+ setStatementObject(j++, mapping.getNameKey(),
value);
}
}
}
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d1175e1..f47cfa8 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -199,6 +199,9 @@
<action issue="LOG4J2-2754" dev="ckozak" type="fix">
LoaderUtil.getClassLoaders may discover additional loaders and no
longer erroneously returns a result with a null element in some environments.
</action>
+ <action issue="LOG4J2-2762" dev="ggregory" type="fix" due-to="Gary
Gregory">
+ [JDBC] MS-SQL Server JDBC driver throws SQLServerException when
inserting a null value for a VARBINARY column.
+ </action>
</release>
<release version="2.13.0" date="2019-12-11" description="GA Release
2.13.0">
<action issue="LOG4J2-2058" dev="rgoers" type="fix">