Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
    public override PropertyRoute?GetPropertyRoute()
    {
        Type?type = Lite.Extract(parent.GetPropertyRoute()?.Type ?? parent.Type);

        if (type != null)
        {
            return(PropertyRoute.Root(type).Add(miToStringProperty));
        }

        return(null);
    }
Exemplo n.º 4
0
    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()));
    }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
 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);
     }
 }
Exemplo n.º 7
0
    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));
    }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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;
        }
Exemplo n.º 10
0
 public override PropertyRoute?GetPropertyRoute()
 {
     return(parent.GetPropertyRoute());
 }
Exemplo n.º 11
0
        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()));
        }
Exemplo n.º 12
0
 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);
 }