// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.

namespace System.Data.Entity.Core.Common.EntitySql
{
    // <summary>
    // Represents eSQL compilation options.
    // </summary>
    internal sealed class ParserOptions
    {
        internal enum CompilationMode
        {
            // <summary>
            // Normal mode. Compiles eSQL command without restrictions.
            // Name resolution is case-insensitive (eSQL default).
            // </summary>
            NormalMode,

            // <summary>
            // View generation mode: optimizes compilation process to ignore uncessary eSQL constructs:
            // - GROUP BY, HAVING and ORDER BY clauses are ignored.
            // - WITH RELATIONSHIP clause is allowed in type constructors.
            // - Name resolution is case-sensitive.
            // </summary>
            RestrictedViewGenerationMode,

            // <summary>
            // Same as CompilationMode.Normal plus WITH RELATIONSHIP clause is allowed in type constructors.
            // </summary>
            UserViewGenerationMode
        }

        // <summary>
        // Sets/Gets eSQL parser compilation mode.
        // </summary>
        internal CompilationMode ParserCompilationMode;

        internal StringComparer NameComparer
        {
            get { return NameComparisonCaseInsensitive ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal; }
        }

        internal bool NameComparisonCaseInsensitive
        {
            get { return ParserCompilationMode == CompilationMode.RestrictedViewGenerationMode ? false : true; }
        }
    }
}
