public string Translate(ComplexQuery query)
        {
            var fieldTransformations = new List <FieldTransformation>
            {
                new FieldTransformation("id", "identifier", (v) => {
                    return(_projectId.ToKotoriDocumentUri(_documentType, _documentTypeId, v, _index).ToString());
                }),
                new FieldTransformation("projectId", null, (v) => {
                    return(_projectId.ToKotoriProjectUri().ToString());
                }),
                new FieldTransformation("documentTypeId", null, (v) => {
                    return(_projectId.ToKotoriDocumentTypeUri(_documentType, _documentTypeId).ToString());
                })
            };

            var additionalQueryClause = "projectId eq '' and documentTypeId eq ''";

            return(BaseTranslator.Translate(query, Document.Entity, fieldTransformations, additionalQueryClause));
        }
 public string Translate(ComplexQuery query)
 {
     return(BaseTranslator.Translate(query, Project.Entity, _fieldTransformations, null));
 }
Beispiel #3
0
        /// <summary>
        /// Translates complex query for a given entity / field transformations to a valid query for document db.
        /// </summary>
        /// <param name="query">Complex query.</param>
        /// <param name="entity">Entity name.</param>
        /// <param name="fieldTransformations">A collection fo field transformations.</param>
        /// <param name="additionalWhereConditions">Additional where conditions</param>
        /// <returns>Translated query.</returns>
        public static string Translate(ComplexQuery query, string entity, IEnumerable <FieldTransformation> fieldTransformations, string additionalWhereConditions)
        {
            if (entity == null)
            {
                throw new System.ArgumentNullException(nameof(entity));
            }

            if (query.Instance == null)
            {
                throw new KotoriException("Instance not set. Query cannot be created.");
            }

            var sb = new StringBuilder();

            if (query != null)
            {
                if (!string.IsNullOrWhiteSpace(query.Select))
                {
                    if (query.Count)
                    {
                        sb.Append("select count(1) ");
                    }
                    else
                    {
                        sb.Append("select ");

                        if (query.Top != null &&
                            !query.Count)
                        {
                            sb.Append($"top {query.Top} ");
                        }

                        var select = new KotoriQuery.Translator.DocumentDbSelect(query.Select, fieldTransformations);
                        sb.Append(select.GetTranslatedQuery());
                    }
                }
                else if (query.Count)
                {
                    sb.Append("select count(1)");
                }
                else
                {
                    sb.Append("select ");

                    if (query.Top != null &&
                        !query.Count)
                    {
                        sb.Append($"top {query.Top} ");
                    }

                    sb.Append("*");
                }

                sb.Append(" from c where ");

                if (!string.IsNullOrWhiteSpace(query.Filter))
                {
                    var filter = query.Filter;
                    filter += $" and entity eq '{entity}' and instance eq '{query.Instance}' ";

                    var select = new KotoriQuery.Translator.DocumentDbFilter(filter, fieldTransformations);
                    sb.Append(select.GetTranslatedQuery());
                }
                else
                {
                    var select = new KotoriQuery.Translator.DocumentDbFilter($"entity eq '{entity}' and instance eq '{query.Instance}' ", fieldTransformations);
                    sb.Append(select.GetTranslatedQuery());
                }

                if (!string.IsNullOrWhiteSpace(additionalWhereConditions))
                {
                    var awc    = $" and {additionalWhereConditions.Trim()} ";
                    var select = new KotoriQuery.Translator.DocumentDbFilter(awc, fieldTransformations);
                    sb.Append(select.GetTranslatedQuery());
                }

                if (!string.IsNullOrWhiteSpace(query.OrderBy) &&
                    !query.Count)
                {
                    sb.Append("order by ");

                    var select = new KotoriQuery.Translator.DocumentDbOrderBy(query.OrderBy, fieldTransformations);
                    sb.Append(select.GetTranslatedQuery());
                }
            }

            return(sb.ToString());
        }