Пример #1
0
            /// <summary>
            /// 序列化
            /// </summary>
            /// <param name="memberMap"></param>
            /// <param name="serializer"></param>
            /// <param name="value"></param>
            /// <param name="charStream"></param>
            public void Serialize(MemberMap memberMap, Serializer serializer, object value, CharStream charStream)
            {
                byte isNext = 0;

                foreach (Field field in fields)
                {
                    if (memberMap.IsMember(field.MemberIndex))
                    {
                        if (isNext == 0)
                        {
                            isNext = 1;
                        }
                        else
                        {
                            charStream.Write(',');
                        }
                        serialize(serializer, value, field);
                    }
                }
                foreach (Property property in properties)
                {
                    if (memberMap.IsMember(property.MemberIndex))
                    {
                        if (isNext == 0)
                        {
                            isNext = 1;
                        }
                        else
                        {
                            charStream.Write(',');
                        }
                        serialize(serializer, value, property);
                    }
                }
            }
Пример #2
0
        /// <summary>
        /// 获取以逗号分割的名称集合
        /// </summary>
        /// <param name="sqlStream"></param>
        /// <param name="memberMap"></param>
        internal static void GetNames(CharStream sqlStream, MemberMap <valueType> memberMap)
        {
            int isNext = 0;

            foreach (Field field in Fields)
            {
                if (memberMap.IsMember(field.MemberMapIndex))
                {
                    if (isNext == 0)
                    {
                        isNext = 1;
                    }
                    else
                    {
                        sqlStream.Write(',');
                    }
                    if (field.IsSqlColumn)
                    {
                        sqlStream.SimpleWriteNotNull(field.GetSqlColumnName());
                    }
                    else
                    {
                        sqlStream.SimpleWriteNotNull(field.SqlFieldName);
                    }
                }
            }
        }
Пример #3
0
            public static void Update(CharStream sqlStream, MemberMap memberMap, modelType value, ConstantConverter converter, Table table)
            {
#if NOJIT
                if (fields != null)
                {
                    byte     isNext = 0;
                    object[] sqlColumnParameters = null, castParameters = null, parameters = null;
                    foreach (sqlModel.updateField field in fields)
                    {
                        if (memberMap.IsMember(field.Field.MemberMapIndex))
                        {
                            if (isNext == 0)
                            {
                                isNext = 1;
                            }
                            else
                            {
                                sqlStream.Write(',');
                            }
                            //if (field.NowTimeField == null)
                            field.Set(sqlStream, value, converter, ref sqlColumnParameters, ref castParameters, ref parameters);
                        }
                    }
                }
#else
                if (updater != null)
                {
                    updater(sqlStream, memberMap, value, converter, table);
                }
#endif
            }
Пример #4
0
            /// <summary>
            /// 获取逗号分割的列名集合
            /// </summary>
            /// <param name="sqlStream"></param>
            /// <param name="memberMap"></param>
            public static void GetColumnNames(CharStream sqlStream, MemberMap memberMap)
            {
                int isNext = 0;

                foreach (Field member in Fields)
                {
                    if (memberMap.IsMember(member.MemberMapIndex) || member == Identity || member.DataMember.PrimaryKeyIndex != 0)
                    {
                        if (isNext == 0)
                        {
                            isNext = 1;
                        }
                        else
                        {
                            sqlStream.Write(',');
                        }
                        if (member.IsSqlColumn)
                        {
                            sqlStream.SimpleWriteNotNull(ColumnGroup.Inserter.GetColumnNames(member.FieldInfo.FieldType)(member.FieldInfo.Name));
                        }
                        else
                        {
                            sqlStream.SimpleWriteNotNull(member.SqlFieldName);
                        }
                    }
                }
            }
Пример #5
0
            /// <summary>
            /// 获取逗号分割的列名集合
            /// </summary>
            /// <param name="sqlStream"></param>
            /// <param name="memberMap"></param>
            /// <param name="constantConverter"></param>
            public static void GetColumnNames(CharStream sqlStream, MemberMap memberMap, ConstantConverter constantConverter)
            {
                int isNext = 0;

                foreach (Field member in Fields)
                {
                    if (memberMap.IsMember(member.MemberMapIndex) || member == Identity || member.DataMember.PrimaryKeyIndex != 0)
                    {
                        if (isNext == 0)
                        {
                            isNext = 1;
                        }
                        else
                        {
                            sqlStream.Write(',');
                        }
                        if (member.IsSqlColumn)
                        {
                            sqlStream.SimpleWrite(((Func <string, string>)AutoCSer.Sql.Metadata.GenericType.Get(member.FieldInfo.FieldType).InserterGetColumnNamesMethod)(member.FieldInfo.Name));
                        }
                        else
                        {
                            constantConverter.ConvertNameToSqlStream(sqlStream, member.FieldInfo.Name);
                        }
                    }
                }
            }
