fixed filtering by entity name
This commit is contained in:
parent
84dbcb52af
commit
028b1a023d
@ -805,6 +805,11 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
|
||||
|
||||
private String entityNameQuery(QueryContext ctx, EntityNameFilter filter) {
|
||||
ctx.addStringParameter("entity_filter_name_filter", filter.getEntityNameFilter());
|
||||
|
||||
if (filter.getEntityNameFilter().startsWith("%") || filter.getEntityNameFilter().endsWith("%")) {
|
||||
return "lower(e.search_text) like lower(:entity_filter_name_filter)";
|
||||
}
|
||||
|
||||
return "lower(e.search_text) like lower(concat(:entity_filter_name_filter, '%%'))";
|
||||
}
|
||||
|
||||
@ -833,6 +838,11 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
|
||||
}
|
||||
ctx.addStringParameter("entity_filter_type_query_type", type);
|
||||
ctx.addStringParameter("entity_filter_type_query_name", name);
|
||||
|
||||
if (name.startsWith("%") || name.endsWith("%")) {
|
||||
return "e.type = :entity_filter_type_query_type and lower(e.search_text) like lower(:entity_filter_type_query_name)";
|
||||
}
|
||||
|
||||
return "e.type = :entity_filter_type_query_type and lower(e.search_text) like lower(concat(:entity_filter_type_query_name, '%%'))";
|
||||
}
|
||||
|
||||
|
||||
@ -26,7 +26,6 @@ import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.core.ResultSetExtractor;
|
||||
import org.thingsboard.server.common.data.DataConstants;
|
||||
import org.thingsboard.server.common.data.Device;
|
||||
@ -50,6 +49,7 @@ import org.thingsboard.server.common.data.kv.LongDataEntry;
|
||||
import org.thingsboard.server.common.data.kv.StringDataEntry;
|
||||
import org.thingsboard.server.common.data.page.PageData;
|
||||
import org.thingsboard.server.common.data.query.AssetSearchQueryFilter;
|
||||
import org.thingsboard.server.common.data.query.AssetTypeFilter;
|
||||
import org.thingsboard.server.common.data.query.DeviceSearchQueryFilter;
|
||||
import org.thingsboard.server.common.data.query.DeviceTypeFilter;
|
||||
import org.thingsboard.server.common.data.query.EdgeSearchQueryFilter;
|
||||
@ -62,6 +62,7 @@ import org.thingsboard.server.common.data.query.EntityDataSortOrder;
|
||||
import org.thingsboard.server.common.data.query.EntityKey;
|
||||
import org.thingsboard.server.common.data.query.EntityKeyType;
|
||||
import org.thingsboard.server.common.data.query.EntityListFilter;
|
||||
import org.thingsboard.server.common.data.query.EntityNameFilter;
|
||||
import org.thingsboard.server.common.data.query.FilterPredicateValue;
|
||||
import org.thingsboard.server.common.data.query.KeyFilter;
|
||||
import org.thingsboard.server.common.data.query.NumericFilterPredicate;
|
||||
@ -106,9 +107,6 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
|
||||
|
||||
private TenantId tenantId;
|
||||
|
||||
@Autowired
|
||||
private JdbcTemplate template;
|
||||
|
||||
@Autowired
|
||||
private RelationRepository relationRepository;
|
||||
|
||||
@ -986,6 +984,360 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindEntityDataByQuery_filter_entity_name_starts_with() {
|
||||
List<Device> devices = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Device device = new Device();
|
||||
device.setTenantId(tenantId);
|
||||
device.setName("Device " + i + " test");
|
||||
device.setType("default");
|
||||
devices.add(device);
|
||||
}
|
||||
|
||||
devices.forEach(deviceService::saveDevice);
|
||||
|
||||
EntityNameFilter deviceTypeFilter = new EntityNameFilter();
|
||||
deviceTypeFilter.setEntityType(EntityType.DEVICE);
|
||||
deviceTypeFilter.setEntityNameFilter("Device");
|
||||
|
||||
EntityDataPageLink pageLink = new EntityDataPageLink(1000, 0, null, null);
|
||||
|
||||
EntityDataQuery query = new EntityDataQuery(deviceTypeFilter, pageLink, null, null, null);
|
||||
|
||||
PageData<EntityData> result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setEntityNameFilter("Device%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setEntityNameFilter("%Device%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setEntityNameFilter("%Device");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindEntityDataByQuery_filter_entity_name_ends_with() {
|
||||
List<Device> devices = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Device device = new Device();
|
||||
device.setTenantId(tenantId);
|
||||
device.setName("Device " + i + " test");
|
||||
device.setType("default");
|
||||
devices.add(device);
|
||||
}
|
||||
|
||||
devices.forEach(deviceService::saveDevice);
|
||||
|
||||
EntityNameFilter deviceTypeFilter = new EntityNameFilter();
|
||||
deviceTypeFilter.setEntityType(EntityType.DEVICE);
|
||||
deviceTypeFilter.setEntityNameFilter("%test");
|
||||
|
||||
EntityDataPageLink pageLink = new EntityDataPageLink(1000, 0, null, null);
|
||||
|
||||
EntityDataQuery query = new EntityDataQuery(deviceTypeFilter, pageLink, null, null, null);
|
||||
|
||||
PageData<EntityData> result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setEntityNameFilter("%test%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setEntityNameFilter("test%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setEntityNameFilter("test");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindEntityDataByQuery_filter_entity_name_contains() {
|
||||
List<Device> devices = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Device device = new Device();
|
||||
device.setTenantId(tenantId);
|
||||
device.setName("Device test" + i);
|
||||
device.setType("default");
|
||||
devices.add(device);
|
||||
}
|
||||
|
||||
devices.forEach(deviceService::saveDevice);
|
||||
|
||||
EntityNameFilter deviceTypeFilter = new EntityNameFilter();
|
||||
deviceTypeFilter.setEntityType(EntityType.DEVICE);
|
||||
deviceTypeFilter.setEntityNameFilter("%test%");
|
||||
|
||||
EntityDataPageLink pageLink = new EntityDataPageLink(1000, 0, null, null);
|
||||
|
||||
EntityDataQuery query = new EntityDataQuery(deviceTypeFilter, pageLink, null, null, null);
|
||||
|
||||
PageData<EntityData> result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setEntityNameFilter("test%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setEntityNameFilter("%test");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindEntityDataByQuery_filter_device_type_name_starts_with() {
|
||||
List<Device> devices = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Device device = new Device();
|
||||
device.setTenantId(tenantId);
|
||||
device.setName("Device " + i + " test");
|
||||
device.setType("default");
|
||||
devices.add(device);
|
||||
}
|
||||
|
||||
devices.forEach(deviceService::saveDevice);
|
||||
|
||||
DeviceTypeFilter deviceTypeFilter = new DeviceTypeFilter();
|
||||
deviceTypeFilter.setDeviceType("default");
|
||||
deviceTypeFilter.setDeviceNameFilter("Device");
|
||||
|
||||
EntityDataPageLink pageLink = new EntityDataPageLink(1000, 0, null, null);
|
||||
|
||||
EntityDataQuery query = new EntityDataQuery(deviceTypeFilter, pageLink, null, null, null);
|
||||
|
||||
PageData<EntityData> result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setDeviceNameFilter("Device%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setDeviceNameFilter("%Device%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setDeviceNameFilter("%Device");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindEntityDataByQuery_filter_device_type_name_ends_with() {
|
||||
List<Device> devices = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Device device = new Device();
|
||||
device.setTenantId(tenantId);
|
||||
device.setName("Device " + i + " test");
|
||||
device.setType("default");
|
||||
devices.add(device);
|
||||
}
|
||||
|
||||
devices.forEach(deviceService::saveDevice);
|
||||
|
||||
DeviceTypeFilter deviceTypeFilter = new DeviceTypeFilter();
|
||||
deviceTypeFilter.setDeviceType("default");
|
||||
deviceTypeFilter.setDeviceNameFilter("%test");
|
||||
|
||||
EntityDataPageLink pageLink = new EntityDataPageLink(1000, 0, null, null);
|
||||
|
||||
EntityDataQuery query = new EntityDataQuery(deviceTypeFilter, pageLink, null, null, null);
|
||||
|
||||
PageData<EntityData> result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setDeviceNameFilter("%test%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setDeviceNameFilter("test%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setDeviceNameFilter("test");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindEntityDataByQuery_filter_device_type_name_contains() {
|
||||
List<Device> devices = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Device device = new Device();
|
||||
device.setTenantId(tenantId);
|
||||
device.setName("Device test" + i);
|
||||
device.setType("default");
|
||||
devices.add(device);
|
||||
}
|
||||
|
||||
devices.forEach(deviceService::saveDevice);
|
||||
|
||||
DeviceTypeFilter deviceTypeFilter = new DeviceTypeFilter();
|
||||
deviceTypeFilter.setDeviceType("default");
|
||||
deviceTypeFilter.setDeviceNameFilter("%test%");
|
||||
|
||||
EntityDataPageLink pageLink = new EntityDataPageLink(1000, 0, null, null);
|
||||
|
||||
EntityDataQuery query = new EntityDataQuery(deviceTypeFilter, pageLink, null, null, null);
|
||||
|
||||
PageData<EntityData> result = searchEntities(query);
|
||||
assertEquals(devices.size(), result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setDeviceNameFilter("test%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
|
||||
deviceTypeFilter.setDeviceNameFilter("%test");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindEntityDataByQuery_filter_asset_type_name_starts_with() {
|
||||
List<Asset> assets = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Asset asset = new Asset();
|
||||
asset.setTenantId(tenantId);
|
||||
asset.setName("Asset " + i + " test");
|
||||
asset.setType("default");
|
||||
assets.add(asset);
|
||||
}
|
||||
|
||||
assets.forEach(assetService::saveAsset);
|
||||
|
||||
AssetTypeFilter assetTypeFilter = new AssetTypeFilter();
|
||||
assetTypeFilter.setAssetType("default");
|
||||
assetTypeFilter.setAssetNameFilter("Asset");
|
||||
|
||||
EntityDataPageLink pageLink = new EntityDataPageLink(1000, 0, null, null);
|
||||
|
||||
EntityDataQuery query = new EntityDataQuery(assetTypeFilter, pageLink, null, null, null);
|
||||
|
||||
PageData<EntityData> result = searchEntities(query);
|
||||
assertEquals(assets.size(), result.getTotalElements());
|
||||
|
||||
assetTypeFilter.setAssetNameFilter("Asset%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(assets.size(), result.getTotalElements());
|
||||
|
||||
assetTypeFilter.setAssetNameFilter("%Asset%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(assets.size(), result.getTotalElements());
|
||||
|
||||
assetTypeFilter.setAssetNameFilter("%Asset");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindEntityDataByQuery_filter_asset_type_name_ends_with() {
|
||||
List<Asset> assets = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Asset asset = new Asset();
|
||||
asset.setTenantId(tenantId);
|
||||
asset.setName("Asset " + i + " test");
|
||||
asset.setType("default");
|
||||
assets.add(asset);
|
||||
}
|
||||
|
||||
assets.forEach(assetService::saveAsset);
|
||||
|
||||
AssetTypeFilter assetTypeFilter = new AssetTypeFilter();
|
||||
assetTypeFilter.setAssetType("default");
|
||||
assetTypeFilter.setAssetNameFilter("%test");
|
||||
|
||||
EntityDataPageLink pageLink = new EntityDataPageLink(1000, 0, null, null);
|
||||
|
||||
EntityDataQuery query = new EntityDataQuery(assetTypeFilter, pageLink, null, null, null);
|
||||
|
||||
PageData<EntityData> result = searchEntities(query);
|
||||
assertEquals(assets.size(), result.getTotalElements());
|
||||
|
||||
assetTypeFilter.setAssetNameFilter("%test%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(assets.size(), result.getTotalElements());
|
||||
|
||||
assetTypeFilter.setAssetNameFilter("test%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
|
||||
assetTypeFilter.setAssetNameFilter("test");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindEntityDataByQuery_filter_asset_type_name_contains() {
|
||||
List<Asset> assets = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Asset asset = new Asset();
|
||||
asset.setTenantId(tenantId);
|
||||
asset.setName("Asset test" + i);
|
||||
asset.setType("default");
|
||||
assets.add(asset);
|
||||
}
|
||||
|
||||
assets.forEach(assetService::saveAsset);
|
||||
|
||||
AssetTypeFilter assetTypeFilter = new AssetTypeFilter();
|
||||
assetTypeFilter.setAssetType("default");
|
||||
assetTypeFilter.setAssetNameFilter("%test%");
|
||||
|
||||
EntityDataPageLink pageLink = new EntityDataPageLink(1000, 0, null, null);
|
||||
|
||||
EntityDataQuery query = new EntityDataQuery(assetTypeFilter, pageLink, null, null, null);
|
||||
|
||||
PageData<EntityData> result = searchEntities(query);
|
||||
assertEquals(assets.size(), result.getTotalElements());
|
||||
|
||||
assetTypeFilter.setAssetNameFilter("test%");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
|
||||
assetTypeFilter.setAssetNameFilter("%test");
|
||||
|
||||
result = searchEntities(query);
|
||||
assertEquals(0, result.getTotalElements());
|
||||
}
|
||||
|
||||
private PageData<EntityData> searchEntities(EntityDataQuery query) {
|
||||
return entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user