Ejemplo n.º 1
0
 public RelationalProjectionExpressionVisitorEx(RelationalProjectionExpressionVisitorDependencies dependencies
                                                , RelationalQueryModelVisitor queryModelVisitor
                                                , IQuerySource querySource) : base(dependencies, queryModelVisitor, querySource)
 {
     _querySource       = querySource;
     _queryModelVisitor = queryModelVisitor;
 }
Ejemplo n.º 2
0
 /// <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;
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 6
0
 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;
        }
Ejemplo n.º 9
0
        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)
 {
 }
Ejemplo n.º 11
0
 public GroupByAggregateTranslatingExpressionVisitor(RelationalProjectionExpressionVisitor projectionExpressionVisitor)
 {
     _projectionExpressionVisitor            = projectionExpressionVisitor;
     _queryModelVisitor                      = projectionExpressionVisitor.QueryModelVisitor;
     _groupQuerySource                       = projectionExpressionVisitor._querySource;
     _sqlTranslatingExpressionVisitorFactory = projectionExpressionVisitor._sqlTranslatingExpressionVisitorFactory;
     _entityMaterializerSource               = projectionExpressionVisitor._entityMaterializerSource;
     _selectExpression                       = _queryModelVisitor.TryGetQuery(_groupQuerySource);
 }
Ejemplo n.º 12
0
        public RelationalEntityQueryableExpressionTreeVisitor(
            [NotNull] RelationalQueryModelVisitor queryModelVisitor,
            [NotNull] IQuerySource querySource)
            : base(Check.NotNull(queryModelVisitor, "queryModelVisitor"))
        {
            Check.NotNull(querySource, "querySource");

            _querySource = querySource;
        }
Ejemplo n.º 13
0
        public RelationalEntityQueryableExpressionVisitor(
            [NotNull] RelationalQueryModelVisitor queryModelVisitor,
            [NotNull] IQuerySource querySource)
            : base(Check.NotNull(queryModelVisitor, nameof(queryModelVisitor)))
        {
            Check.NotNull(querySource, nameof(querySource));

            _querySource = querySource;
        }
Ejemplo n.º 14
0
        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));
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 22
0
        /// <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;
        }
Ejemplo n.º 23
0
    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;
        }
Ejemplo n.º 25
0
        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());
        }
Ejemplo n.º 26
0
        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;
        }
Ejemplo n.º 30
0
        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));
        }
Ejemplo n.º 31
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);
        }
 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);
 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);
Ejemplo n.º 34
0
        /// <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;
        }