Пример #6
0
        /// <summary>
        /// 获取以逗号分割的名称集合
        /// </summary>
        /// <param name="sqlStream"></param>
        /// <param name="memberMap"></param>
        /// <param name="constantConverter"></param>
        internal static void GetNames(CharStream sqlStream, MemberMap <modelType> memberMap, ConstantConverter constantConverter)
        {
            int isNext = 0;

            foreach (Field field in Fields)
            {
                if (memberMap.IsMember(field.MemberMapIndex))
                {
                    if (isNext == 0)
                    {
                        isNext = 1;
                    }
                    else
                    {
                        sqlStream.Write(',');
                    }
                    if (field.IsSqlColumn)
                    {
                        sqlStream.SimpleWrite(field.GetSqlColumnName());
                    }
                    else
                    {
                        constantConverter.ConvertNameToSqlStream(sqlStream, field.FieldInfo.Name);
                    }
                }
            }
        }
Пример #7
0
            public static void Insert(CharStream sqlStream, MemberMap memberMap, valueType value, ConstantConverter converter)
            {
#if NOJIT
                if (fields != null)
                {
                    object[] sqlColumnParameters = null, castParameters = null, parameters = null;
                    byte     isNext = 0;
                    foreach (sqlModel.insertField field in fields)
                    {
                        if (memberMap.IsMember(field.Field.MemberMapIndex))
                        {
                            if (isNext == 0)
                            {
                                isNext = 1;
                            }
                            else
                            {
                                sqlStream.Write(',');
                            }
                            AutoCSer.code.cSharp.sqlModel.fieldInfo fieldInfo = field.Field;
                            if (fieldInfo.IsSqlColumn)
                            {
                                if (sqlColumnParameters == null)
                                {
                                    sqlColumnParameters = new object[] { sqlStream, null, converter }
                                }
                                ;
                                sqlColumnParameters[1] = fieldInfo.Field.GetValue(value);
                                field.SqlColumnMethod.Invoke(null, sqlColumnParameters);
                            }
                            else
                            {
                                object memberValue = fieldInfo.Field.GetValue(value);
                                if (fieldInfo.ToSqlCastMethod != null)
                                {
                                    if (castParameters == null)
                                    {
                                        castParameters = new object[1];
                                    }
                                    castParameters[0] = memberValue;
                                    memberValue       = fieldInfo.ToSqlCastMethod.Invoke(null, castParameters);
                                }
                                if (parameters == null)
                                {
                                    parameters = new object[] { sqlStream, null }
                                }
                                ;
                                parameters[1] = memberValue;
                                fieldInfo.ToSqlMethod.Invoke(converter, parameters);
                            }
                        }
                    }
                }
#else
                if (inserter != null)
                {
                    inserter(sqlStream, memberMap, value, converter);
                }
#endif
            }
Пример #8
0
 /// <summary>
 /// 序列化
 /// </summary>
 /// <param name="memberMap"></param>
 /// <param name="serializer"></param>
 /// <param name="value"></param>
 public void Serialize(MemberMap memberMap, Serializer serializer, object value)
 {
     foreach (Field field in fields)
     {
         if (memberMap.IsMember(field.MemberIndex))
         {
             serialize(serializer, value, field);
         }
     }
     foreach (Poperty property in properties)
     {
         if (memberMap.IsMember(property.MemberIndex))
         {
             serialize(serializer, value, property);
         }
     }
 }
Пример #9
0
 /// <summary>
 /// 序列化
 /// </summary>
 /// <param name="memberMap"></param>
 /// <param name="serializer"></param>
 /// <param name="value"></param>
 public void Serialize(MemberMap memberMap, Serializer serializer, object value)
 {
     foreach (SerializeField field in fields)
     {
         if (memberMap.IsMember(field.MemberIndex))
         {
             field.SerializeMethod(serializer, field.Field.GetValue(value));
         }
     }
 }
