Maryam
Maryam

Reputation: 53

How to increase SQL parser speed that using TSqlParser?

In my code, I have several SQL scripts that I want to parse using TSql130Parser in order to refactor them. But this process takes a long time - is there a way to increase the speed of this?

Also I have another question that TSql130Parser can get bulk as parameter? If it is possible, how can I do it?

This is my method that I use for parsing procedures by passing content of procedure as query in method parameter:

public string ParseProcedureQuery(string query, out string procedureName)
{
    procedureName= "";

    try
    {
        TSql130Parser parser = new TSql130Parser(true);

        IList<ParseError> errors;

        var fragments = parser.Parse(new System.IO.StringReader(query), out errors);
        var proc = fragments.ScriptTokenStream.Where(x => x.TokenType == TSqlTokenType.Proc || x.TokenType == TSqlTokenType.Procedure).Select(x => x.Text).FirstOrDefault();

        if (proc == null) 
            return string.Empty;

        var index = fragments.ScriptTokenStream.FindIndex(c => c.Text == proc);
        var name = fragments.ScriptTokenStream
                            .Select((value, ind) => new { value, index = ind })
                            .Where(pair => pair.index > index && pair.value.TokenType != TSqlTokenType.WhiteSpace)
                            .Select((value, ind) => new { value.value.Text, index = ind }).Where(y => y.index < 3).Select(p => p.Text);

        procedureName = string.Join(String.Empty, name);

        var processedQuery = string.Join(" ", fragments.ScriptTokenStream
                                   .Where(x => x.TokenType != TSqlTokenType.MultilineComment)
                                   .Where(x => x.TokenType != TSqlTokenType.SingleLineComment)
                                   .Where(x => x.TokenType != TSqlTokenType.WhiteSpace)
                                   .Select(x => x.Text));
        return processedQuery;
    }
    catch
    { }
}

Upvotes: 0

Views: 177

Answers (0)

Related Questions