diff --git a/src/main/java/org/alfresco/repo/search/adaptor/lucene/QueryConstants.java b/src/main/java/org/alfresco/repo/search/adaptor/lucene/QueryConstants.java index f53d080fb9..168dc9c7e2 100644 --- a/src/main/java/org/alfresco/repo/search/adaptor/lucene/QueryConstants.java +++ b/src/main/java/org/alfresco/repo/search/adaptor/lucene/QueryConstants.java @@ -191,6 +191,8 @@ public interface QueryConstants public static final String FIELD_SOLR_UNIT_OF_TIME_MONTH_SUFFIX = "_unit_of_time_month"; + public static final String FIELD_SOLR_UNIT_OF_TIME_QUARTER_SUFFIX = "_unit_of_time_quarter"; + public static final String FIELD_SOLR_UNIT_OF_TIME_YEAR_SUFFIX = "_unit_of_time_year"; public static final String FIELD_SITE = "SITE"; diff --git a/src/main/java/org/alfresco/repo/search/impl/QueryParserUtils.java b/src/main/java/org/alfresco/repo/search/impl/QueryParserUtils.java index e36fb76b94..31b225b774 100644 --- a/src/main/java/org/alfresco/repo/search/impl/QueryParserUtils.java +++ b/src/main/java/org/alfresco/repo/search/impl/QueryParserUtils.java @@ -409,6 +409,11 @@ public class QueryParserUtils implements QueryConstants propertyFieldName = field.substring(field.startsWith("@") ? 1 : 0, field.length() - FIELD_SOLR_UNIT_OF_TIME_MONTH_SUFFIX.length()); ending = FIELD_SOLR_UNIT_OF_TIME_MONTH_SUFFIX; } + else if (field.endsWith(FIELD_SOLR_UNIT_OF_TIME_QUARTER_SUFFIX)) + { + propertyFieldName = field.substring(field.startsWith("@") ? 1 : 0, field.length() - FIELD_SOLR_UNIT_OF_TIME_QUARTER_SUFFIX.length()); + ending = FIELD_SOLR_UNIT_OF_TIME_QUARTER_SUFFIX; + } else if (field.endsWith(FIELD_SOLR_UNIT_OF_TIME_YEAR_SUFFIX)) { propertyFieldName = field.substring(field.startsWith("@") ? 1 : 0, field.length() - FIELD_SOLR_UNIT_OF_TIME_YEAR_SUFFIX.length()); diff --git a/src/main/java/org/alfresco/repo/search/impl/parsers/AlfrescoFunctionEvaluationContext.java b/src/main/java/org/alfresco/repo/search/impl/parsers/AlfrescoFunctionEvaluationContext.java index dee38088b8..376dd6210f 100644 --- a/src/main/java/org/alfresco/repo/search/impl/parsers/AlfrescoFunctionEvaluationContext.java +++ b/src/main/java/org/alfresco/repo/search/impl/parsers/AlfrescoFunctionEvaluationContext.java @@ -566,6 +566,20 @@ public class AlfrescoFunctionEvaluationContext implements FunctionEvaluationCont return propertyField; } } + else if(field.endsWith(QueryConstants.FIELD_SOLR_UNIT_OF_TIME_QUARTER_SUFFIX)) + { + QName propertyField = QName.createQName(field.substring(0, field.length() - QueryConstants.FIELD_SOLR_UNIT_OF_TIME_QUARTER_SUFFIX.length())); + PropertyDefinition propertyDef = dictionaryService.getProperty(propertyField); + if (!propertyDef.getDataType().getName().equals(DataTypeDefinition.DATE) && + !propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME)) + { + throw new FTSQueryException(QueryConstants.FIELD_SOLR_UNIT_OF_TIME_QUARTER_SUFFIX+" only supported on date and datetime properties"); + } + else + { + return propertyField; + } + } else if(field.endsWith(QueryConstants.FIELD_SOLR_UNIT_OF_TIME_YEAR_SUFFIX)) { QName propertyField = QName.createQName(field.substring(0, field.length() - QueryConstants.FIELD_SOLR_UNIT_OF_TIME_YEAR_SUFFIX.length()));