public QueryTokenTS(QueryToken qt, bool recursive) { this.toString = qt.ToString(); this.niceName = qt.NiceName(); this.key = qt.Key; this.fullKey = qt.FullKey(); this.type = new TypeReferenceTS(qt.Type, qt.GetImplementations()); this.filterType = QueryUtils.TryGetFilterType(qt.Type); this.format = qt.Format; this.unit = qt.Unit; this.typeColor = qt.TypeColor; this.niceTypeName = qt.NiceTypeName; this.queryTokenType = GetQueryTokenType(qt); this.isGroupable = qt.IsGroupable; this.hasOrderAdapter = QueryUtils.OrderAdapters.ContainsKey(qt.Type); this.preferEquals = qt.Type == typeof(string) && qt.GetPropertyRoute() is PropertyRoute pr && typeof(Entity).IsAssignableFrom(pr.RootType) && Schema.Current.HasSomeIndex(pr); this.propertyRoute = qt.GetPropertyRoute()?.ToString(); if (recursive && qt.Parent != null) { this.parent = new QueryTokenTS(qt.Parent, recursive); } }
public static bool IsDateOnly(QueryToken token) { if ((token is DatePartStartToken dt && (dt.Name == QueryTokenMessage.MonthStart || dt.Name == QueryTokenMessage.WeekStart)) || token is DateToken) { return(true); } PropertyRoute?route = token.GetPropertyRoute(); if (route != null && route.PropertyRouteType == PropertyRouteType.FieldOrProperty) { var pp = Validator.TryGetPropertyValidator(route); if (pp != null) { DateTimePrecisionValidatorAttribute?datetimePrecision = pp.Validators.OfType <DateTimePrecisionValidatorAttribute>().SingleOrDefaultEx(); if (datetimePrecision != null && datetimePrecision.Precision == DateTimePrecision.Days) { return(true); } } } return(false); }
public override PropertyRoute?GetPropertyRoute() { Type?type = Lite.Extract(parent.GetPropertyRoute()?.Type ?? parent.Type); if (type != null) { return(PropertyRoute.Root(type).Add(miToStringProperty)); } return(null); }
internal static MetaExpression FromToken(QueryToken token, Type sourceType) { var pr = token.GetPropertyRoute(); if (pr == null) { return(new MetaExpression(sourceType, new DirtyMeta(token.GetImplementations(), Array.Empty <Meta>()))); } if (!sourceType.IsLite() && pr.Type.IsLite()) { return(new MetaExpression(sourceType, new CleanMeta(token.GetImplementations(), new[] { pr.Add("Entity") }))); } return(new MetaExpression(sourceType, new CleanMeta(token.GetImplementations(), new[] { pr }))); //throw new InvalidOperationException("Impossible to convert {0} to {1}".FormatWith(pr.Type.TypeName(), sourceType.TypeName())); }
public IEnumerable <QueryToken> GetExtensions(QueryToken parent) { var parentType = parent.Type.CleanType().UnNullify(); var dic = RegisteredExtensions.TryGetValue(parentType); IEnumerable <QueryToken> extensionsTokens = dic == null?Enumerable.Empty <QueryToken>() : dic.Values.Where(ei => ei.Inherit || ei.SourceType == parentType).Select(v => v.CreateToken(parent)); var pr = parentType.IsEntity() && !parentType.IsAbstract ? PropertyRoute.Root(parentType) : parentType.IsEmbeddedEntity() ? parent.GetPropertyRoute() : null; var edi = pr == null ? null : RegisteredExtensionsDictionaries.TryGetC(pr); IEnumerable <QueryToken> dicExtensionsTokens = edi == null?Enumerable.Empty <QueryToken>() : edi.GetAllTokens(parent); return(extensionsTokens.Concat(dicExtensionsTokens)); }
public QueryTokenTS(QueryToken qt, bool recursive) { this.toString = qt.ToString(); this.niceName = qt.NiceName(); this.key = qt.Key; this.fullKey = qt.FullKey(); this.type = new TypeReferenceTS(qt.Type, qt.GetImplementations()); this.filterType = QueryUtils.TryGetFilterType(qt.Type); this.format = qt.Format; this.unit = qt.Unit; this.typeColor = qt.TypeColor; this.niceTypeName = qt.NiceTypeName; this.queryTokenType = GetQueryTokenType(qt); this.isGroupable = qt.IsGroupable; this.propertyRoute = qt.GetPropertyRoute()?.ToString(); if (recursive && qt.Parent != null) { this.parent = new QueryTokenTS(qt.Parent, recursive); } }
public IEnumerable <QueryToken> GetExtensions(QueryToken parent) { var parentTypeClean = parent.Type.CleanType(); var compatibleTypes = CompatibleTypes(parent.Type); var dic = compatibleTypes .Select(t => RegisteredExtensions.TryGetValue(t)) .Aggregate((Dictionary <string, ExtensionInfo>?)null, (dic1, dic2) => { if (dic1 == null) { return(dic2); } if (dic2 == null) { return(dic1); } var dic = new Dictionary <string, ExtensionInfo>(); dic.SetRange(dic1); dic.DefaultRange(dic2); return(dic); }); IEnumerable <QueryToken> extensionsTokens = dic == null?Enumerable.Empty <QueryToken>() : dic.Values.Where(ei => ei.Inherit || compatibleTypes.Contains(ei.SourceType)) .Where(ei => ei.IsApplicable == null || ei.IsApplicable(parent)) .Select(v => v.CreateToken(parent)); var pr = parentTypeClean.IsEntity() && !parentTypeClean.IsAbstract ? PropertyRoute.Root(parentTypeClean) : parentTypeClean.IsEmbeddedEntity() ? parent.GetPropertyRoute() : null; var edi = pr == null ? null : RegisteredExtensionsDictionaries.TryGetC(pr); IEnumerable <QueryToken> dicExtensionsTokens = edi == null?Enumerable.Empty <QueryToken>() : edi.GetAllTokens(parent); return(extensionsTokens.Concat(dicExtensionsTokens)); }
public static bool IsTranslateInstanceCanditate(QueryToken token) { if (token.Type != typeof(string)) { return(false); } var pr = token.GetPropertyRoute(); if (pr == null) { return(false); } if (TranslatedInstanceLogic.RouteType(pr) == null) { return(false); } return(true); }
public static bool IsDateOnly(QueryToken token) { if (token is MonthStartToken || token is DateToken) return true; PropertyRoute route = token.GetPropertyRoute(); if (route != null && route.PropertyRouteType == PropertyRouteType.FieldOrProperty) { var pp = Validator.TryGetPropertyValidator(route); if (pp != null) { DateTimePrecissionValidatorAttribute datetimePrecission = pp.Validators.OfType<DateTimePrecissionValidatorAttribute>().SingleOrDefaultEx(); if (datetimePrecission != null && datetimePrecission.Precision == DateTimePrecision.Days) return true; } } return false; }
public override PropertyRoute?GetPropertyRoute() { return(parent.GetPropertyRoute()); }
internal static MetaExpression FromToken(QueryToken token, Type sourceType) { var pr = token.GetPropertyRoute(); if (pr == null) return new MetaExpression(sourceType, new DirtyMeta(token.GetImplementations(), new Meta[0])); if (!sourceType.IsLite() && pr.Type.IsLite()) return new MetaExpression(sourceType, new CleanMeta(token.GetImplementations(), new[] { pr.Add("Entity") })); return new MetaExpression(sourceType, new CleanMeta(token.GetImplementations(), new[] { pr })); //throw new InvalidOperationException("Impossible to convert {0} to {1}".FormatWith(pr.Type.TypeName(), sourceType.TypeName())); }
public QueryTokenTS(QueryToken qt, bool recursive) { this.toString = qt.ToString(); this.niceName = qt.NiceName(); this.key = qt.Key; this.fullKey = qt.FullKey(); this.type = new TypeReferenceTS(qt.Type, qt.GetImplementations()); this.filterType = QueryUtils.TryGetFilterType(qt.Type); this.format = qt.Format; this.unit = qt.Unit; this.typeColor = qt.TypeColor; this.niceTypeName = qt.NiceTypeName; this.queryTokenType = GetQueryTokenType(qt); this.isGroupable = qt.IsGroupable; this.propertyRoute = qt.GetPropertyRoute()?.ToString(); if (recursive && qt.Parent != null) this.parent = new QueryTokenTS(qt.Parent, recursive); }