public static T DeserializePayload <T>(
            this DescribedSerializationBase describedSerialization,
            VersionMatchStrategy assemblyVersionMatchStrategy = VersionMatchStrategy.AnySingleVersion)
        {
            var result = describedSerialization.DeserializePayloadUsingSpecificFactory <T>(
                SerializerFactory.Instance,
                assemblyVersionMatchStrategy);

            return(result);
        }
        public static DescribedSerializationBase ToDescribedSerialization <T>(
            this T objectToPackageIntoDescribedSerialization,
            SerializerRepresentation serializerRepresentation,
            SerializationFormat serializationFormat,
            VersionMatchStrategy assemblyVersionMatchStrategy = VersionMatchStrategy.AnySingleVersion)
        {
            var result = objectToPackageIntoDescribedSerialization.ToDescribedSerializationUsingSpecificFactory(
                serializerRepresentation,
                SerializerFactory.Instance,
                serializationFormat,
                assemblyVersionMatchStrategy);

            return(result);
        }
        /// <inheritdoc />
        public override ISerializer BuildSerializer(
            SerializerRepresentation serializerRepresentation,
            VersionMatchStrategy assemblyVersionMatchStrategy = VersionMatchStrategy.AnySingleVersion)
        {
            if (serializerRepresentation == null)
            {
                throw new ArgumentNullException(nameof(serializerRepresentation));
            }

            ISerializer result;

            if (CachedSerializerRepresentationToSerializerMap.TryGetValue(serializerRepresentation, out ConcurrentDictionary <VersionMatchStrategy, ISerializer> assemblyVersionMatchStrategyToSerializerMap))
            {
                if (assemblyVersionMatchStrategyToSerializerMap.TryGetValue(assemblyVersionMatchStrategy, out result))
                {
                    return(result);
                }
            }

            // ReSharper disable once RedundantArgumentDefaultValue
            var configurationType = serializerRepresentation.SerializationConfigType?.ResolveFromLoadedTypes(assemblyVersionMatchStrategy, throwIfCannotResolve: true);

            ISerializer serializer;

            switch (serializerRepresentation.SerializationKind)
            {
            case SerializationKind.Bson:
                serializer = new ObcBsonSerializer(configurationType?.ToBsonSerializationConfigurationType());
                break;

            case SerializationKind.Json:
                serializer = new ObcJsonSerializer(configurationType?.ToJsonSerializationConfigurationType());
                break;

            case SerializationKind.PropertyBag:
                serializer = new ObcPropertyBagSerializer(configurationType?.ToPropertyBagSerializationConfigurationType());
                break;

            default:
                throw new NotSupportedException(Invariant($"{nameof(serializerRepresentation)} from enumeration {nameof(SerializationKind)} of {serializerRepresentation.SerializationKind} is not supported."));
            }

            result = this.WrapInCompressingSerializerIfAppropriate(serializer, serializerRepresentation.CompressionKind);

            CachedSerializerRepresentationToSerializerMap.TryAdd(serializerRepresentation, new ConcurrentDictionary <VersionMatchStrategy, ISerializer>());

            CachedSerializerRepresentationToSerializerMap[serializerRepresentation].TryAdd(assemblyVersionMatchStrategy, result);

            return(result);
        }
