From 62867aa171cab3aab2e25c8bc8fb64967fc5b222 Mon Sep 17 00:00:00 2001 From: Liu Rui Date: Thu, 5 Sep 2024 16:46:06 +0800 Subject: [PATCH] =?UTF-8?q?feat-IQueryAbility-=E5=A2=9E=E5=8A=A0=E4=BA=86r?= =?UTF-8?q?ange=E3=80=81in=E3=80=81notin=E3=80=81like=E7=9A=84=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/ximatai/muyun/platform/TestQuery.java | 168 +++++++++++++++--- .../ability/curd/std/ISelectAbility.java | 4 +- 2 files changed, 151 insertions(+), 21 deletions(-) diff --git a/my-boot/src/test/java/net/ximatai/muyun/platform/TestQuery.java b/my-boot/src/test/java/net/ximatai/muyun/platform/TestQuery.java index 461548d..84a536e 100644 --- a/my-boot/src/test/java/net/ximatai/muyun/platform/TestQuery.java +++ b/my-boot/src/test/java/net/ximatai/muyun/platform/TestQuery.java @@ -38,30 +38,24 @@ class TestQuery { String tableName; - List ids; - @BeforeEach void setUp() { tableName = testController.getMainTable(); databaseAccess.execute("TRUNCATE TABLE %s".formatted(tableName)); - var id1 = testController.create(Map.of("id", "1", "name", "test1", "t_create", "2024-01-01 12:00:00")); - var id2 = testController.create(Map.of("id", "2", "name", "test2", "t_create", "2024-01-02 12:00:00")); - var id3 = testController.create(Map.of("id", "3", "name", "test3", "t_create", "2024-01-03 12:00:00")); - var id4 = testController.create(Map.of("id", "4", "name", "test4", "t_create", "2024-01-04 12:00:00")); - var id5 = testController.create(Map.of("id", "5", "name", "test5", "t_create", "2024-01-05 12:00:00")); - var id6 = testController.create(Map.of("id", "6", "name", "test6", "t_create", "2024-01-06 12:00:00")); - var id7 = testController.create(Map.of("id", "7", "name", "test7", "t_create", "2024-01-07 12:00:00")); - var id8 = testController.create(Map.of("id", "8", "name", "test8", "t_create", "2024-01-08 12:00:00")); - - ids = List.of(id1, id2, id3, id4, id5, id6, id7, id8); + testController.create(Map.of("id", "1", "name", "test1", "t_create", "2024-01-01 12:00:00")); + testController.create(Map.of("id", "2", "name", "test2", "t_create", "2024-01-02 12:00:00")); + testController.create(Map.of("id", "3", "name", "test3", "t_create", "2024-01-03 12:00:00")); + testController.create(Map.of("id", "4", "name", "test4", "t_create", "2024-01-04 12:00:00")); + testController.create(Map.of("id", "5", "name", "test5", "t_create", "2024-01-05 12:00:00")); + testController.create(Map.of("id", "6", "name", "test6", "t_create", "2024-01-06 12:00:00")); + testController.create(Map.of("id", "7", "name", "test7", "t_create", "2024-01-07 12:00:00")); + testController.create(Map.of("id", "8", "name", "test8", "t_create", "2024-01-08 12:00:00")); } @Test void testEqual() { - String id = ids.getFirst(); - - Map request = Map.of("id", id); + Map request = Map.of("id", "1"); PageResult response = given() .contentType("application/json") @@ -77,14 +71,12 @@ void testEqual() { assertEquals(1, response.getTotal()); assertEquals(1, response.getList().size()); - assertEquals(id, response.getList().get(0).get("id")); + assertEquals("1", response.getList().get(0).get("id")); } @Test void testNotEqual() { - String id = ids.getFirst(); - - Map request = Map.of("no_id", id); + Map request = Map.of("no_id", "1"); PageResult response = given() .contentType("application/json") @@ -101,6 +93,139 @@ void testNotEqual() { assertEquals(7, response.getTotal()); } + @Test + void testIn() { + Map request = Map.of("in_id", List.of("1", "2", "3")); + + PageResult response = given() + .contentType("application/json") + .queryParam("noPage", true) + .body(request) + .when() + .post("%s/view".formatted(path)) + .then() + .statusCode(200) + .extract() + .as(new TypeRef<>() { + }); + + assertEquals(3, response.getTotal()); + } + + @Test + void testNotIn() { + Map request = Map.of("not_in_id", List.of("1", "2", "3")); + + PageResult response = given() + .contentType("application/json") + .queryParam("noPage", true) + .body(request) + .when() + .post("%s/view".formatted(path)) + .then() + .statusCode(200) + .extract() + .as(new TypeRef<>() { + }); + + assertEquals(5, response.getTotal()); + } + + @Test + void testLike() { + Map request = Map.of("name", "test"); + + PageResult response = given() + .contentType("application/json") + .queryParam("noPage", true) + .body(request) + .when() + .post("%s/view".formatted(path)) + .then() + .statusCode(200) + .extract() + .as(new TypeRef<>() { + }); + + assertEquals(8, response.getTotal()); + } + + @Test + void testRange1() { + Map request = Map.of("t_create", new String[]{"2024-01-05 12:00:00", null}); + + PageResult response = given() + .contentType("application/json") + .queryParam("noPage", true) + .body(request) + .when() + .post("%s/view".formatted(path)) + .then() + .statusCode(200) + .extract() + .as(new TypeRef<>() { + }); + + assertEquals(4, response.getTotal()); + } + + @Test + void testRange2() { + Map request = Map.of("t_create", new String[]{null, "2024-01-05 12:00:00"}); + + PageResult response = given() + .contentType("application/json") + .queryParam("noPage", true) + .body(request) + .when() + .post("%s/view".formatted(path)) + .then() + .statusCode(200) + .extract() + .as(new TypeRef<>() { + }); + + assertEquals(4, response.getTotal()); + } + + @Test + void testRange3() { + Map request = Map.of("t_create", new String[]{"2024-01-05 00:00:00", "2024-01-05 24:00:00"}); + + PageResult response = given() + .contentType("application/json") + .queryParam("noPage", true) + .body(request) + .when() + .post("%s/view".formatted(path)) + .then() + .statusCode(200) + .extract() + .as(new TypeRef<>() { + }); + + assertEquals(1, response.getTotal()); + } + + @Test + void testRange4() { + Map request = Map.of("t_create", new String[]{"2024-01-01 00:00:00", "2024-01-10 24:00:00"}); + + PageResult response = given() + .contentType("application/json") + .queryParam("noPage", true) + .body(request) + .when() + .post("%s/view".formatted(path)) + .then() + .statusCode(200) + .extract() + .as(new TypeRef<>() { + }); + + assertEquals(8, response.getTotal()); + } + } @Path("/test_query") @@ -131,7 +256,10 @@ public List queryItemList() { return List.of( QueryItem.of("id"), QueryItem.of("id").setAlias("no_id").setSymbolType(QueryItem.SymbolType.NOT_EQUAL), - QueryItem.of("name") + QueryItem.of("id").setAlias("in_id").setSymbolType(QueryItem.SymbolType.IN), + QueryItem.of("id").setAlias("not_in_id").setSymbolType(QueryItem.SymbolType.NOT_IN), + QueryItem.of("name").setSymbolType(QueryItem.SymbolType.LIKE), + QueryItem.of("t_create").setTime(true).setSymbolType(QueryItem.SymbolType.RANGE) ); } } diff --git a/my-core/src/main/java/net/ximatai/muyun/ability/curd/std/ISelectAbility.java b/my-core/src/main/java/net/ximatai/muyun/ability/curd/std/ISelectAbility.java index 4d28af8..1c2e39e 100644 --- a/my-core/src/main/java/net/ximatai/muyun/ability/curd/std/ISelectAbility.java +++ b/my-core/src/main/java/net/ximatai/muyun/ability/curd/std/ISelectAbility.java @@ -129,7 +129,9 @@ default PageResult view(Integer page, Object a = list.get(0); Object b = list.get(1); - if (a != null) { + if (a == null) { + condition.append(" = %s ".formatted(qi.getField())); + } else { condition.append(" >= ? "); params.add(a); }