Пример #1
0
        private static List <object> GetStrings(RSqlQueryParser.ArgumentsContext argumentsContext)
        {
            var items = new List <object>();

            foreach (var valueContext in argumentsContext.value())
            {
                if (valueContext.single_quote() != null || valueContext.double_quote() != null)
                {
                    var replace = valueContext.single_quote() != null ? "'" : "\"";
                    var value   = valueContext.GetText();
                    if (value.Length == 2)
                    {
                        items.Add(string.Empty);
                    }

                    items.Add(value.Substring(1, value.Length - 2).Replace("\\" + replace, replace));
                }
                else
                {
                    items.Add(valueContext.GetText());
                }
            }

            return(items);
        }
Пример #2
0
        public static List <object> GetNumericValues(Type type, RSqlQueryParser.ArgumentsContext argumentsContext)
        {
            if (IsByte(type))
            {
                return(GetBytes(argumentsContext));
            }

            if (IsShort(type))
            {
                return(GetShorts(argumentsContext));
            }

            if (IsLong(type))
            {
                return(GetLongs(argumentsContext));
            }

            if (IsFloat(type))
            {
                return(GetFloats(argumentsContext));
            }

            if (IsDouble(type))
            {
                return(GetDoubles(argumentsContext));
            }

            if (IsDecimal(type))
            {
                return(GetDecimals(argumentsContext));
            }
            return(GetInts(argumentsContext));
        }
Пример #3
0
        public static List <object> GetValues(Type type, RSqlQueryParser.ArgumentsContext argumentsContext)
        {
            if (argumentsContext?.value() == null || argumentsContext.value().Length == 0)
            {
                return(new List <object>());
            }

            if (IsNumeric(type))
            {
                return(GetNumericValues(type, argumentsContext));
            }

            if (IsAlphabetic(type))
            {
                return(GetAlphabeticValues(type, argumentsContext));
            }

            if (IsTemporal(type))
            {
                return(GetTemporalValues(type, argumentsContext));
            }

            if (IsBool(type))
            {
                return(GetBooleans(argumentsContext));
            }

            if (IsGuid(type))
            {
                return(GetGuids(argumentsContext));
            }

            return(IsEnum(type) ? GetEnums(argumentsContext, type) : new List <object>());
        }
Пример #4
0
 public static List <object> GetAlphabeticValues(Type type, RSqlQueryParser.ArgumentsContext argumentsContext)
 {
     if (IsChar(type))
     {
         return(GetChars(argumentsContext));
     }
     return(GetStrings(argumentsContext));
 }
Пример #5
0
 public static List <object> GetTemporalValues(Type type, RSqlQueryParser.ArgumentsContext argumentsContext)
 {
     if (IsDateTimeOffset(type))
     {
         return(GetDateTimeOffsets(argumentsContext));
     }
     return(GetDateTimes(argumentsContext));
 }
Пример #6
0
        private static List <object> GetBytes(RSqlQueryParser.ArgumentsContext argumentsContext)
        {
            var items = new List <object>();

            foreach (var valueContext in argumentsContext.value())
            {
                items.Add(byte.Parse(valueContext.GetText()));
            }

            return(items);
        }
Пример #7
0
        private static List <object> GetDecimals(RSqlQueryParser.ArgumentsContext argumentsContext)
        {
            var items = new List <object>();

            foreach (var valueContext in argumentsContext.value())
            {
                items.Add(decimal.Parse(valueContext.GetText(), CultureInfo.InvariantCulture));
            }

            return(items);
        }
Пример #8
0
        private static List <object> GetDateTimeOffsets(RSqlQueryParser.ArgumentsContext argumentsContext)
        {
            var items = new List <object>();

            foreach (var valueContext in argumentsContext.value())
            {
                items.Add(DateTimeOffset.Parse(valueContext.GetText(), CultureInfo.InvariantCulture,
                                               DateTimeStyles.RoundtripKind));
            }

            return(items);
        }
Пример #9
0
        private static List <object> GetDoubles(RSqlQueryParser.ArgumentsContext argumentsContext)
        {
            var items = new List <object>();

            foreach (var valueContext in argumentsContext.value())
            {
                items.Add(double.Parse(
                              valueContext.GetText().Replace('.', DecimalSeparator).Replace(',', DecimalSeparator),
                              CultureInfo.InvariantCulture));
            }

            return(items);
        }
Пример #10
0
        private static List <object> GetEnums(RSqlQueryParser.ArgumentsContext argumentsContext, Type type)
        {
            var enumType = type.IsGenericType ? type.GetGenericArguments()[0] : type;

            return(argumentsContext.value()
                   .Select(valueContext =>
            {
                try
                {
                    return Enum.Parse(enumType, valueContext.GetText(), true);
                }
                catch (Exception e)
                {
                    throw new InvalidConversionException(valueContext, enumType, e);
                }
            }
                           )
                   .ToList());
        }
Пример #11
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="RSqlQueryParser.arguments"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitArguments([NotNull] RSqlQueryParser.ArgumentsContext context)
 {
     return(VisitChildren(context));
 }
Пример #12
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="RSqlQueryParser.arguments"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitArguments([NotNull] RSqlQueryParser.ArgumentsContext context)
 {
 }