/// <summary>
        /// Entry point
        /// </summary>
        /// <param name="queryModel"></param>
        /// <returns></returns>
        public override ISet <IQuerySource> FindQuerySourcesRequiringMaterialization(
            [NotNull] Remotion.Linq.QueryModel queryModel
            )
        {
            // store demoted selectors
            QueryModelVisitor.DemotedSelectors = queryModel.BodyClauses
                                                 .OfType <JoinClause>()
                                                 .Select((x, i) => {
                return(new {
                    Key = i,
                    Value = new Dictionary <string, Expression>()
                    {
                        { "OuterKeySelector", x.OuterKeySelector },
                        { "InnerKeySelector", x.InnerKeySelector }
                    }
                });
            })
                                                 .ToDictionary(
                x => x.Key, x => x.Value
                );

            DemoteSelectorsVisitor visitor = new DemoteSelectorsVisitor(
                QueryModelVisitor
                .DemotedSelectors
                .SelectMany(x => x.Value.Values)
                );

            // relinq transform on the query model
            foreach (var clause in queryModel.BodyClauses.OfType <JoinClause>())
            {
                var InnerSequence = clause.InnerSequence;
                clause.TransformExpressions(visitor.Visit);

                if (clause.OuterKeySelector != DemoteSelectorsVisitor.Demotion ||
                    clause.InnerKeySelector != DemoteSelectorsVisitor.Demotion ||
                    clause.InnerSequence != InnerSequence)
                {
                    throw new ArgumentException(
                              CypherStrings.UnableToDemoteSelectors
                              );
                }
            }

            // let EF find query source requiring materialization (i.e. returned items)
            var materializing = base.FindQuerySourcesRequiringMaterialization(queryModel);

            return(materializing);
        }
Exemplo n.º 2
0
        public static string ToSql <TEntity>(this IQueryable <TEntity> query) where TEntity : class
        {
            QueryCompiler       queryCompiler  = (QueryCompiler)QueryCompilerField.GetValue(query.Provider);
            QueryModelGenerator modelGenerator = (QueryModelGenerator)QueryModelGeneratorField.GetValue(queryCompiler);

            Remotion.Linq.QueryModel queryModel                 = modelGenerator.ParseQuery(query.Expression);
            IDatabase                   database                = (IDatabase)DataBaseField.GetValue(queryCompiler);
            DatabaseDependencies        databaseDependencies    = (DatabaseDependencies)DatabaseDependenciesField.GetValue(database);
            QueryCompilationContext     queryCompilationContext = databaseDependencies.QueryCompilationContextFactory.Create(false);
            RelationalQueryModelVisitor modelVisitor            = (RelationalQueryModelVisitor)queryCompilationContext.CreateQueryModelVisitor();

            modelVisitor.CreateQueryExecutor <TEntity>(queryModel);
            string sql = modelVisitor.Queries.First().ToString();

            return(sql);
        }
Exemplo n.º 3
0
        static SessionManager()
        {
            try
            {
                // this forces the dlls to be copied.
                // see https://stackoverflow.com/questions/15816769/dependent-dll-is-not-getting-copied-to-the-build-output-folder-in-visual-studio
                Remotion.Linq.QueryModel q = null;
                if (q != null)
                {
                    throw new Exception("q is not null");
                }
                Remotion.Linq.EagerFetching.FetchManyRequest x = null;
                if (x != null)
                {
                    throw new Exception("x is not null");
                }

                Current = new SessionManager <T>();

                ModelFactoryProvider.Setup(new ValueInjecterModelFactory(Current));
            }
            catch (Exception ex)
            {
                var securePath = Utility.GetRequiredAppSetting("SecurePath");
                if (Directory.Exists(securePath))
                {
                    var logsPath = Path.Combine(securePath, "logs");

                    if (!Directory.Exists(logsPath))
                    {
                        Directory.CreateDirectory(logsPath);
                    }

                    var filePath = Path.Combine(logsPath, "SessionManagerError.log");

                    using (var writer = File.AppendText(filePath))
                    {
                        writer.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}]");
                        writer.WriteLine(ex.ToString());
                    }
                }

                throw ex;
            }
        }
 public virtual Remotion.Linq.QueryModel CreateFetchQueryModel(Remotion.Linq.QueryModel sourceItemQueryModel) => throw null;
 public FetchQueryModelBuilder(Remotion.Linq.EagerFetching.FetchRequestBase fetchRequest, Remotion.Linq.QueryModel queryModel, int resultOperatorPosition) => throw null;
 public Tuple <bool, Expression> ProcessIdentityQuery(Remotion.Linq.Clauses.ResultOperatorBase resultOperator, Remotion.Linq.QueryModel queryModel, IGeneratedQueryCode _codeEnv, ICodeContext _codeContext, CompositionContainer container)
 {
     return(null);
 }
 public Expression ProcessResultOperator(Remotion.Linq.Clauses.ResultOperatorBase resultOperator, Remotion.Linq.QueryModel queryModel, IGeneratedQueryCode _codeEnv, ICodeContext codeContext, CompositionContainer container)
 {
     throw new NotImplementedException();
 }