From 57a5f067e4274f71cc16b7cd470c34fb4661c541 Mon Sep 17 00:00:00 2001 From: diego Dupin Date: Wed, 7 Sep 2022 16:21:57 +0200 Subject: [PATCH] [misc] client side prepare parameter setting avoiding null check for primitive parameter --- .../mariadb/jdbc/BasePreparedStatement.java | 14 ++++---- .../mariadb/jdbc/codec/NonNullParameter.java | 32 +++++++++++++++++++ 2 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/mariadb/jdbc/codec/NonNullParameter.java diff --git a/src/main/java/org/mariadb/jdbc/BasePreparedStatement.java b/src/main/java/org/mariadb/jdbc/BasePreparedStatement.java index 6918d9ff1..d4f4b55b1 100644 --- a/src/main/java/org/mariadb/jdbc/BasePreparedStatement.java +++ b/src/main/java/org/mariadb/jdbc/BasePreparedStatement.java @@ -294,7 +294,7 @@ public void setNull(int parameterIndex, int sqlType) throws SQLException { @Override public void setBoolean(int parameterIndex, boolean x) throws SQLException { checkIndex(parameterIndex); - parameters.set(parameterIndex - 1, new Parameter<>(BooleanCodec.INSTANCE, x)); + parameters.set(parameterIndex - 1, new NonNullParameter<>(BooleanCodec.INSTANCE, x)); } /** @@ -310,7 +310,7 @@ public void setBoolean(int parameterIndex, boolean x) throws SQLException { @Override public void setByte(int parameterIndex, byte x) throws SQLException { checkIndex(parameterIndex); - parameters.set(parameterIndex - 1, new Parameter<>(ByteCodec.INSTANCE, x)); + parameters.set(parameterIndex - 1, new NonNullParameter<>(ByteCodec.INSTANCE, x)); } /** @@ -326,7 +326,7 @@ public void setByte(int parameterIndex, byte x) throws SQLException { @Override public void setShort(int parameterIndex, short x) throws SQLException { checkIndex(parameterIndex); - parameters.set(parameterIndex - 1, new Parameter<>(ShortCodec.INSTANCE, x)); + parameters.set(parameterIndex - 1, new NonNullParameter<>(ShortCodec.INSTANCE, x)); } /** @@ -342,7 +342,7 @@ public void setShort(int parameterIndex, short x) throws SQLException { @Override public void setInt(int parameterIndex, int x) throws SQLException { checkIndex(parameterIndex); - parameters.set(parameterIndex - 1, new Parameter<>(IntCodec.INSTANCE, x)); + parameters.set(parameterIndex - 1, new NonNullParameter<>(IntCodec.INSTANCE, x)); } /** @@ -358,7 +358,7 @@ public void setInt(int parameterIndex, int x) throws SQLException { @Override public void setLong(int parameterIndex, long x) throws SQLException { checkIndex(parameterIndex); - parameters.set(parameterIndex - 1, new Parameter<>(LongCodec.INSTANCE, x)); + parameters.set(parameterIndex - 1, new NonNullParameter<>(LongCodec.INSTANCE, x)); } /** @@ -374,7 +374,7 @@ public void setLong(int parameterIndex, long x) throws SQLException { @Override public void setFloat(int parameterIndex, float x) throws SQLException { checkIndex(parameterIndex); - parameters.set(parameterIndex - 1, new Parameter<>(FloatCodec.INSTANCE, x)); + parameters.set(parameterIndex - 1, new NonNullParameter<>(FloatCodec.INSTANCE, x)); } /** @@ -390,7 +390,7 @@ public void setFloat(int parameterIndex, float x) throws SQLException { @Override public void setDouble(int parameterIndex, double x) throws SQLException { checkIndex(parameterIndex); - parameters.set(parameterIndex - 1, new Parameter<>(DoubleCodec.INSTANCE, x)); + parameters.set(parameterIndex - 1, new NonNullParameter<>(DoubleCodec.INSTANCE, x)); } /** diff --git a/src/main/java/org/mariadb/jdbc/codec/NonNullParameter.java b/src/main/java/org/mariadb/jdbc/codec/NonNullParameter.java new file mode 100644 index 000000000..966996de0 --- /dev/null +++ b/src/main/java/org/mariadb/jdbc/codec/NonNullParameter.java @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (c) 2012-2014 Monty Program Ab +// Copyright (c) 2015-2021 MariaDB Corporation Ab + +package org.mariadb.jdbc.codec; + +import java.io.IOException; +import java.sql.SQLException; +import org.mariadb.jdbc.client.Context; +import org.mariadb.jdbc.client.socket.Writer; +import org.mariadb.jdbc.plugin.Codec; + +public class NonNullParameter extends Parameter { + + public NonNullParameter(Codec codec, T value) { + super(codec, value); + } + + public NonNullParameter(Codec codec, T value, Long length) { + super(codec, value, length); + } + + @Override + public void encodeText(Writer encoder, Context context) throws IOException, SQLException { + codec.encodeText(encoder, context, this.value, null, length); + } + + @Override + public boolean isNull() { + return false; + } +}