Skip to content

Commit

Permalink
add AndNot, OrNot relation
Browse files Browse the repository at this point in the history
  • Loading branch information
ah-its-andy committed Nov 27, 2017
1 parent 87f2a55 commit b6c647e
Show file tree
Hide file tree
Showing 85 changed files with 433 additions and 585 deletions.
17 changes: 6 additions & 11 deletions sample/Feiniubus.DynamicQuery.Sample/Program.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace Feiniubus.DynamicQuery.Sample
{
Expand All @@ -17,9 +10,11 @@ public static void Main(string[] args)
BuildWebHost(args).Run();
}

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@
"applicationUrl": "http://localhost:52013/"
}
}
}
}
64 changes: 28 additions & 36 deletions sample/Feiniubus.DynamicQuery.Sample/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using FeiniuBus;
using System;
using System.Text;
using FeiniuBus;
using FeiniuBus.SqlBuilder;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using System.Text;

namespace Feiniubus.DynamicQuery.Sample
{
Expand All @@ -14,39 +14,31 @@ public class Startup
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddSQLBuilder(opts =>
{
opts.UseMySQL();
});
services.AddSQLBuilder(opts => { opts.UseMySQL(); });
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.Run(async (context) =>
app.Run(async context =>
{
DynamicQueryBuilder builder = DynamicQueryBuilder.Create(true);
var builder = DynamicQueryBuilder.Create(true);
var child1 = builder.ParamGroupBuilder.CreateChildAndGroup();
child1.ParamBuilder.Any("Extra", sub =>
{
sub.ParamBuilder.Equal("Guest", "Andy");
});
child1.ParamBuilder.Any("Extra", sub => { sub.ParamBuilder.Equal("Guest", "Andy"); });
var child2 = builder.ParamGroupBuilder.CreateChildOrGroup()
.ParamBuilder
.Contains("Address", "chengdu")
.EndsWith("Address", "lnk")
.Equal("Disabled", false)
.GreaterThan("Amout", 10)
.GreaterThanOrEqual("Price", 100)
.In("Drink", "mileshake,coffee")
.LessThan("Count", 10)
.LessThanOrEqual("Total", 100)
.StartsWith("Url", "Http://");
.ParamBuilder
.Contains("Address", "chengdu")
.EndsWith("Address", "lnk")
.Equal("Disabled", false)
.GreaterThan("Amout", 10)
.GreaterThanOrEqual("Price", 100)
.In("Drink", "mileshake,coffee")
.LessThan("Count", 10)
.LessThanOrEqual("Total", 100)
.StartsWith("Url", "Http://");
builder.OrderBy("Amout", ListSortDirection.Ascending)
.Select("Guest").Take(10).Skip(10);
var dynamicQuery = builder.Build();
Expand All @@ -62,22 +54,22 @@ public void SqlBuilderSample(FeiniuBus.DynamicQuery dynamicQuery, ISelectBuilder
var sb = new StringBuilder();
var mappings = new SqlFieldMappings();
mappings.Map("Guest", "t1.Guest")
.Map("Address", "t1.Address")
.Map("Disabled", "t1.Disabled")
.Map("Amout", "t1.Amout")
.Map("Price", "t1.Price")
.Map("Drink", "t1.Drink")
.Map("Count", "t1.Count")
.Map("Total", "t1.Total")
.Map("Url", "t1.Url");
.Map("Address", "t1.Address")
.Map("Disabled", "t1.Disabled")
.Map("Amout", "t1.Amout")
.Map("Price", "t1.Price")
.Map("Drink", "t1.Drink")
.Map("Count", "t1.Count")
.Map("Total", "t1.Total")
.Map("Url", "t1.Url");
selectBuilder.Mapping(mappings);
selectBuilder.Where(dynamicQuery.ParamGroup);

var whereClause = selectBuilder.BuildWhere();
var orderbyClause = selectBuilder.OrderBy(dynamicQuery.Order);

System.Console.WriteLine(whereClause);
System.Console.WriteLine(orderbyClause);
Console.WriteLine(whereClause);
Console.WriteLine(orderbyClause);
}
}
}
}
6 changes: 2 additions & 4 deletions src/FeiniuBus.DynamicQuery/Builder/DynamicQueryBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ public DynamicQueryBuilder Select(string select)

public DynamicQueryBuilder OrderBy(string name, ListSortDirection sort = ListSortDirection.Ascending)
{
if (!_query.Order.Any(i => (i.Name == name) && (i.Sort == sort)))
_query.Order.Add(new DynamicQueryOrder { Name = name, Sort = sort });
if (!_query.Order.Any(i => i.Name == name && i.Sort == sort))
_query.Order.Add(new DynamicQueryOrder {Name = name, Sort = sort});
return this;
}

Expand All @@ -58,7 +58,5 @@ public static DynamicQueryBuilder Create(bool pager = true)
{
return new DynamicQueryBuilder(pager);
}


}
}
6 changes: 2 additions & 4 deletions src/FeiniuBus.DynamicQuery/Builder/DynamicQueryHelper.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FeiniuBus
{
static class DynamicQueryHelper
internal static class DynamicQueryHelper
{
public static void CheckDynamicQueryParamGroup(this DynamicQueryParamGroup group)
{
if (group.Params.Any() && group.ChildGroups.Any())
throw new Exception("DynamicQueryParamGroup不能同时添加Params和Group");
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ private DynamicQueryParamBuilder Add(DynamicQueryParam param)

private DynamicQueryParam CreateParam(QueryOperation opt, string field, object value)
{
return new DynamicQueryParam { Operator = opt, Field = field, Value = value };
return new DynamicQueryParam {Operator = opt, Field = field, Value = value};
}

public DynamicQueryParamBuilder Equal(string field, object value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ public class DynamicQueryParamGroupBuilder

public DynamicQueryParamGroupBuilder() : this(new DynamicQueryParamGroup())
{

}

public DynamicQueryParamGroupBuilder(DynamicQueryParamGroup paramGroup)
Expand All @@ -15,6 +14,8 @@ public DynamicQueryParamGroupBuilder(DynamicQueryParamGroup paramGroup)
ParamBuilder = new DynamicQueryParamBuilder(_paramGroup.Params);
}

public DynamicQueryParamBuilder ParamBuilder { get; }

public DynamicQueryParamGroupBuilder RelationAnd()
{
return Relation(QueryRelation.And);
Expand All @@ -31,14 +32,17 @@ public DynamicQueryParamGroupBuilder Relation(QueryRelation relation)
return this;
}

public DynamicQueryParamBuilder ParamBuilder { get; }
public DynamicQueryParamGroup Build()
{
return _paramGroup;
}

#region CreateChildGroup

public DynamicQueryParamGroupBuilder CreateChildGroup(QueryRelation relation)
{
_paramGroup.CheckDynamicQueryParamGroup();
var childGroup = new DynamicQueryParamGroup { Relation = relation };
var childGroup = new DynamicQueryParamGroup {Relation = relation};
_paramGroup.ChildGroups.Add(childGroup);
return new DynamicQueryParamGroupBuilder(childGroup);
}
Expand All @@ -53,8 +57,16 @@ public DynamicQueryParamGroupBuilder CreateChildOrGroup()
return CreateChildGroup(QueryRelation.Or);
}

#endregion
public DynamicQueryParamGroupBuilder CreateChildAndNotGroup()
{
return CreateChildGroup(QueryRelation.AndNot);
}

public DynamicQueryParamGroupBuilder CreateChildOrNotGroup()
{
return CreateChildGroup(QueryRelation.OrNot);
}

public DynamicQueryParamGroup Build() => _paramGroup;
#endregion
}
}
34 changes: 13 additions & 21 deletions src/FeiniuBus.DynamicQuery/Converter/DefaultCharacterConverter.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;

