Beispiel #1
0
        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);
        }
Beispiel #3
0
 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);
 }
Beispiel #5
0
 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);
 }
Beispiel #6
0
 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);
 }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }