/// <summary> /// 更新数据 /// </summary> /// <typeparam name="valueType">数据类型</typeparam> /// <typeparam name="modelType">模型类型</typeparam> /// <param name="sqlTool">SQL操作工具</param> /// <param name="value">匹配成员值</param> /// <param name="memberMap">成员位图</param> /// <param name="query">查询信息</param> /// <returns></returns> internal override unsafe ReturnType Update <valueType, modelType> (Sql.Table <valueType, modelType> sqlTool, valueType value, MemberMap <modelType> memberMap, ref UpdateQuery <modelType> query) { if (query.MemberMap == null) { query.MemberMap = sqlTool.GetSelectMemberMap(memberMap); } CharStream sqlStream = Interlocked.Exchange(ref this.sqlStream, null); if (sqlStream == null) { sqlStream = new CharStream(default(AutoCSer.Memory.Pointer)); } AutoCSer.Memory.Pointer buffer = default(AutoCSer.Memory.Pointer); try { buffer = UnmanagedPool.Default.GetPointer(); sqlStream.Reset(ref buffer); if (DataModel.Model <modelType> .Identity != null) { long identity = DataModel.Model <modelType> .GetIdentity(value); if (query.NotQuery) { sqlStream.Write(@"update "); sqlStream.SimpleWrite(sqlTool.TableName); sqlStream.SimpleWrite(" set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, constantConverter, sqlTool); sqlStream.Write(" where "); constantConverter.ConvertNameToSqlStream(sqlStream, DataModel.Model <modelType> .Identity.FieldInfo.Name); sqlStream.Write('='); AutoCSer.Extensions.NumberExtension.ToString(identity, sqlStream); } else { sqlStream.SimpleWrite("select "); DataModel.Model <modelType> .Inserter.GetColumnNames(sqlStream, query.MemberMap, constantConverter); sqlStream.SimpleWrite(" from "); sqlStream.SimpleWrite(sqlTool.TableName); sqlStream.Write(" where "); constantConverter.ConvertNameToSqlStream(sqlStream, DataModel.Model <modelType> .Identity.FieldInfo.Name); sqlStream.Write('='); AutoCSer.Extensions.NumberExtension.ToString(identity, sqlStream); int size = sqlStream.Data.CurrentIndex >> 1; sqlStream.Write(@"; if sql%rowcount<>0 begin update "); sqlStream.SimpleWrite(sqlTool.TableName); sqlStream.SimpleWrite(" set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, constantConverter, sqlTool); sqlStream.Write(" where "); constantConverter.ConvertNameToSqlStream(sqlStream, DataModel.Model <modelType> .Identity.FieldInfo.Name); sqlStream.Write('='); AutoCSer.Extensions.NumberExtension.ToString(identity, sqlStream); sqlStream.SimpleWrite(@" "); sqlStream.Write(sqlStream.Char, size); sqlStream.SimpleWrite(@"; end"); } query.Sql = sqlStream.ToString(); return(ReturnType.Success); } if (DataModel.Model <modelType> .PrimaryKeys.Length != 0) { if (query.NotQuery) { sqlStream.Write(@"update "); sqlStream.SimpleWrite(sqlTool.TableName); sqlStream.SimpleWrite(" set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, constantConverter, sqlTool); sqlStream.Write(" where "); DataModel.Model <modelType> .PrimaryKeyWhere.Write(sqlStream, value, constantConverter); } else { sqlStream.SimpleWrite("select "); DataModel.Model <modelType> .Inserter.GetColumnNames(sqlStream, query.MemberMap, constantConverter); sqlStream.SimpleWrite(" from "); sqlStream.SimpleWrite(sqlTool.TableName); sqlStream.Write(" where "); DataModel.Model <modelType> .PrimaryKeyWhere.Write(sqlStream, value, constantConverter); int size = sqlStream.Data.CurrentIndex >> 1; sqlStream.Write(@"; if sql%rowcount<>0 begin update "); sqlStream.SimpleWrite(sqlTool.TableName); sqlStream.SimpleWrite(" set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, constantConverter, sqlTool); sqlStream.Write(" where "); DataModel.Model <modelType> .PrimaryKeyWhere.Write(sqlStream, value, constantConverter); sqlStream.SimpleWrite(@" "); sqlStream.Write(sqlStream.Char, size); sqlStream.SimpleWrite(@"; end"); } query.Sql = sqlStream.ToString(); return(ReturnType.Success); } } finally { UnmanagedPool.Default.Push(ref buffer); sqlStream.Dispose(); Interlocked.Exchange(ref this.sqlStream, sqlStream); } return(ReturnType.NotFoundPrimaryKey); }
/// <summary> /// 更新数据 /// </summary> /// <typeparam name="valueType">数据类型</typeparam> /// <typeparam name="modelType">模型类型</typeparam> /// <param name="sqlTool">SQL操作工具</param> /// <param name="value">匹配成员值</param> /// <param name="memberMap">成员位图</param> /// <param name="query">查询信息</param> /// <returns></returns> internal override bool Update <valueType, modelType> (Sql.Table <valueType, modelType> sqlTool, valueType value, MemberMap <modelType> memberMap, ref UpdateQuery <modelType> query) { if (query.MemberMap == null) { query.MemberMap = sqlTool.GetSelectMemberMap(memberMap); } CharStream sqlStream = Interlocked.Exchange(ref this.sqlStream, null); if (sqlStream == null) { sqlStream = new CharStream(null, 0); } byte *buffer = null; try { sqlStream.Reset(buffer = AutoCSer.UnmanagedPool.Default.Get(), AutoCSer.UnmanagedPool.DefaultSize); if (DataModel.Model <modelType> .Identity != null) { if (!query.NotQuery) { getByIdentity(sqlStream, sqlTool.TableName, value, query.MemberMap); query.Sql = sqlStream.ToString(); sqlStream.ByteSize = 0; } sqlStream.SimpleWriteNotNull(" update `"); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.SimpleWriteNotNull("` set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, constantConverter, sqlTool); sqlStream.SimpleWriteNotNull(" where "); constantConverter.ConvertNameToSqlStream(sqlStream, DataModel.Model <modelType> .Identity.FieldInfo.Name); sqlStream.Write('='); AutoCSer.Extension.Number.ToString(DataModel.Model <modelType> .GetIdentity(value), sqlStream); sqlStream.Write(';'); query.UpdateSql = sqlStream.ToString(); return(true); } if (DataModel.Model <modelType> .PrimaryKeys.Length != 0) { if (!query.NotQuery) { getByPrimaryKey(sqlStream, sqlTool.TableName, value, query.MemberMap); query.Sql = sqlStream.ToString(); sqlStream.ByteSize = 0; } sqlStream.WriteNotNull(" update `"); sqlStream.WriteNotNull(sqlTool.TableName); sqlStream.WriteNotNull("` set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, constantConverter, sqlTool); sqlStream.WriteNotNull(" where "); DataModel.Model <modelType> .PrimaryKeyWhere.Write(sqlStream, value, constantConverter); sqlStream.Write(';'); query.UpdateSql = sqlStream.ToString(); return(true); } } finally { if (buffer != null) { AutoCSer.UnmanagedPool.Default.Push(buffer); } sqlStream.Dispose(); Interlocked.Exchange(ref this.sqlStream, sqlStream); } return(false); }
/// <summary> /// 更新数据 /// </summary> /// <typeparam name="valueType">数据类型</typeparam> /// <typeparam name="modelType">模型类型</typeparam> /// <param name="sqlTool">SQL操作工具</param> /// <param name="value">匹配成员值</param> /// <param name="memberMap">成员位图</param> /// <param name="query">查询信息</param> /// <returns></returns> internal override bool Update <valueType, modelType> (Sql.Table <valueType, modelType> sqlTool, valueType value, MemberMap <modelType> memberMap, ref UpdateQuery <modelType> query) { if (query.MemberMap == null) { query.MemberMap = sqlTool.GetSelectMemberMap(memberMap); } CharStream sqlStream = Interlocked.Exchange(ref this.sqlStream, null); if (sqlStream == null) { sqlStream = new CharStream(null, 0); } byte *buffer = null; try { sqlStream.Reset(buffer = AutoCSer.UnmanagedPool.Default.Get(), AutoCSer.UnmanagedPool.DefaultSize); if (DataModel.Model <modelType> .Identity != null) { long identity = DataModel.Model <modelType> .GetIdentity(value); if (query.NotQuery) { sqlStream.WriteNotNull(@"update "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.SimpleWriteNotNull(" set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, ConstantConverter.Default, sqlTool); sqlStream.SimpleWriteNotNull(" from "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.WriteNotNull(" where "); sqlStream.SimpleWriteNotNull(DataModel.Model <modelType> .IdentitySqlName); sqlStream.Write('='); AutoCSer.Extension.Number.ToString(identity, sqlStream); } else { sqlStream.SimpleWriteNotNull("select top 1 "); DataModel.Model <modelType> .Inserter.GetColumnNames(sqlStream, query.MemberMap); sqlStream.SimpleWriteNotNull(" from "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.WriteNotNull(" where "); sqlStream.SimpleWriteNotNull(DataModel.Model <modelType> .IdentitySqlName); sqlStream.Write('='); AutoCSer.Extension.Number.ToString(identity, sqlStream); int size = sqlStream.ByteSize >> 1; sqlStream.WriteNotNull(@" if sql%rowcount<>0 begin update "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.SimpleWriteNotNull(" set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, ConstantConverter.Default, sqlTool); sqlStream.SimpleWriteNotNull(" from "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.WriteNotNull(" where "); sqlStream.SimpleWriteNotNull(DataModel.Model <modelType> .IdentitySqlName); sqlStream.Write('='); AutoCSer.Extension.Number.ToString(identity, sqlStream); sqlStream.SimpleWriteNotNull(@" "); sqlStream.WriteNotNull(sqlStream.Char, size); sqlStream.SimpleWriteNotNull(@" end"); } query.Sql = sqlStream.ToString(); return(true); } if (DataModel.Model <modelType> .PrimaryKeys.Length != 0) { if (query.NotQuery) { sqlStream.WriteNotNull(@"update "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.SimpleWriteNotNull(" set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, ConstantConverter.Default, sqlTool); sqlStream.SimpleWriteNotNull(" from "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.WriteNotNull(" where "); DataModel.Model <modelType> .PrimaryKeyWhere.Write(sqlStream, value, ConstantConverter.Default); } else { sqlStream.SimpleWriteNotNull("select top 1 "); DataModel.Model <modelType> .Inserter.GetColumnNames(sqlStream, query.MemberMap); sqlStream.SimpleWriteNotNull(" from "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.WriteNotNull(" where "); DataModel.Model <modelType> .PrimaryKeyWhere.Write(sqlStream, value, ConstantConverter.Default); int size = sqlStream.ByteSize >> 1; sqlStream.WriteNotNull(@" if sql%rowcount<>0 begin update "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.SimpleWriteNotNull(" set "); DataModel.Model <modelType> .Updater.Update(sqlStream, memberMap, value, ConstantConverter.Default, sqlTool); sqlStream.SimpleWriteNotNull(" from "); sqlStream.SimpleWriteNotNull(sqlTool.TableName); sqlStream.WriteNotNull(" where "); DataModel.Model <modelType> .PrimaryKeyWhere.Write(sqlStream, value, ConstantConverter.Default); sqlStream.SimpleWriteNotNull(@" "); sqlStream.WriteNotNull(sqlStream.Char, size); sqlStream.SimpleWriteNotNull(@" end"); } query.Sql = sqlStream.ToString(); return(true); } } finally { if (buffer != null) { AutoCSer.UnmanagedPool.Default.Push(buffer); } sqlStream.Dispose(); Interlocked.Exchange(ref this.sqlStream, sqlStream); } return(false); }