Пример #10
0
 /// <summary>
 /// 字段复制
 /// </summary>
 /// <param name="value"></param>
 /// <param name="copyValue"></param>
 /// <param name="memberMap"></param>
 private void copy(ref valueType value, valueType copyValue, MemberMap memberMap)
 {
     foreach (KeyValue <int, FieldInfo> field in fields)
     {
         if (memberMap.IsMember(field.Key))
         {
             field.Value.SetValue(value, field.Value.GetValue(copyValue));
         }
     }
 }
Пример #11
0
            /// <summary>
            /// 字段复制
            /// </summary>
            /// <param name="value"></param>
            /// <param name="copyValue"></param>
            /// <param name="memberMap"></param>
            private void copyValue(ref valueType value, valueType copyValue, MemberMap memberMap)
            {
                object objectValue = value, copyObject = copyValue;

                foreach (KeyValue <int, FieldInfo> field in fields)
                {
                    if (memberMap.IsMember(field.Key))
                    {
                        field.Value.SetValue(objectValue, field.Value.GetValue(copyObject));
                    }
                }
                value = (valueType)objectValue;
            }
Пример #12
0
 /// <summary>
 /// 对象序列化
 /// </summary>
 /// <param name="deSerializer">二进制数据反序列化</param>
 /// <param name="value">数据对象</param>
 internal void MemberDeSerialize(DeSerializer deSerializer, ref valueType value)
 {
     if (deSerializer.CheckMemberCount(memberCountVerify))
     {
         fixedMemberDeSerializer(deSerializer, ref value);
         deSerializer.Read += fixedFillSize;
         if (memberDeSerializer != null)
         {
             memberDeSerializer(deSerializer, ref value);
         }
         if (isJson || jsonMemberMap != null)
         {
             deSerializer.ParseJson(ref value);
         }
     }
     else if (isMemberMap)
     {
         MemberMap memberMap = deSerializer.GetMemberMap <valueType>();
         if (memberMap != null)
         {
             byte *start = deSerializer.Read;
             fixedMemberMapDeSerializer(memberMap, deSerializer, ref value);
             deSerializer.Read += (int)(start - deSerializer.Read) & 3;
             if (memberMapDeSerializer != null)
             {
                 memberMapDeSerializer(memberMap, deSerializer, ref value);
             }
             if (isJson)
             {
                 deSerializer.ParseJson(ref value);
             }
             else if (jsonMemberMap != null)
             {
                 foreach (int memberIndex in jsonMemberIndexs)
                 {
                     if (memberMap.IsMember(memberIndex))
                     {
                         deSerializer.ParseJson(ref value);
                         return;
                     }
                 }
             }
         }
     }
     else
     {
         deSerializer.State = DeSerializeState.MemberMap;
     }
 }
Пример #13
0
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <param name="memberMap"></param>
            /// <param name="deSerializer"></param>
            /// <param name="value"></param>
            public void DeSerialize(MemberMap memberMap, DeSerializer deSerializer, ref valueType value)
            {
                object objectValue = value;

                foreach (DeSerializeField field in fields)
                {
                    if (memberMap.IsMember(field.MemberIndex))
                    {
                        object fieldValue = field.Field.GetValue(objectValue), newValue = field.DeSerializeMethod(deSerializer, fieldValue);
                        if (!object.ReferenceEquals(newValue, fieldValue))
                        {
                            field.Field.SetValue(objectValue, newValue);
                        }
                    }
                }
                value = (valueType)objectValue;
            }
