/// <summary>
        /// Parses the SQL code and loads the SQL statements into the StringCollection <see cref="Results"/>.
        /// </summary>
        /// <returns>The number of statements found.</returns>
        public int Parse()
        {
            int    index = 0;
            string atomicResult;
            string newParserToken;

            _results.Clear();

            while (index < _parser.Length)
            {
                index        = _parser.ParseNext();
                atomicResult = _parser.Result.Trim();

                if (IsSetTermStatement(atomicResult, out newParserToken))
                {
                    _parser.Tokens = new[] { newParserToken };
                    continue;
                }

                if (atomicResult != null && atomicResult.Length > 0)
                {
                    _results.Add(atomicResult);
                }
            }

            return(_results.Count);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Parses the SQL code and loads the SQL statements into the StringCollection <see cref="Results"/>.
        /// </summary>
        /// <returns>The number of statements found.</returns>
        public int Parse()
        {
            _results.Clear();
            foreach (var statement in _parser.Parse())
            {
                string newParserToken;
                if (IsSetTermStatement(statement.CleanText, out newParserToken))
                {
                    _parser.Tokens = new[] { newParserToken };
                    continue;
                }

                if (statement.CleanText != string.Empty)
                {
                    var type = GetStatementType(statement.CleanText);
                    if (type != null)
                    {
                        statement.SetStatementType((SqlStatementType)type);
                        _results.Add(statement);
                        continue;
                    }
                }

                if (statement.Text.Trim() != string.Empty)
                {
                    var unknownStatementEventArgs = new UnknownStatementEventArgs(statement);
                    UnknownStatement?.Invoke(this, unknownStatementEventArgs);
                    if (unknownStatementEventArgs.Handled && !unknownStatementEventArgs.Ignore)
                    {
                        statement.SetStatementType(unknownStatementEventArgs.NewStatementType);
                        _results.Add(statement);
                        continue;
                    }
                    else if (!unknownStatementEventArgs.Handled && unknownStatementEventArgs.Ignore)
                    {
                        continue;
                    }
                    else if (unknownStatementEventArgs.Handled && unknownStatementEventArgs.Ignore)
                    {
                        throw new InvalidOperationException($"Both {nameof(UnknownStatementEventArgs.Handled)} and {nameof(UnknownStatementEventArgs.Ignore)} should not be set.");
                    }
                    else
                    {
                        throw new ArgumentException($"The type of the SQL statement could not be determined. See also {nameof(UnknownStatement)} event.{Environment.NewLine}Statement: {statement.Text}.");
                    }
                }
            }
            return(_results.Count);
        }