/// <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); } } }
/// <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); } } } }
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 }
/// <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); } } } }
/// <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); } } } }
/// <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); } } } }
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 }
/// <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); } } }
/// <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)); } } }
/// <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)); } } }
/// <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; }
/// <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; } }
/// <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; }
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 }
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 }