public virtual ExpressionResult GetExpressionValue(Expression expression, ResolveExpressType resolveType) { ILambdaExpressions resolveExpress = InstanceFactory.GetLambdaExpressions(this.Context.CurrentConnectionConfig);; if (this.Context.CurrentConnectionConfig.MoreSettings != null) { resolveExpress.PgSqlIsAutoToLower = this.Context.CurrentConnectionConfig.MoreSettings.PgSqlIsAutoToLower; } else { resolveExpress.PgSqlIsAutoToLower = true; } resolveExpress.MappingColumns = Context.MappingColumns; resolveExpress.MappingTables = Context.MappingTables; resolveExpress.IgnoreComumnList = Context.IgnoreColumns; resolveExpress.SqlFuncServices = Context.CurrentConnectionConfig.ConfigureExternalServices == null ? null : Context.CurrentConnectionConfig.ConfigureExternalServices.SqlFuncServices; resolveExpress.InitMappingInfo = Context.InitMappingInfo; resolveExpress.RefreshMapping = () => { resolveExpress.MappingColumns = Context.MappingColumns; resolveExpress.MappingTables = Context.MappingTables; resolveExpress.IgnoreComumnList = Context.IgnoreColumns; resolveExpress.SqlFuncServices = Context.CurrentConnectionConfig.ConfigureExternalServices == null ? null : Context.CurrentConnectionConfig.ConfigureExternalServices.SqlFuncServices; }; resolveExpress.Resolve(expression, resolveType); if (this.Parameters == null) { this.Parameters = new List <SugarParameter>(); } this.Parameters.AddRange(resolveExpress.Parameters); var result = resolveExpress.Result; return(result); }
private string GetWhereExpression(MethodCallExpression methodCallExpression) { if (methodCallExpression.Arguments.Count <= 1) { return(null); } var exp = methodCallExpression.Arguments[1]; var querybuiler = InstanceFactory.GetQueryBuilder(this.context.CurrentConnectionConfig); querybuiler.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.context.CurrentConnectionConfig); querybuiler.Builder = InstanceFactory.GetSqlbuilder(this.context.CurrentConnectionConfig); querybuiler.Builder.Context = querybuiler.Context; querybuiler.Builder.QueryBuilder = querybuiler; querybuiler.Context = this.context; var expValue = querybuiler.GetExpressionValue(exp, ResolveExpressType.WhereMultiple); var paramterName = (exp as LambdaExpression).Parameters[0].Name; var sql = expValue.GetResultString(); sql = sql.Replace(querybuiler.Builder.GetTranslationColumnName(paramterName) + ".", ""); if (querybuiler.Parameters != null && querybuiler.Parameters.Count > 0) { foreach (var item in querybuiler.Parameters) { sql = sql.Replace(item.ParameterName, item.Value.ObjToString().ToSqlValue()); } } return(sql); }
public IUpdateable <T> Where(bool isUpdateNull, bool IsOffIdentity = false) { UpdateBuilder.IsOffIdentity = IsOffIdentity; if (this.UpdateBuilder.LambdaExpressions == null) { this.UpdateBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.Context.CurrentConnectionConfig); } this.UpdateBuilder.IsNoUpdateNull = isUpdateNull; return(this); }
public IInsertable <T> Where(bool isNoInsertNull, bool isOffIdentity = false) { this.IsOffIdentity = isOffIdentity; if (this.InsertBuilder.LambdaExpressions == null) { this.InsertBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.Context.CurrentConnectionConfig); } this.InsertBuilder.IsNoInsertNull = isNoInsertNull; return(this); }
public IUpdateable <T> IgnoreColumns(bool ignoreAllNullColumns, bool isOffIdentity = false) { UpdateBuilder.IsOffIdentity = isOffIdentity; if (this.UpdateBuilder.LambdaExpressions == null) { this.UpdateBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.Context.CurrentConnectionConfig); } this.UpdateBuilder.IsNoUpdateNull = ignoreAllNullColumns; return(this); }
public IInsertable <T> IgnoreColumns(bool ignoreNullColumn, bool isOffIdentity = false) { Check.Exception(this.InsertObjs.Count() > 1 && ignoreNullColumn, ErrorMessage.GetThrowMessage("ignoreNullColumn NoSupport batch insert", "ignoreNullColumn 不支持批量操作")); this.IsOffIdentity = isOffIdentity; if (this.InsertBuilder.LambdaExpressions == null) { this.InsertBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.Context.CurrentConnectionConfig); } this.InsertBuilder.IsNoInsertNull = ignoreNullColumn; return(this); }
public IUpdateable <T> IgnoreColumns(bool ignoreAllNullColumns, bool isOffIdentity = false, bool ignoreAllDefaultValue = false) { Check.Exception(this.UpdateObjs.Count() > 1 && ignoreAllNullColumns, ErrorMessage.GetThrowMessage("ignoreNullColumn NoSupport batch insert", "ignoreNullColumn 不支持批量操作")); UpdateBuilder.IsOffIdentity = isOffIdentity; if (this.UpdateBuilder.LambdaExpressions == null) { this.UpdateBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.Context.CurrentConnectionConfig); } this.UpdateBuilder.IsNoUpdateNull = ignoreAllNullColumns; this.UpdateBuilder.IsNoUpdateDefaultValue = ignoreAllDefaultValue; return(this); }
protected DeleteableProvider <T> CreateDeleteable <T>() where T : class, new() { var reval = InstanceFactory.GetDeleteableProvider <T>(this.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(this.CurrentConnectionConfig);; reval.Context = this.Context; reval.SqlBuilder = sqlBuilder; sqlBuilder.DeleteBuilder = reval.DeleteBuilder = InstanceFactory.GetDeleteBuilder(this.CurrentConnectionConfig); sqlBuilder.DeleteBuilder.Builder = sqlBuilder; sqlBuilder.DeleteBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.CurrentConnectionConfig); sqlBuilder.Context = reval.SqlBuilder.DeleteBuilder.Context = this.Context; return(reval); }
protected ISugarQueryable <T> CreateQueryable <T>(ISugarQueryable <T> result) where T : class, new() { var sqlBuilder = InstanceFactory.GetSqlbuilder(CurrentConnectionConfig); result.Context = this.Context; result.SqlBuilder = sqlBuilder; result.SqlBuilder.QueryBuilder = InstanceFactory.GetQueryBuilder(CurrentConnectionConfig); result.SqlBuilder.QueryBuilder.Builder = sqlBuilder; result.SqlBuilder.Context = result.SqlBuilder.QueryBuilder.Context = this.Context; result.SqlBuilder.QueryBuilder.EntityType = typeof(T); result.SqlBuilder.QueryBuilder.EntityName = typeof(T).Name; result.SqlBuilder.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(CurrentConnectionConfig); return(result); }
protected DeleteableProvider <T> CreateDeleteable <T>() where T : class, new() { this.SugarActionType = SugarActionType.Delete; var result = InstanceFactory.GetDeleteableProvider <T>(this.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(this.CurrentConnectionConfig);; result.Context = this; result.SqlBuilder = sqlBuilder; sqlBuilder.DeleteBuilder = result.DeleteBuilder = InstanceFactory.GetDeleteBuilder(this.CurrentConnectionConfig); sqlBuilder.DeleteBuilder.Builder = sqlBuilder; sqlBuilder.DeleteBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.CurrentConnectionConfig); sqlBuilder.Context = result.SqlBuilder.DeleteBuilder.Context = this; return(result); }
protected ISugarQueryable <T> CreateQueryable <T>(ISugarQueryable <T> result) { Check.Exception(typeof(T).IsClass() == false || typeof(T).GetConstructors().Length == 0, "Queryable<{0}> Error ,{0} is invalid , need is a class,and can new().", typeof(T).Name); var sqlBuilder = InstanceFactory.GetSqlbuilder(CurrentConnectionConfig); result.Context = this.Context; result.SqlBuilder = sqlBuilder; result.SqlBuilder.QueryBuilder = InstanceFactory.GetQueryBuilder(CurrentConnectionConfig); result.SqlBuilder.QueryBuilder.Builder = sqlBuilder; result.SqlBuilder.Context = result.SqlBuilder.QueryBuilder.Context = this; result.SqlBuilder.QueryBuilder.EntityType = typeof(T); result.SqlBuilder.QueryBuilder.EntityName = typeof(T).Name; result.SqlBuilder.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(CurrentConnectionConfig); return(result); }
protected UpdateableProvider <T> CreateUpdateable <T>(T[] UpdateObjs) where T : class, new() { var reval = InstanceFactory.GetUpdateableProvider <T>(this.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(this.CurrentConnectionConfig);; reval.Context = this.Context; reval.EntityInfo = this.Context.EntityMaintenance.GetEntityInfo <T>(); reval.SqlBuilder = sqlBuilder; reval.UpdateObjs = UpdateObjs; sqlBuilder.UpdateBuilder = reval.UpdateBuilder = InstanceFactory.GetUpdateBuilder(this.CurrentConnectionConfig); sqlBuilder.UpdateBuilder.Builder = sqlBuilder; sqlBuilder.UpdateBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.CurrentConnectionConfig); sqlBuilder.Context = reval.SqlBuilder.UpdateBuilder.Context = this.Context; reval.Init(); return(reval); }
protected InsertableProvider <T> CreateInsertable <T>(T[] insertObjs) where T : class, new() { var result = InstanceFactory.GetInsertableProvider <T>(this.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(this.CurrentConnectionConfig);; result.Context = this; result.EntityInfo = this.Context.EntityMaintenance.GetEntityInfo <T>(); result.SqlBuilder = sqlBuilder; result.InsertObjs = insertObjs; sqlBuilder.InsertBuilder = result.InsertBuilder = InstanceFactory.GetInsertBuilder(this.CurrentConnectionConfig); sqlBuilder.InsertBuilder.Builder = sqlBuilder; sqlBuilder.InsertBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.CurrentConnectionConfig); sqlBuilder.Context = result.SqlBuilder.InsertBuilder.Context = this; result.Init(); return(result); }
public virtual ISugarQueryable <T, T2> Queryable <T, T2>( ISugarQueryable <T> joinQueryable1, ISugarQueryable <T2> joinQueryable2, JoinType joinType, Expression <Func <T, T2, bool> > joinExpression) where T : class, new() where T2 : class, new() { Check.Exception(joinQueryable1.QueryBuilder.Take != null || joinQueryable1.QueryBuilder.Skip != null || joinQueryable1.QueryBuilder.OrderByValue.HasValue(), "joinQueryable1 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'"); Check.Exception(joinQueryable2.QueryBuilder.Take != null || joinQueryable2.QueryBuilder.Skip != null || joinQueryable2.QueryBuilder.OrderByValue.HasValue(), "joinQueryable2 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'"); var sqlBuilder = InstanceFactory.GetSqlbuilder(base.Context.CurrentConnectionConfig); sqlBuilder.Context = base.Context; InitMppingInfo <T, T2>(); var types = new Type[] { typeof(T2) }; var queryable = InstanceFactory.GetQueryable <T, T2>(base.CurrentConnectionConfig); queryable.Context = base.Context; queryable.SqlBuilder = sqlBuilder; queryable.QueryBuilder = InstanceFactory.GetQueryBuilder(base.CurrentConnectionConfig); queryable.QueryBuilder.JoinQueryInfos = new List <JoinQueryInfo>(); queryable.QueryBuilder.Builder = sqlBuilder; queryable.QueryBuilder.Context = base.Context; queryable.QueryBuilder.EntityType = typeof(T); queryable.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig); //master var shortName1 = joinExpression.Parameters[0].Name; var sqlObj1 = joinQueryable1.ToSql(); string sql1 = sqlObj1.Key; UtilMethods.RepairReplicationParameters(ref sql1, sqlObj1.Value.ToArray(), 0); queryable.QueryBuilder.EntityName = sqlBuilder.GetPackTable(sql1, shortName1);; queryable.QueryBuilder.Parameters.AddRange(sqlObj1.Value); //join table 1 var shortName2 = joinExpression.Parameters[1].Name; var sqlObj2 = joinQueryable2.ToSql(); string sql2 = sqlObj2.Key; UtilMethods.RepairReplicationParameters(ref sql2, sqlObj2.Value.ToArray(), 1); queryable.QueryBuilder.Parameters.AddRange(sqlObj2.Value); var exp = queryable.QueryBuilder.GetExpressionValue(joinExpression, ResolveExpressType.WhereMultiple); queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 0, JoinType = joinType, JoinWhere = exp.GetResultString(), TableName = sqlBuilder.GetPackTable(sql2, shortName2) }); return(queryable); }
protected UpdateableProvider <T> CreateUpdateable <T>(T[] UpdateObjs) where T : class, new() { var result = InstanceFactory.GetUpdateableProvider <T>(this.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(this.CurrentConnectionConfig);; result.Context = this; result.EntityInfo = this.Context.EntityMaintenance.GetEntityInfo <T>(); result.SqlBuilder = sqlBuilder; result.UpdateObjs = UpdateObjs; sqlBuilder.UpdateBuilder = result.UpdateBuilder = InstanceFactory.GetUpdateBuilder(this.CurrentConnectionConfig); sqlBuilder.UpdateBuilder.Builder = sqlBuilder; sqlBuilder.UpdateBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.CurrentConnectionConfig); sqlBuilder.Context = result.SqlBuilder.UpdateBuilder.Context = this; result.Init(); var ignoreColumns = result.EntityInfo.Columns.Where(it => it.IsOnlyIgnoreUpdate).ToList(); if (ignoreColumns != null && ignoreColumns.Any()) { result = (UpdateableProvider <T>)result.IgnoreColumns(ignoreColumns.Select(it => it.PropertyName).ToArray()); } return(result); }