/// <summary> /// 初始化一个<see cref="JoinClause"/>类型的实例 /// </summary> /// <param name="sqlBuilder">Sql生成器</param> /// <param name="dialect">Sql方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> /// <param name="parameterManager">参数管理器</param> /// <param name="tableDatabase">表数据库</param> /// <param name="joinItems">连接参数列表</param> public JoinClause(ISqlBuilder sqlBuilder , IDialect dialect , IEntityResolver resolver , IEntityAliasRegister register , IParameterManager parameterManager , ITableDatabase tableDatabase , List <JoinItem> joinItems = null) { _sqlBuilder = sqlBuilder; _dialect = dialect; _resolver = resolver; _register = register; _parameterManager = parameterManager; TableDatabase = tableDatabase; _helper = new Helper(dialect, resolver, register, parameterManager); _params = joinItems ?? new List <JoinItem>(); }
/// <summary> /// 过滤 /// </summary> private void Filter(IDialect dialect, IEntityMatedata matedata, IEntityAliasRegister register, IParameterManager parameterManager, 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); } }
/// <summary> /// 初始化From子句 /// </summary> /// <param name="builder">Sql生成器</param> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> /// <param name="tableDatabase">表数据库</param> /// <param name="table">表</param> public OracleFromClause(ISqlBuilder builder, IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register, ITableDatabase tableDatabase, SqlItem table = null) : base(builder, dialect, resolver, register, tableDatabase, table) { }
/// <summary> /// 初始化MySql 表连接子句 /// </summary> /// <param name="sqlBuilder">Sql生成器</param> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体注册器</param> /// <param name="parameterManager">参数管理器</param> /// <param name="tableDatabase">表数据库</param> public MySqlJoinClause(ISqlBuilder sqlBuilder, IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register, IParameterManager parameterManager, ITableDatabase tableDatabase) : base(sqlBuilder, dialect, resolver, register, parameterManager, tableDatabase) { }
/// <summary> /// 初始化From子句 /// </summary> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> public FromClause(IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register) { _dialect = dialect; _resolver = resolver; _register = register; }
/// <summary> /// 复制From子句 /// </summary> /// <param name="register">实体别名注册器</param> public override IFromClause Clone(IEntityAliasRegister register) { return(new MySqlFromClause(Builder, Dialect, Resolver, register, Table)); }
/// <summary> /// 复制Where子句 /// </summary> /// <param name="builder">Sql生成器</param> /// <param name="register">实体别名注册器</param> /// <param name="parameterManager">参数管理器</param> public virtual IWhereClause Clone(ISqlBuilder builder, IEntityAliasRegister register, IParameterManager parameterManager) { return(new WhereClause(builder, _dialect, _resolver, register, parameterManager, new SqlCondition(_condition?.GetCondition()))); }
/// <summary> /// 复制Join子句 /// </summary> /// <param name="sqlBuilder">Sql生成器</param> /// <param name="register">实体别名注册器</param> /// <param name="parameterManager">参数管理器</param> public virtual IJoinClause Clone(ISqlBuilder sqlBuilder, IEntityAliasRegister register, IParameterManager parameterManager) { var helper = new Helper(_dialect, _resolver, register, parameterManager); return(new JoinClause(sqlBuilder, _dialect, _resolver, register, parameterManager, TableDatabase, _params.Select(t => t.Clone(helper)).ToList())); }
/// <summary> /// 复制From子句 /// </summary> /// <param name="builder">Sql生成器</param> /// <param name="register">实体别名注册器</param> public virtual IFromClause Clone(ISqlBuilder builder, IEntityAliasRegister register) { return(new FromClause(builder, Dialect, Resolver, register, Table)); }
/// <summary> /// 初始化一个<see cref="MySqlFromClause"/>类型的实例 /// </summary> /// <param name="builder">Sql生成器</param> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> public MySqlFromClause(ISqlBuilder builder, IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register) : base( builder, dialect, resolver, register) { }
/// <summary> /// 初始化谓词表达式解析器 /// </summary> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> /// <param name="parameterManager">参数管理器</param> public PredicateExpressionResolver(IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register, IParameterManager parameterManager) { _helper = new Helper(dialect, resolver, register, parameterManager); }
/// <summary> /// 初始化一个<see cref="MySqlJoinClause"/>类型的实例 /// </summary> /// <param name="sqlBuilder">Sql生成器</param> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> public MySqlJoinClause(ISqlBuilder sqlBuilder, IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register) : base(sqlBuilder, dialect, resolver, register) { }
/// <summary> /// 初始化From子句 /// </summary> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> public MySqlFromClause(IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register) : base(dialect, resolver, register) { }
/// <summary> /// 克隆 /// </summary> /// <param name="register">实体别名注册器</param> /// <param name="parameterManager">参数管理器</param> /// <returns></returns> public virtual IWhereClause Clone(IEntityAliasRegister register, IParameterManager parameterManager) { return(new WhereClause(this, register, parameterManager)); }
/// <summary> /// 克隆 /// </summary> /// <param name="register">实体别名注册器</param> /// <returns></returns> public virtual IGroupByClause Clone(IEntityAliasRegister register) { return(new GroupByClause(this, register)); }
/// <summary> /// 初始化Sql执行上下文 /// </summary> /// <param name="entityAliasRegister">实体别名注册器</param> /// <param name="whereClause">实体别名注册器</param> /// <param name="matedata">实体元数据解析器</param> public SqlContext(IEntityAliasRegister entityAliasRegister, IWhereClause whereClause, IEntityMatedata matedata) { EntityAliasRegister = entityAliasRegister ?? new EntityAliasRegister(); Where = whereClause ?? throw new ArgumentNullException(nameof(whereClause)); Matedata = matedata; }
/// <summary> /// 初始化From子句 /// </summary> /// <param name="builder">Sql生成器</param> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> /// <param name="table">表</param> public FromClause(ISqlBuilder builder, IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register, SqlItem table = null) { Builder = builder; Dialect = dialect; Resolver = resolver; Register = register; Table = table; }
/// <summary> /// 获取表别名 /// </summary> /// <param name="register">实体别名注册器</param> private string GetTableAlias(IEntityAliasRegister register) => register != null && register.Contains(TableType) ? register.GetAlias(TableType) : TableAlias;
/// <summary> /// 复制Group By子句 /// </summary> /// <param name="register">实体别名注册器</param> public virtual IGroupByClause Clone(IEntityAliasRegister register) { return(new GroupByClause(_dialect, _resolver, register, new List <SqlItem>(_group), _having)); }
/// <summary> /// 复制Select子句 /// </summary> /// <param name="builder">Sql生成器</param> /// <param name="register">实体别名注册器</param> public virtual ISelectClause Clone(ISqlBuilder builder, IEntityAliasRegister register) { return(new SelectClause(builder, _dialect, _resolver, register, _columns.Clone())); }
/// <summary> /// 初始化Where子句 /// </summary> /// <param name="builder">Sql生成器</param> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> /// <param name="parameterManager">参数管理器</param> /// <param name="condition">查询条件</param> public WhereClause(ISqlBuilder builder, IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register, IParameterManager parameterManager, ICondition condition = null) { Builder = builder; _dialect = dialect; _resolver = resolver; _condition = condition; _helper = new Helper(dialect, resolver, register, parameterManager); _expressionResolver = new PredicateExpressionResolver(dialect, resolver, register, parameterManager); }
/// <summary> /// 初始化表连接子句 /// </summary> /// <param name="sqlBuilder">Sql生成器</param> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体注册器</param> /// <param name="joinItems">连接参数列表</param> public JoinClause(ISqlBuilder sqlBuilder, IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register, List <JoinItem> joinItems = null) { _sqlBuilder = sqlBuilder; _dialect = dialect; _resolver = resolver; _register = register; _params = joinItems ?? new List <JoinItem>(); }
/// <summary> /// 初始化From子句 /// </summary> /// <param name="builder">Sql生成器</param> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> /// <param name="table">表</param> public MySqlFromClause(ISqlBuilder builder, IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register, SqlItem table = null) : base(builder, dialect, resolver, register, table) { }
/// <summary> /// 复制Join子句 /// </summary> /// <param name="sqlBuilder">Sql生成器</param> /// <param name="register">实体别名注册器</param> public virtual IJoinClause Clone(ISqlBuilder sqlBuilder, IEntityAliasRegister register) { return(new JoinClause(sqlBuilder, _dialect, _resolver, register, _params.Select(t => t.Clone()).ToList())); }
/// <summary> /// 初始化Where子句 /// </summary> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体别名注册器</param> /// <param name="parameterManager">参数管理器</param> public WhereClause(IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register, IParameterManager parameterManager) { _resolver = resolver; _helper = new Helper(dialect, resolver, register, parameterManager); _expressionResolver = new PredicateExpressionResolver(dialect, resolver, register, parameterManager); }
/// <summary> /// 克隆 /// </summary> /// <param name="sqlBuilder">Sql生成器</param> /// <param name="register">实体别名注册器</param> /// <returns></returns> public virtual ISelectClause Clone(ISqlBuilder sqlBuilder, IEntityAliasRegister register) { return(new SelectClause(this, sqlBuilder, register)); }
/// <summary> /// 复制Order By子句 /// </summary> /// <param name="register">实体别名注册器</param> public virtual IOrderByClause Clone(IEntityAliasRegister register) { return(new OrderByClause(_dialect, _resolver, register, new List <OrderByItem>(_items))); }
/// <summary> /// 初始化Select子句 /// </summary> /// <param name="sqlBuilder">Sql生成器</param> /// <param name="dialect">方言</param> /// <param name="resolver">实体解析器</param> /// <param name="register">实体注册器</param> /// <param name="columns">列名集合</param> public SelectClause(ISqlBuilder sqlBuilder, IDialect dialect, IEntityResolver resolver, IEntityAliasRegister register, List <ColumnCollection> columns = null) { _sqlBuilder = sqlBuilder; _dialect = dialect; _resolver = resolver; _register = register; _columns = columns ?? new List <ColumnCollection>(); }
/// <summary> /// 克隆 /// </summary> /// <param name="register">实体别名注册器</param> /// <returns></returns> public virtual IOrderByClause Clone(IEntityAliasRegister register) { return(new OrderByClause(this, register)); }
/// <summary> /// 复制Select子句 /// </summary> /// <param name="sqlBuilder">Sql生成器</param> /// <param name="register">实体别名注册器</param> public virtual ISelectClause Clone(ISqlBuilder sqlBuilder, IEntityAliasRegister register) { return(new SelectClause(sqlBuilder, _dialect, _resolver, register, new List <ColumnCollection>(_columns))); }