public override CommandData CreateBatchInsertCommand(DataTableEntityMapping mapping, IList entitys, bool refresh, CreateSqlState state) { if (entitys == null || entitys.Count == 0) { throw new ArgumentNullException(nameof(entitys)); } IList <DataFieldMapping> fields = mapping.CreateFieldList; var insertLen = fields.Count; if (insertLen == 0) { throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType)); } string insertSql = null; string cacheKey = null; if (state.Seed == 0) { cacheKey = CommandCache.CreateKey(mapping, state); if (_batchInsertCache.TryGetCommand(cacheKey, out var cache)) { insertSql = cache; } } if (insertSql == null) { var insertList = new string[insertLen]; for (var i = 0; i < insertLen; i++) { var field = fields[i]; insertList[i] = CreateDataFieldSql(field.Name); } var insert = string.Join(",", insertList); insertSql = $"insert into {CreateDataTableMappingSql(mapping, state)}({insert})"; if (cacheKey != null) { _batchInsertCache.SetCommand(cacheKey, insertSql); } } var totalSql = new StringBuilder(); totalSql.AppendFormat("{0}values", insertSql); var cur = 0; var end = entitys.Count; foreach (var entity in entitys) { var valuesList = new string[insertLen]; for (var i = 0; i < insertLen; i++) { var field = fields[i]; var value = field.ToInsert(entity, refresh); valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType); } var values = string.Join(",", valuesList); totalSql.Append($"({values})"); cur++; totalSql.Append(cur < end ? ',' : ';'); } var command = new CommandData(totalSql.ToString()); return(command); }
public override CommandData CreateBatchInsertWithIdentityCommand(DataTableEntityMapping mapping, IList entitys, bool refresh, CreateSqlState state) { if (entitys == null || entitys.Count == 0) { throw new ArgumentNullException(nameof(entitys)); } IList <DataFieldMapping> fields = mapping.CreateFieldList; var insertLen = fields.Count; if (insertLen == 0) { throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType)); } if (!mapping.HasIdentity) { throw new LightDataException(string.Format(SR.NoIdentityField, mapping.ObjectType)); } string insertSql = null; string cacheKey = null; if (state.Seed == 0) { cacheKey = CommandCache.CreateKey(mapping, state); if (_batchInsertCache.TryGetCommand(cacheKey, out var cache)) { insertSql = cache; } } if (insertSql == null) { var insertList = new string[insertLen]; for (var i = 0; i < insertLen; i++) { var field = fields[i]; insertList[i] = CreateDataFieldSql(field.Name); } var insert = string.Join(",", insertList); insertSql = $"insert into {CreateDataTableMappingSql(mapping, state)}({insert})"; if (cacheKey != null) { _batchInsertCache.SetCommand(cacheKey, insertSql); } } var totalSql = new StringBuilder(); totalSql.Append("drop temporary table if exists `temptb`;create temporary table `temptb`(`id` int(11));"); foreach (var entity in entitys) { var valuesList = new string[insertLen]; for (var i = 0; i < insertLen; i++) { var field = fields[i]; var value = field.ToInsert(entity, refresh); valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType); } var values = string.Join(",", valuesList); totalSql.Append($"{insertSql}values({values});insert into `temptb`(`id`) select last_insert_id();"); } totalSql.Append("select `id` from `temptb`;"); var command = new CommandData(totalSql.ToString()); return(command); }
public override CommandData CreateBaseInsertCommand(DataTableEntityMapping mapping, object entity, bool refresh, bool updateIdentity, CreateSqlState state) { string cacheKey = null; var identity = updateIdentity && mapping.HasIdentity; if (state.Seed == 0 && !state.UseDirectNull) { cacheKey = CommandCache.CreateKey(mapping, state); if (identity) { cacheKey = string.Concat(cacheKey, "|id"); } if (_baseInsertCache.TryGetCommand(cacheKey, out var cache)) { var command1 = new CommandData(cache) { IdentitySql = identity }; foreach (var field in mapping.CreateFieldList) { var value = field.ToInsert(entity, refresh); state.AddDataParameter(this, value, field.DBType, field.ObjectType); } return(command1); } } IList <DataFieldMapping> fields = mapping.CreateFieldList; var insertLen = fields.Count; if (insertLen == 0) { throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType)); } var insertList = new string[insertLen]; var valuesList = new string[insertLen]; for (var i = 0; i < insertLen; i++) { var field = fields[i]; var value = field.ToInsert(entity, refresh); insertList[i] = CreateDataFieldSql(field.Name); valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType); } var insert = string.Join(",", insertList); var values = string.Join(",", valuesList); var sql = identity ? $"insert into {CreateDataTableMappingSql(mapping, state)}({insert}) output inserted.{CreateDataFieldSql(mapping.IdentityField.Name)} values({values})" : $"insert into {CreateDataTableMappingSql(mapping, state)}({insert})values({values})"; var command = new CommandData(sql) { IdentitySql = identity }; if (cacheKey != null) { _baseInsertCache.SetCommand(cacheKey, command.CommandText); } return(command); }
public override CommandData CreateBatchInsertWithIdentityCommand(DataTableEntityMapping mapping, IList entitys, bool refresh, CreateSqlState state) { if (entitys == null || entitys.Count == 0) { throw new ArgumentNullException(nameof(entitys)); } int totalCount = entitys.Count; IList <DataFieldMapping> fields = mapping.CreateFieldList; int insertLen = fields.Count; if (insertLen == 0) { throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType)); } if (!mapping.HasIdentity) { throw new LightDataException(string.Format(SR.NoIdentityField, mapping.ObjectType)); } string insertSql = null; string cachekey = null; if (state.Seed == 0) { cachekey = CommandCache.CreateKey(mapping, state); if (_batchInsertCache.TryGetCommand(cachekey, out string cache)) { insertSql = cache; } } if (insertSql == null) { string[] insertList = new string[insertLen]; for (int i = 0; i < insertLen; i++) { DataFieldMapping field = fields[i]; insertList[i] = CreateDataFieldSql(field.Name); } string insert = string.Join(",", insertList); insertSql = string.Format("insert into {0}({1})", CreateDataTableMappingSql(mapping, state), insert); if (cachekey != null) { _batchInsertCache.SetCommand(cachekey, insertSql); } } StringBuilder totalSql = new StringBuilder(); totalSql.AppendFormat("{0}values", insertSql); int cur = 0; int end = entitys.Count; foreach (object entity in entitys) { string[] valuesList = new string[insertLen]; for (int i = 0; i < insertLen; i++) { DataFieldMapping field = fields[i]; object value = field.GetInsertData(entity, refresh); valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType); } string values = string.Join(",", valuesList); totalSql.AppendFormat("({0})", values); cur++; if (cur < end) { totalSql.Append(','); } else { totalSql.AppendFormat("returning {0} as id;", CreateDataFieldSql(mapping.IdentityField.Name)); } } CommandData command = new CommandData(totalSql.ToString()); return(command); }
public override CommandData CreateBaseInsertCommand(DataTableEntityMapping mapping, object entity, bool refresh, bool updateIdentity, CreateSqlState state) { string cachekey = null; bool identity = updateIdentity && mapping.HasIdentity; if (state.Seed == 0 && !state.UseDirectNull) { cachekey = CommandCache.CreateKey(mapping, state); if (identity) { cachekey = string.Concat(cachekey, "|id"); } if (_baseInsertCache.TryGetCommand(cachekey, out string cache)) { CommandData command1 = new CommandData(cache); command1.IdentitySql = identity; foreach (DataFieldMapping field in mapping.CreateFieldList) { object value = field.GetInsertData(entity, refresh); state.AddDataParameter(this, value, field.DBType, field.ObjectType); } return(command1); } } IList <DataFieldMapping> fields = mapping.CreateFieldList; int insertLen = fields.Count; if (insertLen == 0) { throw new LightDataException(string.Format(SR.NotContainNonIdentityKeyFields, mapping.ObjectType)); } string[] insertList = new string[insertLen]; string[] valuesList = new string[insertLen]; for (int i = 0; i < insertLen; i++) { DataFieldMapping field = fields[i]; object value = field.GetInsertData(entity, refresh); insertList[i] = CreateDataFieldSql(field.Name); valuesList[i] = state.AddDataParameter(this, value, field.DBType, field.ObjectType); } string insert = string.Join(",", insertList); string values = string.Join(",", valuesList); string sql; if (identity) { sql = string.Format("insert into {0}({1}) output inserted.{3} values({2})", CreateDataTableMappingSql(mapping, state), insert, values, CreateDataFieldSql(mapping.IdentityField.Name)); } else { sql = string.Format("insert into {0}({1})values({2})", CreateDataTableMappingSql(mapping, state), insert, values); } CommandData command = new CommandData(sql); command.IdentitySql = identity; if (cachekey != null) { _baseInsertCache.SetCommand(cachekey, command.CommandText); } return(command); }