示例#1
0
 public RelationalProjectionBindingExpressionVisitor(
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor,
     RelationalSqlTranslatingExpressionVisitor sqlTranslatingExpressionVisitor)
 {
     _queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
     _sqlTranslator = sqlTranslatingExpressionVisitor;
 }
 public virtual RelationalSqlTranslatingExpressionVisitor Create(
     QueryCompilationContext queryCompilationContext,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 => new SqliteSqlTranslatingExpressionVisitor(
     _dependencies,
     queryCompilationContext,
     queryableMethodTranslatingExpressionVisitor);
 public FixSqlServerSqlTranslatingExpressionVisitor(RelationalSqlTranslatingExpressionVisitorDependencies dependencies, IModel model,
                                                    QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor, RelationalSqlTranslatingExpressionVisitor originalVisitor)
     : base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
 {
     _originalVisitor = originalVisitor;
     _originalMethods = CreateOriginalMethods(originalVisitor);
 }
 public virtual RelationalSqlTranslatingExpressionVisitor Create(
     QueryCompilationContext model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 => new MySQLSqlTranslatingExpressionVisitor(
     _dependencies,
     model,
     queryableMethodTranslatingExpressionVisitor);
 /// <summary>
 ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
 ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
 ///     any release. You should only use it directly in your code with extreme caution and knowing that
 ///     doing so can result in application failures when updating to a new Entity Framework Core release.
 /// </summary>
 public SqliteSqlTranslatingExpressionVisitor(
     [NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     [NotNull] QueryCompilationContext queryCompilationContext,
     [NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
     : base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor)
 {
 }
 public SqliteSqlTranslatingExpressionVisitor(
     [NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     [NotNull] IModel model,
     [NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
     : base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
 {
 }
 public virtual RelationalSqlTranslatingExpressionVisitor Create(
     IModel model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 => new TaosSqlTranslatingExpressionVisitor(
     _dependencies,
     model,
     queryableMethodTranslatingExpressionVisitor);
 public TaosSqlTranslatingExpressionVisitor(
     RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     IModel model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
     : base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
 {
 }
 public InMemoryProjectionBindingExpressionVisitor(
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor,
     InMemoryExpressionTranslatingExpressionVisitor expressionTranslatingExpressionVisitor)
 {
     _queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
     _expressionTranslatingExpressionVisitor      = expressionTranslatingExpressionVisitor;
 }
 public RelationalSqlTranslatingExpressionVisitor Create(IModel model,
                                                         QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 {
     return(new ClickHouseSqlTranslatingExpressionVisitor(
                _dependencies,
                model,
                queryableMethodTranslatingExpressionVisitor));
 }
示例#11
0
 public RelationalSqlTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext,
                                                         QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 {
     return(new ClickHouseSqlTranslatingExpressionVisitor(
                _dependencies,
                queryCompilationContext,
                queryableMethodTranslatingExpressionVisitor));
 }
示例#12
0
 public MySQLSqlTranslatingExpressionVisitor(
     RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     QueryCompilationContext model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
     : base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
 {
     _sqlExpressionFactory = dependencies.SqlExpressionFactory;
 }
示例#13
0
 public InMemoryExpressionTranslatingExpressionVisitor(
     [NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor,
     [NotNull] IModel model)
 {
     _queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
     _entityProjectionFindingExpressionVisitor    = new EntityProjectionFindingExpressionVisitor();
     _model = model;
 }
 public SqlServerSqlTranslatingExpressionVisitor(
     RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     IModel model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
     : base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
 {
     _sqlExpressionFactory = dependencies.SqlExpressionFactory;
 }
示例#15
0
 public virtual Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor Create(
     IModel model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 {
     return(new RelationalSqlTranslatingExpressionVisitor(
                _dependencies,
                model,
                queryableMethodTranslatingExpressionVisitor));
 }
示例#16
0
 public SqliteSqlTranslatingExpressionVisitor(
     IModel model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor,
     ISqlExpressionFactory sqlExpressionFactory,
     IMemberTranslatorProvider memberTranslatorProvider,
     IMethodCallTranslatorProvider methodCallTranslatorProvider)
     : base(model, queryableMethodTranslatingExpressionVisitor, sqlExpressionFactory, memberTranslatorProvider, methodCallTranslatorProvider)
 {
 }
示例#17
0
 public NpgsqlSqlTranslatingExpressionVisitor(
     RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     IModel model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
     : base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
 {
     _sqlExpressionFactory = (NpgsqlSqlExpressionFactory)dependencies.SqlExpressionFactory;
     _jsonPocoTranslator   = ((NpgsqlMemberTranslatorProvider)Dependencies.MemberTranslatorProvider).JsonPocoTranslator;
 }
示例#18
0
 public MySqlSqlTranslatingExpressionVisitor(
     RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     QueryCompilationContext queryCompilationContext,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor,
     [CanBeNull] IMySqlJsonPocoTranslator jsonPocoTranslator)
     : base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor)
 {
     _jsonPocoTranslator   = jsonPocoTranslator;
     _sqlExpressionFactory = (MySqlSqlExpressionFactory)Dependencies.SqlExpressionFactory;
 }
示例#19
0
 public NpgsqlSqlTranslatingExpressionVisitor(
     [NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     [NotNull] QueryCompilationContext queryCompilationContext,
     [NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
     : base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor)
 {
     _sqlExpressionFactory = (NpgsqlSqlExpressionFactory)dependencies.SqlExpressionFactory;
     _jsonPocoTranslator   = ((NpgsqlMemberTranslatorProvider)Dependencies.MemberTranslatorProvider).JsonPocoTranslator;
     _typeMappingSource    = dependencies.TypeMappingSource;
 }
示例#20
0
 public RelationalSqlTranslatingExpressionVisitor(
     RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     IModel model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor) : base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
 {
     _model = model;
     _queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
     _sqlExpressionFactory = dependencies.SqlExpressionFactory as ISqlExpressionFactoryWithCrossDb;
     _sqlTypeMappingVerifyingExpressionVisitor = new SqlTypeMappingVerifyingExpressionVisitor();
 }
        //private readonly RelationalTypeMapping _jsonTypeMapping;

        public MySqlSqlTranslatingExpressionVisitor(
            RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
            IModel model,
            QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
            : base(dependencies, model, queryableMethodTranslatingExpressionVisitor)
        {
            _jsonPocoTranslator   = ((MySqlMemberTranslatorProvider)Dependencies.MemberTranslatorProvider).JsonPocoTranslator;
            _sqlExpressionFactory = (MySqlSqlExpressionFactory)Dependencies.SqlExpressionFactory;
            //_jsonTypeMapping = _sqlExpressionFactory.FindMapping("json");
        }
 public virtual RelationalSqlTranslatingExpressionVisitor Create(
     IModel model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 {
     return(new SqliteSqlTranslatingExpressionVisitor(
                model,
                queryableMethodTranslatingExpressionVisitor,
                _sqlExpressionFactory,
                _memberTranslatorProvider,
                _methodCallTranslatorProvider));
 }
        /// <summary>
        /// parse select statement of queryable
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="queryable"></param>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public static SelectParsingResult Parse <TEntity>(this IQueryable <TEntity> queryable, DbContext ctx, bool ignoreQueryFilters) where TEntity : class
        {
            if (ignoreQueryFilters)
            {
                queryable = queryable.IgnoreQueryFilters();
            }
            SelectParsingResult parsingResult = new SelectParsingResult();
            Expression          query         = queryable.Expression;
            var databaseDependencies          = ctx.GetService <DatabaseDependencies>();
            IQueryTranslationPreprocessorFactory _queryTranslationPreprocessorFactory = ctx.GetService <IQueryTranslationPreprocessorFactory>();
            IQueryableMethodTranslatingExpressionVisitorFactory _queryableMethodTranslatingExpressionVisitorFactory = ctx.GetService <IQueryableMethodTranslatingExpressionVisitorFactory>();
            IQueryTranslationPostprocessorFactory _queryTranslationPostprocessorFactory = ctx.GetService <IQueryTranslationPostprocessorFactory>();
            QueryCompilationContext queryCompilationContext = databaseDependencies.QueryCompilationContextFactory.Create(true);

            IDiagnosticsLogger <DbLoggerCategory.Query> logger = ctx.GetService <IDiagnosticsLogger <DbLoggerCategory.Query> >();
            QueryContext  queryContext  = ctx.GetService <IQueryContextFactory>().Create();
            QueryCompiler queryComipler = ctx.GetService <IQueryCompiler>() as QueryCompiler;
            //parameterize determines if it will use "Declare" or not
            MethodCallExpression         methodCallExpr1 = queryComipler.ExtractParameters(query, queryContext, logger, parameterize: true) as MethodCallExpression;
            QueryTranslationPreprocessor queryTranslationPreprocessor = _queryTranslationPreprocessorFactory.Create(queryCompilationContext);
            MethodCallExpression         methodCallExpr2 = queryTranslationPreprocessor.Process(methodCallExpr1) as MethodCallExpression;
            QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor =
                _queryableMethodTranslatingExpressionVisitorFactory.Create(queryCompilationContext);
            ShapedQueryExpression         shapedQueryExpression1        = queryableMethodTranslatingExpressionVisitor.Visit(methodCallExpr2) as ShapedQueryExpression;
            QueryTranslationPostprocessor queryTranslationPostprocessor = _queryTranslationPostprocessorFactory.Create(queryCompilationContext);
            ShapedQueryExpression         shapedQueryExpression2        = queryTranslationPostprocessor.Process(shapedQueryExpression1) as ShapedQueryExpression;

            IRelationalParameterBasedSqlProcessorFactory _relationalParameterBasedSqlProcessorFactory =
                ctx.GetService <IRelationalParameterBasedSqlProcessorFactory>();
            RelationalParameterBasedSqlProcessor _relationalParameterBasedSqlProcessor = _relationalParameterBasedSqlProcessorFactory.Create(true);

            SelectExpression selectExpression = (SelectExpression)shapedQueryExpression2.QueryExpression;

            selectExpression = _relationalParameterBasedSqlProcessor.Optimize(selectExpression, queryContext.ParameterValues, out bool canCache);
            IQuerySqlGeneratorFactory querySqlGeneratorFactory = ctx.GetService <IQuerySqlGeneratorFactory>();
            IZackQuerySqlGenerator    querySqlGenerator        = querySqlGeneratorFactory.Create() as IZackQuerySqlGenerator;

            if (querySqlGenerator == null)
            {
                throw new InvalidOperationException("please add dbContext.UseBatchEF() to OnConfiguring first!");
            }
            querySqlGenerator.IsForBatchEF = true;
            querySqlGenerator.GetCommand(selectExpression);
            parsingResult.Parameters    = queryContext.ParameterValues;
            parsingResult.PredicateSQL  = querySqlGenerator.PredicateSQL;
            parsingResult.ProjectionSQL = querySqlGenerator.ProjectionSQL;
            TableExpression tableExpression = selectExpression.Tables[0] as TableExpression;

            parsingResult.TableName = tableExpression.Table.Name;

            return(parsingResult);
        }
示例#24
0
 public NpgsqlSqlTranslatingExpressionVisitor(
     RelationalSqlTranslatingExpressionVisitorDependencies dependencies,
     QueryCompilationContext queryCompilationContext,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
     : base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor)
 {
     _sqlExpressionFactory = (NpgsqlSqlExpressionFactory)dependencies.SqlExpressionFactory;
     _jsonPocoTranslator   = ((NpgsqlMemberTranslatorProvider)Dependencies.MemberTranslatorProvider).JsonPocoTranslator;
     _ltreeTranslator      = ((NpgsqlMethodCallTranslatorProvider)Dependencies.MethodCallTranslatorProvider).LTreeTranslator;
     _typeMappingSource    = dependencies.TypeMappingSource;
     _timestampMapping     = _typeMappingSource.FindMapping("timestamp without time zone") !;
     _timestampTzMapping   = _typeMappingSource.FindMapping("timestamp with time zone") !;
 }
 public RelationalSqlTranslatingExpressionVisitor(
     IModel model,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor,
     ISqlExpressionFactory sqlExpressionFactory,
     IMemberTranslatorProvider memberTranslatorProvider,
     IMethodCallTranslatorProvider methodCallTranslatorProvider)
 {
     _model = model;
     _queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
     _sqlExpressionFactory          = sqlExpressionFactory;
     _memberTranslatorProvider      = memberTranslatorProvider;
     _methodCallTranslatorProvider  = methodCallTranslatorProvider;
     _sqlVerifyingExpressionVisitor = new SqlTypeMappingVerifyingExpressionVisitor();
 }
示例#26
0
        public RelationalSqlTranslatingExpressionVisitor Create(IModel model, QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
        {
            RelationalSqlTranslatingExpressionVisitor originalVisitor = _originalFactory.Create(model, queryableMethodTranslatingExpressionVisitor);

            return(new FixSqlServerSqlTranslatingExpressionVisitor(_dependencies, model, queryableMethodTranslatingExpressionVisitor));
        }
示例#27
0
 /// <summary>
 ///     Creates a new <see cref="RelationalSqlTranslatingExpressionVisitor" />.
 /// </summary>
 /// <param name="queryCompilationContext">The query compilation context to use.</param>
 /// <param name="queryableMethodTranslatingExpressionVisitor">The visitor to use to translate subqueries.</param>
 /// <returns>A relational sql translating expression visitor.</returns>
 public virtual RelationalSqlTranslatingExpressionVisitor Create(
     QueryCompilationContext queryCompilationContext,
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 => new(
 public InMemoryExpressionTranslatingExpressionVisitor(
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 {
     _queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
     _entityProjectionFindingExpressionVisitor    = new EntityProjectionFindingExpressionVisitor();
 }
示例#29
0
 public FbSqlTranslatingExpressionVisitor(RelationalSqlTranslatingExpressionVisitorDependencies dependencies, QueryCompilationContext queryCompilationContext, QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
     : base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor)
 {
 }
示例#30
0
 public InMemoryExpressionTranslatingExpressionVisitor(
     QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor)
 {
     _queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor;
 }