namespace FeiniuBus
Expand Down Expand Up @@ -41,30 +40,29 @@ public virtual string FieldConverter(string fieldName)
if (string.IsNullOrEmpty(fieldName))
throw new ArgumentNullException(nameof(fieldName));
var res = string.Empty;
var arr = fieldName.Trim().Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).ToList();
for (int i = 0; i < arr.Count; i++)
var arr = fieldName.Trim().Split(new[] {'.'}, StringSplitOptions.RemoveEmptyEntries).ToList();
for (var i = 0; i < arr.Count; i++)
{
var lineArr = arr[i].Split('_');
foreach (var line in lineArr)
{
if (line.Length > 1)
res += line.Substring(0, 1).ToUpper() + line.Substring(1);
else res += line.ToUpper();
}
if (i < arr.Count - 1)
res += '.';
}
return res;
}
private void ConverterDynamicQueryParamGroupFieldName(DynamicQueryParamGroup newGroup, DynamicQueryParamGroup old)

private void ConverterDynamicQueryParamGroupFieldName(DynamicQueryParamGroup newGroup,
DynamicQueryParamGroup old)
{
if (newGroup == null)
throw new ArgumentNullException(nameof(newGroup));
if (old == null)
throw new ArgumentNullException(nameof(old));
newGroup.Relation = old.Relation;
if (old.Params != null && old.Params.Any())
{
foreach (var item in old.Params)
{
var param = new DynamicQueryParam();
Expand All @@ -73,7 +71,8 @@ private void ConverterDynamicQueryParamGroupFieldName(DynamicQueryParamGroup new
//处理特殊情况any
if (item.Operator == QueryOperation.Any)
{
var anyGroup = JsonConvert.DeserializeObject<DynamicQueryParamGroup>(item.Value?.ToString() ?? "");
var anyGroup =
JsonConvert.DeserializeObject<DynamicQueryParamGroup>(item.Value?.ToString() ?? "");
var newAnyGroup = new DynamicQueryParamGroup();
ConverterDynamicQueryParamGroupFieldName(newAnyGroup, anyGroup);
param.Value = JsonConvert.SerializeObject(newAnyGroup);
Expand All @@ -84,36 +83,29 @@ private void ConverterDynamicQueryParamGroupFieldName(DynamicQueryParamGroup new
}
newGroup.Params.Add(param);
}
}
if (old.ChildGroups != null && old.ChildGroups.Any())
{

foreach (var childGroup in old.ChildGroups)
{
var newChildGroup = new DynamicQueryParamGroup();
ConverterDynamicQueryParamGroupFieldName(newChildGroup, childGroup);
newGroup.ChildGroups.Add(newChildGroup);
}

}

}

private string ConverterSelectFieldName(string select)
{
if (select == null) return null;
return string.Join(",", select.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(FieldConverter));
return string.Join(",",
select.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries).Select(FieldConverter));
}

private List<DynamicQueryOrder> ConverterOrderFieldName(List<DynamicQueryOrder> orders)
{
var result = new List<DynamicQueryOrder>();
if (orders != null)
{
foreach (var item in orders)
{
result.Add(new DynamicQueryOrder() { Name = FieldConverter(item.Name), Sort = item.Sort });
}
}
result.Add(new DynamicQueryOrder {Name = FieldConverter(item.Name), Sort = item.Sort});
return result;
}
}
}
}
8 changes: 2 additions & 6 deletions src/FeiniuBus.DynamicQuery/Converter/ICharacterConverter.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace FeiniuBus
namespace FeiniuBus
{
public interface ICharacterConverter
{
string FieldConverter(string fieldName);
DynamicQuery Converter(DynamicQuery dynamicQuery);
DynamicQueryParamGroup ConverterDynamicQueryParamGroup(DynamicQueryParamGroup old);
}
}
}
2 changes: 1 addition & 1 deletion src/FeiniuBus.DynamicQuery/DynamicQuery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ public DynamicQuery(bool pager)
public bool Pager { get; set; }
public string Select { get; set; }
}
}
}
8 changes: 2 additions & 6 deletions src/FeiniuBus.DynamicQuery/DynamicQueryOrder.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace FeiniuBus
namespace FeiniuBus
{
public class DynamicQueryOrder
{
public string Name { get; set; }
public ListSortDirection Sort { get; set; }
}
}
}
Loading

0 comments on commit b6c647e

Please sign in to comment.