public override ISqlParam ToList(int top = 0, bool isDistinct = false, bool isRand = false) { var strSelectSql = SelectVisitor.Visit(ExpBuilder.ExpSelect); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strOrderBySql = OrderByVisitor.Visit(ExpBuilder.ExpOrderBy); var strTopSql = top > 0 ? $"TOP {top}" : string.Empty; var strDistinctSql = isDistinct ? "Distinct " : string.Empty; var randField = ",Rnd(-(TestID+\" & Rnd() & \")) as newid"; if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } if (!string.IsNullOrWhiteSpace(strOrderBySql)) { strOrderBySql = "ORDER BY " + strOrderBySql; } if (!isRand) { Sql.Append($"SELECT {strDistinctSql}{strTopSql} {strSelectSql} FROM {DbProvider.KeywordAegis(Name)} {strWhereSql} {strOrderBySql}"); } else if (!isDistinct && string.IsNullOrWhiteSpace(strOrderBySql)) { Sql.Append($"SELECT {strSelectSql}{randField} FROM {DbProvider.KeywordAegis(Name)} {strWhereSql} BY Rnd(-(TestID+\" & Rnd() & \")) {strTopSql}"); } else { Sql.Append($"SELECT *{randField} FROM (SELECT {strDistinctSql} {strSelectSql} FROM {DbProvider.KeywordAegis(Name)} {strWhereSql} {strOrderBySql}) s BY Rnd(-(TestID+\" & Rnd() & \")) {strTopSql}"); } return(this); }
public virtual ISqlParam ToList(int top = 0, bool isDistinct = false, bool isRand = false) { var strSelectSql = SelectVisitor.Visit(ExpBuilder.ExpSelect); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strOrderBySql = OrderByVisitor.Visit(ExpBuilder.ExpOrderBy); var strTopSql = top > 0 ? string.Format("TOP {0} ", top) : string.Empty; var strDistinctSql = isDistinct ? "Distinct " : string.Empty; if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } if (!string.IsNullOrWhiteSpace(strOrderBySql)) { strOrderBySql = "ORDER BY " + strOrderBySql; } if (!isRand) { Sql.AppendFormat("SELECT {0}{1}{2} FROM {3} {4} {5}", strDistinctSql, strTopSql, strSelectSql, DbProvider.KeywordAegis(Name), strWhereSql, strOrderBySql); } else if (string.IsNullOrWhiteSpace(strOrderBySql)) { Sql.AppendFormat("SELECT {0}{1}{2}{5} FROM {3} {4} ORDER BY NEWID()", strDistinctSql, strTopSql, strSelectSql, DbProvider.KeywordAegis(Name), strWhereSql, isDistinct ? ",NEWID() as newid" : ""); } else { Sql.AppendFormat("SELECT {2} FROM (SELECT {0} {1} *{6} FROM {3} {4} ORDER BY NEWID()) a {5}", strDistinctSql, strTopSql, strSelectSql, DbProvider.KeywordAegis(Name), strWhereSql, strOrderBySql, isDistinct ? ",NEWID() as newid" : ""); } return(this); }
public override ISqlParam ToList(int top = 0, bool isDistinct = false, bool isRand = false) { var strSelectSql = SelectVisitor.Visit(ExpBuilder.ExpSelect); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strOrderBySql = OrderByVisitor.Visit(ExpBuilder.ExpOrderBy); var strTopSql = top > 0 ? $"rownum <={top}" : string.Empty; var strDistinctSql = isDistinct ? "Distinct " : string.Empty; if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } if (!string.IsNullOrWhiteSpace(strOrderBySql)) { strOrderBySql = "ORDER BY " + strOrderBySql; } if (!isRand) { Sql.Append($"SELECT {strDistinctSql}{strSelectSql} FROM {DbProvider.KeywordAegis(Name)} {strWhereSql} {strOrderBySql} {strTopSql}"); } else if (string.IsNullOrWhiteSpace(strOrderBySql)) { Sql.Append(string.Format("SELECT {0}{1}{5} FROM {2} {3} ORDER BY dbms_random.value {4}", strDistinctSql, strSelectSql, DbProvider.KeywordAegis(Name), strWhereSql, strTopSql, isDistinct ? ",dbms_random.value as newid" : "")); } else { Sql.Append(string.Format("SELECT {1} FROM (SELECT {0}*{6} FROM {2} {3} ORDER BY dbms_random.value {5}) a {4}", strDistinctSql, strSelectSql, DbProvider.KeywordAegis(Name), strWhereSql, strOrderBySql, strTopSql, isDistinct ? ",dbms_random.value as newid" : "")); } return(this); }
public override ISqlParam ToList(int pageSize, int pageIndex, bool isDistinct = false) { // 不分页 if (pageIndex == 1) { ToList(pageSize, isDistinct); return(this); } var strSelectSql = SelectVisitor.Visit(ExpBuilder.ExpSelect); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strOrderBySql = OrderByVisitor.Visit(ExpBuilder.ExpOrderBy); var strDistinctSql = isDistinct ? "Distinct" : string.Empty; if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } Check.IsTure(string.IsNullOrWhiteSpace(strOrderBySql) && (ExpBuilder.SetMap.PhysicsMap.PrimaryFields.Count == 0), "不指定排序字段时,需要设置主键ID"); strOrderBySql = "ORDER BY " + (string.IsNullOrWhiteSpace(strOrderBySql) ? $"{ConvertHelper.ToString(ExpBuilder.SetMap.PhysicsMap.PrimaryFields.Select(o => o.Value.Name), ",")} ASC" : strOrderBySql); Sql.Append(string.Format("SELECT {1} FROM (SELECT {0} {1},ROW_NUMBER() OVER({2}) as Row FROM {3} {4}) a WHERE Row BETWEEN {5} AND {6};", strDistinctSql, strSelectSql, strOrderBySql, Name, strWhereSql, (pageIndex - 1) * pageSize + 1, pageIndex * pageSize)); return(this); }
public override ISqlParam ToList(int top = 0, bool isDistinct = false, bool isRand = false) { var strSelectSql = SelectVisitor.Visit(ExpBuilder.ExpSelect); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strOrderBySql = OrderByVisitor.Visit(ExpBuilder.ExpOrderBy); var strDistinctSql = isDistinct ? "Distinct " : string.Empty; var randField = ",dbms_random.value as newid"; if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } if (!string.IsNullOrWhiteSpace(strOrderBySql)) { strOrderBySql = "ORDER BY " + strOrderBySql; } if (!isRand) { Sql.Append(BuilderTop(top, $"SELECT {strDistinctSql}{strSelectSql} FROM {DbProvider.KeywordAegis(Name)} {strWhereSql} {strOrderBySql}")); } else if (!isDistinct && string.IsNullOrWhiteSpace(strOrderBySql)) { Sql.Append(BuilderTop(top, $"SELECT {strSelectSql}{randField} FROM {DbProvider.KeywordAegis(Name)} {strWhereSql} ORDER BY dbms_random.value")); } else { Sql.Append(BuilderTop(top, $"SELECT * {randField} FROM (SELECT {strDistinctSql} {strSelectSql} FROM {DbProvider.KeywordAegis(Name)} {strWhereSql} {strOrderBySql}) s ORDER BY dbms_random.value")); } return(this); }
public override ISqlParam ToList(int pageSize, int pageIndex, bool isDistinct = false) { // 不分页 if (pageIndex == 1) { ToList(pageSize, isDistinct); return(this); } var strSelectSql = SelectVisitor.Visit(ExpBuilder.ExpSelect); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strOrderBySql = OrderByVisitor.Visit(ExpBuilder.ExpOrderBy); var strDistinctSql = isDistinct ? "Distinct " : string.Empty; if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } if (!string.IsNullOrWhiteSpace(strOrderBySql)) { strOrderBySql = "ORDER BY " + strOrderBySql; } Sql.Append($"SELECT {strDistinctSql}{strSelectSql} FROM {DbProvider.KeywordAegis(Name)} {strWhereSql} {strOrderBySql} LIMIT {pageSize} OFFSET {pageSize * (pageIndex - 1)}"); return(this); }
public override ISqlParam ToList(int pageSize, int pageIndex, bool isDistinct = false) { // 不分页 if (pageIndex == 1) { ToList(pageSize, isDistinct); return(this); } var strSelectSql = SelectVisitor.Visit(ExpBuilder.ExpSelect); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strOrderBySql = OrderByVisitor.Visit(ExpBuilder.ExpOrderBy); var strDistinctSql = isDistinct ? "Distinct" : string.Empty; Check.IsTure(string.IsNullOrWhiteSpace(strOrderBySql) && ExpBuilder.SetMap.PhysicsMap.PrimaryFields.Count == 0, "不指定排序字段时,需要设置主键ID"); strOrderBySql = "ORDER BY " + (string.IsNullOrWhiteSpace(strOrderBySql) ? $"{ConvertHelper.ToString(ExpBuilder.SetMap.PhysicsMap.PrimaryFields.Select(o => o.Value.Name), ",")} ASC" : strOrderBySql); var strOrderBySqlReverse = strOrderBySql.Replace(" DESC", " [倒序]").Replace("ASC", "DESC").Replace("[倒序]", "ASC"); if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } Sql.Append(string.Format("SELECT {0} TOP {2} {1} FROM (SELECT TOP {3} {1} FROM {4} {5} {6}) a {7};", strDistinctSql, strSelectSql, pageSize, pageSize * pageIndex, Name, strWhereSql, strOrderBySql, strOrderBySqlReverse)); return(this); }
public virtual ISqlParam ToList(int pageSize, int pageIndex, bool isDistinct = false) { // 不分页 if (pageIndex == 1) { ToList(pageSize, isDistinct); return(this); } var strSelectSql = SelectVisitor.Visit(ExpBuilder.ExpSelect); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strOrderBySql = OrderByVisitor.Visit(ExpBuilder.ExpOrderBy); var strDistinctSql = isDistinct ? "Distinct " : string.Empty; Check.IsTure(string.IsNullOrWhiteSpace(strOrderBySql) && ExpBuilder.Map.FieldMap.PrimaryState.Key == null, "不指定排序字段时,需要设置主键ID"); strOrderBySql = "ORDER BY " + (string.IsNullOrWhiteSpace(strOrderBySql) ? string.Format("{0} ASC", ExpBuilder.Map.FieldMap.PrimaryState.Value.FieldAtt.Name) : strOrderBySql); var strOrderBySqlReverse = strOrderBySql.Replace(" DESC", " [倒序]").Replace("ASC", "DESC").Replace("[倒序]", "ASC"); if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } Sql.AppendFormat("SELECT {0}TOP {2} {1} FROM (SELECT TOP {3} * FROM {4} {5} {6}) a {7};", strDistinctSql, strSelectSql, pageSize, pageSize * pageIndex, Name, strWhereSql, strOrderBySql, strOrderBySqlReverse); return(this); }
public override ISqlParam ToList(int pageSize, int pageIndex, bool isDistinct = false) { // 不分页 if (pageIndex == 1) { ToList(pageSize, isDistinct); return(this); } var strSelectSql = SelectVisitor.Visit(ExpBuilder.ExpSelect); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strOrderBySql = OrderByVisitor.Visit(ExpBuilder.ExpOrderBy); var strDistinctSql = isDistinct ? "Distinct " : string.Empty; if (string.IsNullOrWhiteSpace(strSelectSql)) { strSelectSql = "*"; } if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } if (!string.IsNullOrWhiteSpace(strOrderBySql)) { strOrderBySql = "ORDER BY " + strOrderBySql; } Sql.AppendFormat("SELECT {0}{1} FROM {2} {3} {4} LIMIT {5},{6}", strDistinctSql, strSelectSql, DbProvider.KeywordAegis(Name), strWhereSql, strOrderBySql, pageSize * (pageIndex - 1), pageSize); return(this); }
public void Null_Test() { Expression <Func <Entity, bool> > expression = x => x.Flag == null; var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(0); statement.Text.ShouldEqual("([flag] IS NULL)"); }
public void should_generate_sql_for_ends_with_equals_false() { Expression <Func <Entity, bool> > expression = x => x.Name.EndsWith("ed") == false; var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(1); statement.Parameters.First().Value.ShouldEqual("ed"); statement.Text.ShouldEqual(string.Format("([name] NOT LIKE '%' + @{0})", statement.Parameters.First().Key)); }
public void Or_Test() { Expression <Func <Entity, bool> > expression = x => x.Age == 10 || x.Flag != null; var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(1); statement.Parameters.First().Value.ShouldEqual(10); statement.Text.ShouldEqual($"(([age] = @{statement.Parameters.First().Key}) OR ([flag] IS NOT NULL))"); }
public void Unary_True_Test() { Expression <Func <Entity, bool> > expression = x => x.Active; var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(1); statement.Parameters.First().Value.ShouldEqual(true); statement.Text.ShouldEqual(string.Format("([active] = @{0})", statement.Parameters.First().Key)); }
public void should_generate_sql_for_not_contains() { Expression <Func <Entity, bool> > expression = x => !x.Name.Contains("ed"); var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(1); statement.Parameters.First().Value.ShouldEqual("ed"); statement.Text.ShouldEqual(string.Format("([name] NOT LIKE '%' + @{0} + '%')", statement.Parameters.First().Key)); }
public void Less_Than_Or_Equal_Test() { Expression <Func <Entity, bool> > expression = x => x.Age <= 33; var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(1); statement.Parameters.First().Value.ShouldEqual(33); statement.Text.ShouldEqual(string.Format("([age] <= @{0})", statement.Parameters.First().Key)); }
public void Equals_Boolean_Expression_Test() { Expression <Func <Entity, bool> > expression = x => x.Active == (x.Age == 33); var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(1); statement.Parameters.First().Value.ShouldEqual(33); statement.Text.ShouldEqual(string.Format("([active] = CASE WHEN ([age] = @{0}) THEN 1 ELSE 0 END)", statement.Parameters.First().Key)); }
public void should_generate_sql_for_trim() { Expression <Func <Entity, bool> > expression = x => x.Name.Trim() == "ed"; var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(1); statement.Parameters.First().Value.ShouldEqual("ed"); statement.Text.ShouldEqual(string.Format("(LTRIM(RTRIM([name])) = @{0})", statement.Parameters.First().Key)); }
public void Modulo_Test() { Expression <Func <Entity, bool> > expression = x => x.Age % 20 == 55; var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(2); statement.Parameters.First().Value.ShouldEqual(20); statement.Parameters.Skip(1).First().Value.ShouldEqual(55); statement.Text.ShouldEqual(string.Format("(([age] % @{0}) = @{1})", statement.Parameters.First().Key, statement.Parameters.Skip(1).First().Key)); }
public void should_not_cast_dynamic_value() { var optout = (object)true; Expression <Func <Entity, bool> > expression = x => x.Values["optout"] == optout; var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(1); statement.Parameters.First().Value.ShouldEqual(true); statement.Text.ShouldEqual(string.Format("([optout] = @{0})", statement.Parameters.First().Key)); }
public QueryVisitor(IEntityMapper mapper, WhereVisitor whereVisitor, ProjectorVisitor projectorVisitor) { this.mapper = mapper; this.whereVisitor = whereVisitor; this.projectorVisitor = projectorVisitor; //TODO: Refactoring this.whereVisitor.Mapper = mapper; this.projectorVisitor.Mapper = mapper; }
public void Not_Bool_Test() { Expression <Func <Entity, bool> > expression = x => !x.Active && !(bool)x.Values["optout"]; var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(2); statement.Parameters.First().Value.ShouldEqual(false); statement.Parameters.Skip(1).First().Value.ShouldEqual(false); statement.Text.ShouldEqual(string.Format("(([active] = @{0}) AND (CAST([optout] AS bit) = @{1}))", statement.Parameters.First().Key, statement.Parameters.Skip(1).First().Key)); }
public void Not_Expression_Test() { Expression <Func <Entity, bool> > expression = x => !(x.Age == 33); var statement = WhereWriter <Entity> .CreateStatement(WhereVisitor <Entity> .CreateModel(expression.Body), Map); statement.Parameters.Count().ShouldEqual(2); statement.Parameters.First().Value.ShouldEqual(33); statement.Parameters.Skip(1).First().Value.ShouldEqual(false); statement.Text.ShouldEqual(string.Format("(CASE WHEN ([age] = @{0}) THEN 1 ELSE 0 END = @{1})", statement.Parameters.First().Key, statement.Parameters.Skip(1).First().Key)); }
public void Equals_Constant_Test() { Expression <Func <Entity, bool> > where = x => x.Name == "Jeff"; var whereClause = WhereVisitor <Entity> .CreateModel(where.Body); whereClause.LeftOperand.Type.ShouldEqual(Operand.OperandType.Projection); whereClause.Type.ShouldEqual(Operator.OperatorType.Equal); whereClause.RightOperand.Type.ShouldEqual(Operand.OperandType.Projection); }
public void Equals_Boolean_Not_Equals_Test() { Expression <Func <Entity, bool> > where = x => x.Active == false; var whereClause = WhereVisitor <Entity> .CreateModel(where.Body); whereClause.LeftOperand.Type.ShouldEqual(Operand.OperandType.Projection); whereClause.Type.ShouldEqual(Operator.OperatorType.Equal); whereClause.RightOperand.Type.ShouldEqual(Operand.OperandType.Projection); }
public virtual ISqlParam Delete() { var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } Sql.AppendFormat("DELETE FROM {0} {1}", DbProvider.KeywordAegis(Name), strWhereSql); return(this); }
public void Equals_Boolean_Expression_Test() { Expression <Func <Entity, bool> > where = x => x.Active; var whereClause = WhereVisitor <Entity> .CreateModel(where.Body); whereClause.LeftOperand.Type.ShouldEqual(Operand.OperandType.Projection); whereClause.Type.ShouldEqual(Operator.OperatorType.Equal); whereClause.RightOperand.Type.ShouldEqual(Operand.OperandType.Projection); whereClause.RightOperand.Projection.Type.ShouldEqual(Projection.ProjectionType.Constant); whereClause.RightOperand.Projection.Constant.Value.ShouldEqual(true); }
public virtual ISqlParam Count(bool isDistinct = false) { var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strDistinctSql = isDistinct ? "Distinct " : string.Empty; if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } Sql.AppendFormat("SELECT {0}Count(0) FROM {1} {2}", strDistinctSql, DbProvider.KeywordAegis(Name), strWhereSql); return(this); }
public void Method_Boolean_Not_Expression_Test() { Expression <Func <Entity, bool> > where = x => !x.Name.Contains("t"); var whereClause = WhereVisitor <Entity> .CreateModel(where.Body); whereClause.LeftOperand.Type.ShouldEqual(Operand.OperandType.Projection); whereClause.Type.ShouldEqual(Operator.OperatorType.Equal); whereClause.RightOperand.Type.ShouldEqual(Operand.OperandType.Projection); whereClause.RightOperand.Projection.Type.ShouldEqual(Projection.ProjectionType.Constant); whereClause.RightOperand.Projection.Constant.Value.ShouldEqual(false); }
public void Not_Boolean_Object_Dictionary_Expression_Test() { Expression <Func <Entity, bool> > where = x => !(bool)x.Values["Disabled"]; var whereClause = WhereVisitor <Entity> .CreateModel(where.Body); whereClause.LeftOperand.Type.ShouldEqual(Operand.OperandType.Projection); whereClause.Type.ShouldEqual(Operator.OperatorType.Equal); whereClause.RightOperand.Type.ShouldEqual(Operand.OperandType.Projection); whereClause.RightOperand.Projection.Type.ShouldEqual(Projection.ProjectionType.Constant); whereClause.RightOperand.Projection.Constant.Value.ShouldEqual(false); }
public virtual ISqlParam Update() { var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strAssemble = AssignVisitor.Visit(ExpBuilder.ExpAssign); // 主键如果有值、或者设置成只读条件,则自动转成条件 if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } Sql.AppendFormat("UPDATE {0} SET {1} {2}", DbProvider.KeywordAegis(Name), strAssemble, strWhereSql); return(this); }
public virtual ISqlParam AddUp() { Check.IsTure(ExpBuilder.ExpAssign == null, "赋值的参数不能为空!"); var strWhereSql = WhereVisitor.Visit(ExpBuilder.ExpWhere); var strAssemble = AssignVisitor.Visit(ExpBuilder.ExpAssign); if (!string.IsNullOrWhiteSpace(strWhereSql)) { strWhereSql = "WHERE " + strWhereSql; } Sql.AppendFormat("UPDATE {0} SET {1} {2}", DbProvider.KeywordAegis(Name), strAssemble, strWhereSql); return(this); }
public void SetUp() { _api = _factory.Create<ILinqApi>(); _visitor = new WhereVisitor(); _user = _factory.Create<IUser>(); }