/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the athena-2017-05-18.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.Athena.Model
{
    /// 
    /// Container for the parameters to the CreateNamedQuery operation.
    /// Creates a named query in the specified workgroup. Requires that you have access to
    /// the workgroup.
    /// 
    ///  
    /// 
    /// For code samples using the Amazon Web Services SDK for Java, see Examples
    /// and Code Samples in the Amazon Athena User Guide.
    /// 
    /// 
    public partial class CreateNamedQueryRequest : AmazonAthenaRequest
    {
        private string _clientRequestToken;
        private string _database;
        private string _description;
        private string _name;
        private string _queryString;
        private string _workGroup;
        /// 
        /// Gets and sets the property ClientRequestToken. 
        /// 
        /// A unique case-sensitive string used to ensure the request to create the query is idempotent
        /// (executes only once). If another CreateNamedQuery request is received,
        /// the same response is returned and another query is not created. If a parameter has
        /// changed, for example, the QueryString, an error is returned.
        /// 
        ///   
        /// 
        /// This token is listed as not required because Amazon Web Services SDKs (for example
        /// the Amazon Web Services SDK for Java) auto-generate the token for users. If you are
        /// not using the Amazon Web Services SDK or the Amazon Web Services CLI, you must provide
        /// this token or the action will fail.
        /// 
        ///  
        /// 
        [AWSProperty(Min=32, Max=128)]
        public string ClientRequestToken
        {
            get { return this._clientRequestToken; }
            set { this._clientRequestToken = value; }
        }
        // Check to see if ClientRequestToken property is set
        internal bool IsSetClientRequestToken()
        {
            return this._clientRequestToken != null;
        }
        /// 
        /// Gets and sets the property Database. 
        /// 
        /// The database to which the query belongs.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=255)]
        public string Database
        {
            get { return this._database; }
            set { this._database = value; }
        }
        // Check to see if Database property is set
        internal bool IsSetDatabase()
        {
            return this._database != null;
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// The query description.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1024)]
        public string Description
        {
            get { return this._description; }
            set { this._description = value; }
        }
        // Check to see if Description property is set
        internal bool IsSetDescription()
        {
            return this._description != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// The query name.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=128)]
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }
        // Check to see if Name property is set
        internal bool IsSetName()
        {
            return this._name != null;
        }
        /// 
        /// Gets and sets the property QueryString. 
        /// 
        /// The contents of the query with all query statements.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=262144)]
        public string QueryString
        {
            get { return this._queryString; }
            set { this._queryString = value; }
        }
        // Check to see if QueryString property is set
        internal bool IsSetQueryString()
        {
            return this._queryString != null;
        }
        /// 
        /// Gets and sets the property WorkGroup. 
        /// 
        /// The name of the workgroup in which the named query is being created.
        /// 
        /// 
        public string WorkGroup
        {
            get { return this._workGroup; }
            set { this._workGroup = value; }
        }
        // Check to see if WorkGroup property is set
        internal bool IsSetWorkGroup()
        {
            return this._workGroup != null;
        }
    }
}