From 344b9e08baed36db2e0e2bc8898fda6b79f50dca Mon Sep 17 00:00:00 2001 From: Jeff Butler Date: Sat, 10 Jun 2023 09:06:30 -0400 Subject: [PATCH] Increase Test Coverage --- .../mybatis/dynamic/sql/delete/DeleteDSL.java | 5 ++-- .../sql/select/QueryExpressionDSL.java | 5 ++-- .../mybatis/dynamic/sql/update/UpdateDSL.java | 6 ++-- .../mybatis/dynamic/sql/util/Utilities.java | 28 +++++++++++++++++++ .../NamedParameterJdbcTemplateExtensions.java | 3 +- .../dynamic/sql/util/UtilitiesTest.java | 28 +++++++++++++++++++ 6 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 src/main/java/org/mybatis/dynamic/sql/util/Utilities.java create mode 100644 src/test/java/org/mybatis/dynamic/sql/util/UtilitiesTest.java diff --git a/src/main/java/org/mybatis/dynamic/sql/delete/DeleteDSL.java b/src/main/java/org/mybatis/dynamic/sql/delete/DeleteDSL.java index e405eccc3..1d660c4d4 100644 --- a/src/main/java/org/mybatis/dynamic/sql/delete/DeleteDSL.java +++ b/src/main/java/org/mybatis/dynamic/sql/delete/DeleteDSL.java @@ -27,6 +27,7 @@ import org.mybatis.dynamic.sql.common.OrderByModel; import org.mybatis.dynamic.sql.configuration.StatementConfiguration; import org.mybatis.dynamic.sql.util.Buildable; +import org.mybatis.dynamic.sql.util.Utilities; import org.mybatis.dynamic.sql.where.AbstractWhereFinisher; import org.mybatis.dynamic.sql.where.AbstractWhereStarter; import org.mybatis.dynamic.sql.where.WhereModel; @@ -50,9 +51,7 @@ private DeleteDSL(SqlTable table, String tableAlias, Function ad @Override public DeleteWhereBuilder where() { - if (whereBuilder == null) { - whereBuilder = new DeleteWhereBuilder(); - } + whereBuilder = Utilities.buildIfNecessary(whereBuilder, DeleteWhereBuilder::new); return whereBuilder; } diff --git a/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java b/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java index 22647f230..7a1c5ecae 100644 --- a/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java +++ b/src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java @@ -35,6 +35,7 @@ import org.mybatis.dynamic.sql.select.join.JoinSpecification; import org.mybatis.dynamic.sql.select.join.JoinType; import org.mybatis.dynamic.sql.util.Buildable; +import org.mybatis.dynamic.sql.util.Utilities; import org.mybatis.dynamic.sql.where.AbstractWhereFinisher; import org.mybatis.dynamic.sql.where.AbstractWhereStarter; import org.mybatis.dynamic.sql.where.WhereModel; @@ -68,9 +69,7 @@ protected QueryExpressionDSL(FromGatherer fromGatherer, SqlTable table, Strin @Override public QueryExpressionWhereBuilder where() { - if (whereBuilder == null) { - whereBuilder = new QueryExpressionWhereBuilder(); - } + whereBuilder = Utilities.buildIfNecessary(whereBuilder, QueryExpressionWhereBuilder::new); return whereBuilder; } diff --git a/src/main/java/org/mybatis/dynamic/sql/update/UpdateDSL.java b/src/main/java/org/mybatis/dynamic/sql/update/UpdateDSL.java index f9a855d2a..8fe9ab8b9 100644 --- a/src/main/java/org/mybatis/dynamic/sql/update/UpdateDSL.java +++ b/src/main/java/org/mybatis/dynamic/sql/update/UpdateDSL.java @@ -39,6 +39,7 @@ import org.mybatis.dynamic.sql.util.NullMapping; import org.mybatis.dynamic.sql.util.SelectMapping; import org.mybatis.dynamic.sql.util.StringConstantMapping; +import org.mybatis.dynamic.sql.util.Utilities; import org.mybatis.dynamic.sql.util.ValueMapping; import org.mybatis.dynamic.sql.util.ValueOrNullMapping; import org.mybatis.dynamic.sql.util.ValueWhenPresentMapping; @@ -70,10 +71,7 @@ public SetClauseFinisher set(SqlColumn column) { @Override public UpdateWhereBuilder where() { - if (whereBuilder == null) { - whereBuilder = new UpdateWhereBuilder(); - } - + whereBuilder = Utilities.buildIfNecessary(whereBuilder, UpdateWhereBuilder::new); return whereBuilder; } diff --git a/src/main/java/org/mybatis/dynamic/sql/util/Utilities.java b/src/main/java/org/mybatis/dynamic/sql/util/Utilities.java new file mode 100644 index 000000000..ec5ab5ab2 --- /dev/null +++ b/src/main/java/org/mybatis/dynamic/sql/util/Utilities.java @@ -0,0 +1,28 @@ +/* + * Copyright 2016-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.mybatis.dynamic.sql.util; + +import java.util.function.Supplier; + +public interface Utilities { + static T buildIfNecessary(T current, Supplier builder) { + return current == null ? builder.get() : current; + } + + static long safelyUnbox(Long l) { + return l == null ? 0 : l; + } +} diff --git a/src/main/java/org/mybatis/dynamic/sql/util/spring/NamedParameterJdbcTemplateExtensions.java b/src/main/java/org/mybatis/dynamic/sql/util/spring/NamedParameterJdbcTemplateExtensions.java index 250825c35..fdbe32f84 100644 --- a/src/main/java/org/mybatis/dynamic/sql/util/spring/NamedParameterJdbcTemplateExtensions.java +++ b/src/main/java/org/mybatis/dynamic/sql/util/spring/NamedParameterJdbcTemplateExtensions.java @@ -35,6 +35,7 @@ import org.mybatis.dynamic.sql.update.UpdateModel; import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; import org.mybatis.dynamic.sql.util.Buildable; +import org.mybatis.dynamic.sql.util.Utilities; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource; @@ -57,7 +58,7 @@ public long count(SelectStatementProvider countStatement) { Long answer = template.queryForObject(countStatement.getSelectStatement(), countStatement.getParameters(), Long.class); - return answer == null ? 0L : answer; + return Utilities.safelyUnbox(answer); } public int delete(Buildable deleteStatement) { diff --git a/src/test/java/org/mybatis/dynamic/sql/util/UtilitiesTest.java b/src/test/java/org/mybatis/dynamic/sql/util/UtilitiesTest.java new file mode 100644 index 000000000..c5852fa6a --- /dev/null +++ b/src/test/java/org/mybatis/dynamic/sql/util/UtilitiesTest.java @@ -0,0 +1,28 @@ +/* + * Copyright 2016-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.mybatis.dynamic.sql.util; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class UtilitiesTest { + + @Test + void testUnboxWithNull() { + assertThat(Utilities.safelyUnbox(null)).isZero(); + } +}