1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-29 14:35:45 +00:00

Tests EF, index

This commit is contained in:
Yan Maniez 2019-09-25 21:50:00 +02:00
parent 9d9c52e34d
commit a13aff170e
10 changed files with 6799 additions and 5816 deletions

View file

@ -1,4 +1,5 @@
using System;
using SQLite;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
@ -9,6 +10,8 @@ namespace AideDeJeuLib
public class FilteredItems : Items
{
[DataMember]
[Indexed]
public string Family { get; set; }
public List<KeyValuePair<string, string>> Split(string collapsed)

View file

@ -133,6 +133,17 @@ namespace AideDeJeuLib
[Indexed]
public virtual string Name { get; set; }
[DataMember]
[Indexed]
public virtual string NormalizedName
{
get
{
return Helpers.RemoveDiacritics(Name);
}
private set { }
}
[DataMember(Name = "Item_ParentName", Order = 4)]
[Indexed]
public virtual string ParentName { get; set; }
@ -168,8 +179,9 @@ namespace AideDeJeuLib
[Indexed]
public virtual string AltName { get; set; }
[DataMember]
//[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[YamlIgnore]
[IgnoreDataMember]
public virtual string AltNameText
{
get
@ -191,7 +203,20 @@ namespace AideDeJeuLib
return AltName ?? string.Empty;
}
}
private set { }
}
[DataMember]
[Indexed]
public virtual string NormalizedAltName
{
get
{
return Helpers.RemoveDiacritics(AltNameText) ?? string.Empty;
}
private set { }
}
[DataMember(Name = "Item_Source", Order = 7)]
[Indexed]
public virtual string Source { get; set; }

View file

@ -44,5 +44,23 @@ namespace AideDeJeuLib
public string Languages { get; set; }
[Indexed]
public string Challenge { get; set; }
[Indexed]
public int XP
{
get
{
return ChallengeToXP(Challenge);
}
private set { }
}
public static int ChallengeToXP(string challenge)
{
if (string.IsNullOrEmpty(challenge)) return 0;
var regex = new Regex(@"\((?<xp>\d?\d?\d?\s?\d?\d?\d??) (PX|XP)\)");
int xp = 0;
int.TryParse(regex.Match(challenge).Groups["xp"].Value.Replace(" ", ""), out xp);
return xp;
}
}
}

View file

@ -1,7 +1,9 @@
using AideDeJeu.Tools;
using AideDeJeuLib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Input;
@ -53,6 +55,8 @@ namespace AideDeJeu.ViewModels.Library
return string.IsNullOrEmpty(filterValue) || (itemValue != null && itemValue.ToLower().Equals(filterValue.ToLower()));
}
//Expression<Func<Item, bool>> funcPred = p => p.JobTitle == "Design Engineer";
public bool MatchRange(string itemValue, string filterMinValue, string filterMaxValue, IComparer<string> comparer)
{
return
@ -425,14 +429,35 @@ namespace AideDeJeu.ViewModels.Library
await StoreViewModel.SemaphoreLibrary.WaitAsync();
using (var context = await StoreViewModel.GetLibraryContextAsync())
{
//Expression<Func<MonsterItem, bool>> funcSize = m => true;
//if (!string.IsNullOrEmpty(size))
//{
// funcSize = m => m.Size == size;
//}
//Expression<Func<MonsterItem, bool>> funcFamily = m => Expression.Equal( m.Family, Expression.Constant(this.Family));
//var funcAll = Expression.AndAlso(funcSize.Body, funcFamily.Body);
//var lambdaAll = Expression.Lambda<Func<MonsterItem, bool>>(funcAll, funcSize.Parameters[0]);
//return context.Monsters.Where(lambdaAll).ToList();
return context.Monsters.Where(monster =>
MatchEquals(monster.Family, this.Family) &&
MatchContains(monster.Type, type) &&
MatchEquals(monster.Size, size) &&
MatchContains(monster.Terrain, terrain) &&
MatchRange(monster.Challenge, minChallenge, maxChallenge, challengeComparer) &&
MatchSearch(monster)
).OrderBy(monster => Helpers.RemoveDiacritics(monster.Name)).ToList();
(string.IsNullOrEmpty(this.Family) || (monster.Family != null && monster.Family.ToLower().Equals(this.Family.ToLower()))) &&
(string.IsNullOrEmpty(size) || (monster.Size != null && monster.Size.ToLower().Equals(size.ToLower()))) &&
(string.IsNullOrEmpty(type) || (monster.Type != null && monster.Type.ToLower().Contains(type.ToLower()))) &&
(string.IsNullOrEmpty(terrain) || (monster.Terrain != null && monster.Terrain.ToLower().Contains(terrain.ToLower()))) &&
(
(string.IsNullOrEmpty(minChallenge) || monster.XP >= MonsterItem.ChallengeToXP(minChallenge)) &&
(string.IsNullOrEmpty(maxChallenge) || monster.XP <= MonsterItem.ChallengeToXP(maxChallenge))
) &&
(
monster.NormalizedName.ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower()) ||
monster.NormalizedAltName.ToLower().Contains(Helpers.RemoveDiacritics(SearchText ?? string.Empty).ToLower())
)
//MatchEquals(monster.Family, this.Family) &&
//MatchContains(monster.Type, type) &&
//MatchEquals(monster.Size, size) &&
//MatchContains(monster.Terrain, terrain) &&
//MatchRange(monster.Challenge, minChallenge, maxChallenge, challengeComparer) &&
//MatchSearch(monster)
).OrderBy(monster => monster.NormalizedName).ToList();
}
}
catch

View file

@ -689,7 +689,9 @@ namespace AideDeJeu.ViewModels
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite($"Data Source='{DbPath}'");
optionsBuilder
.UseSqlite($"Data Source='{DbPath}'");
//.ConfigureWarnings(warnings => warnings.Throw(Microsoft.EntityFrameworkCore.Diagnostics.RelationalEventId.QueryClientEvaluationWarning));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
@ -707,7 +709,7 @@ namespace AideDeJeu.ViewModels
modelBuilder.Entity<AlignmentItem>();
modelBuilder.Entity<GenericItem>();
modelBuilder.Entity<MonsterItem>();
modelBuilder.Entity<MonsterItem>().HasIndex(i => new { i.Id, i.Family, i.Type, i.Size, i.Terrain, i.Challenge, i.XP, i.Name, i.AltNameText, i.NormalizedName, i.NormalizedAltName });
modelBuilder.Entity<MonsterItems>();
modelBuilder.Entity<SpellItem>();
modelBuilder.Entity<SpellItems>();

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.