Represents Mdx members range.
Inheritance: MdxExpressionBase, IMdxMember, IMdxExpression
Exemple #1
0
        /// <summary>
        /// Appends the specified <see cref="MdxRange"/> and returns the updated current instance of <see cref="MdxSet"/>. 
        /// If there are any <see cref="MdxTuple"/>s in <see cref="Children"/> then specified <see cref="MdxRange"/> 
        /// is appended to the last <see cref="MdxTuple"/>.
        /// </summary>
        /// <param name="range">Specified <see cref="MdxRange"/>.</param>
        /// <returns>Returns the updated current instance of <see cref="MdxSet"/>.</returns>
        public MdxSet With(MdxRange range)
        {
            var lastTuple = _children.OfType<MdxTuple>().LastOrDefault();
            if (lastTuple == null)
            {
                _children.Add(range);

                return this;
            }

            lastTuple.With(range);

            return this;
        }
        /// <summary>
        /// Appends the specified <see cref="MdxRange"/> and returns the updated current instance of <see cref="MdxTuple"/>.
        /// If there are any <see cref="MdxSet"/>s in <see cref="Children"/> then specified <see cref="MdxRange"/>
        /// is appended to the last <see cref="MdxSet"/>.
        /// </summary>
        /// <param name="range">Specified <see cref="MdxRange"/>.</param>
        /// <returns>Returns the updated current instance of <see cref="MdxTuple"/>.</returns>
        public MdxTuple With(MdxRange range)
        {
            var lastSet = _children.OfType <MdxSet>().LastOrDefault();

            if (lastSet == null)
            {
                _children.Add(range);

                return(this);
            }

            lastSet.With(range);

            return(this);
        }
Exemple #3
0
        /// <summary>
        /// Performs range syntactical analysis over collection of <see cref="Token"/> objects using <see cref="IStatedTwoWayEnumerator{T}"/>.
        /// </summary>
        /// <param name="enumerator">Extended enumerator of collection of <see cref="Token"/> objects.</param>
        /// <param name="expression">Output parsed range if syntactic analysis was succeeded.</param>
        /// <returns><value>True</value> if succeeded. <value>False</value> if failed.</returns>
        internal static bool TryParseRange(IStatedTwoWayEnumerator <Token> enumerator, out MdxExpressionBase expression)
        {
            enumerator.SavePosition();
            expression = null;

            var range = new MdxRange();

            MdxExpressionBase fromMember;

            if (!TryParseMember(enumerator, out fromMember))
            {
                enumerator.RestoreLastSavedPosition();
                return(false);
            }

            if (!IsNextTokenValid(enumerator, TokenType.RangeSeparator))
            {
                enumerator.RestoreLastSavedPosition();
                return(false);
            }

            range.From((MdxMember)fromMember);

            MdxExpressionBase toMember;

            if (!TryParseMember(enumerator, out toMember))
            {
                enumerator.RestoreLastSavedPosition();
                return(false);
            }

            range.To((MdxMember)toMember);

            expression = range;

            enumerator.RemoveLastSavedState();
            return(true);
        }
Exemple #4
0
        /// <summary>
        /// Performs range syntactical analysis over collection of <see cref="Token"/> objects using <see cref="IStatedTwoWayEnumerator{T}"/>.
        /// </summary>
        /// <param name="enumerator">Extended enumerator of collection of <see cref="Token"/> objects.</param>
        /// <param name="expression">Output parsed range if syntactic analysis was succeeded.</param>
        /// <returns><value>True</value> if succeeded. <value>False</value> if failed.</returns>
        internal static bool TryParseRange(IStatedTwoWayEnumerator<Token> enumerator, out MdxExpressionBase expression)
        {
            enumerator.SavePosition();
            expression = null;

            var range = new MdxRange();

            MdxExpressionBase fromMember;
            if (!TryParseMember(enumerator, out fromMember))
            {
                enumerator.RestoreLastSavedPosition();
                return false;
            }

            if (!IsNextTokenValid(enumerator, TokenType.RangeSeparator))
            {
                enumerator.RestoreLastSavedPosition();
                return false;
            }

            range.From((MdxMember)fromMember);

            MdxExpressionBase toMember;
            if (!TryParseMember(enumerator, out toMember))
            {
                enumerator.RestoreLastSavedPosition();
                return false;
            }

            range.To((MdxMember) toMember);

            expression = range;

            enumerator.RemoveLastSavedState();
            return true;
        }