예제 #1
0
 public virtual void VisitJoinClause(IJoinClause value)
 {
     VisitVariableDeclaration(value.Variable);
     VisitExpression(value.In);
     VisitExpression(value.On);
     VisitExpression(value.Equality);
     if (value.Into != null)
     {
         VisitVariableDeclaration(value.Into);
     }
 }
예제 #2
0
 /// <summary>
 /// 克隆
 /// </summary>
 /// <param name="sqlBuilder">源生成器</param>
 protected void Clone(SqlBuilderBase sqlBuilder)
 {
     EntityMatedata    = sqlBuilder.EntityMatedata;
     _parameterManager = sqlBuilder._parameterManager?.Clone();
     EntityResolver    = sqlBuilder.EntityResolver ?? new EntityResolver(EntityMatedata);
     AliasRegister     = sqlBuilder.AliasRegister?.Clone() ?? new EntityAliasRegister();
     _selectClause     = sqlBuilder._selectClause?.Clone(this, AliasRegister);
     _fromClause       = sqlBuilder._fromClause?.Clone(AliasRegister);
     _joinClause       = sqlBuilder._joinClause?.Clone(this, AliasRegister);
     _whereClause      = sqlBuilder._whereClause?.Clone(AliasRegister, _parameterManager);
     _groupByClause    = sqlBuilder._groupByClause?.Clone(AliasRegister);
     _orderByClause    = sqlBuilder._orderByClause?.Clone(AliasRegister);
     _pager            = sqlBuilder._pager;
 }
예제 #3
0
 /// <summary>
 /// 复制Sql生成器
 /// </summary>
 /// <param name="sqlBuilder">源生成器</param>
 protected void Clone(SqlBuilderBase sqlBuilder)
 {
     EntityMatedata    = sqlBuilder.EntityMatedata;
     _parameterManager = sqlBuilder._parameterManager?.Clone();
     EntityResolver    = sqlBuilder.EntityResolver ?? new EntityResolver(EntityMatedata);
     AliasRegister     = sqlBuilder.AliasRegister?.Clone() ?? new EntityAliasRegister();
     _selectClause     = sqlBuilder._selectClause?.Clone(this, AliasRegister);
     _fromClause       = sqlBuilder._fromClause?.Clone(this, AliasRegister);
     _joinClause       = sqlBuilder._joinClause?.Clone(this, AliasRegister, _parameterManager);
     _whereClause      = sqlBuilder._whereClause?.Clone(this, AliasRegister, _parameterManager);
     _groupByClause    = sqlBuilder._groupByClause?.Clone(AliasRegister);
     _orderByClause    = sqlBuilder._orderByClause?.Clone(AliasRegister);
     Pager             = sqlBuilder.Pager;
     OffsetParam       = sqlBuilder.OffsetParam;
     LimitParam        = sqlBuilder.LimitParam;
     UnionItems        = sqlBuilder.UnionItems.Select(t => new BuilderItem(t.Name, t.Builder.Clone())).ToList();
     CteItems          = sqlBuilder.CteItems.Select(t => new BuilderItem(t.Name, t.Builder.Clone())).ToList();
 }
예제 #4
0
 public static IJoinClause OUTER_APPLY <T>(this IJoinClause from, T subQuery) where T : class
 {
     throw new NotSupportedException();
 }
예제 #5
0
        /// <summary>
        /// 过滤
        /// </summary>
        /// <param name="dialect">Sql方言</param>
        /// <param name="matedata">实体元数据解析器</param>
        /// <param name="register">实体别名注册器</param>
        /// <param name="join">Join子句</param>
        /// <param name="where">Where子句</param>
        /// <param name="type">类型</param>
        /// <param name="alias">表别名</param>
        private void Filter(IDialect dialect, IEntityMatedata matedata, IEntityAliasRegister register, IJoinClause join,
                            IWhereClause where, Type type, string alias)
        {
            if (type == null)
            {
                return;
            }
            if (string.IsNullOrWhiteSpace(alias))
            {
                return;
            }
            if (typeof(IDelete).IsAssignableFrom(type) == false)
            {
                return;
            }
            var isDeleted = $"{dialect.SafeName(alias)}.{dialect.SafeName(matedata.GetColumn(type, "IsDeleted"))}";

            if (register.FromType == type)
            {
                where.Where(isDeleted, false);
                return;
            }
            join.Find(type)?.On(isDeleted, false);
        }
예제 #6
0
 /// <summary>
 /// 清空Join子句
 /// </summary>
 public ISqlBuilder ClearJoin()
 {
     _joinClause = CreateJoinClause();
     return(this);
 }
예제 #7
0
 /// <summary>
 /// 清空Join子句
 /// </summary>
 public void ClearJoin()
 {
     _joinClause = CreateJoinClause();
 }
            private void WriteJoinClause(IJoinClause value, IFormatter formatter)
            {
                formatter.WriteKeyword("join");
                formatter.Write(" ");
                this.WriteDeclaration(value.Variable.Name, formatter);
                formatter.Write(" ");
                formatter.WriteKeyword("in");
                formatter.Write(" ");
                this.WriteExpression(value.In, formatter);
                formatter.Write(" ");
                formatter.WriteKeyword("on");
                formatter.Write(" ");
                this.WriteExpression(value.On, formatter);
                formatter.Write(" ");
                formatter.WriteKeyword("equals");
                formatter.Write(" ");
                this.WriteExpression(value.Equality, formatter);

                if (value.Into != null)
                {
                    formatter.Write(" ");
                    formatter.WriteKeyword("into");
                    formatter.Write(" ");
                    this.WriteDeclaration(value.Into.Name, formatter);
                }
            }
예제 #9
0
 public virtual void VisitJoinClause(IJoinClause value)
 {
     this.VisitVariableDeclaration(value.Variable);
     this.VisitExpression(value.In);
     this.VisitExpression(value.On);
     this.VisitExpression(value.Equality);
     if (value.Into != null)
     {
         this.VisitVariableDeclaration(value.Into);
     }
 }
 public virtual IJoinClause TransformJoinClause(IJoinClause value)
 {
     value.Variable = this.TransformVariableDeclaration(value.Variable);
     value.In = this.TransformExpression(value.In);
     value.On = this.TransformExpression(value.On);
     value.Equality = this.TransformExpression(value.Equality);
     if (value.Into != null)
     {
         value.Into = this.TransformVariableDeclaration(value.Into);
     }
     return value;
 }