Beispiel #1
0
        /// <summary>
        /// Builds the current set of Clauses and returns the full statement as a string.
        /// </summary>
        /// <param name="parameters">A list that will be filled with the statements parameters</param>
        /// <returns></returns>
        public string BuildStatement(List <SQLiteParameter> parameters)
        {
            StringBuilder builder       = new StringBuilder();
            int           paramsCounter = parameters?.Count ?? 0;
            int           counter       = 0;

            // Remove empty expressions
            Clauses.RemoveAll(x => x.Expressions.Count == 0);

            // Loop through each Where clause (wrapped in parenthesis)
            foreach (var clause in Clauses)
            {
                // Open Parent Clause grouping if we have more then 1 SubClause
                int subCounter = 0;
                builder.AppendIf(clause.Expressions.Count > 1 && Clauses.Count > 0, '(');

                // Append each Sub Clause
                foreach (var expression in clause.Expressions)
                {
                    // If we have more sub clauses in this group, append operator
                    builder.AppendIf(++subCounter > 1, (InnerClauseOperator == LogicOperator.Or) ? " OR " : " AND ");
                    builder.Append((parameters == null) ? expression.ToString() : expression.BuildExpression(parameters));
                }

                // Close Parent Clause grouping
                builder.AppendIf(clause.Expressions.Count > 1 && Clauses.Count > 0, ')');

                // If we have more clauses, append operator
                builder.AppendIf(++counter < Clauses.Count, (InnerClauseOperator == LogicOperator.And) ? " OR " : " AND ");
            }

            return(builder.ToString());
        }