public void NameWithDotShouldBeEscaped()
        {
            var    type = new TypeReference(_module, _module, "Company.ProductName", "Class.Name");
            string name = TypeNameBuilder.GetAssemblyQualifiedName(type.ToTypeSignature());

            Assert.Contains("Class\\.Name", name);
        }
        public void NamespaceShouldNotBeEscaped()
        {
            var    type = new TypeReference(_module, _module, "Company.ProductName", "ClassName");
            string name = TypeNameBuilder.GetAssemblyQualifiedName(type.ToTypeSignature());

            Assert.DoesNotContain('\\', name);
            Assert.Contains("Company.ProductName", name);
        }
        public void CorLibWithFullScope()
        {
            var    type = _module.CorLibTypeFactory.Object;
            string name = TypeNameBuilder.GetAssemblyQualifiedName(type, false);

            Assert.Contains(type.FullName, name);
            Assert.Contains(type.Scope.Name, name);
        }
 /// <inheritdoc />
 protected override void WriteContents(IBinaryStreamWriter writer, ITypeCodedIndexProvider provider)
 {
     writer.WriteByte((byte)NativeType);
     writer.WriteSerString(Guid ?? string.Empty);
     writer.WriteSerString(NativeTypeName ?? string.Empty);
     writer.WriteSerString(MarshalType is null ? string.Empty : TypeNameBuilder.GetAssemblyQualifiedName(MarshalType));
     writer.WriteSerString(Cookie ?? string.Empty);
 }
        public void NestedTypeNoNamespaceShouldContainPlus(string name, string nestedType)
        {
            var    type     = new TypeReference(_module, new TypeReference(_module, null, name), null, nestedType);
            string fullname = TypeNameBuilder.GetAssemblyQualifiedName(type.ToTypeSignature());

            Assert.DoesNotContain('\\', fullname);
            Assert.Contains($"{name}+{nestedType}", fullname);
        }
Example #6
0
        /// <inheritdoc />
        protected override void WriteContents(BlobSerializationContext context)
        {
            var writer = context.Writer;

            writer.WriteByte((byte)NativeType);
            writer.WriteSerString(Guid ?? string.Empty);
            writer.WriteSerString(NativeTypeName ?? string.Empty);
            writer.WriteSerString(MarshalType is null ? string.Empty : TypeNameBuilder.GetAssemblyQualifiedName(MarshalType));
            writer.WriteSerString(Cookie ?? string.Empty);
        }
Example #7
0
        internal static void WriteFieldOrPropType(IBinaryStreamWriter writer, TypeSignature type)
        {
            switch (type.ElementType)
            {
            case ElementType.Boolean:
            case ElementType.Char:
            case ElementType.I1:
            case ElementType.U1:
            case ElementType.I2:
            case ElementType.U2:
            case ElementType.I4:
            case ElementType.U4:
            case ElementType.I8:
            case ElementType.U8:
            case ElementType.R4:
            case ElementType.R8:
            case ElementType.I:
            case ElementType.U:
            case ElementType.String:
                writer.WriteByte((byte)type.ElementType);
                break;

            case ElementType.Object:
                writer.WriteByte((byte)ElementType.Boxed);

                break;

            case ElementType.SzArray:
                writer.WriteByte((byte)ElementType.SzArray);

                var arrayType = (SzArrayTypeSignature)type;
                WriteFieldOrPropType(writer, arrayType.BaseType);
                break;

            default:
                if (type.IsTypeOf("System", "Type"))
                {
                    writer.WriteByte((byte)ElementType.Type);
                    return;
                }

                var typeDef = type.Resolve();
                if (typeDef != null && typeDef.IsEnum)
                {
                    writer.WriteByte((byte)ElementType.Enum);
                    writer.WriteSerString(TypeNameBuilder.GetAssemblyQualifiedName(type));
                    return;
                }

                throw new ArgumentOutOfRangeException();
            }
        }
Example #8
0
        /// <summary>
        /// Writes the security attribute to the provided output stream.
        /// </summary>
        public void Write(BlobSerializationContext context)
        {
            var writer = context.Writer;

            string attributeTypeString;

            if (AttributeType is null)
            {
                context.DiagnosticBag.RegisterException(new NullReferenceException(
                                                            "Attribute type of security attribute is null."));
                attributeTypeString = null;
            }
            else
            {
                attributeTypeString = TypeNameBuilder.GetAssemblyQualifiedName(AttributeType);
            }
            writer.WriteSerString(attributeTypeString);

            if (NamedArguments.Count == 0)
            {
                writer.WriteCompressedUInt32(1);
                writer.WriteCompressedUInt32(0);
            }
            else
            {
                using var subBlob = new MemoryStream();
                var subContext = new BlobSerializationContext(
                    new BinaryStreamWriter(subBlob),
                    context.IndexProvider,
                    context.DiagnosticBag);

                subContext.Writer.WriteCompressedUInt32((uint)NamedArguments.Count);
                foreach (var argument in NamedArguments)
                {
                    argument.Write(subContext);
                }

                writer.WriteCompressedUInt32((uint)subBlob.Length);
                writer.WriteBytes(subBlob.ToArray());
            }
        }
