Exemple #1
0
        public ITranslator <TSchema> Create(TranslatorFactoryContext <TSchema> context)
        {
            var builder = new TranslatorBuilder <TSchema>(_specification.Name, context);

            _specification.Apply(builder);

            return(builder.Build());
        }
    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 Translate <R>(Expression expression, Func <ITranslateResult, R> continuation) //For debugging purposes
    {
        AliasGenerator aliasGenerator = new AliasGenerator();

        ITranslateResult result;

        using (HeavyProfiler.Log("LINQ", () => expression.ToString()))
            using (var log = HeavyProfiler.LogNoStackTrace("Clean"))
            {
                Expression cleaned = Clean(expression, true, log) !;
                var        binder  = new QueryBinder(aliasGenerator);
                log.Switch("Bind");
                ProjectionExpression binded    = (ProjectionExpression)binder.BindQuery(cleaned);
                ProjectionExpression optimized = (ProjectionExpression)Optimize(binded, binder, aliasGenerator, log);
                log.Switch("ChPrjFlatt");
                ProjectionExpression flat = ChildProjectionFlattener.Flatten(optimized, aliasGenerator);
                log.Switch("TB");
                result = TranslatorBuilder.Build(flat);
            }
        return(continuation(result));
    }
    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));
    }