Пример #14
0
            public static void Set(DbDataReader reader, modelType value, MemberMap memberMap)
            {
#if NOJIT
                if (fields != null)
                {
                    int      index = 0;
                    object[] sqlColumnParameters = null, castParameters = null;
                    foreach (sqlModel.setField field in fields)
                    {
                        AutoCSer.code.cSharp.sqlModel.fieldInfo fieldInfo = field.Field;
                        if (memberMap.IsMember(fieldInfo.MemberMapIndex))
                        {
                            if (fieldInfo.DataReaderMethod == null)
                            {
                                if (sqlColumnParameters == null)
                                {
                                    sqlColumnParameters = new object[] { reader, null, null }
                                }
                                ;
                                sqlColumnParameters[1] = null;
                                sqlColumnParameters[2] = index;
                                field.SqlColumnMethod.Invoke(null, sqlColumnParameters);
                                fieldInfo.Field.SetValue(value, sqlColumnParameters[1]);
                                index = (int)sqlColumnParameters[2];
                            }
                            else
                            {
                                object memberValue;
                                if (fieldInfo.DataType == fieldInfo.NullableDataType && (fieldInfo.DataType.IsValueType || !fieldInfo.DataMember.IsNull))
                                {
                                    memberValue = reader[index++];
                                    if (fieldInfo.ToModelCastMethod != null)
                                    {
                                        if (castParameters == null)
                                        {
                                            castParameters = new object[1];
                                        }
                                        castParameters[0] = memberValue;
                                        memberValue       = fieldInfo.ToModelCastMethod.Invoke(null, castParameters);
                                    }
                                }
                                else if (reader.IsDBNull(index))
                                {
                                    memberValue = null;
                                    ++index;
                                }
                                else
                                {
                                    memberValue = reader[index++];
                                    if (fieldInfo.ToModelCastMethod != null && fieldInfo.DataType == fieldInfo.NullableDataType)
                                    {
                                        if (castParameters == null)
                                        {
                                            castParameters = new object[1];
                                        }
                                        castParameters[0] = memberValue;
                                        memberValue       = fieldInfo.ToModelCastMethod.Invoke(null, castParameters);
                                    }
                                }
                                fieldInfo.Field.SetValue(value, memberValue);
                            }
                        }
                    }
                }
#else
                if (setter != null)
                {
                    setter(reader, value, memberMap);
                }
#endif
            }
Пример #15
0
            public static bool Verify(modelType value, MemberMap memberMap, Table sqlTool)
            {
#if NOJIT
                if (fields != null)
                {
                    object[] sqlColumnParameters = null, castParameters = null;
                    foreach (sqlModel.verifyField field in fields)
                    {
                        AutoCSer.code.cSharp.sqlModel.fieldInfo fieldInfo = field.Field;
                        if (memberMap.IsMember(fieldInfo.MemberMapIndex))
                        {
                            object memberValue = fieldInfo.Field.GetValue(value);
                            if (field.IsSqlVerify)
                            {
                                if (!fieldInfo.Field.FieldType.IsValueType && memberValue == null)
                                {
                                    return(false);
                                }
                                if (!(bool)((AutoCSer.emit.sqlTable.ISqlVerify)memberValue).IsSqlVeify())
                                {
                                    return(false);
                                }
                            }
                            else if (fieldInfo.IsSqlColumn)
                            {
                                if (sqlColumnParameters == null)
                                {
                                    sqlColumnParameters = new object[] { null, sqlTool, null }
                                }
                                ;
                                sqlColumnParameters[0] = memberValue;
                                sqlColumnParameters[2] = fieldInfo.Field.Name;
                                if (!(bool)field.SqlColumnMethod.Invoke(null, sqlColumnParameters))
                                {
                                    return(false);
                                }
                            }
                            else if (fieldInfo.DataType == typeof(string))
                            {
                                if (fieldInfo.ToSqlCastMethod != null)
                                {
                                    if (castParameters == null)
                                    {
                                        castParameters = new object[1];
                                    }
                                    castParameters[0] = memberValue;
                                    memberValue       = fieldInfo.ToSqlCastMethod.Invoke(null, castParameters);
                                }
                                dataMember dataMember = fieldInfo.DataMember;
                                if (!sqlTool.StringVerify(fieldInfo.Field.Name, (string)memberValue, dataMember.MaxStringLength, dataMember.IsAscii, dataMember.IsNull))
                                {
                                    return(false);
                                }
                            }
                            else
                            {
                                if (fieldInfo.ToSqlCastMethod != null && !fieldInfo.IsUnknownJson)
                                {
                                    if (castParameters == null)
                                    {
                                        castParameters = new object[1];
                                    }
                                    castParameters[0] = memberValue;
                                    memberValue       = fieldInfo.ToSqlCastMethod.Invoke(null, castParameters);
                                }
                                if (memberValue == null)
                                {
                                    sqlTool.NullVerify(fieldInfo.Field.Name);
                                    return(false);
                                }
                            }
                        }
                    }
                }
                return(true);
#else
                return(verifyer == null || verifyer(value, memberMap, sqlTool));
#endif
            }