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)); } }
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; } } } }