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);
        }
Example #2
0
        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;
            }));
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #7
0
        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());
        }
Example #10
0
        /// <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));
        }
Example #12
0
        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));
        }
Example #14
0
        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);
        }
Example #19
0
        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));
        }
Example #20
0
        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);
        }
Example #21
0
        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);
        }