internal Subquery(Query parent, SubqueryTemplate template, ISubqueryMapping mapping)
        {
            this.ParentQuery = parent;
            this.Template    = template;
            this.Mapping     = mapping;

            // However, they might be overridden by the subquery template, so use the indexer here.
            foreach (QueryInput parameter in template.Inputs.Values)
            {
                this.Inputs[parameter.Name] = parameter.Clone();
            }
        }
        internal Subquery(Query parent, SubqueryTemplate template, ISubqueryMapping mapping)
        {
            this.ParentQuery = parent;
            this.Template    = template;
            this.Mapping     = mapping;

            // Take persistence parameters from the subquery template only, but...
            foreach (PersistenceParameter parameter in template.PersistenceParameters.Values)
            {
                this.PersistenceParameters.Add(parameter.Name, parameter.Clone());
            }

            /*
             * // Query parameters are inherited from the root query.
             * foreach (QueryParameter parameter in template.Template.Parameters.Values)
             *      this.Parameters.Add(parameter.Name, parameter.Clone());
             */

            // However, they might be overridden by the subquery template, so use the indexer here.
            foreach (QueryParameter parameter in template.Parameters.Values)
            {
                this.Parameters[parameter.Name] = parameter.Clone();
            }
        }