示例#1
0
 public ODataVisitor(TextWriter writer, IQueryWriterSettings settings, IServerContext context, ODataVersion version = ODataVersion.All)
 {
     _writer   = writer;
     _settings = settings;
     _context  = context;
     _version  = version;
 }
示例#2
0
        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));
            }
        }
示例#3
0
 /// <summary>
 /// Creates an OData URL string to represent the query.
 /// </summary>
 /// <param name="settings">The settings.</param>
 /// <param name="context">The context.</param>
 /// <param name="version">The version.</param>
 /// <returns>OData URL (relative to an unspecified base), e.g. Part?$skip=10&amp;$take=20</returns>
 public string ToOData(IQueryWriterSettings settings, IServerContext context, ODataVersion version = ODataVersion.All)
 {
     using (var writer = new StringWriter())
     {
         var visitor = new ODataVisitor(writer, settings, context, version);
         visitor.Visit(this);
         writer.Flush();
         return(writer.ToString());
     }
 }
示例#4
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;
             }
         }
     }
 }
示例#5
0
 public SqlServerVisitor(TextWriter writer, IQueryWriterSettings settings, IServerContext context)
     : this(writer, settings)
 {
     Context = context;
 }
示例#6
0
 public SqlServerVisitor(TextWriter writer, IQueryWriterSettings settings)
 {
     Writer       = writer;
     Settings     = settings;
     RenderOption = (settings as IAmlSqlWriterSettings)?.RenderOption ?? SqlRenderOption.Default;
 }
 public OracleSqlVisitor(System.IO.TextWriter writer, IQueryWriterSettings settings, IServerContext context) : base(writer, settings, context)
 {
 }
 public OracleSqlVisitor(System.IO.TextWriter writer, IQueryWriterSettings settings) : base(writer, settings)
 {
 }