killbill-memoizeit

util: CR for 07fbb7cdc28a2d

2/28/2019 7:01:35 PM

Details

diff --git a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
index 7027dd4..af7b0df 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
@@ -75,6 +75,7 @@ public class DefaultCustomFieldUserApi implements CustomFieldUserApi {
                                               CUSTOM_FIELD_MODEL_DAO_CUSTOM_FIELD_FUNCTION);
     }
 
+    @Override
     public Pagination<CustomField> searchCustomFields(final String fieldName, final String fieldValue, final ObjectType objectType, final Long offset, final Long limit, final TenantContext context) {
         return getEntityPaginationNoException(limit,
                                               new SourcePaginationBuilder<CustomFieldModelDao, CustomFieldApiException>() {
@@ -87,6 +88,7 @@ public class DefaultCustomFieldUserApi implements CustomFieldUserApi {
     }
 
 
+    @Override
     public Pagination<CustomField> searchCustomFields(final String fieldName, final ObjectType objectType, final Long offset, final Long limit, final TenantContext context) {
         return getEntityPaginationNoException(limit,
                                               new SourcePaginationBuilder<CustomFieldModelDao, CustomFieldApiException>() {
diff --git a/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldSqlDao.java b/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldSqlDao.java
index 141f154..051c253 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldSqlDao.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldSqlDao.java
@@ -58,7 +58,6 @@ public interface CustomFieldSqlDao extends EntitySqlDao<CustomFieldModelDao, Cus
     @SqlQuery
     @SmartFetchSize(shouldStream = true)
     public Iterator<CustomFieldModelDao> searchByObjectTypeAndFieldName(@Bind("fieldName") String fieldName,
-                                                                        @Define("fieldValue") final String fieldValue,
                                                                         @Bind("objectType") ObjectType objectType,
                                                                         @Bind("offset") final Long offset,
                                                                         @Bind("rowCount") final Long rowCount,
@@ -67,8 +66,25 @@ public interface CustomFieldSqlDao extends EntitySqlDao<CustomFieldModelDao, Cus
 
     @SqlQuery
     public Long getSearchCountByObjectTypeAndFieldName(@Bind("fieldName") String fieldName,
-                                                       @Define("fieldValue") final String fieldValue,
                                                        @Bind("objectType") ObjectType objectType,
                                                        @SmartBindBean final InternalTenantContext context);
 
+
+    @SqlQuery
+    @SmartFetchSize(shouldStream = true)
+    public Iterator<CustomFieldModelDao> searchByObjectTypeAndFieldNameValue(@Bind("fieldName") String fieldName,
+                                                                             @Bind("fieldValue") final String fieldValue,
+                                                                             @Bind("objectType") ObjectType objectType,
+                                                                             @Bind("offset") final Long offset,
+                                                                             @Bind("rowCount") final Long rowCount,
+                                                                             @Define("ordering") final String ordering,
+                                                                             @SmartBindBean final InternalTenantContext context);
+
+    @SqlQuery
+    public Long getSearchCountByObjectTypeAndFieldNameValue(@Bind("fieldName") String fieldName,
+                                                            @Bind("fieldValue") final String fieldValue,
+                                                            @Bind("objectType") ObjectType objectType,
+                                                            @SmartBindBean final InternalTenantContext context);
+
+
 }
diff --git a/util/src/main/java/org/killbill/billing/util/customfield/dao/DefaultCustomFieldDao.java b/util/src/main/java/org/killbill/billing/util/customfield/dao/DefaultCustomFieldDao.java
index 07c735d..7ac724f 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/dao/DefaultCustomFieldDao.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/dao/DefaultCustomFieldDao.java
@@ -247,9 +247,22 @@ public class DefaultCustomFieldDao extends EntityDaoBase<CustomFieldModelDao, Cu
 
     @Override
     public Pagination<CustomFieldModelDao> searchCustomFields(final String fieldName, final ObjectType objectType, final Long offset, final Long limit, final InternalTenantContext context) {
-        return searchCustomFields(fieldName, null, objectType, offset, limit, context);
-    }
+        return paginationHelper.getPagination(CustomFieldSqlDao.class,
+                                              new PaginationIteratorBuilder<CustomFieldModelDao, CustomField, CustomFieldSqlDao>() {
+                                                  @Override
+                                                  public Long getCount(final CustomFieldSqlDao customFieldSqlDao, final InternalTenantContext context) {
+                                                      return customFieldSqlDao.getSearchCountByObjectTypeAndFieldName(fieldName, objectType, context);
+                                                  }
 
+                                                  @Override
+                                                  public Iterator<CustomFieldModelDao> build(final CustomFieldSqlDao customFieldSqlDao, final Long offset, final Long limit, final Ordering ordering, final InternalTenantContext context) {
+                                                      return customFieldSqlDao.searchByObjectTypeAndFieldName(fieldName, objectType, offset, limit, ordering.toString(), context);
+                                                  }
+                                              },
+                                              offset,
+                                              limit,
+                                              context);
+    }
 
     @Override
     public Pagination<CustomFieldModelDao> searchCustomFields(final String fieldName, @Nullable final String fieldValue, final ObjectType objectType, final Long offset, final Long limit, final InternalTenantContext context) {
@@ -257,12 +270,12 @@ public class DefaultCustomFieldDao extends EntityDaoBase<CustomFieldModelDao, Cu
                                               new PaginationIteratorBuilder<CustomFieldModelDao, CustomField, CustomFieldSqlDao>() {
                                                   @Override
                                                   public Long getCount(final CustomFieldSqlDao customFieldSqlDao, final InternalTenantContext context) {
-                                                      return customFieldSqlDao.getSearchCountByObjectTypeAndFieldName(fieldName, fieldValue, objectType, context);
+                                                      return customFieldSqlDao.getSearchCountByObjectTypeAndFieldNameValue(fieldName, fieldValue, objectType, context);
                                                   }
 
                                                   @Override
                                                   public Iterator<CustomFieldModelDao> build(final CustomFieldSqlDao customFieldSqlDao, final Long offset, final Long limit, final Ordering ordering, final InternalTenantContext context) {
-                                                      return customFieldSqlDao.searchByObjectTypeAndFieldName(fieldName, fieldValue, objectType, offset, limit, ordering.toString(), context);
+                                                      return customFieldSqlDao.searchByObjectTypeAndFieldNameValue(fieldName, fieldValue, objectType, offset, limit, ordering.toString(), context);
                                                   }
                                               },
                                               offset,
diff --git a/util/src/main/resources/org/killbill/billing/util/customfield/dao/CustomFieldSqlDao.sql.stg b/util/src/main/resources/org/killbill/billing/util/customfield/dao/CustomFieldSqlDao.sql.stg
index 1946810..96a2ab0 100644
--- a/util/src/main/resources/org/killbill/billing/util/customfield/dao/CustomFieldSqlDao.sql.stg
+++ b/util/src/main/resources/org/killbill/billing/util/customfield/dao/CustomFieldSqlDao.sql.stg
@@ -68,27 +68,25 @@ searchQuery(prefix) ::= <<
   or <prefix>field_value like :likeSearchKey
 >>
 
-getSearchCountByObjectTypeAndFieldName(fieldValue) ::= <<
+getSearchCountByObjectTypeAndFieldName() ::= <<
 select
 count(1) as count
 from <tableName()>
 where
 object_type = :objectType
 and field_name = :fieldName
-<if(fieldValue)>and field_value = '<fieldValue>'<endif>
 <andCheckSoftDeletionWithComma("")>
 <AND_CHECK_TENANT("")>
 ;
 >>
 
-searchByObjectTypeAndFieldName(fieldValue, ordering) ::= <<
+searchByObjectTypeAndFieldName(ordering) ::= <<
 select
 <allTableFields()>
 from <tableName()>
 where
 object_type = :objectType
 and field_name = :fieldName
-<if(fieldValue)>and field_value = '<fieldValue>'<endif>
 <andCheckSoftDeletionWithComma("")>
 <AND_CHECK_TENANT("")>
 order by <recordIdField("")> <ordering>
@@ -96,4 +94,33 @@ limit :rowCount offset :offset
 ;
 >>
 
+getSearchCountByObjectTypeAndFieldNameValue() ::= <<
+select
+count(1) as count
+from <tableName()>
+where
+object_type = :objectType
+and field_name = :fieldName
+and field_value = :fieldValue
+<andCheckSoftDeletionWithComma("")>
+<AND_CHECK_TENANT("")>
+;
+>>
+
+searchByObjectTypeAndFieldNameValue(ordering) ::= <<
+select
+<allTableFields()>
+from <tableName()>
+where
+object_type = :objectType
+and field_name = :fieldName
+and field_value = :fieldValue
+<andCheckSoftDeletionWithComma("")>
+<AND_CHECK_TENANT("")>
+order by <recordIdField("")> <ordering>
+limit :rowCount offset :offset
+;
+>>
+
+
 
diff --git a/util/src/test/java/org/killbill/billing/util/customfield/dao/MockCustomFieldDao.java b/util/src/test/java/org/killbill/billing/util/customfield/dao/MockCustomFieldDao.java
index 25bc86e..c4efd7e 100644
--- a/util/src/test/java/org/killbill/billing/util/customfield/dao/MockCustomFieldDao.java
+++ b/util/src/test/java/org/killbill/billing/util/customfield/dao/MockCustomFieldDao.java
@@ -81,6 +81,6 @@ public class MockCustomFieldDao extends MockEntityDaoBase<CustomFieldModelDao, C
 
     @Override
     public Pagination<CustomFieldModelDao> searchCustomFields(final String fieldName, final String fieldValue, final ObjectType objectType, final Long offset, final Long limit, final InternalTenantContext context) {
-        return null;
+        throw new UnsupportedOperationException();
     }
 }