public RelationalProjectionExpressionVisitorEx(RelationalProjectionExpressionVisitorDependencies dependencies , RelationalQueryModelVisitor queryModelVisitor , IQuerySource querySource) : base(dependencies, queryModelVisitor, querySource) { _querySource = querySource; _queryModelVisitor = queryModelVisitor; }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public override SqlTranslatingExpressionVisitor Create( RelationalQueryModelVisitor queryModelVisitor, SelectExpression targetSelectExpression = null, Expression topLevelPredicate = null, bool inProjection = false) => new SqlServerSqlTranslatingExpressionVisitor( Dependencies, queryModelVisitor, targetSelectExpression, topLevelPredicate, inProjection);
/// <summary> /// Creates a new instance of <see cref="RelationalProjectionExpressionVisitor" />. /// </summary> /// <param name="dependencies"> Parameter object containing dependencies for this service. </param> /// <param name="queryModelVisitor"> The query model visitor. </param> /// <param name="querySource"> The query source. </param> public RelationalProjectionExpressionVisitor( [NotNull] RelationalProjectionExpressionVisitorDependencies dependencies, [NotNull] RelationalQueryModelVisitor queryModelVisitor, [NotNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor))) { Check.NotNull(dependencies, nameof(dependencies)); Check.NotNull(querySource, nameof(querySource)); _sqlTranslatingExpressionVisitorFactory = dependencies.SqlTranslatingExpressionVisitorFactory; _entityMaterializerSource = dependencies.EntityMaterializerSource; _querySource = querySource; _targetSelectExpression = QueryModelVisitor.TryGetQuery(querySource); if (_targetSelectExpression != null) { _groupAggregateTargetSelectExpression = _targetSelectExpression.Clone(); _isGroupAggregate = _querySource.ItemType.IsGrouping() && _targetSelectExpression.GroupBy.Count > 0; if (_isGroupAggregate) { _targetSelectExpression.ClearProjection(); } } }
public SqlTranslatingExpressionVisitor( [NotNull] IRelationalAnnotationProvider relationalAnnotationProvider, [NotNull] IExpressionFragmentTranslator compositeExpressionFragmentTranslator, [NotNull] IMethodCallTranslator methodCallTranslator, [NotNull] IMemberTranslator memberTranslator, [NotNull] RelationalQueryModelVisitor queryModelVisitor, [CanBeNull] SelectExpression targetSelectExpression = null, [CanBeNull] Expression topLevelPredicate = null, bool bindParentQueries = false, bool inProjection = false) { Check.NotNull(relationalAnnotationProvider, nameof(relationalAnnotationProvider)); Check.NotNull(compositeExpressionFragmentTranslator, nameof(compositeExpressionFragmentTranslator)); Check.NotNull(methodCallTranslator, nameof(methodCallTranslator)); Check.NotNull(memberTranslator, nameof(memberTranslator)); Check.NotNull(queryModelVisitor, nameof(queryModelVisitor)); _relationalAnnotationProvider = relationalAnnotationProvider; _compositeExpressionFragmentTranslator = compositeExpressionFragmentTranslator; _methodCallTranslator = methodCallTranslator; _memberTranslator = memberTranslator; _queryModelVisitor = queryModelVisitor; _targetSelectExpression = targetSelectExpression; _topLevelPredicate = topLevelPredicate; _bindParentQueries = bindParentQueries; _inProjection = inProjection; }
public RelationalEntityQueryableExpressionVisitor( [NotNull] IModel model, [NotNull] IKeyValueFactorySource keyValueFactorySource, [NotNull] ISelectExpressionFactory selectExpressionFactory, [NotNull] IMaterializerFactory materializerFactory, [NotNull] ICommandBuilderFactory commandBuilderFactory, [NotNull] IRelationalAnnotationProvider relationalAnnotationProvider, [NotNull] RelationalQueryModelVisitor queryModelVisitor, [CanBeNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor))) { Check.NotNull(model, nameof(model)); Check.NotNull(keyValueFactorySource, nameof(keyValueFactorySource)); Check.NotNull(selectExpressionFactory, nameof(selectExpressionFactory)); Check.NotNull(materializerFactory, nameof(materializerFactory)); Check.NotNull(commandBuilderFactory, nameof(commandBuilderFactory)); Check.NotNull(relationalAnnotationProvider, nameof(relationalAnnotationProvider)); _model = model; _keyValueFactorySource = keyValueFactorySource; _selectExpressionFactory = selectExpressionFactory; _materializerFactory = materializerFactory; _commandBuilderFactory = commandBuilderFactory; _relationalAnnotationProvider = relationalAnnotationProvider; _querySource = querySource; }
public RelationalQueryModelVisitorEx(EntityQueryModelVisitorDependencies dependencies , RelationalQueryModelVisitorDependencies relationalDependencies , RelationalQueryCompilationContext queryCompilationContext , RelationalQueryModelVisitor parentQueryModelVisitor) : base(dependencies, relationalDependencies, queryCompilationContext, parentQueryModelVisitor) { }
/// <inheritdoc /> public NpgsqlSqlTranslatingExpressionVisitor( [NotNull] SqlTranslatingExpressionVisitorDependencies dependencies, [NotNull] RelationalQueryModelVisitor queryModelVisitor, [CanBeNull] SelectExpression targetSelectExpression = null, [CanBeNull] Expression topLevelPredicate = null, bool inProjection = false) : base(dependencies, queryModelVisitor, targetSelectExpression, topLevelPredicate, inProjection) => _queryModelVisitor = queryModelVisitor;
public RelationalOrderingExpressionTreeVisitor( [NotNull] RelationalQueryModelVisitor queryModelVisitor, [NotNull] Ordering ordering) : base(Check.NotNull(queryModelVisitor, "queryModelVisitor")) { Check.NotNull(ordering, "ordering"); _ordering = ordering; }
public SqlTranslatingExpressionTreeVisitor( [NotNull] RelationalQueryModelVisitor queryModelVisitor, [CanBeNull] Expression topLevelPredicate = null) { Check.NotNull(queryModelVisitor, nameof(queryModelVisitor)); _queryModelVisitor = queryModelVisitor; _topLevelPredicate = topLevelPredicate; }
public FbSqlTranslatingExpressionVisitor( SqlTranslatingExpressionVisitorDependencies dependencies, RelationalQueryModelVisitor queryModelVisitor, SelectExpression targetSelectExpression = null, Expression topLevelPredicate = null, bool inProjection = false) : base(dependencies, queryModelVisitor, targetSelectExpression, topLevelPredicate, inProjection) { }
public GroupByAggregateTranslatingExpressionVisitor(RelationalProjectionExpressionVisitor projectionExpressionVisitor) { _projectionExpressionVisitor = projectionExpressionVisitor; _queryModelVisitor = projectionExpressionVisitor.QueryModelVisitor; _groupQuerySource = projectionExpressionVisitor._querySource; _sqlTranslatingExpressionVisitorFactory = projectionExpressionVisitor._sqlTranslatingExpressionVisitorFactory; _entityMaterializerSource = projectionExpressionVisitor._entityMaterializerSource; _selectExpression = _queryModelVisitor.TryGetQuery(_groupQuerySource); }
public RelationalEntityQueryableExpressionTreeVisitor( [NotNull] RelationalQueryModelVisitor queryModelVisitor, [NotNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, "queryModelVisitor")) { Check.NotNull(querySource, "querySource"); _querySource = querySource; }
public RelationalEntityQueryableExpressionVisitor( [NotNull] RelationalQueryModelVisitor queryModelVisitor, [NotNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor))) { Check.NotNull(querySource, nameof(querySource)); _querySource = querySource; }
public RelationalProjectionExpressionTreeVisitor( [NotNull] RelationalQueryModelVisitor queryModelVisitor, [NotNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor))) { _querySource = querySource; _sqlTranslatingExpressionTreeVisitor = new SqlTranslatingExpressionTreeVisitor(queryModelVisitor); }
public RelationalProjectionExpressionVisitor( [NotNull] RelationalQueryModelVisitor queryModelVisitor, [NotNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor))) { Check.NotNull(querySource, nameof(querySource)); _queryModelVisitor = queryModelVisitor; _querySource = querySource; }
public override EntityQueryModelVisitor CreateQueryModelVisitor( EntityQueryModelVisitor parentEntityQueryModelVisitor) { var relationalQueryModelVisitor = new RelationalQueryModelVisitor( this, (RelationalQueryModelVisitor)parentEntityQueryModelVisitor); _relationalQueryModelVisitors.Add(relationalQueryModelVisitor); return relationalQueryModelVisitor; }
public SqlServerExtensionsRelationalEntityQueryableExpressionVisitor(RelationalEntityQueryableExpressionVisitorDependencies dependencies , RelationalQueryModelVisitor queryModelVisitor , IQuerySource querySource) : base(dependencies, queryModelVisitor, querySource) { _model = (dependencies ?? throw new ArgumentNullException(nameof(dependencies))).Model; _selectExpressionFactory = dependencies.SelectExpressionFactory; _materializerFactory = dependencies.MaterializerFactory; _shaperCommandContextFactory = dependencies.ShaperCommandContextFactory; _querySource = querySource; }
/// <summary> /// Creates a new SqlTranslatingExpressionVisitor. /// </summary> /// <param name="queryModelVisitor"> The query model visitor. </param> /// <param name="targetSelectExpression"> The target select expression. </param> /// <param name="topLevelPredicate"> The top level predicate. </param> /// <param name="inProjection"> true if we are translating a projection. </param> /// <returns> /// A SqlTranslatingExpressionVisitor. /// </returns> public virtual SqlTranslatingExpressionVisitor Create( RelationalQueryModelVisitor queryModelVisitor, SelectExpression targetSelectExpression = null, Expression topLevelPredicate = null, bool inProjection = false) => new SqlTranslatingExpressionVisitor( Dependencies, Check.NotNull(queryModelVisitor, nameof(queryModelVisitor)), targetSelectExpression, topLevelPredicate, inProjection);
public RalmsEntityQueryableExpressionVisitor( RelationalEntityQueryableExpressionVisitorDependencies dependencies, RelationalQueryModelVisitor queryModelVisitor, IQuerySource querySource) : base(entityQueryModelVisitor: queryModelVisitor) { _model = dependencies.Model; _selectExpressionFactory = dependencies.SelectExpressionFactory; _materializerFactory = dependencies.MaterializerFactory; _shaperCommandContextFactory = dependencies.ShaperCommandContextFactory; _querySource = querySource; }
private static AliasExpression TryBindParentExpression( RelationalQueryModelVisitor queryModelVisitor, Func <RelationalQueryModelVisitor, AliasExpression> binder) { if (queryModelVisitor == null || queryModelVisitor.RequiresClientProjection) { return(null); } return(binder(queryModelVisitor) ?? TryBindParentExpression(queryModelVisitor.ParentQueryModelVisitor, binder)); }
public static string ToSql <TEntity>(this IQueryable <TEntity> query, DbContext dbCtx) { IQueryModelGenerator modelGenerator = dbCtx.GetService <IQueryModelGenerator>(); QueryModel queryModel = modelGenerator.ParseQuery(query.Expression); DatabaseDependencies databaseDependencies = dbCtx.GetService <DatabaseDependencies>(); QueryCompilationContext queryCompilationContext = databaseDependencies.QueryCompilationContextFactory.Create(false); RelationalQueryModelVisitor modelVisitor = (RelationalQueryModelVisitor)queryCompilationContext.CreateQueryModelVisitor(); modelVisitor.CreateQueryExecutor <TEntity>(queryModel); var sql = modelVisitor.Queries.First().ToString(); return(sql); }
/// <summary> /// Creates a new instance of <see cref="RelationalProjectionExpressionVisitor" />. /// </summary> /// <param name="dependencies"> Parameter object containing dependencies for this service. </param> /// <param name="queryModelVisitor"> The query model visitor. </param> /// <param name="querySource"> The query source. </param> public RelationalProjectionExpressionVisitor( [NotNull] RelationalProjectionExpressionVisitorDependencies dependencies, [NotNull] RelationalQueryModelVisitor queryModelVisitor, [NotNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor))) { Check.NotNull(dependencies, nameof(dependencies)); Check.NotNull(querySource, nameof(querySource)); _sqlTranslatingExpressionVisitorFactory = dependencies.SqlTranslatingExpressionVisitorFactory; _entityMaterializerSource = dependencies.EntityMaterializerSource; _querySource = querySource; }
public ModelVisitor( EntityQueryModelVisitorDependencies dependencies, RelationalQueryModelVisitorDependencies relationalDependencies, RelationalQueryCompilationContext context, RelationalQueryModelVisitor visitor) : base(dependencies, relationalDependencies, context, visitor) { var expressionVisitor = new ExpressionVisitor( context, dependencies.QueryModelGenerator, this); field.SetValue(this, expressionVisitor); }
/// <summary> /// Creates a new instance of <see cref="RelationalEntityQueryableExpressionVisitor" />. /// </summary> /// <param name="dependencies"> Parameter object containing dependencies for this service. </param> /// <param name="queryModelVisitor"> The query model visitor. </param> /// <param name="querySource"> The query source. </param> public RelationalEntityQueryableExpressionVisitor( [NotNull] RelationalEntityQueryableExpressionVisitorDependencies dependencies, [NotNull] RelationalQueryModelVisitor queryModelVisitor, [CanBeNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor))) { Check.NotNull(dependencies, nameof(dependencies)); _model = dependencies.Model; _selectExpressionFactory = dependencies.SelectExpressionFactory; _materializerFactory = dependencies.MaterializerFactory; _shaperCommandContextFactory = dependencies.ShaperCommandContextFactory; _querySource = querySource; }
public virtual string GenerateSql <TEntity>(LolitaSetting <TEntity> lolita, RelationalQueryModelVisitor visitor) where TEntity : class, new() { var sb = new StringBuilder("UPDATE "); sb.Append(lolita.Table) .AppendLine() .Append("SET ") .Append(string.Join($", { Environment.NewLine } ", lolita.Operations)) .AppendLine() .Append(ParseWhere(visitor, lolita.Table)) .Append(sqlGenerationHelper.StatementTerminator); return(sb.ToString()); }
public virtual string GenerateSql <TEntity>(IQueryable <TEntity> lolita, RelationalQueryModelVisitor visitor) where TEntity : class, new() { var sb = new StringBuilder("DELETE FROM "); var model = lolita.ElementType; var table = GetTableName <TEntity>(); sb.Append(table) .AppendLine() .Append(ParseWhere(visitor, table)) .Append(sqlGenerationHelper.StatementTerminator); return(sb.ToString()); }
public RelationalProjectionExpressionVisitor( [NotNull] ISqlTranslatingExpressionVisitorFactory sqlTranslatingExpressionVisitorFactory, [NotNull] IEntityMaterializerSource entityMaterializerSource, [NotNull] RelationalQueryModelVisitor queryModelVisitor, [NotNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor))) { Check.NotNull(sqlTranslatingExpressionVisitorFactory, nameof(sqlTranslatingExpressionVisitorFactory)); Check.NotNull(entityMaterializerSource, nameof(entityMaterializerSource)); Check.NotNull(querySource, nameof(querySource)); _sqlTranslatingExpressionVisitorFactory = sqlTranslatingExpressionVisitorFactory; _entityMaterializerSource = entityMaterializerSource; _querySource = querySource; }
public SqlTranslatingExpressionVisitor( [NotNull] RelationalQueryModelVisitor queryModelVisitor, [CanBeNull] SelectExpression targetSelectExpression = null, [CanBeNull] Expression topLevelPredicate = null, bool bindParentQueries = false, bool inProjection = false) { Check.NotNull(queryModelVisitor, nameof(queryModelVisitor)); _queryModelVisitor = queryModelVisitor; _targetSelectExpression = targetSelectExpression; _topLevelPredicate = topLevelPredicate; _bindParentQueries = bindParentQueries; _inProjection = inProjection; }
public RelationalProjectionExpressionVisitor( [NotNull] ISqlTranslatingExpressionVisitorFactory sqlTranslatingExpressionVisitorFactory, [NotNull] IEntityMaterializerSource entityMaterializerSource, [NotNull] RelationalQueryModelVisitor queryModelVisitor, [NotNull] IQuerySource querySource) : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor))) { Check.NotNull(sqlTranslatingExpressionVisitorFactory, nameof(sqlTranslatingExpressionVisitorFactory)); Check.NotNull(entityMaterializerSource, nameof(entityMaterializerSource)); Check.NotNull(querySource, nameof(querySource)); _sqlTranslatingExpressionVisitorFactory = sqlTranslatingExpressionVisitorFactory; _entityMaterializerSource = entityMaterializerSource; _queryModelVisitor = queryModelVisitor; _querySource = querySource; }
protected virtual string ParseWhere(RelationalQueryModelVisitor visitor, string Table) { if (visitor == null || visitor.Queries.Count == 0) { return(""); } var sql = visitor.Queries.First().ToString(); var pos = sql.IndexOf("WHERE"); if (pos < 0) { return(""); } return(sql.Substring(pos) .Replace(sqlGenerationHelper.DelimitIdentifier(visitor.CurrentParameter.Name), Table)); }
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); }
public virtual SqlTranslatingExpressionVisitor Create( RelationalQueryModelVisitor queryModelVisitor, SelectExpression targetSelectExpression = null, Expression topLevelPredicate = null, bool bindParentQueries = false, bool inProjection = false) => new SqlTranslatingExpressionVisitor( _relationalAnnotationProvider, _compositeExpressionFragmentTranslator, _methodCallTranslator, _memberTranslator, Check.NotNull(queryModelVisitor, nameof(queryModelVisitor)), targetSelectExpression, topLevelPredicate, bindParentQueries, inProjection);
/// <summary> /// Creates a new instance of <see cref="SqlTranslatingExpressionVisitor" />. /// </summary> /// <param name="dependencies"> Parameter object containing dependencies for this service. </param> /// <param name="queryModelVisitor"> The query model visitor. </param> /// <param name="targetSelectExpression"> The target select expression. </param> /// <param name="topLevelPredicate"> The top level predicate. </param> /// <param name="inProjection"> true if the expression to be translated is a LINQ projection. </param> public SqlTranslatingExpressionVisitor( [NotNull] SqlTranslatingExpressionVisitorDependencies dependencies, [NotNull] RelationalQueryModelVisitor queryModelVisitor, [CanBeNull] SelectExpression targetSelectExpression = null, [CanBeNull] Expression topLevelPredicate = null, bool inProjection = false) { Check.NotNull(dependencies, nameof(dependencies)); Check.NotNull(queryModelVisitor, nameof(queryModelVisitor)); _typeMappingSource = dependencies.TypeMappingSource; _queryModelVisitor = queryModelVisitor; _targetSelectExpression = targetSelectExpression; _topLevelPredicate = topLevelPredicate; _inProjection = inProjection; _nullCheckRemovalTestingVisitor = new NullCheckRemovalTestingVisitor(_queryModelVisitor); _isTopLevelProjection = inProjection; }