private void ProcessQuery(StringBuilder sb, QuerySegment segment, QueryBuildInfo buildInfo, IDbLayer dbLayer)
 {
     buildInfo = dbLayer.DataManipulate().ProcessQuery(buildInfo, segment.Query.Structure);
     sb.Append(" ( ");
     sb.Append(buildInfo.ExecInfo.Sql);
     sb.Append(" ) ");
 }
        static Dictionary <string, QuerySegment> ParseQueryStringVariables(Uri templateUri)
        {
            string queries = templateUri.Query;

            string[] pairs = queries.Split('&');
            var      nc    = new Dictionary <string, QuerySegment>();

            foreach (string value in pairs)
            {
                string unescapedString = Uri.UnescapeDataString(value);
                if (unescapedString.Length == 0)
                {
                    continue;
                }
                int variableStart = unescapedString[0] == '?' ? 1 : 0;

                int equalSignPosition = unescapedString.IndexOf('=');
                if (equalSignPosition != -1)
                {
                    string val           = unescapedString.Substring(equalSignPosition + 1);
                    string valAsVariable = GetVariableName(val);
                    var    segment       = new QuerySegment
                    {
                        Key   = unescapedString.Substring(variableStart, equalSignPosition - variableStart),
                        Value = valAsVariable ?? val,
                        Type  = valAsVariable == null ? SegmentType.Literal : SegmentType.Variable
                    };
                    nc[segment.Key] = segment;
                }
            }
            return(nc);
        }
        static Dictionary<string, QuerySegment> ParseQueryStringVariables(Uri templateUri)
        {
            string queries = templateUri.Query;
            string[] pairs = queries.Split('&');
            var nc = new Dictionary<string, QuerySegment>(StringComparer.OrdinalIgnoreCase);
            foreach (string value in pairs)
            {
                string unescapedString = Uri.UnescapeDataString(value.Replace('+', ' '));
                if (unescapedString.Length == 0)
                    continue;
                int variableStart = unescapedString[0] == '?' ? 1 : 0;

                int equalSignPosition = unescapedString.IndexOf('=');
                if (equalSignPosition != -1)
                {
                    string val = unescapedString.Substring(equalSignPosition + 1);
                    string valAsVariable = GetVariableName(val);
                    var segment = new QuerySegment
                    {
                        Key = unescapedString.Substring(variableStart, equalSignPosition - variableStart),
                        Value = valAsVariable ?? val,
                        Type = valAsVariable == null ? SegmentType.Literal : SegmentType.Variable
                    };
                    nc[segment.Key] = segment;
                }
            }
            return nc;
        }
Beispiel #4
0
        private bool TryGetSegment(ModelBindingContext bindingContext, out QuerySegment querySegment)
        {
            var skipValue = bindingContext.ValueProvider.GetValue("skip");

            if (skipValue.Length > 1)
            {
                throw new ArgumentOutOfRangeException(nameof(skipValue));
            }

            var takeValue = bindingContext.ValueProvider.GetValue("take");

            if (takeValue.Length > 1)
            {
                throw new ArgumentOutOfRangeException(nameof(takeValue));
            }

            if (skipValue.Length > 0 || takeValue.Length > 0)
            {
                querySegment = new QuerySegment
                {
                    StartIndex = skipValue.Length > 0 ? (int)Convert.ChangeType(skipValue.FirstValue, TypeCode.Int32) : 0,
                    Count      = takeValue.Length > 0 ? (int?)Convert.ChangeType(takeValue.FirstValue, TypeCode.Int32) : null
                };

                return(true);
            }

            querySegment = null;

            return(false);
        }
Beispiel #5
0
 public static SystemUri Define
 (
     SchemeSegment scheme = null,
     HostSegment host     = null,
     PathSegment path     = null,
     QuerySegment query   = null
 ) => new SystemUri(scheme, host, path, query);
Beispiel #6
0
        private static QuerySegment[] ParseQueries(string path)
        {
            if (string.IsNullOrEmpty(path))
            {
                return(new QuerySegment[0]);
            }
            var split  = path.Split('&');
            var result = new QuerySegment[split.Length];

            for (var i = 0; i < split.Length; i++)
            {
                result[i] = new QuerySegment(split[i]);
            }

            return(result);
        }
        public bool IsEquivalentTo(UriTemplate other)
        {
            if (other == null)
            {
                return(false);
            }
            if (_segments.Count != other._segments.Count)
            {
                return(false);
            }
            if (_queryStringVariables.Count != other._queryStringVariables.Count)
            {
                return(false);
            }
            for (int i = 0; i < _segments.Count; i++)
            {
                UrlSegment thisSegment  = _segments[i];
                UrlSegment otherSegment = other._segments[i];
                if (thisSegment.Type != otherSegment.Type)
                {
                    return(false);
                }
                if (thisSegment.Type == SegmentType.Literal && thisSegment.Text != otherSegment.Text)
                {
                    return(false);
                }
            }
            foreach (var thisSegment in _queryStringVariables)
            {
                if (!other._queryStringVariables.ContainsKey(thisSegment.Key))
                {
                    return(false);
                }
                QuerySegment otherSegment = other._queryStringVariables[thisSegment.Key];

                if (thisSegment.Value.Type != otherSegment.Type)
                {
                    return(false);
                }
                if (thisSegment.Value.Type == SegmentType.Literal && thisSegment.Value.Value != otherSegment.Value)
                {
                    return(false);
                }
            }
            return(true);
        }
