Как увеличить скорость парсера SQL по сравнению с использованием TSqlParser?

В моем коде есть несколько сценариев SQL, которые я хочу разобрать, чтобы провести их рефакторинг. Но этот процесс занимает много времени - есть ли способ увеличить скорость этого?

Также у меня есть еще один вопрос, которыйTSql130Parserможет получить объем в качестве параметра? Если это возможно, как я могу это сделать?

Это мой метод, который я использую для разбора процедур, передавая содержимое процедуры какqueryв параметре метода:

      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
    { }
}

0 ответов

Другие вопросы по тегам