internal static int Update <T>(this IDbCommand dbCmd, T obj) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, obj); } var dialectProvider = dbCmd.GetDialectProvider(); var hadRowVersion = dialectProvider.PrepareParameterizedUpdateStatement <T>(dbCmd); if (string.IsNullOrEmpty(dbCmd.CommandText)) { return(0); } dialectProvider.SetParameterValues <T>(dbCmd, obj); var rowsUpdated = dbCmd.ExecNonQuery(); if (hadRowVersion && rowsUpdated == 0) { throw new OptimisticConcurrencyException(); } return(rowsUpdated); }
internal static Task <int> UpdateAsync <T>(this IDbCommand dbCmd, T obj, CancellationToken token) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, obj); } var dialectProvider = dbCmd.GetDialectProvider(); var hadRowVersion = dialectProvider.PrepareParameterizedUpdateStatement <T>(dbCmd); if (string.IsNullOrEmpty(dbCmd.CommandText)) { return(TaskResult.Zero); } dialectProvider.SetParameterValues <T>(dbCmd, obj); return(dialectProvider.ExecuteNonQueryAsync(dbCmd) .Then(rowsUpdated => { if (hadRowVersion && rowsUpdated == 0) { throw new OptimisticConcurrencyException(); } return rowsUpdated; })); }
internal static bool Save <T>(this IDbCommand dbCmd, T obj) { var id = obj.GetId(); var existingRow = dbCmd.SingleById <T>(id); if (Equals(existingRow, default(T))) { var modelDef = typeof(T).GetModelDefinition(); if (modelDef.HasAutoIncrementId) { var newId = dbCmd.Insert(obj, selectIdentity: true); var safeId = OrmLiteConfig.DialectProvider.ConvertDbValue(newId, modelDef.PrimaryKey.FieldType); modelDef.PrimaryKey.SetValueFn(obj, safeId); } else { if (OrmLiteConfig.InsertFilter != null) { OrmLiteConfig.InsertFilter(dbCmd, obj); } dbCmd.Insert(obj); } return(true); } if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, obj); } dbCmd.Update(obj); return(false); }
internal static Task <int> UpdateAllAsync <T>(this IDbCommand dbCmd, IEnumerable <T> objs, CancellationToken token) { IDbTransaction dbTrans = null; int count = 0; if (dbCmd.Transaction == null) { dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction(); } var dialectProvider = dbCmd.GetDialectProvider(); var hadRowVersion = dialectProvider.PrepareParameterizedUpdateStatement <T>(dbCmd); if (string.IsNullOrEmpty(dbCmd.CommandText)) { return(TaskResult.Zero); } return(objs.EachAsync((obj, i) => { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, obj); } dialectProvider.SetParameterValues <T>(dbCmd, obj); return dbCmd.ExecNonQueryAsync(token).Then(rowsUpdated => { if (hadRowVersion && rowsUpdated == 0) { throw new OptimisticConcurrencyException(); } count += rowsUpdated; return count; }); }).ContinueWith(t => { if (dbTrans != null && t.IsSuccess()) { dbTrans.Commit(); } if (dbTrans != null) { dbTrans.Dispose(); } if (t.IsFaulted) { throw t.Exception; } return count; })); }
public static int Update<T>(this IDbCommand dbCmd, T item, Expression<Func<T, bool>> expression) { if (OrmLiteConfig.UpdateFilter != null) OrmLiteConfig.UpdateFilter(dbCmd, item); var q = dbCmd.GetDialectProvider().SqlExpression<T>(); q.Where(expression); q.PrepareUpdateStatement(dbCmd, item); return dbCmd.ExecNonQuery(); }
internal static int UpdateAll <T>(this IDbCommand dbCmd, IEnumerable <T> objs) { IDbTransaction dbTrans = null; int count = 0; try { if (dbCmd.Transaction == null) { dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction(); } var dialectProvider = dbCmd.GetDialectProvider(); var hadRowVersion = dialectProvider.PrepareParameterizedUpdateStatement <T>(dbCmd); if (string.IsNullOrEmpty(dbCmd.CommandText)) { return(0); } foreach (var obj in objs) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, obj); } dialectProvider.SetParameterValues <T>(dbCmd, obj); var rowsUpdated = dbCmd.ExecNonQuery(); if (hadRowVersion && rowsUpdated == 0) { throw new OptimisticConcurrencyException(); } count += rowsUpdated; } if (dbTrans != null) { dbTrans.Commit(); } } finally { if (dbTrans != null) { dbTrans.Dispose(); } } return(count); }
internal static Task <int> UpdateNonDefaultsAsync <T>(this IDbCommand dbCmd, T item, Expression <Func <T, bool> > obj, CancellationToken token) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, item); } var q = dbCmd.GetDialectProvider().SqlExpression <T>(); q.Where(obj); q.PrepareUpdateStatement(dbCmd, item, excludeDefaults: true); return(dbCmd.ExecNonQueryAsync(token)); }
internal static int Update <T>(this IDbCommand dbCmd, T obj) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, obj); } OrmLiteConfig.DialectProvider.PrepareParameterizedUpdateStatement <T>(dbCmd); OrmLiteConfig.DialectProvider.SetParameterValues <T>(dbCmd, obj); return(dbCmd.ExecNonQuery()); }
public static int UpdateNonDefaults <T>(this IDbCommand dbCmd, T item, Expression <Func <T, bool> > obj) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, item); } var q = dbCmd.GetDialectProvider().SqlExpression <T>(); q.Where(obj); q.PrepareUpdateStatement(dbCmd, item, excludeDefaults: true); return(dbCmd.ExecNonQuery()); }
/// <summary> /// Updates all non-default values set on item matching the where condition (if any). E.g /// /// dbCmd.UpdateNonDefaults(new Person { FirstName = "JJ" }, p => p.FirstName == "Jimi"); /// UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("FirstName" = 'Jimi') /// </summary> public static int UpdateNonDefaults <T>(this IDbCommand dbCmd, T item, Expression <Func <T, bool> > obj) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, item); } var ev = OrmLiteConfig.DialectProvider.SqlExpression <T>(); ev.Where(obj); var sql = ev.ToUpdateStatement(item, excludeDefaults: true); return(dbCmd.ExecuteSql(sql)); }
public static int Update <T>(this IDbCommand dbCmd, T item, Expression <Func <T, bool> > expression) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, item); } var q = dbCmd.GetDialectProvider().SqlExpression <T>(); q.Where(expression); var sql = q.ToUpdateStatement(item); return(dbCmd.ExecuteSql(sql)); }
internal static Task <int> UpdateNonDefaultsAsync <T>(this IDbCommand dbCmd, T item, Expression <Func <T, bool> > obj, CancellationToken token) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, item); } var q = OrmLiteConfig.DialectProvider.SqlExpression <T>(); q.Where(obj); var sql = q.ToUpdateStatement(item, excludeDefaults: true); return(dbCmd.ExecuteSqlAsync(sql, token)); }
internal static Task <int> UpdateAsync <T>(this IDbCommand dbCmd, T item, Expression <Func <T, bool> > expression, CancellationToken token) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, item); } var q = dbCmd.GetDialectProvider().SqlExpression <T>(); q.Where(expression); var sql = q.ToUpdateStatement(item); return(dbCmd.ExecuteSqlAsync(sql, token)); }
internal static int UpdateAll <T>(this IDbCommand dbCmd, IEnumerable <T> objs) { IDbTransaction dbTrans = null; int count = 0; try { if (dbCmd.Transaction == null) { dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction(); } var dialectProvider = OrmLiteConfig.DialectProvider; dialectProvider.PrepareParameterizedUpdateStatement <T>(dbCmd); if (string.IsNullOrEmpty(dbCmd.CommandText)) { return(0); } foreach (var obj in objs) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, obj); } dialectProvider.SetParameterValues <T>(dbCmd, obj); count += dbCmd.ExecNonQuery(); } if (dbTrans != null) { dbTrans.Commit(); } } finally { if (dbTrans != null) { dbTrans.Dispose(); } } return(count); }
internal static void UpdateOnlySql<T>(this IDbCommand dbCmd, T model, SqlExpression<T> onlyFields) { if (OrmLiteConfig.UpdateFilter != null) OrmLiteConfig.UpdateFilter(dbCmd, model); var fieldsToUpdate = onlyFields.UpdateFields.Count == 0 ? onlyFields.GetAllFields() : onlyFields.UpdateFields; onlyFields.CopyParamsTo(dbCmd); dbCmd.GetDialectProvider().PrepareUpdateRowStatement(dbCmd, model, fieldsToUpdate); if (!onlyFields.WhereExpression.IsNullOrEmpty()) dbCmd.CommandText += " " + onlyFields.WhereExpression; }
internal static void UpdateAddSql <T>(this IDbCommand dbCmd, T model, SqlExpression <T> fields) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, model); } fields.CopyParamsTo(dbCmd); dbCmd.GetDialectProvider().PrepareUpdateRowAddStatement(dbCmd, model, fields.UpdateFields); if (!fields.WhereExpression.IsNullOrEmpty()) { dbCmd.CommandText += " " + fields.WhereExpression; } }
public static int UpdateAdd<T>(this IDbCommand dbCmd, Expression<Func<T>> updateFields, SqlExpression<T> q) { if (updateFields == null) throw new ArgumentNullException("updateFields"); if (OrmLiteConfig.UpdateFilter != null) OrmLiteConfig.UpdateFilter(dbCmd, CachedExpressionCompiler.Evaluate(updateFields)); q.CopyParamsTo(dbCmd); var updateFieldValues = updateFields.AssignedValues(); dbCmd.GetDialectProvider().PrepareUpdateRowAddStatement<T>(dbCmd, updateFieldValues, q.WhereExpression); return dbCmd.ExecNonQuery(); }
internal static string UpdateOnlySql <T>(this IDbCommand dbCmd, T model, SqlExpression <T> onlyFields) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, model); } var fieldsToUpdate = onlyFields.UpdateFields.Count == 0 ? onlyFields.GetAllFields() : onlyFields.UpdateFields; var sql = dbCmd.GetDialectProvider().ToUpdateRowStatement(model, fieldsToUpdate); if (!onlyFields.WhereExpression.IsNullOrEmpty()) { sql += " " + onlyFields.WhereExpression; } return(sql); }
internal static Task <int> UpdateOnlyAsync <T>(this IDbCommand dbCmd, Expression <Func <T> > updateFields, SqlExpression <T> q, CancellationToken token) { if (updateFields == null) { throw new ArgumentNullException("updateFields"); } if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, CachedExpressionCompiler.Evaluate(updateFields)); } q.CopyParamsTo(dbCmd); var updateFieldValues = updateFields.AssignedValues(); dbCmd.GetDialectProvider().PrepareUpdateRowStatement <T>(dbCmd, updateFieldValues, q.WhereExpression); return(dbCmd.ExecNonQueryAsync(token)); }
internal static async Task <int> SaveAllAsync <T>(this IDbCommand dbCmd, IEnumerable <T> objs, CancellationToken token) { var saveRows = objs.ToList(); var firstRow = saveRows.FirstOrDefault(); if (Equals(firstRow, default(T))) { return(0); } var modelDef = typeof(T).GetModelDefinition(); var firstRowId = modelDef.GetPrimaryKey(firstRow); var defaultIdValue = firstRowId != null?firstRowId.GetType().GetDefaultValue() : null; var idMap = defaultIdValue != null ? saveRows.Where(x => !defaultIdValue.Equals(modelDef.GetPrimaryKey(x))).ToSafeDictionary(x => modelDef.GetPrimaryKey(x)) : saveRows.Where(x => modelDef.GetPrimaryKey(x) != null).ToSafeDictionary(x => modelDef.GetPrimaryKey(x)); var existingRowsMap = (await dbCmd.SelectByIdsAsync <T>(idMap.Keys, token)).ToDictionary(x => modelDef.GetPrimaryKey(x)); var rowsAdded = 0; IDbTransaction dbTrans = null; if (dbCmd.Transaction == null) { dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction(); } var dialectProvider = dbCmd.GetDialectProvider(); try { foreach (var row in saveRows) { var id = modelDef.GetPrimaryKey(row); if (id != defaultIdValue && existingRowsMap.ContainsKey(id)) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, row); } await dbCmd.UpdateAsync(row, token); } else { if (modelDef.HasAutoIncrementId) { var newId = await dbCmd.InsertAsync(row, selectIdentity : true, token : token); var safeId = dialectProvider.ConvertDbValue(newId, modelDef.PrimaryKey.FieldType); modelDef.PrimaryKey.SetValueFn(row, safeId); id = newId; } else { if (OrmLiteConfig.InsertFilter != null) { OrmLiteConfig.InsertFilter(dbCmd, row); } await dbCmd.InsertAsync(token, row); } rowsAdded++; } if (modelDef.RowVersion != null) { modelDef.RowVersion.SetValueFn(row, await dbCmd.GetRowVersionAsync(modelDef, id, token)); } } if (dbTrans != null) { dbTrans.Commit(); } } finally { if (dbTrans != null) { dbTrans.Dispose(); } } return(rowsAdded); }
internal static int SaveAll <T>(this IDbCommand dbCmd, IEnumerable <T> objs) { var saveRows = objs.ToList(); var firstRow = saveRows.FirstOrDefault(); if (Equals(firstRow, default(T))) { return(0); } var defaultIdValue = firstRow.GetId().GetType().GetDefaultValue(); var idMap = defaultIdValue != null ? saveRows.Where(x => !defaultIdValue.Equals(x.GetId())).ToSafeDictionary(x => x.GetId()) : saveRows.Where(x => x.GetId() != null).ToSafeDictionary(x => x.GetId()); var existingRowsMap = dbCmd.SelectByIds <T>(idMap.Keys).ToDictionary(x => x.GetId()); var modelDef = typeof(T).GetModelDefinition(); var rowsAdded = 0; IDbTransaction dbTrans = null; if (dbCmd.Transaction == null) { dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction(); } try { foreach (var row in saveRows) { var id = row.GetId(); if (id != defaultIdValue && existingRowsMap.ContainsKey(id)) { if (OrmLiteConfig.UpdateFilter != null) { OrmLiteConfig.UpdateFilter(dbCmd, row); } dbCmd.Update(row); } else { if (modelDef.HasAutoIncrementId) { var newId = dbCmd.Insert(row, selectIdentity: true); var safeId = OrmLiteConfig.DialectProvider.ConvertDbValue(newId, modelDef.PrimaryKey.FieldType); modelDef.PrimaryKey.SetValueFn(row, safeId); } else { if (OrmLiteConfig.InsertFilter != null) { OrmLiteConfig.InsertFilter(dbCmd, row); } dbCmd.Insert(row); } rowsAdded++; } } if (dbTrans != null) { dbTrans.Commit(); } } finally { if (dbTrans != null) { dbTrans.Dispose(); } } return(rowsAdded); }