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); } }
/// <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; }
/// <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(); }
public static IJoinClause OUTER_APPLY <T>(this IJoinClause from, T subQuery) where T : class { throw new NotSupportedException(); }
/// <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); }
/// <summary> /// 清空Join子句 /// </summary> public ISqlBuilder ClearJoin() { _joinClause = CreateJoinClause(); return(this); }
/// <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); } }
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; }