Example #4
0
        /// <inheritdoc />
        public override ISerializer BuildSerializer(
            SerializerRepresentation serializerRepresentation,
            VersionMatchStrategy assemblyVersionMatchStrategy = VersionMatchStrategy.AnySingleVersion)
        {
            if (serializerRepresentation == null)
            {
                throw new ArgumentNullException(nameof(serializerRepresentation));
            }

            ISerializer result;

            if (CachedSerializerRepresentationToSerializerMap.TryGetValue(serializerRepresentation, out ConcurrentDictionary <VersionMatchStrategy, ISerializer> assemblyVersionMatchStrategyToSerializerMap))
            {
                if (assemblyVersionMatchStrategyToSerializerMap.TryGetValue(assemblyVersionMatchStrategy, out result))
                {
                    return(result);
                }
            }

            ISerializer serializer;

            switch (serializerRepresentation.SerializationKind)
            {
            case SerializationKind.Bson:
                serializer = BsonSerializerFactory.BuildSerializer(serializerRepresentation, assemblyVersionMatchStrategy);
                break;

            case SerializationKind.Json:
                serializer = JsonSerializerFactory.BuildSerializer(serializerRepresentation, assemblyVersionMatchStrategy);
                break;

            case SerializationKind.PropertyBag:
                serializer = PropertyBagSerializerFactory.BuildSerializer(serializerRepresentation, assemblyVersionMatchStrategy);
                break;

            default:
                throw new NotSupportedException(Invariant($"{nameof(serializerRepresentation)} from enumeration {nameof(SerializationKind)} of {serializerRepresentation.SerializationKind} is not supported."));
            }

            result = this.WrapInCompressingSerializerIfAppropriate(serializer, serializerRepresentation.CompressionKind);

            CachedSerializerRepresentationToSerializerMap.TryAdd(serializerRepresentation, new ConcurrentDictionary <VersionMatchStrategy, ISerializer>());

            CachedSerializerRepresentationToSerializerMap[serializerRepresentation].TryAdd(assemblyVersionMatchStrategy, result);

            return(result);
        }
Example #5
0
 public RecordFilterConvertedForStoredProcedure(
     string internalRecordIdsCsv,
     string identifierTypeIdsCsv,
     string objectTypeIdsCsv,
     string stringIdsToMatchXml,
     string tagIdsCsv,
     TagMatchStrategy tagMatchStrategy,
     VersionMatchStrategy versionMatchStrategy,
     string deprecatedIdEventTypeIdsCsv)
 {
     this.InternalRecordIdsCsv        = internalRecordIdsCsv;
     this.IdentifierTypeIdsCsv        = identifierTypeIdsCsv;
     this.ObjectTypeIdsCsv            = objectTypeIdsCsv;
     this.StringIdsToMatchXml         = stringIdsToMatchXml;
     this.TagIdsCsv                   = tagIdsCsv;
     this.TagMatchStrategy            = tagMatchStrategy;
     this.VersionMatchStrategy        = versionMatchStrategy;
     this.DeprecatedIdEventTypeIdsCsv = deprecatedIdEventTypeIdsCsv;
 }