Example #9
0
    /// <summary>
    ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
    ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
    ///     any release. You should only use it directly in your code with extreme caution and knowing that
    ///     doing so can result in application failures when updating to a new Entity Framework Core release.
    /// </summary>
    public virtual string Create(DbCommand command)
    {
        if (command.Parameters.Count == 0)
        {
            return(command.CommandText);
        }

        var builder = new StringBuilder();

        foreach (DbParameter parameter in command.Parameters)
        {
            var typeName    = TypeNameBuilder.CreateTypeName(parameter);
            var typeMapping = _typeMapper.FindMapping(typeName);

            builder
            .Append("DECLARE ")
            .Append(parameter.ParameterName)
            .Append(' ')
            .Append(typeName)
            .Append(" = ")
            .Append(
                (parameter.Value == DBNull.Value ||
                 parameter.Value == null)
                        ? "NULL"
                        : parameter.Value is SqlBytes sqlBytes
                            ? new SqlServerByteArrayTypeMapping(typeName).GenerateSqlLiteral(sqlBytes.Value)
                            : typeMapping != null
                                ? typeMapping.GenerateSqlLiteral(parameter.Value)
                                : parameter.Value.ToString())
            .AppendLine(";");
        }

        return(builder
               .AppendLine()
               .Append(command.CommandText).ToString());
    }
        /// <summary>
        /// Writes the security attribute to the provided output stream.
        /// </summary>
        /// <param name="writer">The output blob stream.</param>
        /// <param name="provider">The object to use for obtaining metadata tokens for members in the tables stream.</param>
        public void Write(IBinaryStreamWriter writer, ITypeCodedIndexProvider provider)
        {
            writer.WriteSerString(TypeNameBuilder.GetAssemblyQualifiedName(AttributeType));

            if (NamedArguments.Count == 0)
            {
                writer.WriteCompressedUInt32(1);
                writer.WriteCompressedUInt32(0);
            }
            else
            {
                using var subBlob = new MemoryStream();
                var subWriter = new BinaryStreamWriter(subBlob);

                subWriter.WriteCompressedUInt32((uint)NamedArguments.Count);
                foreach (var argument in NamedArguments)
                {
                    argument.Write(subWriter, provider);
                }

                writer.WriteCompressedUInt32((uint)subBlob.Length);
                writer.WriteBytes(subBlob.ToArray());
            }
        }
        public override async Task <object> InsertEventAsync(AuditEvent auditEvent)
        {
            var id            = IdBuilder?.Invoke(auditEvent);
            var createRequest = new CreateRequest <AuditEvent>(auditEvent, IndexBuilder?.Invoke(auditEvent), TypeNameBuilder?.Invoke(auditEvent), id);
            var response      = await _client.Value.CreateAsync(createRequest);

            if (response.IsValid && response.Result != Result.Error)
            {
                return(new ElasticsearchAuditEventId()
                {
                    Id = response.Id, Index = response.Index, Type = response.Type
                });
            }
            if (response.OriginalException != null)
            {
                throw response.OriginalException;
            }
            return("/");
        }