Beispiel #8
0
        private bool TryGetQuery(ModelBindingContext bindingContext, out Query <TQueryable> query)
        {
            QueryCriteria <TQueryable> criteria = null;

            if (TryGetCriteria(bindingContext, out var queryCriteria))
            {
                criteria = queryCriteria;
            }


            List <QueryOrder> orders = null;

            if (TryGetOrders(bindingContext, out var queryOrders))
            {
                orders = queryOrders;
            }


            QuerySegment segment = null;

            if (TryGetSegment(bindingContext, out var querySegment))
            {
                segment = querySegment;
            }


            if (criteria != null || orders != null || segment != null)
            {
                query = new Query <TQueryable>
                {
                    Criteria = criteria,
                    Orders   = orders,
                    Segment  = segment
                };

                return(true);
            }

            query = null;

            return(false);
        }
Beispiel #9
0
        public static IEnumerable <QuerySegment> ParseQueryStringSegments(string query)
        {
            var kvPairs = query.Split('&');

            foreach (var kvPair in kvPairs)
            {
                var unescapedString = Uri.UnescapeDataString(kvPair.Replace('+', ' '));

                if (unescapedString.Length == 0)
                {
                    continue;
                }
                var variableStart = unescapedString[0] == '?' ? 1 : 0;

                var equalSignPosition = unescapedString.IndexOf('=');
                if (equalSignPosition != -1)
                {
                    var key = unescapedString.Substring(variableStart, equalSignPosition - variableStart);
                    var val = unescapedString.Substring(equalSignPosition + 1);


                    var valAsVariable = GetVariableName(val);
                    var segment       = new QuerySegment
                    {
                        Key      = key,
                        Value    = valAsVariable ?? val,
                        RawValue = val,
                        Type     = valAsVariable == null ? SegmentType.Literal : SegmentType.Variable
                    };
                    yield return(segment);
                }
                else
                {
                    yield return(new QuerySegment {
                        Key = unescapedString, Value = null, Type = SegmentType.Literal
                    });
                }
            }
        }
Beispiel #10
0
        static Dictionary <string, QuerySegment> ParseQueries(Uri templateUri)
        {
            string queries = templateUri.Query;

            string[] pairs = queries.Split('&');
            var      nc    = new Dictionary <string, QuerySegment>();

            foreach (string value in pairs)
            {
                // the UnescapeDataString method does not convert plus characters into spaces
                // because this behavior is not standard across all URI schemes (apparently!).
                // http://msdn.microsoft.com/en-us/library/system.uri.unescapedatastring.aspx
                var unescapedString = value.Replace('+', ' ');
                unescapedString = Uri.UnescapeDataString(unescapedString);

                if (unescapedString.Length == 0)
                {
                    continue;
                }
                int variableStart = unescapedString[0] == '?' ? 1 : 0;

                int equalSignPosition = unescapedString.IndexOf('=');
                if (equalSignPosition != -1)
                {
                    string val           = unescapedString.Substring(equalSignPosition + 1);
                    string valAsVariable = GetVariableName(val);
                    var    segment       = new QuerySegment
                    {
                        Key   = unescapedString.Substring(variableStart, equalSignPosition - variableStart),
                        Value = valAsVariable ?? val,
                        Type  = valAsVariable == null ? SegmentType.Literal : SegmentType.Variable
                    };
                    nc[segment.Key] = segment;
                }
            }
            return(nc);
        }
 static bool QuerySegmentValueIsDifferent(Dictionary <string, QuerySegment> requestUriQuerySegments,
                                          QuerySegment templateQuerySegment)
 {
     return(requestUriQuerySegments[templateQuerySegment.Key].Value != templateQuerySegment.Value);
 }
Beispiel #12
0
        protected T BaseQuery(ISelectionQuery query, string alias)
        {
            var segment = new QuerySegment(query, alias);

            return(AddSegment(segment));
        }
Beispiel #13
0
        static Dictionary<string, QuerySegment> ParseQueries(Uri templateUri)
        {
            string queries = templateUri.Query;
            string[] pairs = queries.Split('&');
            var nc = new Dictionary<string, QuerySegment>();
            foreach (string value in pairs)
            {
                // the UnescapeDataString method does not convert plus characters into spaces
                // because this behavior is not standard across all URI schemes (apparently!).
                // http://msdn.microsoft.com/en-us/library/system.uri.unescapedatastring.aspx
                var unescapedString = value.Replace('+', ' ');
                unescapedString = Uri.UnescapeDataString(unescapedString);

                if (unescapedString.Length == 0)
                    continue;
                int variableStart = unescapedString[0] == '?' ? 1 : 0;

                int equalSignPosition = unescapedString.IndexOf('=');
                if (equalSignPosition != -1)
                {
                    string val = unescapedString.Substring(equalSignPosition + 1);
                    string valAsVariable = GetVariableName(val);
                    var segment = new QuerySegment
                    {
                        Key = unescapedString.Substring(variableStart, equalSignPosition - variableStart),
                        Value = valAsVariable ?? val,
                        Type = valAsVariable == null ? SegmentType.Literal : SegmentType.Variable
                    };
                    nc[segment.Key] = segment;
                }
            }
            return nc;
        }