Пример #1
0
            /// <summary>
            /// 添加字段
            /// </summary>
            /// <param name="field">字段信息</param>
            public void PushMemberMap(fieldIndex field)
            {
                Label isMember = generator.DefineLabel();

                generator.memberMapIsMember(OpCodes.Ldarg_2, field.MemberIndex);
                generator.Emit(OpCodes.Brfalse_S, isMember);
                Push(field);
                generator.MarkLabel(isMember);
            }
Пример #2
0
 /// <summary>
 /// 添加字段
 /// </summary>
 /// <param name="field">字段信息</param>
 public void Push(fieldIndex field)
 {
     generator.Emit(OpCodes.Ldarg_0);
     if (field.Member.FieldType.IsValueType)
     {
         generator.Emit(OpCodes.Ldflda, field.Member);
         generator.Emit(OpCodes.Initobj, field.Member.FieldType);
     }
     else
     {
         generator.Emit(OpCodes.Ldnull);
         generator.Emit(OpCodes.Stfld, field.Member);
     }
 }
Пример #3
0
 /// <summary>
 /// 添加字段
 /// </summary>
 /// <param name="field">字段信息</param>
 public void Push(fieldIndex field)
 {
     generator.Emit(OpCodes.Ldarg_0);
     if (isValueType)
     {
         generator.Emit(OpCodes.Ldarga_S, 1);
     }
     else
     {
         generator.Emit(OpCodes.Ldind_Ref);
         generator.Emit(OpCodes.Ldarg_1);
     }
     generator.Emit(OpCodes.Ldfld, field.Member);
     generator.Emit(OpCodes.Stfld, field.Member);
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="field"></param>
 /// <returns></returns>
 internal static memberInfo GetSerialize(fieldIndex field)
 {
     memberInfo member = new memberInfo(field);
     Type type = field.Member.FieldType;
     if (type.IsEnum) cSharp.dataSerialize.FixedSizes.TryGetValue(type.GetEnumUnderlyingType(), out member.SerializeFixedSize);
     else if (type.IsValueType)
     {
         Type nullType = type.nullableType();
         if (nullType == null)
         {
             cSharp.dataSerialize.FixedSizes.TryGetValue(type, out member.SerializeFixedSize);
             if (type == typeof(bool)) member.NullMapSize = 1;
         }
         else
         {
             member.NullMapSize = type == typeof(bool?) ? (byte)2 : (byte)1;
             cSharp.dataSerialize.FixedSizes.TryGetValue(nullType, out member.SerializeFixedSize);
         }
     }
     else member.NullMapSize = 1;
     return member;
 }
Пример #5
0
            /// <summary>
            /// 字段信息
            /// </summary>
            /// <param name="field">字段信息</param>
            /// <param name="attribute">数据库成员信息</param>
            internal fieldInfo(fieldIndex field, dataMember attribute)
            {
                Field          = field.Member;
                MemberMapIndex = field.MemberIndex;
                DataMember     = dataMember.FormatSql(attribute, Field.FieldType, ref IsSqlColumn);
                if ((NullableDataType = DataMember.DataType) == null)
                {
                    NullableDataType = Field.FieldType;
                }
                if ((DataReaderMethod = fastCSharp.emit.pub.GetDataReaderMethod(DataType = NullableDataType.nullableType() ?? NullableDataType)) == null)
                {
                    if (IsSqlColumn)
                    {
                        if (isSqlColumn(DataType))
                        {
                            return;
                        }
                        IsSqlColumn = false;
                    }
#if NOJIT
                    DataType         = NullableDataType = typeof(string);
                    DataReaderMethod = fastCSharp.emit.pub.GetDataReaderMethodInfo;
#else
                    DataReaderMethod = fastCSharp.emit.pub.GetDataReaderMethod(DataType = NullableDataType = typeof(string));
#endif
                    IsUnknownJson     = true;
                    ToSqlCastMethod   = fastCSharp.emit.jsonSerializer.SqlToJsonMethod.MakeGenericMethod(Field.FieldType);
                    ToModelCastMethod = fastCSharp.emit.jsonParser.SqlParseMethod.MakeGenericMethod(Field.FieldType);
                }
                else
                {
                    ToSqlCastMethod   = fastCSharp.emit.pub.GetCastMethod(Field.FieldType, DataType);
                    ToModelCastMethod = fastCSharp.emit.pub.GetCastMethod(DataType, Field.FieldType);
                }
                SqlFieldName = new fastCSharp.stateSearcher.asciiSearcher(keywords).Search(Field.Name.ToLower()) < 0 ? Field.Name : toSqlName(Field.Name);
                ToSqlMethod  = fastCSharp.emit.pub.GetSqlConverterMethod(DataType);
            }
Пример #6
0
 /// <summary>
 /// 字段信息
 /// </summary>
 /// <param name="field"></param>
 /// <param name="attribute"></param>
 public fieldInfo(fieldIndex field, dataMember attribute)
 {
     Field          = field.Member;
     DataMember     = attribute;
     MemberMapIndex = field.MemberIndex;
 }