/// <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); }
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); }
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(); }