Ejemplo n.º 1
0
 /// <summary>
 /// Parses the list of databases.
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 protected virtual List<String> ParseDatabases(IDatabaseObject query) {
     return query.Where(statement => statement is Builders.Database).Select(database => this.ParseDatabase(database as Builders.Database)).ToList();
 }
Ejemplo n.º 2
0
 protected virtual List<String> ParseSortings(IDatabaseObject query) {
     return query.Where(sort => sort is Sort).Select(sort => this.ParseSort(sort as Sort)).ToList();
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Parses the list of indexes 
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 protected virtual List<String> ParseIndices(IDatabaseObject query) {
     return query.Where(statement => statement is Index).Union(new List<IDatabaseObject>() { query }.Where(owner => owner is Index)).Select(index => this.ParseIndex(index as Index)).Where(index => String.IsNullOrEmpty(index) == false).ToList();
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Parse any logicals 
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        protected virtual List<String> ParseLogicals(IDatabaseObject query) {
            List<String> logicals = new List<String>();

            foreach (Logical logical in query.Where(logical => logical is Logical)) {
                String separator = logical is Or ? " OR " : " AND ";

                String childLogicals = String.Join(separator, this.ParseLogicals(logical));
                String childEqualities = String.Join(separator, this.ParseEqualities(logical));

                if (String.IsNullOrEmpty(childLogicals) == false) logicals.Add(String.Format("({0})", childLogicals));
                if (String.IsNullOrEmpty(childEqualities) == false) logicals.Add(String.Format("({0})", childEqualities));
            }

            return logicals;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Parse field assignments, similar to conditions, but without the conditionals.
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        protected virtual List<String> ParseAssignments(IDatabaseObject query) {
            List<String> assignments = new List<String>();

            foreach (Assignment assignment in query.Where(statement => statement is Assignment)) {
                Field field = assignment.FirstOrDefault(statement => statement is Field) as Field;
                Value value = assignment.FirstOrDefault(statement => statement is Value) as Value;

                if (field != null && value != null) {
                    assignments.Add(String.Format("{0} = {1}", this.ParseField(field), this.ParseValue(value)));
                }
            }

            return assignments;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Loops on query, adding each as it's own new element
        /// </summary>
        /// <param name="query"></param>
        /// <param name="outer"></param>
        /// <returns></returns>
        protected virtual JArray ParseEqualities(IDatabaseObject query, JArray outer) {
            foreach (Equality equality in query.Where(statement => statement is Equality)) {
                outer.Add(this.ParseEquality(equality, new JObject()));
            }

            return outer;
        }
Ejemplo n.º 7
0
        protected virtual List<String> ParseEqualities(IDatabaseObject query) {
            List<String> equalities = new List<String>();

            foreach (Equality equality in query.Where(statement => statement is Equality)) {
                Field field = equality.FirstOrDefault(statement => statement is Field) as Field;
                Value value = equality.FirstOrDefault(statement => statement is Value) as Value;

                if (field != null && value != null) {
                    equalities.Add(String.Format("{0} {1} {2}", this.ParseField(field), this.ParseEquality(equality), this.ParseValue(value)));
                }
            }

            return equalities;
        }
Ejemplo n.º 8
0
 protected virtual List<String> ParseValues(IDatabaseObject query) {
     return query.Where(statement => statement is Value).Select(value => this.ParseValue(value as Value)).ToList();
 }
Ejemplo n.º 9
0
        protected virtual List<String> ParseFields(IDatabaseObject query) {
            List<String> parsed = new List<String>();

            // If we have a distinct field, but no specific fields
            if (query.Any(attribute => attribute is Distinct) == true && query.Any(logical => logical is Field) == false) {
                parsed.Add("DISTINCT *");
            }
            // If we have a distinct field and only one field available
            else if (query.Any(attribute => attribute is Distinct) == true && query.Count(logical => logical is Field) == 1) {
                Field field = query.First(logical => logical is Field) as Field;

                if (field != null) {
                    field.Add(query.First(attribute => attribute is Distinct));

                    parsed.Add(this.ParseField(field));
                }
            }
            // Else, no distinct in the global query space
            else {
                parsed.AddRange(query.Where(logical => logical is Field).Select(field => this.ParseField(field as Field)));
            }

            return parsed;
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Parse field assignments, similar to conditions, but without the conditionals.
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 protected virtual List<String> ParseAssignments(IDatabaseObject query) {
     DocumentValue document = new DocumentValue();
     document.AddRange(query.Where(statement => statement is Assignment));
     
     return new List<String>() {
         new JArray() {
             new JObject() {
                 new JProperty("$set", document.ToJObject())
             }
         }.ToString(Formatting.None)
     };
 }
Ejemplo n.º 11
0
        protected virtual List<String> ParseSortings(IDatabaseObject query) {
            JObject sortings = new JObject();

            foreach (Sort sort in query.Where(sort => sort is Sort)) {
                this.ParseSort(sort, sortings);
            }

            return new List<String>() {
                new JArray() {
                    sortings
                }.ToString(Formatting.None)
            };
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Parse any logicals 
        /// </summary>
        /// <param name="query"></param>
        /// <param name="outer"></param>
        /// <returns></returns>
        protected virtual JObject ParseLogicals(IDatabaseObject query, JObject outer) {
            foreach (Logical logical in query.Where(logical => logical is Logical)) {
                outer[this.ParseLogical(logical)] = new JArray();

                this.ParseEqualities(logical, outer[this.ParseLogical(logical)] as JArray);
                this.ParseLogicals(logical, outer[this.ParseLogical(logical)] as JArray);
            }

            this.ParseEqualities(query, outer);

            return outer;
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Parse logics, adding them to the current array as a new object.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="outer"></param>
        /// <returns></returns>
        protected virtual JArray ParseLogicals(IDatabaseObject query, JArray outer) {
            foreach (Logical logical in query.Where(logical => logical is Logical)) {
                outer.Add(this.ParseLogicals(logical, new JObject()));
            }

            return outer;
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Loops on query, adding/updating all queries on the single outer JObject
        /// </summary>
        /// <param name="query"></param>
        /// <param name="outer"></param>
        /// <returns></returns>
        protected virtual JObject ParseEqualities(IDatabaseObject query, JObject outer) {
            foreach (Equality equality in query.Where(statement => statement is Equality)) {
                this.ParseEquality(equality, outer);
            }

            return outer;
        }
Ejemplo n.º 15
0
 /// <summary>
 /// Fetches the numeric value from a skip object
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 protected virtual long? ParseSkip(IDatabaseObject query) {
     return query.Where(skip => skip is Skip && skip.Any(value => value is NumericValue)).Select(skip => ((NumericValue)skip.First(value => value is NumericValue)).Long).FirstOrDefault();
 }
Ejemplo n.º 16
0
 /// <summary>
 /// Parse collections for all methods, used like "FROM ..."
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 protected virtual List<String> ParseCollections(IDatabaseObject query) {
     return query.Where(logical => logical is Collection).Select(collection => this.ParseCollection(collection as Collection)).ToList();
 }
Ejemplo n.º 17
0
 /// <summary>
 /// Fetches the numeric value from a limit object
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 protected virtual long? ParseLimit(IDatabaseObject query) {
     return query.Where(limit => limit is Limit && limit.Any(value => value is NumericValue)).Select(limit => ((NumericValue)limit.First(value => value is NumericValue)).Long).FirstOrDefault();
 }
Ejemplo n.º 18
0
 protected virtual List<String> ParseFields(IDatabaseObject query) {
     return query.Where(logical => logical is Field).Select(field => this.ParseField(field as Field)).ToList();
 }