View Javadoc
1   /*
2    *    Copyright 2016-2025 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       https://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package org.mybatis.dynamic.sql.delete;
17  
18  import static org.assertj.core.api.Assertions.assertThat;
19  import static org.junit.jupiter.api.Assertions.assertAll;
20  import static org.mybatis.dynamic.sql.SqlBuilder.*;
21  
22  import java.sql.JDBCType;
23  
24  import org.junit.jupiter.api.Test;
25  import org.mybatis.dynamic.sql.SqlColumn;
26  import org.mybatis.dynamic.sql.SqlTable;
27  import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
28  import org.mybatis.dynamic.sql.render.RenderingStrategies;
29  
30  class DeleteStatementTest {
31      private static final SqlTable foo = SqlTable.of("foo");
32      private static final SqlColumn<Integer> id = foo.column("id", JDBCType.INTEGER);
33      private static final SqlColumn<String> firstName = foo.column("first_name", JDBCType.VARCHAR);
34  
35      @Test
36      void testFullStatement() {
37          DeleteStatementProvider deleteStatement = deleteFrom(foo)
38                  .where(id, isEqualTo(3), and(firstName, isEqualTo("Betty")))
39                  .or(firstName, isLikeCaseInsensitive("%Fr%"))
40                  .build()
41                  .render(RenderingStrategies.MYBATIS3);
42  
43          String expectedFullStatement = "delete from foo where (id = #{parameters.p1,jdbcType=INTEGER} and first_name = #{parameters.p2,jdbcType=VARCHAR}) or upper(first_name) like #{parameters.p3,jdbcType=VARCHAR}";
44  
45          assertAll(
46                  () -> assertThat(deleteStatement.getDeleteStatement()).isEqualTo(expectedFullStatement),
47                  () -> assertThat(deleteStatement.getParameters()).hasSize(3),
48                  () -> assertThat(deleteStatement.getParameters()).containsEntry("p1", 3),
49                  () -> assertThat(deleteStatement.getParameters()).containsEntry("p2", "Betty"),
50                  () -> assertThat(deleteStatement.getParameters()).containsEntry("p3", "%FR%")
51          );
52      }
53  
54      @Test
55      void testFullStatementWithoutWhere() {
56          DeleteStatementProvider deleteStatement = deleteFrom(foo)
57                  .build()
58                  .render(RenderingStrategies.MYBATIS3);
59  
60          String expectedFullStatement = "delete from foo";
61  
62          assertAll(
63                  () -> assertThat(deleteStatement.getDeleteStatement()).isEqualTo(expectedFullStatement),
64                  () -> assertThat(deleteStatement.getParameters()).isEmpty()
65          );
66      }
67  }