using OrmTest.Models; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace OrmTest.UnitTest { public class Method : UnitTestBase { private Method() { } public Method(int eachCount) { this.Count = eachCount; } internal void Init() { base.Begin(); for (int i = 0; i < base.Count; i++) { //Native methods ExtendContainsArray(); ConvetToString(); ExtendToString(); ExtendSubstring(); ExtendDate(); //SqlFun methods IIF(); IIF2(); #region StringIsNullOrEmpty HasValue(); HasNumber(); StringIsNullOrEmpty(); StringIsNullOrEmpty2(); StringIsNullOrEmpty3(); StringIsNullOrEmpty4(); StringIsNullOrEmpty5(); #endregion ToUpper(); ToLower(); Trim(); Contains(); Contains2(); ContainsArray(); StartsWith(); EndsWith(); Between(); Equals(); Equals_2(); DateIsSameByDay(); DateIsSameByType(); DateAddDay(); DateAddByType(); DateValue(); ToInt32(); ToInt64(); ToDate(); Tostring(); ToDecimal(); ToGuid(); ToDouble(); ToBool(); Substring(); Replace(); Length(); } base.End("Method Test"); } private void ExtendToString() { Expression> exp = it => it.Id.ToString() == "a"; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(`Id` AS TEXT) = @Const0 )", new List() { new SugarParameter("@Const0","a") }, "ExtendToString error"); } private void ConvetToString() { Expression> exp = it => Convert.ToString(it.Id) == "a"; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(`Id` AS TEXT) = @Const0 )", new List() { new SugarParameter("@Const0","a") }, "ConvetToString error"); } private void Length() { Expression> exp = it => SqlFunc.Length("aaaa") > 1; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(LENGTH(@MethodConst0) > @Const1 )", new List() { new SugarParameter("@MethodConst0","aaaa"),new SugarParameter("@Const1",1) }, "Length error"); } private void Replace() { var x2 = Guid.NewGuid(); Expression> exp = it => SqlFunc.Replace("aaaa", "a", "1") == "a"; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(REPLACE(@MethodConst0,@MethodConst1,@MethodConst2) = @Const3 )", new List() { new SugarParameter("@MethodConst0","aaaa"), new SugarParameter("@MethodConst1","a") , new SugarParameter("@MethodConst2","1"),new SugarParameter("@Const3","a") }, "Replace error"); } private void Substring() { var x2 = Guid.NewGuid(); Expression> exp = it => SqlFunc.Substring("aaaa", 0, 2) == "a"; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(SUBSTRING(@MethodConst0,1 + @MethodConst1,@MethodConst2) = @Const3 )", new List() { new SugarParameter("@MethodConst0","aaaa"), new SugarParameter("@MethodConst1",0) , new SugarParameter("@MethodConst2",2),new SugarParameter("@Const3","a") }, "Substring error"); } private void ExtendSubstring() { var x2 = Guid.NewGuid(); Expression> exp = it =>"aaaa".Substring(0, 2)== "a"; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(SUBSTRING(@MethodConst0,1 + @MethodConst1,@MethodConst2) = @Const3 )", new List() { new SugarParameter("@MethodConst0","aaaa"), new SugarParameter("@MethodConst1",0) , new SugarParameter("@MethodConst2",2),new SugarParameter("@Const3","a") }, "Substring error"); } private void ToBool() { var x2 = Guid.NewGuid(); Expression> exp = it => SqlFunc.ToBool("true") == true; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(@MethodConst0 AS SIGNED) = @Const1 )", new List() { new SugarParameter("@MethodConst0","true"),new SugarParameter("@Const1",(bool)true) }, "ToBool error"); } private void ToDouble() { var x2 = Guid.NewGuid(); Expression> exp = it => SqlFunc.ToDouble("2") == 2; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(@MethodConst0 AS DECIMAL(18,4)) = @Const1 )", new List() { new SugarParameter("@MethodConst0","2"),new SugarParameter("@Const1",(Double)2) }, "ToDouble error"); } private void ToGuid() { var x2 = Guid.NewGuid(); Expression> exp = it => SqlFunc.ToGuid("A94027A3-476E-478D-8228-F4054394B874") == x2; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(@MethodConst0 AS TEXT) = @Const1 )", new List() { new SugarParameter("@MethodConst0","A94027A3-476E-478D-8228-F4054394B874"),new SugarParameter("@Const1",x2) }, "ToGuid error"); } private void ToDecimal() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.ToDecimal("22") == 1; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(@MethodConst0 AS DECIMAL(18,4)) = @Const1 )", new List() { new SugarParameter("@MethodConst0","22"),new SugarParameter("@Const1",(decimal)1) }, "ToDecimal error"); } private void Tostring() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.ToString("2015-1-1") == "a"; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(@MethodConst0 AS TEXT) = @Const1 )", new List() { new SugarParameter("@MethodConst0","2015-1-1"),new SugarParameter("@Const1","a") }, "Tostring error"); } private void ToDate() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.ToDate("2015-1-1") == x2; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(DATETIME(@MethodConst0) = @Const1 )", new List() { new SugarParameter("@MethodConst0","2015-1-1"),new SugarParameter("@Const1",x2) }, "ToDate error"); } private void ExtendDate() { var x2 = DateTime.Now; Expression> exp = it => Convert.ToDateTime("2015-1-1") == x2; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(DATETIME(@MethodConst0) = @Const1 )", new List() { new SugarParameter("@MethodConst0","2015-1-1"),new SugarParameter("@Const1",x2) }, "ExtendDate error"); } private void ToInt64() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.ToInt64("3") == 1; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(@MethodConst0 AS INTEGER) = @Const1 )", new List() { new SugarParameter("@MethodConst0","3"),new SugarParameter("@Const1",(Int64)1) }, "ToInt64 error"); } private void ToInt32() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.ToInt32("3") == 1; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(@MethodConst0 AS INTEGER) = @Const1 )", new List() { new SugarParameter("@MethodConst0","3"),new SugarParameter("@Const1",1) }, "ToInt32 error"); } private void DateValue() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.DateValue(x2, DateType.Year) == 1; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(CAST(STRFTIME('%Y', DATETIME(DATETIME(@MethodConst0), 'LOCALTIME')) AS INTEGER) = @Const2 )", new List() { new SugarParameter("@MethodConst0",x2),new SugarParameter("@MethodConst1",DateType.Year),new SugarParameter("@Const2",1) }, "DateValue error"); } private void StartsWith() { Expression> exp = it => SqlFunc.StartsWith(it.Name, "a"); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, " (`Name` like @MethodConst0||'%') ", new List() { new SugarParameter("@MethodConst0","a") }, "StartsWith error"); } private void EndsWith() { Expression> exp = it => SqlFunc.EndsWith(it.Name, "a"); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, " (`Name` like '%'||@MethodConst0) ", new List() { new SugarParameter("@MethodConst0","a") }, "EndsWith"); } private void Between() { Expression> exp = it => SqlFunc.Between(it.Name, 1, 2); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, " (`Name` BETWEEN @MethodConst0 AND @MethodConst1) ", new List() { new SugarParameter("@MethodConst0",1),new SugarParameter("@MethodConst1",2), }, "Between error"); } private void DateAddByType() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.DateAdd(x2, 11, DateType.Minute) == x2; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(DATETIME(DATETIME(@MethodConst0), '+11 Minutes') = @Const3 )", new List() { new SugarParameter("@MethodConst0",x2),new SugarParameter("@MethodConst1",11),new SugarParameter("@Const3",x2), new SugarParameter("@MethodConst2",DateType.Minute) }, "DateAddByType error"); } private void DateAddDay() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.DateAdd(x2, 1) == x2; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(DATE(DATETIME(@MethodConst0), '+1 days') = @Const2 )", new List() { new SugarParameter("@MethodConst0",x2),new SugarParameter("@MethodConst1",1),new SugarParameter("@Const2",x2) }, "DateAddDay error"); } private void DateIsSameByType() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.DateIsSame(x2, x2, DateType.Millisecond); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, " Cast((JulianDay(@MethodConst0) - JulianDay(@MethodConst1)) *86400000 As INTEGER)", new List() { new SugarParameter("@MethodConst0",x2),new SugarParameter("@MethodConst1",x2), new SugarParameter("@MethodConst2",DateType.Millisecond) }, "DateIsSameByType error"); } private void DateIsSameByDay() { var x2 = DateTime.Now; Expression> exp = it => SqlFunc.DateIsSame(x2, x2); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, " Cast((JulianDay(@MethodConst0) - JulianDay(@MethodConst1)) *1 As INTEGER)", new List() { new SugarParameter("@MethodConst0",x2),new SugarParameter("@MethodConst1",x2) }, "DateIsSameDay error"); } private void Equals() { Expression> exp = it => SqlFunc.Equals(it.Name, "a"); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, " (`Name` = @MethodConst0) ", new List() { new SugarParameter("@MethodConst0","a") }, "Equals1 error"); Expression> exp2 = it => SqlFunc.Equals("a", it.Name); SqliteExpressionContext expContext2 = new SqliteExpressionContext(); expContext2.Resolve(exp2, ResolveExpressType.WhereSingle); var value2 = expContext2.Result.GetString(); var pars2 = expContext2.Parameters; base.Check(value2, pars2, " (@MethodConst0 = `Name`) ", new List() { new SugarParameter("@MethodConst0","a") }, "Equals2 error"); } private void Equals_2() { Expression> exp = it => SqlFunc.Equals(it.Name, it.Name); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, " (`Name` = `Name`) ", new List() { new SugarParameter("@MethodConst0","a") }, "Equals1 error"); Expression> exp2 = it => SqlFunc.Equals("a", "a2"); SqliteExpressionContext expContext2 = new SqliteExpressionContext(); expContext2.Resolve(exp2, ResolveExpressType.WhereSingle); var value2 = expContext2.Result.GetString(); var pars2 = expContext2.Parameters; base.Check(value2, pars2, " (@MethodConst0 = @MethodConst1) ", new List() { new SugarParameter("@MethodConst0","a"),new SugarParameter("@MethodConst1","a2") }, "Equals2 error"); } private void Contains() { Expression> exp = it => SqlFunc.Contains(it.Name, "a"); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, " (`Name` like '%'||@MethodConst0||'%') ", new List() { new SugarParameter("@MethodConst0","a") }, "Contains error"); } private void Contains2(string name="a") { Expression> exp = it => SqlFunc.Contains(it.Name, name); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, " (`Name` like '%'||@MethodConst0||'%') ", new List() { new SugarParameter("@MethodConst0","a") }, "Contains2 error"); } private void ExtendContainsArray() { var array = new string[] { "1", "2" }.ToList(); Expression> exp = it => array.Contains(it.Name); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, null, " (`Name` IN ('1','2')) ", null, "Contains2 error"); } private void ContainsArray() { string[] array = new string[] { "1", "2" }; Expression> exp = it => SqlFunc.ContainsArray(array, it.Name); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, null, " (`Name` IN ('1','2')) ", null, "Contains2 error"); } private void Trim() { Expression> exp = it => SqlFunc.Trim(" a") == it.Name; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "((rtrim(ltrim(@MethodConst0))) = `Name` )", new List() { new SugarParameter("@MethodConst0"," a") }, "Trim error"); } private void ToUpper() { Expression> exp = it => "a" == SqlFunc.ToUpper(it.Id); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "( @Const0 = (UPPER(`Id`)) )", new List() { new SugarParameter("@Const0","a") }, "ToUpper error"); } private void ToLower() { Expression> exp = it => "a" == SqlFunc.ToLower(it.Id); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "( @Const0 = (LOWER(`Id`)) )", new List() { new SugarParameter("@Const0","a") }, "ToLower error"); } #region StringIsNullOrEmpty private void StringIsNullOrEmpty() { Expression> exp = it => it.Id > 2 || SqlFunc.IsNullOrEmpty(it.Id); ; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(( `Id` > @Id0 ) OR ( `Id`='' OR `Id` IS NULL ))", new List() { new SugarParameter("@Id0",2) }, "StringIsNullOrEmpty error"); } private void StringIsNullOrEmpty2() { Expression> exp = it => 2 == it.Id || SqlFunc.IsNullOrEmpty(true); ; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(( @Id0 = `Id` ) OR ( @MethodConst1='' OR @MethodConst1 IS NULL ))", new List() { new SugarParameter("@MethodConst1",true), new SugarParameter("@Id0",2) }, "StringIsNullOrEmpty2 error"); } private void StringIsNullOrEmpty3() { int a = 1; Expression> exp = it => 2 == it.Id || SqlFunc.IsNullOrEmpty(a); ; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(( @Id0 = `Id` ) OR ( @MethodConst1='' OR @MethodConst1 IS NULL ))", new List() { new SugarParameter("@MethodConst1",1), new SugarParameter("@Id0",2) }, "StringIsNullOrEmpty3 error"); } private void StringIsNullOrEmpty4() { WhereConst.name = "xx"; Expression> exp = it => 2 == it.Id || SqlFunc.IsNullOrEmpty(WhereConst.name); ; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(( @Id0 = `Id` ) OR ( @MethodConst1='' OR @MethodConst1 IS NULL ))", new List() { new SugarParameter("@MethodConst1","xx"), new SugarParameter("@Id0",2) }, "StringIsNullOrEmpty4 error"); } private void StringIsNullOrEmpty5() { WhereConst.name = "xx"; Expression> exp = it => !SqlFunc.IsNullOrEmpty(WhereConst.name); ; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "NOT( @MethodConst0='' OR @MethodConst0 IS NULL )", new List() { new SugarParameter("@MethodConst0","xx") }, "StringIsNullOrEmpty5 error"); } #endregion private void HasValue() { Expression> exp = it => SqlFunc.HasValue(it.Name); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "( `Name`<>'' AND `Name` IS NOT NULL )", new List() { }, "HasValue error"); } private void HasNumber() { Expression> exp = it => SqlFunc.HasNumber(it.Id); SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "( `Id`>0 AND `Id` IS NOT NULL )", new List() { }, "HasNumber error"); } private void IIF() { Expression> exp = it => SqlFunc.IIF(it.Id == 1, 1, 2)==1; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(( CASE WHEN ( `Id` = @Id0 ) THEN @MethodConst1 ELSE @MethodConst2 END ) = @Const3 )", new List() { new SugarParameter("@Id0",1), new SugarParameter("@MethodConst1",1), new SugarParameter("@MethodConst2",2), new SugarParameter("@Const3",1) }, "IIF error"); } private void IIF2() { Expression> exp = it => SqlFunc.IIF(SqlFunc.Contains(it.Name,"a"), 1, 2)==1; SqliteExpressionContext expContext = new SqliteExpressionContext(); expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; base.Check(value, pars, "(( CASE WHEN (`Name` like '%'||@MethodConst0||'%') THEN @MethodConst1 ELSE @MethodConst2 END ) = @Const3 )", new List() { new SugarParameter("@MethodConst0","a"), new SugarParameter("@MethodConst1",1), new SugarParameter("@MethodConst2",2), new SugarParameter("@Const3",1) }, "IIF2 error"); } } }