public ILiteral Normalize(IQueryWriterSettings settings)
        {
            if (!(Value is string))
            {
                if (Expressions.TryGetLiteral(Value, out var lit))
                {
                    return(lit);
                }
                else
                {
                    throw new NotSupportedException();
                }
            }

            var dataType = default(string);

            if (!string.IsNullOrEmpty(TypeProvider?.Table.Type))
            {
                var props = settings.GetProperties(TypeProvider?.Table.Type);
                if (props != null && props.TryGetValue(TypeProvider.Name, out var propDefn))
                {
                    dataType = propDefn.DataType().Value;
                    if (dataType == "foreign")
                    {
                        dataType = null;
                    }
                }
            }

            var str = (string)Value;

            if (dataType == "boolean")
            {
                return(new BooleanLiteral(str == "1"));
            }
            else if ((dataType == null || dataType == "date") &&
                     Context.TryParseDateTime(str, out var date) &&
                     date.HasValue)
            {
                return(new DateTimeLiteral(date.Value.LocalDateTime));
            }
            else if ((dataType == null || dataType == "integer") &&
                     long.TryParse(str, NumberStyles.Integer, CultureInfo.InvariantCulture, out long lng))
            {
                return(new IntegerLiteral(lng));
            }
            else if ((dataType == null || dataType == "float" || dataType == "decimal") &&
                     double.TryParse(str, NumberStyles.Float, CultureInfo.InvariantCulture, out double dbl))
            {
                return(new FloatLiteral(dbl));
            }
            else
            {
                return(new StringLiteral(str));
            }
        }
Beispiel #2
0
 internal void TryFillName(IQueryWriterSettings Settings)
 {
     if (string.IsNullOrEmpty(Type) && TypeProvider?.Table != null)
     {
         TypeProvider.Table.TryFillName(Settings);
         if (!string.IsNullOrEmpty(TypeProvider.Table.Type))
         {
             var props = Settings.GetProperties(TypeProvider.Table.Type);
             if (props != null &&
                 !string.IsNullOrEmpty(TypeProvider.Name) &&
                 props.TryGetValue(TypeProvider.Name, out var propDefn) &&
                 propDefn.DataType().Value == "item")
             {
                 Type = propDefn.DataSource().KeyedName().Value;
             }
         }
     }
 }