Example #6
0
                /// <summary>
                /// Builds the execute stored procedure operation.
                /// </summary>
                /// <param name="streamName">Name of the stream.</param>
                /// <param name="serializerRepresentation">The serializer representation.</param>
                /// <param name="identifierType">The identifier type.</param>
                /// <param name="objectType">The object type.</param>
                /// <param name="internalRecordId">The optional internal record identifier (for stream re-play).</param>
                /// <param name="serializedObjectId">The serialized object identifier.</param>
                /// <param name="serializedObjectString">The serialized object as a string (should have data IFF the serializer is set to SerializationFormat.String, otherwise null).</param>
                /// <param name="serializedObjectBytes">The serialized object as a byte array (should have data IFF the serializer is set to SerializationFormat.Binary, otherwise null).</param>
                /// <param name="objectDateTimeUtc">The date time of the object if exists.</param>
                /// <param name="tagIdsCsv">The tag identifiers as CSV.</param>
                /// <param name="existingRecordStrategy">Existing record encountered strategy.</param>
                /// <param name="recordRetentionCount">Number of records to keep if using a pruning <paramref name="existingRecordStrategy"/>.</param>
                /// <param name="versionMatchStrategy">Type version match strategy.</param>
                /// <returns>Operation to execute stored procedure.</returns>
                public static ExecuteStoredProcedureOp BuildExecuteStoredProcedureOp(
                    string streamName,
                    IdentifiedSerializerRepresentation serializerRepresentation,
                    IdentifiedType identifierType,
                    IdentifiedType objectType,
                    long?internalRecordId,
                    string serializedObjectId,
                    string serializedObjectString,
                    byte[] serializedObjectBytes,
                    DateTime?objectDateTimeUtc,
                    string tagIdsCsv,
                    ExistingRecordStrategy existingRecordStrategy,
                    int?recordRetentionCount,
                    VersionMatchStrategy versionMatchStrategy)
                {
                    var sprocName = Invariant($"[{streamName}].{nameof(PutRecord)}");

                    var parameters = new List <ParameterDefinitionBase>()
                    {
                        new InputParameterDefinition <int>(nameof(InputParamName.SerializerRepresentationId), Tables.SerializerRepresentation.Id.SqlDataType, serializerRepresentation.Id),
                        new InputParameterDefinition <int?>(nameof(InputParamName.IdentifierTypeWithoutVersionId), Tables.TypeWithoutVersion.Id.SqlDataType, identifierType?.IdWithoutVersion),
                        new InputParameterDefinition <int?>(nameof(InputParamName.IdentifierTypeWithVersionId), Tables.TypeWithVersion.Id.SqlDataType, identifierType?.IdWithVersion),
                        new InputParameterDefinition <int?>(nameof(InputParamName.ObjectTypeWithoutVersionId), Tables.TypeWithoutVersion.Id.SqlDataType, objectType?.IdWithoutVersion),
                        new InputParameterDefinition <int?>(nameof(InputParamName.ObjectTypeWithVersionId), Tables.TypeWithVersion.Id.SqlDataType, objectType?.IdWithVersion),
                        new InputParameterDefinition <long?>(nameof(InputParamName.InternalRecordId), Tables.Record.Id.SqlDataType, internalRecordId),
                        new InputParameterDefinition <string>(nameof(InputParamName.StringSerializedId), Tables.Record.StringSerializedId.SqlDataType, serializedObjectId),
                        new InputParameterDefinition <string>(nameof(InputParamName.StringSerializedObject), Tables.Record.StringSerializedObject.SqlDataType, serializedObjectString),
                        new InputParameterDefinition <byte[]>(nameof(InputParamName.BinarySerializedObject), Tables.Record.BinarySerializedObject.SqlDataType, serializedObjectBytes),
                        new InputParameterDefinition <DateTime?>(nameof(InputParamName.ObjectDateTimeUtc), Tables.Record.ObjectDateTimeUtc.SqlDataType, objectDateTimeUtc),
                        new InputParameterDefinition <string>(nameof(InputParamName.TagIdsCsv), Tables.Record.TagIdsCsv.SqlDataType, tagIdsCsv),
                        new InputParameterDefinition <ExistingRecordStrategy>(nameof(InputParamName.ExistingRecordStrategy), new StringSqlDataTypeRepresentation(false, 50), existingRecordStrategy),
                        new InputParameterDefinition <int?>(nameof(InputParamName.RecordRetentionCount), new IntSqlDataTypeRepresentation(), recordRetentionCount),
                        new InputParameterDefinition <VersionMatchStrategy>(nameof(InputParamName.VersionMatchStrategy), new StringSqlDataTypeRepresentation(false, 50), versionMatchStrategy),
                        new OutputParameterDefinition <long?>(nameof(OutputParamName.Id), Tables.Record.Id.SqlDataType),
                        new OutputParameterDefinition <string>(nameof(OutputParamName.ExistingRecordIdsCsv), Tables.Record.TagIdsCsv.SqlDataType),
                        new OutputParameterDefinition <string>(nameof(OutputParamName.PrunedRecordIdsCsv), Tables.Record.TagIdsCsv.SqlDataType),
                    };

                    var result = new ExecuteStoredProcedureOp(sprocName, parameters);

                    return(result);
                }
        public RecordFilterConvertedForStoredProcedure DeepCloneWithVersionMatchStrategy(VersionMatchStrategy versionMatchStrategy)
        {
            var result = new RecordFilterConvertedForStoredProcedure(
                this.InternalRecordIdsCsv?.DeepClone(),
                this.IdentifierTypeIdsCsv?.DeepClone(),
                this.ObjectTypeIdsCsv?.DeepClone(),
                this.StringIdsToMatchXml?.DeepClone(),
                this.TagIdsCsv?.DeepClone(),
                this.TagMatchStrategy.DeepClone(),
                versionMatchStrategy,
                this.DeprecatedIdEventTypeIdsCsv?.DeepClone());

            return(result);
        }