From ce63f47dc4cd8c15e808d761c4f01692daee254a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Domonkos?= Date: Tue, 21 May 2019 20:05:19 +0200 Subject: [PATCH] Merge DraftFieldIndexService.cs into FieldIndexService.cs, fixes #7925 (#8205) Lombiq Technologies: ORCH-199 --- .../Handlers/FieldIndexPartHandler.cs | 31 +-- .../Orchard.Projections.csproj | 2 - .../Services/DraftFieldIndexService.cs | 125 ------------ .../Services/FieldIndexService.cs | 189 ++++++++++++++++-- .../Services/IDraftFieldIndexService.cs | 9 - .../Services/IFieldIndexService.cs | 9 +- .../Tests/Services/FieldIndexServiceTests.cs | 2 - .../Tests/Services/FieldIndexStorageTests.cs | 2 - 8 files changed, 193 insertions(+), 176 deletions(-) delete mode 100644 src/Orchard.Web/Modules/Orchard.Projections/Services/DraftFieldIndexService.cs delete mode 100644 src/Orchard.Web/Modules/Orchard.Projections/Services/IDraftFieldIndexService.cs diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Handlers/FieldIndexPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Projections/Handlers/FieldIndexPartHandler.cs index faa2ca07c..528ee3407 100644 --- a/src/Orchard.Web/Modules/Orchard.Projections/Handlers/FieldIndexPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Projections/Handlers/FieldIndexPartHandler.cs @@ -17,13 +17,11 @@ namespace Orchard.Projections.Handlers { private readonly IFieldIndexService _fieldIndexService; private readonly IFieldStorageProvider _fieldStorageProvider; private readonly IEnumerable _contentFieldDrivers; - private readonly IDraftFieldIndexService _draftFieldIndexService; public FieldIndexPartHandler( IContentDefinitionManager contentDefinitionManager, IRepository repository, IFieldIndexService fieldIndexService, - IDraftFieldIndexService draftFieldIndexService, IFieldStorageProvider fieldStorageProvider, IEnumerable contentFieldDrivers) { Filters.Add(StorageFilter.For(repository)); @@ -31,7 +29,6 @@ namespace Orchard.Projections.Handlers { _fieldIndexService = fieldIndexService; _fieldStorageProvider = fieldStorageProvider; _contentFieldDrivers = contentFieldDrivers; - _draftFieldIndexService = draftFieldIndexService; OnUpdated(Updated); OnPublishing(Publishing); } @@ -49,22 +46,25 @@ namespace Orchard.Projections.Handlers { } private void Updated(UpdateContentContext context, FieldIndexPart fieldIndexPart) { if (context.UpdatingItemVersionRecord.Latest) { // updates projection draft indexes only if it is the latest version - DescribeValuesToindex(fieldIndexPart, (indexServiceContext) => { - _draftFieldIndexService.Set(fieldIndexPart, - indexServiceContext.LocalPart.PartDefinition.Name, - indexServiceContext.LocalField.Name, - indexServiceContext.StorageName, indexServiceContext.FieldValue, indexServiceContext.StorageType); + DescribeValuesToIndex(fieldIndexPart, (indexServiceContext) => { + _fieldIndexService.Set( + fieldIndexPart, + indexServiceContext.LocalPart.PartDefinition.Name, + indexServiceContext.LocalField.Name, + indexServiceContext.StorageName, indexServiceContext.FieldValue, indexServiceContext.StorageType, + FieldIndexRecordVersionOptions.LatestValue); }); } } public void Publishing(PublishContentContext context, FieldIndexPart fieldIndexPart) { - DescribeValuesToindex(fieldIndexPart, (indexServiceContext) => { - _fieldIndexService.Set(fieldIndexPart, - indexServiceContext.LocalPart.PartDefinition.Name, - indexServiceContext.LocalField.Name, - indexServiceContext.StorageName, indexServiceContext.FieldValue, indexServiceContext.StorageType); + DescribeValuesToIndex(fieldIndexPart, (indexServiceContext) => { + _fieldIndexService.Set( + fieldIndexPart, + indexServiceContext.LocalPart.PartDefinition.Name, + indexServiceContext.LocalField.Name, + indexServiceContext.StorageName, indexServiceContext.FieldValue, indexServiceContext.StorageType); }); } @@ -73,7 +73,7 @@ namespace Orchard.Projections.Handlers { /// /// /// - private void DescribeValuesToindex(FieldIndexPart fieldIndexPart, Action indexService) { + private void DescribeValuesToIndex(FieldIndexPart fieldIndexPart, Action indexService) { foreach (var part in fieldIndexPart.ContentItem.Parts) { foreach (var field in part.PartDefinition.Fields) { @@ -95,7 +95,8 @@ namespace Orchard.Projections.Handlers { LocalField = localField, StorageName = storageName, FieldValue = fieldValue, - StorageType = storageType }); + StorageType = storageType + }); }); foreach (var driver in drivers) { diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Orchard.Projections.csproj b/src/Orchard.Web/Modules/Orchard.Projections/Orchard.Projections.csproj index 3b6b638a2..c5aa33547 100644 --- a/src/Orchard.Web/Modules/Orchard.Projections/Orchard.Projections.csproj +++ b/src/Orchard.Web/Modules/Orchard.Projections/Orchard.Projections.csproj @@ -189,8 +189,6 @@ - - diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Services/DraftFieldIndexService.cs b/src/Orchard.Web/Modules/Orchard.Projections/Services/DraftFieldIndexService.cs deleted file mode 100644 index fd246407f..000000000 --- a/src/Orchard.Web/Modules/Orchard.Projections/Services/DraftFieldIndexService.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using System.Linq; -using Orchard.Projections.Models; - -namespace Orchard.Projections.Services { - public class DraftFieldIndexService : IDraftFieldIndexService { - - public void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType) { - var propertyName = String.Join(".", partName, fieldName, valueName ?? ""); - - var typeCode = Type.GetTypeCode(valueType); - - if(valueType.IsGenericType && valueType.GetGenericTypeDefinition() == typeof(Nullable<>)) { - typeCode = Type.GetTypeCode(Nullable.GetUnderlyingType(valueType)); - } - - switch (typeCode) { - case TypeCode.Char: - case TypeCode.String: - var stringRecord = part.Record.StringFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - if (stringRecord == null) { - stringRecord = new StringFieldIndexRecord { PropertyName = propertyName }; - part.Record.StringFieldIndexRecords.Add(stringRecord); - } - - // take the first 4000 chars as it is the limit for the field - stringRecord.LatestValue = value == null ? null : value.ToString().Substring(0, Math.Min(value.ToString().Length, 4000)); - - - break; - case TypeCode.Byte: - case TypeCode.SByte: - case TypeCode.Int16: - case TypeCode.Int32: - case TypeCode.Int64: - case TypeCode.UInt16: - case TypeCode.UInt32: - case TypeCode.UInt64: - var integerRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - if (integerRecord == null) { - integerRecord = new IntegerFieldIndexRecord { PropertyName = propertyName }; - part.Record.IntegerFieldIndexRecords.Add(integerRecord); - } - - integerRecord.LatestValue = value == null ? default(long?) : Convert.ToInt64(value); - break; - case TypeCode.DateTime: - var dateTimeRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - if (dateTimeRecord == null) { - dateTimeRecord = new IntegerFieldIndexRecord { PropertyName = propertyName }; - part.Record.IntegerFieldIndexRecords.Add(dateTimeRecord); - } - - dateTimeRecord.LatestValue = value == null ? default(long?) : ((DateTime)value).Ticks; - break; - case TypeCode.Boolean: - var booleanRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - if (booleanRecord == null) { - booleanRecord = new IntegerFieldIndexRecord { PropertyName = propertyName }; - part.Record.IntegerFieldIndexRecords.Add(booleanRecord); - } - - booleanRecord.LatestValue = value == null ? default(long?) : Convert.ToInt64((bool)value); - break; - case TypeCode.Decimal: - var decimalRecord = part.Record.DecimalFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - if (decimalRecord == null) { - decimalRecord = new DecimalFieldIndexRecord { PropertyName = propertyName }; - part.Record.DecimalFieldIndexRecords.Add(decimalRecord); - } - - decimalRecord.LatestValue = value == null ? default(decimal?) : Convert.ToDecimal((decimal)value); - break; - case TypeCode.Single: - case TypeCode.Double: - var doubleRecord = part.Record.DoubleFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - if (doubleRecord == null) { - doubleRecord = new DoubleFieldIndexRecord { PropertyName = propertyName }; - part.Record.DoubleFieldIndexRecords.Add(doubleRecord); - } - - doubleRecord.LatestValue = value == null ? default(double?) : Convert.ToDouble(value); - break; - } - } - - public T Get(FieldIndexPart part, string partName, string fieldName, string valueName) { - var propertyName = String.Join(".", partName, fieldName, valueName ?? ""); - - var typeCode = Type.GetTypeCode(typeof(T)); - - switch (typeCode) { - case TypeCode.Char: - case TypeCode.String: - var stringRecord = part.Record.StringFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return stringRecord != null ? (T)Convert.ChangeType(stringRecord.LatestValue, typeof(T)) : default(T); - case TypeCode.Byte: - case TypeCode.SByte: - case TypeCode.Int16: - case TypeCode.Int32: - case TypeCode.Int64: - case TypeCode.UInt16: - case TypeCode.UInt32: - case TypeCode.UInt64: - var integerRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return integerRecord != null ? (T)Convert.ChangeType(integerRecord.LatestValue, typeof(T)) : default(T); - case TypeCode.Decimal: - var decimalRecord = part.Record.DecimalFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return decimalRecord != null ? (T)Convert.ChangeType(decimalRecord.LatestValue, typeof(T)) : default(T); - case TypeCode.Single: - case TypeCode.Double: - var doubleRecord = part.Record.DoubleFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return doubleRecord != null ? (T)Convert.ChangeType(doubleRecord.LatestValue, typeof(T)) : default(T); - case TypeCode.DateTime: - var dateTimeRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return dateTimeRecord != null ? (T)Convert.ChangeType(new DateTime(Convert.ToInt64(dateTimeRecord.LatestValue)), typeof(T)) : default(T); - case TypeCode.Boolean: - var booleanRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return booleanRecord != null ? (T)Convert.ChangeType(booleanRecord.LatestValue, typeof(T)) : default(T); - default: - return default(T); - } - } - } -} diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Services/FieldIndexService.cs b/src/Orchard.Web/Modules/Orchard.Projections/Services/FieldIndexService.cs index ec7df0243..f712e60d1 100644 --- a/src/Orchard.Web/Modules/Orchard.Projections/Services/FieldIndexService.cs +++ b/src/Orchard.Web/Modules/Orchard.Projections/Services/FieldIndexService.cs @@ -5,12 +5,16 @@ using Orchard.Projections.Models; namespace Orchard.Projections.Services { public class FieldIndexService : IFieldIndexService { - public void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType) { - var propertyName = String.Join(".", partName, fieldName, valueName ?? ""); + public void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType) => + Set(part, partName, fieldName, valueName, value, valueType, FieldIndexRecordVersionOptions.Value); + + public void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType, + FieldIndexRecordVersionOptions fieldIndexRecordVersionOption) { + var propertyName = string.Join(".", partName, fieldName, valueName ?? ""); var typeCode = Type.GetTypeCode(valueType); - if(valueType.IsGenericType && valueType.GetGenericTypeDefinition() == typeof(Nullable<>)) { + if (valueType.IsGenericType && valueType.GetGenericTypeDefinition() == typeof(Nullable<>)) { typeCode = Type.GetTypeCode(Nullable.GetUnderlyingType(valueType)); } @@ -23,10 +27,19 @@ namespace Orchard.Projections.Services { part.Record.StringFieldIndexRecords.Add(stringRecord); } - // take the first 4000 chars as it is the limit for the field - stringRecord.Value = value == null ? null : value.ToString().Substring(0, Math.Min(value.ToString().Length, 4000)); + // Take the first 4000 chars as it is the limit for the field. + var stringRecordValue = value?.ToString().Substring(0, Math.Min(value.ToString().Length, 4000)); + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + stringRecord.Value = stringRecordValue; + + break; + case FieldIndexRecordVersionOptions.LatestValue: + stringRecord.LatestValue = stringRecordValue; + + break; + } - break; case TypeCode.Byte: case TypeCode.SByte: @@ -42,7 +55,18 @@ namespace Orchard.Projections.Services { part.Record.IntegerFieldIndexRecords.Add(integerRecord); } - integerRecord.Value = value == null ? default(long?) : Convert.ToInt64(value); + var integerRecordValue = value == null ? default(long?) : Convert.ToInt64(value); + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + integerRecord.Value = integerRecordValue; + + break; + case FieldIndexRecordVersionOptions.LatestValue: + integerRecord.LatestValue = integerRecordValue; + + break; + } + break; case TypeCode.DateTime: var dateTimeRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); @@ -51,7 +75,18 @@ namespace Orchard.Projections.Services { part.Record.IntegerFieldIndexRecords.Add(dateTimeRecord); } - dateTimeRecord.Value = value == null ? default(long?) : ((DateTime)value).Ticks; + var dateTimeRecordValue = value == null ? default(long?) : ((DateTime)value).Ticks; + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + dateTimeRecord.Value = dateTimeRecordValue; + + break; + case FieldIndexRecordVersionOptions.LatestValue: + dateTimeRecord.LatestValue = dateTimeRecordValue; + + break; + } + break; case TypeCode.Boolean: var booleanRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); @@ -60,7 +95,18 @@ namespace Orchard.Projections.Services { part.Record.IntegerFieldIndexRecords.Add(booleanRecord); } - booleanRecord.Value = value == null ? default(long?) : Convert.ToInt64((bool)value); + var booleanRecordValue = value == null ? default(long?) : Convert.ToInt64((bool)value); + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + booleanRecord.Value = booleanRecordValue; + + break; + case FieldIndexRecordVersionOptions.LatestValue: + booleanRecord.LatestValue = booleanRecordValue; + + break; + } + break; case TypeCode.Decimal: var decimalRecord = part.Record.DecimalFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); @@ -69,7 +115,18 @@ namespace Orchard.Projections.Services { part.Record.DecimalFieldIndexRecords.Add(decimalRecord); } - decimalRecord.Value = value == null ? default(decimal?) : Convert.ToDecimal((decimal)value); + var decimalRecordValue = value == null ? default(decimal?) : Convert.ToDecimal((decimal)value); + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + decimalRecord.Value = decimalRecordValue; + + break; + case FieldIndexRecordVersionOptions.LatestValue: + decimalRecord.LatestValue = decimalRecordValue; + + break; + } + break; case TypeCode.Single: case TypeCode.Double: @@ -79,13 +136,27 @@ namespace Orchard.Projections.Services { part.Record.DoubleFieldIndexRecords.Add(doubleRecord); } - doubleRecord.Value = value == null ? default(double?) : Convert.ToDouble(value); + var doubleRecordValue = value == null ? default(double?) : Convert.ToDouble(value); + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + doubleRecord.Value = doubleRecordValue; + + break; + case FieldIndexRecordVersionOptions.LatestValue: + doubleRecord.LatestValue = doubleRecordValue; + + break; + } + break; } } - public T Get(FieldIndexPart part, string partName, string fieldName, string valueName) { - var propertyName = String.Join(".", partName, fieldName, valueName ?? ""); + public T Get(FieldIndexPart part, string partName, string fieldName, string valueName) => + Get(part, partName, fieldName, valueName, FieldIndexRecordVersionOptions.Value); + + public T Get(FieldIndexPart part, string partName, string fieldName, string valueName, FieldIndexRecordVersionOptions fieldIndexRecordVersionOption) { + var propertyName = string.Join(".", partName, fieldName, valueName ?? ""); var typeCode = Type.GetTypeCode(typeof(T)); @@ -93,7 +164,20 @@ namespace Orchard.Projections.Services { case TypeCode.Char: case TypeCode.String: var stringRecord = part.Record.StringFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return stringRecord != null ? (T)Convert.ChangeType(stringRecord.Value, typeof(T)) : default(T); + var stringRecordValue = default(T); + + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + stringRecordValue = (T)Convert.ChangeType(stringRecord.Value, typeof(T)); + + break; + case FieldIndexRecordVersionOptions.LatestValue: + stringRecordValue = (T)Convert.ChangeType(stringRecord.LatestValue, typeof(T)); + + break; + } + + return stringRecord != null ? stringRecordValue : default; case TypeCode.Byte: case TypeCode.SByte: case TypeCode.Int16: @@ -103,22 +187,87 @@ namespace Orchard.Projections.Services { case TypeCode.UInt32: case TypeCode.UInt64: var integerRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return integerRecord != null ? (T)Convert.ChangeType(integerRecord.Value, typeof(T)) : default(T); + var integerRecordValue = default(T); + + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + integerRecordValue = (T)Convert.ChangeType(integerRecord.Value, typeof(T)); + + break; + case FieldIndexRecordVersionOptions.LatestValue: + integerRecordValue = (T)Convert.ChangeType(integerRecord.LatestValue, typeof(T)); + + break; + } + + return integerRecord != null ? integerRecordValue : default; case TypeCode.Decimal: var decimalRecord = part.Record.DecimalFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return decimalRecord != null ? (T)Convert.ChangeType(decimalRecord.Value, typeof(T)) : default(T); + var decimalRecordValue = default(T); + + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + decimalRecordValue = (T)Convert.ChangeType(decimalRecord.Value, typeof(T)); + + break; + case FieldIndexRecordVersionOptions.LatestValue: + decimalRecordValue = (T)Convert.ChangeType(decimalRecord.LatestValue, typeof(T)); + + break; + } + + return decimalRecord != null ? decimalRecordValue : default; case TypeCode.Single: case TypeCode.Double: var doubleRecord = part.Record.DoubleFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return doubleRecord != null ? (T)Convert.ChangeType(doubleRecord.Value, typeof(T)) : default(T); + var doubleRecordValue = default(T); + + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + doubleRecordValue = (T)Convert.ChangeType(doubleRecord.Value, typeof(T)); + + break; + case FieldIndexRecordVersionOptions.LatestValue: + doubleRecordValue = (T)Convert.ChangeType(doubleRecord.LatestValue, typeof(T)); + + break; + } + + return doubleRecord != null ? doubleRecordValue : default; case TypeCode.DateTime: var dateTimeRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return dateTimeRecord != null ? (T)Convert.ChangeType(new DateTime(Convert.ToInt64(dateTimeRecord.Value)), typeof(T)) : default(T); + var dateTimeRecordValue = default(T); + + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + dateTimeRecordValue = (T)Convert.ChangeType(new DateTime(Convert.ToInt64(dateTimeRecord.Value)), typeof(T)); + + break; + case FieldIndexRecordVersionOptions.LatestValue: + dateTimeRecordValue = (T)Convert.ChangeType(new DateTime(Convert.ToInt64(dateTimeRecord.LatestValue)), typeof(T)); + + break; + } + + return dateTimeRecord != null ? dateTimeRecordValue : default; case TypeCode.Boolean: var booleanRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName); - return booleanRecord != null ? (T)Convert.ChangeType(booleanRecord.Value, typeof(T)) : default(T); + var booleanRecordValue = default(T); + + switch (fieldIndexRecordVersionOption) { + case FieldIndexRecordVersionOptions.Value: + booleanRecordValue = (T)Convert.ChangeType(booleanRecord.Value, typeof(T)); + + break; + case FieldIndexRecordVersionOptions.LatestValue: + booleanRecordValue = (T)Convert.ChangeType(booleanRecord.LatestValue, typeof(T)); + + break; + } + + return booleanRecord != null ? booleanRecordValue : default; default: - return default(T); + return default; } } } diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Services/IDraftFieldIndexService.cs b/src/Orchard.Web/Modules/Orchard.Projections/Services/IDraftFieldIndexService.cs deleted file mode 100644 index 7d76c1bd3..000000000 --- a/src/Orchard.Web/Modules/Orchard.Projections/Services/IDraftFieldIndexService.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; -using Orchard.Projections.Models; - -namespace Orchard.Projections.Services { - public interface IDraftFieldIndexService : IDependency { - void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType); - T Get(FieldIndexPart part, string partName, string fieldName, string valueName); - } -} diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Services/IFieldIndexService.cs b/src/Orchard.Web/Modules/Orchard.Projections/Services/IFieldIndexService.cs index e50198095..66283a222 100644 --- a/src/Orchard.Web/Modules/Orchard.Projections/Services/IFieldIndexService.cs +++ b/src/Orchard.Web/Modules/Orchard.Projections/Services/IFieldIndexService.cs @@ -3,7 +3,14 @@ using Orchard.Projections.Models; namespace Orchard.Projections.Services { public interface IFieldIndexService : IDependency { - void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType); T Get(FieldIndexPart part, string partName, string fieldName, string valueName); + T Get(FieldIndexPart part, string partName, string fieldName, string valueName, FieldIndexRecordVersionOptions fieldIndexRecordVersionOption); + void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType); + void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType, FieldIndexRecordVersionOptions fieldIndexRecordVersionOption); + } + + public enum FieldIndexRecordVersionOptions { + Value, + LatestValue } } diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Tests/Services/FieldIndexServiceTests.cs b/src/Orchard.Web/Modules/Orchard.Projections/Tests/Services/FieldIndexServiceTests.cs index 3f5f21ff3..1107e7dcc 100644 --- a/src/Orchard.Web/Modules/Orchard.Projections/Tests/Services/FieldIndexServiceTests.cs +++ b/src/Orchard.Web/Modules/Orchard.Projections/Tests/Services/FieldIndexServiceTests.cs @@ -33,9 +33,7 @@ namespace Orchard.Projections.Tests.Services { builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); - builder.RegisterType().As(); builder.RegisterType().As(); - builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Tests/Services/FieldIndexStorageTests.cs b/src/Orchard.Web/Modules/Orchard.Projections/Tests/Services/FieldIndexStorageTests.cs index 70382f6cf..6acbff08c 100644 --- a/src/Orchard.Web/Modules/Orchard.Projections/Tests/Services/FieldIndexStorageTests.cs +++ b/src/Orchard.Web/Modules/Orchard.Projections/Tests/Services/FieldIndexStorageTests.cs @@ -41,9 +41,7 @@ namespace Orchard.Projections.Tests.Services { builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); - builder.RegisterType().As(); builder.RegisterType().As(); - builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As();