Example #12
0
        private void WriteValue(IBinaryStreamWriter writer, TypeSignature argumentType, ITypeCodedIndexProvider provider, object value)
        {
            if (argumentType.IsTypeOf("System", "Type"))
            {
                writer.WriteSerString(TypeNameBuilder.GetAssemblyQualifiedName((TypeSignature)value));
                return;
            }

            switch (argumentType.ElementType)
            {
            case ElementType.Boolean:
                writer.WriteByte((byte)((bool)value ? 1 : 0));
                break;

            case ElementType.Char:
                writer.WriteUInt16((char)value);
                break;

            case ElementType.I1:
                writer.WriteSByte((sbyte)value);
                break;

            case ElementType.U1:
                writer.WriteByte((byte)value);
                break;

            case ElementType.I2:
                writer.WriteInt16((short)value);
                break;

            case ElementType.U2:
                writer.WriteUInt16((ushort)value);
                break;

            case ElementType.I4:
                writer.WriteInt32((int)value);
                break;

            case ElementType.U4:
                writer.WriteUInt32((uint)value);
                break;

            case ElementType.I8:
                writer.WriteInt64((long)value);
                break;

            case ElementType.U8:
                writer.WriteUInt64((ulong)value);
                break;

            case ElementType.R4:
                writer.WriteSingle((float)value);
                break;

            case ElementType.R8:
                writer.WriteDouble((double)value);
                break;

            case ElementType.String:
                writer.WriteSerString(value as string);
                break;

            case ElementType.Object:
                var valueType    = value.GetType();
                var innerTypeSig = argumentType.Module.CorLibTypeFactory.FromName(valueType.Namespace, valueType.Name);
                TypeSignature.WriteFieldOrPropType(writer, innerTypeSig);
                WriteValue(writer, innerTypeSig, provider, value);
                break;

            case ElementType.Class:
            case ElementType.Enum:
            case ElementType.ValueType:
                var enumTypeDef = argumentType.Resolve();
                if (enumTypeDef != null && enumTypeDef.IsEnum)
                {
                    WriteValue(writer, enumTypeDef.GetEnumUnderlyingType(), provider, Value);
                }
                else
                {
                    throw new NotImplementedException();
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        private void WriteElement(TypeSignature argumentType, object element)
        {
            var writer = _context.Writer;

            if (argumentType.IsTypeOf("System", "Type"))
            {
                writer.WriteSerString(TypeNameBuilder.GetAssemblyQualifiedName((TypeSignature)element));
                return;
            }

            switch (argumentType.ElementType)
            {
            case ElementType.Boolean:
                writer.WriteByte((byte)((bool)element ? 1 : 0));
                break;

            case ElementType.Char:
                writer.WriteUInt16((char)element);
                break;

            case ElementType.I1:
                writer.WriteSByte((sbyte)element);
                break;

            case ElementType.U1:
                writer.WriteByte((byte)element);
                break;

            case ElementType.I2:
                writer.WriteInt16((short)element);
                break;

            case ElementType.U2:
                writer.WriteUInt16((ushort)element);
                break;

            case ElementType.I4:
                writer.WriteInt32((int)element);
                break;

            case ElementType.U4:
                writer.WriteUInt32((uint)element);
                break;

            case ElementType.I8:
                writer.WriteInt64((long)element);
                break;

            case ElementType.U8:
                writer.WriteUInt64((ulong)element);
                break;

            case ElementType.R4:
                writer.WriteSingle((float)element);
                break;

            case ElementType.R8:
                writer.WriteDouble((double)element);
                break;

            case ElementType.String:
                writer.WriteSerString(element as string);
                break;

            case ElementType.Object:
                TypeSignature innerTypeSig;
                object        value;

                if (element is null)
                {
                    // Most efficient way to store "null" is writing null as a string (two bytes).
                    innerTypeSig = argumentType.Module.CorLibTypeFactory.String;
                    value        = null;
                }
                else if (element is BoxedArgument boxedArgument)
                {
                    // Write the boxed argument.
                    innerTypeSig = boxedArgument.Type;
                    value        = boxedArgument.Value;
                }
                else
                {
                    _context.DiagnosticBag.RegisterException(new NotSupportedException(
                                                                 $"Object elements in a custom attribute signature should be either 'null' or an instance of {nameof(BoxedArgument)}."));

                    // Write null as a recovery.
                    innerTypeSig = argumentType.Module.CorLibTypeFactory.String;
                    value        = null;
                }

                TypeSignature.WriteFieldOrPropType(writer, innerTypeSig);
                WriteElement(innerTypeSig, value);
                break;

            case ElementType.SzArray:
                WriteArrayElement(
                    (SzArrayTypeSignature)argumentType,
                    element as IList <object> ?? new object[0],
                    element == null);
                break;

            case ElementType.Class:
            case ElementType.Enum:
            case ElementType.ValueType:
                WriteEnumValue(argumentType, element);
                break;

            default:
                UnsupportedArgumentType(argumentType);
                break;
            }
        }
Example #14
0
 /// <summary>
 /// 根据类型获取代码名称
 /// </summary>
 /// <param name="type">类型</param>
 /// <returns>代码名称</returns>
 public static string fullName(this Type type)
 {
     return(TypeNameBuilder.GetFullName(type));
 }
        public override object InsertEvent(AuditEvent auditEvent)
        {
            var id = IdBuilder?.Invoke(auditEvent);

#pragma warning disable CS0618 // Type or member is obsolete
            var createRequest = new CreateRequest <AuditEvent>(auditEvent, IndexBuilder?.Invoke(auditEvent), TypeNameBuilder?.Invoke(auditEvent), id);
#pragma warning restore CS0618 // Type or member is obsolete
            var response = _client.Value.Create(createRequest);
            if (response.IsValid && response.Result != Result.Error)
            {
                return(new ElasticsearchAuditEventId()
                {
                    Id = response.Id, Index = response.Index, Type = response.Type
                });
            }
            if (response.OriginalException != null)
            {
                throw response.OriginalException;
            }
            return("/");
        }