diff --git a/README.md b/README.md index 12de6937a..1723d99e6 100644 --- a/README.md +++ b/README.md @@ -409,5 +409,26 @@ db.CodeFirst.BackupTable().InitTables(typeof(CodeTable),typeof(CodeTable2)); //c db.CodeFirst.InitTables(typeof(CodeTable),typeof(CodeTable2)); ``` +## 9. AOP LOG +``` +db.Aop.OnLogExecuted = (sql, pars) => //SQL执行完事件 +{ +  +}; +db.Aop.OnLogExecuting = (sql, pars) => //SQL执行前事件 +{ +  +}; +db.Aop.OnError = (exp) =>//执行SQL 错误事件 +{ +                  +}; +db.Aop.OnExecutingChangeSql = (sql, pars) => //SQL执行前 可以修改SQL +{ +    return new KeyValuePair(sql,pars); +}; + +``` + More http://www.codeisbug.com/Doc/8 diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index 299c325bc..ae1fd3015 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -28,6 +28,13 @@ namespace OrmTest.Demo Simple(); Async(); Subqueryable(); + SqlQueryable(); + } + + private static void SqlQueryable() + { + var db = GetInstance(); + var list = db.SqlQueryable("select * from student").ToPageList(1, 2); } private static void Subqueryable() diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/Query/SingleQuery.cs b/Src/Asp.Net/SqlServerTest/UnitTest/Query/SingleQuery.cs index 4bf37e5d4..7d1c4d65b 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/Query/SingleQuery.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/Query/SingleQuery.cs @@ -116,6 +116,14 @@ namespace OrmTest.UnitTest var t12 = db.Queryable().Where(it=>it.Id!=null).ToSql(); base.Check("SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] WHERE ( [ID] IS NOT NULL )", null, t12.Key, t12.Value, "single t12 error"); + + var id = 1; + var t13 = db.Queryable().Where(it => SqlFunc.Subqueryable().Where(s => s.Id == it.Id&&s.Id==id).Max(s => s.Id) == 1).ToSql(); + base.Check("SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] it WHERE ((SELECT MAX([Id]) FROM [School] WHERE (( [Id] = [it].[ID] ) AND ( [Id] = @Id0 ))) = @Const1 )", + new List() { + new SugarParameter("@Id0",1), + new SugarParameter("@Const1",1) + }, t13.Key, t13.Value, "single t13 error "); } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs index e14ce5f9d..f49d031aa 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs @@ -73,11 +73,19 @@ namespace SqlSugar } public virtual string GetPackTable(string sql, string shortName) { - return UtilMethods.GetPackTable(sql,shortName); + return UtilMethods.GetPackTable(sql, shortName); + } + public virtual string GetDefaultShortName() + { + return "t"; + } + public virtual string GetUnionAllSql(List sqlList) + { + return string.Join("UNION ALL \r\n", sqlList); } public virtual void RepairReplicationParameters(ref string appendSql, SugarParameter[] parameters, int addIndex) { - UtilMethods.RepairReplicationParameters(ref appendSql,parameters,addIndex); + UtilMethods.RepairReplicationParameters(ref appendSql, parameters, addIndex); } #endregion diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs index 81046283a..3410ad4f0 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs @@ -35,7 +35,7 @@ namespace SqlSugar { var exp = expression as MethodCallExpression; var argExp= exp.Arguments[0]; - var result= "WHERE "+SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple); + var result= "WHERE "+SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple);; var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name)+UtilConstants.Dot; result = result.Replace(selfParameterName,string.Empty); return result; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs index 33571f7cb..f71318146 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs @@ -11,7 +11,7 @@ namespace SqlSugar public static List SubItems(ExpressionContext Context) { - return new List() + return new List() { new SubSelect() { Context=Context }, new SubWhere(){ Context=Context }, @@ -37,6 +37,8 @@ namespace SqlSugar newContext.Resolve(item, type); context.Index = newContext.Index; context.ParameterIndex = newContext.ParameterIndex; + if (newContext.Parameters.IsValuable()) + context.Parameters.AddRange(newContext.Parameters); return newContext.Result.GetResultString(); } } diff --git a/Src/Asp.Net/SqlSugar/Interface/ISqlBuilder.cs b/Src/Asp.Net/SqlSugar/Interface/ISqlBuilder.cs index c4467fd27..08c987a08 100644 --- a/Src/Asp.Net/SqlSugar/Interface/ISqlBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Interface/ISqlBuilder.cs @@ -27,6 +27,8 @@ namespace SqlSugar string GetTranslationColumnName(string propertyName); string GetNoTranslationColumnName(string name); string GetPackTable(string sql,string shortName); + string GetDefaultShortName(); + string GetUnionAllSql(List sqlList); void RepairReplicationParameters(ref string appendSql, SugarParameter[] parameters, int addIndex); } } diff --git a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs index c48a368cf..150b3d51a 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs @@ -310,6 +310,7 @@ namespace SqlSugar public virtual ISugarQueryable UnionAll(params ISugarQueryable[] queryables) where T : class, new() { + var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig); Check.Exception(queryables.IsNullOrEmpty(), "UnionAll.queryables is null "); int i = 1; List>> allItems = new List>>(); @@ -324,7 +325,7 @@ namespace SqlSugar allItems.Add(new KeyValuePair>(sql, new List())); i++; } - var allSql = string.Join("UNION ALL \r\n", allItems.Select(it => it.Key)); + var allSql = sqlBuilder.GetUnionAllSql(allItems.Select(it => it.Key).ToList()); var allParameters = allItems.SelectMany(it => it.Value).ToArray(); var resulut = this.Queryable().AS(UtilMethods.GetPackTable(allSql, "unionTable")); resulut.AddParameters(allParameters); @@ -337,6 +338,14 @@ namespace SqlSugar } #endregion + #region SqlQueryable + public ISugarQueryable SqlQueryable(string sql) where T : class, new() + { + var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig); + return this.Queryable().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())); + } + #endregion + #region Insertable public virtual IInsertable Insertable(T[] insertObjs) where T : class, new() {