Esempio n. 1
0
                /// <summary>
                /// Builds the execute stored procedure operation.
                /// </summary>
                /// <param name="streamName">Name of the stream.</param>
                /// <param name="configType">The serialization configuration type identifiers.</param>
                /// <param name="serializationKind">The <see cref="SerializationKind"/>.</param>
                /// <param name="serializationFormat">The <see cref="SerializationFormat"/>.</param>
                /// <param name="compressionKind">The <see cref="CompressionKind"/>.</param>
                /// <param name="unregisteredTypeEncounteredStrategy">The <see cref="UnregisteredTypeEncounteredStrategy"/>.</param>
                /// <returns>Operation to execute stored procedure.</returns>
                public static ExecuteStoredProcedureOp BuildExecuteStoredProcedureOp(
                    string streamName,
                    IdentifiedType configType,
                    SerializationKind serializationKind,
                    SerializationFormat serializationFormat,
                    CompressionKind compressionKind,
                    UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy)
                {
                    var sprocName = Invariant($"[{streamName}].[{nameof(GetIdAddIfNecessarySerializerRepresentation)}]");

                    var parameters = new List <ParameterDefinitionBase>()
                    {
                        new InputParameterDefinition <int>(nameof(InputParamName.ConfigTypeWithoutVersionId), Tables.TypeWithoutVersion.Id.SqlDataType, configType.IdWithoutVersion),
                        new InputParameterDefinition <int>(nameof(InputParamName.ConfigTypeWithVersionId), Tables.TypeWithVersion.Id.SqlDataType, configType.IdWithVersion),
                        new InputParameterDefinition <string>(nameof(InputParamName.SerializationKind), Tables.SerializerRepresentation.SerializationKind.SqlDataType, serializationKind.ToString()),
                        new InputParameterDefinition <string>(nameof(InputParamName.SerializationFormat), Tables.SerializerRepresentation.SerializationFormat.SqlDataType, serializationFormat.ToString()),
                        new InputParameterDefinition <string>(nameof(InputParamName.CompressionKind), Tables.SerializerRepresentation.CompressionKind.SqlDataType, compressionKind.ToString()),
                        new InputParameterDefinition <string>(nameof(InputParamName.UnregisteredTypeEncounteredStrategy), Tables.SerializerRepresentation.SerializationKind.SqlDataType, unregisteredTypeEncounteredStrategy.ToString()),
                        new OutputParameterDefinition <int>(nameof(OutputParamName.Id), Tables.SerializerRepresentation.Id.SqlDataType),
                    };

                    var result = new ExecuteStoredProcedureOp(sprocName, parameters);

                    return(result);
                }
Esempio n. 2
0
        public SerializerRepresentation DeepCloneWithSerializationKind(SerializationKind serializationKind)
        {
            var result = new SerializerRepresentation(
                serializationKind,
                this.SerializationConfigType?.DeepClone(),
                this.CompressionKind.DeepClone(),
                this.Metadata?.DeepClone());

            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SerializationDescription"/> class.
        /// </summary>
        /// <param name="serializationKind">The <see cref="SerializationKind" /> to serialize into.</param>
        /// <param name="serializationFormat">The <see cref="SerializationFormat" /> to serialize into.</param>
        /// <param name="compressionKind">Optional <see cref="CompressionKind" /> to use; DEFAULT is None.</param>
        /// <param name="configurationTypeRepresentation">Optional configuration to use; DEFAULT is null.</param>
        /// <param name="metadata">Optional metadata to put, especially useful for customer serializer factory; DEFAULT is empty.</param>
        public SerializationDescription(SerializationKind serializationKind, SerializationFormat serializationFormat, TypeRepresentation configurationTypeRepresentation = null, CompressionKind compressionKind = CompressionKind.None, IReadOnlyDictionary <string, string> metadata = null)
        {
            new { serializationKind }.Must().NotBeEqualTo(SerializationKind.Invalid);
            new { serializationFormat }.Must().NotBeEqualTo(SerializationFormat.Invalid);
            new { compressionKind }.Must().NotBeEqualTo(CompressionKind.Invalid);

            this.SerializationKind               = serializationKind;
            this.SerializationFormat             = serializationFormat;
            this.ConfigurationTypeRepresentation = configurationTypeRepresentation;
            this.CompressionKind = compressionKind;
            this.Metadata        = metadata ?? new Dictionary <string, string>();
        }
Esempio n. 4
0
        private void LoadAttributes(FieldInfo info, GR2Writer writer)
        {
            var attrs = info.GetCustomAttributes(typeof(SerializationAttribute), true);

            if (attrs.Length > 0)
            {
                SerializationAttribute serialization = attrs[0] as SerializationAttribute;

                if (serialization.Section != SectionType.Invalid)
                {
                    PreferredSection = serialization.Section;
                }

                DataArea = serialization.DataArea;

                if (serialization.Type != MemberType.Invalid)
                {
                    Type = serialization.Type;
                }

                if (serialization.TypeSelector != null)
                {
                    TypeSelector = Activator.CreateInstance(serialization.TypeSelector) as VariantTypeSelector;
                }

                if (serialization.SectionSelector != null)
                {
                    SectionSelector = Activator.CreateInstance(serialization.SectionSelector) as SectionSelector;
                }

                if (serialization.Serializer != null)
                {
                    Serializer = Activator.CreateInstance(serialization.Serializer) as NodeSerializer;
                }

                if (writer != null && serialization.Prototype != null)
                {
                    WriteDefinition = writer.LookupStructDefinition(serialization.Prototype);
                }

                if (serialization.Name != null)
                {
                    GrannyName = serialization.Name;
                }

                Prototype         = serialization.Prototype;
                SerializationKind = serialization.Kind;
                ArraySize         = serialization.ArraySize;
                MinVersion        = serialization.MinVersion;
                MaxVersion        = serialization.MaxVersion;
            }
        }
        /// <summary>
        /// Gets the serializer representation from identifier (first by cache and then by database).
        /// </summary>
        /// <param name="sqlServerLocator">The resource locator.</param>
        /// <param name="serializerRepresentationId">The serializer representation identifier.</param>
        /// <returns>IdentifiedSerializerRepresentation.</returns>
        public IdentifiedSerializerRepresentation GetSerializerRepresentationFromId(
            SqlServerLocator sqlServerLocator,
            int serializerRepresentationId)
        {
            var found = this.serializerRepresentationIdToIdentifiedSerializerMap.TryGetValue(serializerRepresentationId, out var result);

            if (found)
            {
                return(result);
            }
            else
            {
                var storedProcOp = StreamSchema.Sprocs.GetSerializerRepresentationFromId.BuildExecuteStoredProcedureOp(
                    this.Name,
                    serializerRepresentationId);

                var sqlProtocol = this.BuildSqlOperationsProtocol(sqlServerLocator);
                var sprocResult = sqlProtocol.Execute(storedProcOp);

                SerializationKind serializationKind = sprocResult
                                                      .OutputParameters[nameof(StreamSchema
                                                                               .Sprocs.GetSerializerRepresentationFromId.OutputParamName
                                                                               .SerializationKind)]
                                                      .GetValueOfType <SerializationKind>();
                int configTypeWithVersionId = sprocResult
                                              .OutputParameters[nameof(StreamSchema
                                                                       .Sprocs.GetSerializerRepresentationFromId.OutputParamName
                                                                       .ConfigTypeWithVersionId)]
                                              .GetValueOfType <int>();
                CompressionKind compressionKind = sprocResult
                                                  .OutputParameters[nameof(StreamSchema
                                                                           .Sprocs.GetSerializerRepresentationFromId.OutputParamName
                                                                           .CompressionKind)]
                                                  .GetValueOfType <CompressionKind>();
                SerializationFormat serializationFormat = sprocResult
                                                          .OutputParameters[nameof(StreamSchema
                                                                                   .Sprocs.GetSerializerRepresentationFromId.OutputParamName
                                                                                   .SerializationFormat)]
                                                          .GetValueOfType <SerializationFormat>();

                var configType = this.GetTypeById(sqlServerLocator, configTypeWithVersionId, true);

                var rep  = new SerializerRepresentation(serializationKind, configType.WithVersion, compressionKind);
                var item = new IdentifiedSerializerRepresentation(serializerRepresentationId, rep, serializationFormat);

                this.serializerRepresentationIdToIdentifiedSerializerMap.TryAdd(item.Id, item);
                this.serializerRepresentationToIdentifiedSerializerMap.TryAdd(item.SerializerRepresentation, item);
                var newFound = this.serializerRepresentationIdToIdentifiedSerializerMap.TryGetValue(serializerRepresentationId, out var newResult);
                newFound.MustForOp("failedToFindSerializationRepresentationAfterAdding").BeTrue();
                return(newResult);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SerializerRepresentation"/> class.
        /// </summary>
        /// <param name="serializationKind">The <see cref="SerializationKind" /> to serialize into.</param>
        /// <param name="compressionKind">Optional <see cref="CompressionKind" /> to use; DEFAULT is None.</param>
        /// <param name="serializationConfigType">Optional representation of the type of the serialization configuration to use; DEFAULT is null.</param>
        /// <param name="metadata">Optional metadata to put, especially useful for custom serializer factory; DEFAULT is empty.</param>
        public SerializerRepresentation(
            SerializationKind serializationKind,
            TypeRepresentation serializationConfigType    = null,
            CompressionKind compressionKind               = CompressionKind.None,
            IReadOnlyDictionary <string, string> metadata = null)
        {
            if (serializationKind == SerializationKind.Invalid)
            {
                throw new ArgumentOutOfRangeException(Invariant($"'{nameof(serializationKind)}' == '{SerializationKind.Invalid}'"), (Exception)null);
            }

            if (compressionKind == CompressionKind.Invalid)
            {
                throw new ArgumentOutOfRangeException(Invariant($"'{nameof(compressionKind)}' == '{CompressionKind.Invalid}'"), (Exception)null);
            }

            this.SerializationKind       = serializationKind;
            this.SerializationConfigType = serializationConfigType;
            this.CompressionKind         = compressionKind;
            this.Metadata = metadata ?? new Dictionary <string, string>();
        }
Esempio n. 7
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="serializationKind">Default <see cref="SerializationKind"/>.</param>
        public SerializationContext(SerializationKind serializationKind)
        {
            serializationKindGetter = (entity => serializationKind);
        }
Esempio n. 8
0
 public PropertyHeaderDefinition(string name, PropertyInfo propertyInfo, SerializationKind serializationKind) : base(propertyInfo)
 {
     Name = name;
     SerializationKind = serializationKind;
 }