internal protected virtual R Insert <R>(IQueryable query, LambdaExpression constructor, ITable table, Func <SqlPreCommandSimple, R> continuation, bool removeSelectRowCount = false) { AliasGenerator aliasGenerator = new AliasGenerator(); SqlPreCommandSimple cr; using (HeavyProfiler.Log("LINQ")) using (var log = HeavyProfiler.LogNoStackTrace("Clean")) { Expression cleaned = Clean(query.Expression, true, log) !; var binder = new QueryBinder(aliasGenerator); log.Switch("Bind"); CommandExpression insert = binder.BindInsert(cleaned, constructor, table); CommandExpression insertOprimized = (CommandExpression)Optimize(insert, binder, aliasGenerator, log); CommandExpression insertSimplified = CommandSimplifier.Simplify(insertOprimized, removeSelectRowCount, aliasGenerator); log.Switch("TR"); cr = TranslatorBuilder.BuildCommandResult(insertSimplified); } return(continuation(cr)); }
internal protected virtual R Update <R>(IUpdateable updateable, Func <SqlPreCommandSimple, R> continuation, bool removeSelectRowCount = false) { AliasGenerator aliasGenerator = new AliasGenerator(); SqlPreCommandSimple cr; using (HeavyProfiler.Log("LINQ")) using (var log = HeavyProfiler.LogNoStackTrace("Clean")) { Expression cleaned = Clean(updateable.Query.Expression, true, log) !; var binder = new QueryBinder(aliasGenerator); log.Switch("Bind"); CommandExpression update = binder.BindUpdate(cleaned, updateable.PartSelector, updateable.SetterExpressions); CommandExpression updateOptimized = (CommandExpression)Optimize(update, binder, aliasGenerator, log); CommandExpression updateSimplified = CommandSimplifier.Simplify(updateOptimized, removeSelectRowCount, aliasGenerator); log.Switch("TR"); cr = TranslatorBuilder.BuildCommandResult(updateSimplified); } return(continuation(cr)); }