Распарсить большой SQL файл
От: paucity  
Дата: 01.07.22 13:17
Оценка:
Есть куча достаточно навороченных файлов с SQL кодом.

Задача "распарсить" эти файлы на список таблиц и полей, используемых в коде.

Есть в природе какой-нибудь тул для подобных задач?
Re: Распарсить большой SQL файл
От: MaximVK Россия  
Дата: 01.07.22 13:24
Оценка: 3 (1)
Здравствуйте, paucity, Вы писали:

P>Есть в природе какой-нибудь тул для подобных задач?

Полно должно быть.
Вот конкретно для SQL Server: https://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.transactsql.scriptdom
Re[2]: Распарсить большой SQL файл
От: paucity  
Дата: 01.07.22 14:02
Оценка:
Здравствуйте, MaximVK, Вы писали:

MVK>Вот конкретно для SQL Server: https://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.transactsql.scriptdom


Как этой штуке можно закинуть файл big.sql с кучей select'ов, join'ов, where и case'ов и получить на выходе файл со списком таблиц и полей используемых в файле big.sql?
Re: Распарсить большой SQL файл
От: scf  
Дата: 02.07.22 05:58
Оценка: +1
Здравствуйте, paucity, Вы писали:

P>Есть куча достаточно навороченных файлов с SQL кодом.

P>Задача "распарсить" эти файлы на список таблиц и полей, используемых в коде.

Решал такую же проблему, написал собственный парсер. Это задача на пару дней, если знакомы с рекурсивными нисходящими парсерами.
Re: Распарсить большой SQL файл
От: C0s Россия  
Дата: 04.07.22 00:14
Оценка: +1
Здравствуйте, paucity, Вы писали:

P>Есть куча достаточно навороченных файлов с SQL кодом.

P>Задача "распарсить" эти файлы на список таблиц и полей, используемых в коде.

Я полагаю, что в общем случае задача решается не полностью.
Могут присутствовать хранимые процедуры, содержащие динамическое построение команд, принимающие имена некоторых таблиц и столбцов как параметры, вызываемые из клиентских контекстов (то есть только из SQL-файлов не будет возможности почерпнуть эту информацию).
В целом, парсить текст, который текстом собирает динамическую команду — то ещё багофичное удовольствие.
Re[2]: Распарсить большой SQL файл
От: paucity  
Дата: 04.07.22 03:27
Оценка: +1
Здравствуйте, C0s, Вы писали:

C0s>В целом, парсить текст, который текстом собирает динамическую команду — то ещё багофичное удовольствие.


Не, там у нас нет ни динамики, ни хранимок.

Только множество select'ов и update'ов с join'ами и where условиями.
Re: Распарсить большой SQL файл
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 04.07.22 15:57
Оценка: 93 (3)
Здравствуйте, paucity, Вы писали:

P>Есть в природе какой-нибудь тул для подобных задач?


Сам не пользовался и не особо заморачивался, но наткнулся вот тут на такую штуку https://www.gudusoft.com/. По описанию выходит, что они анализируют скрипты (или хранимки) и строят граф, который показывает какие данные куда передаются в рамках скрипта.
Там всё, конечно заточено на визуализацию, но (!) якобы можно просто выдернуть (то ли через API, то ли прямо в интерфейсе, просто список таблиц и полей, которые в принципе тут задействованы).

Единственно это платное, но чисто попробовать можно и во Free режиме.
Re[2]: Распарсить большой SQL файл
От: paucity  
Дата: 07.07.22 20:23
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Сам не пользовался и не особо заморачивался, но наткнулся вот тут на такую штуку https://www.gudusoft.com/. По описанию выходит, что они анализируют скрипты (или хранимки) и строят граф, который показывает какие данные куда передаются в рамках скрипта.

МР>Там всё, конечно заточено на визуализацию, но (!) якобы можно просто выдернуть (то ли через API, то ли прямо в интерфейсе, просто список таблиц и полей, которые в принципе тут задействованы).

Спасибо!
Re[3]: Распарсить большой SQL файл
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 08.07.22 07:34
Оценка:
Здравствуйте, paucity, Вы писали:

P>Спасибо!

Если будет возможность, потом поделитесь, как решили задачу (ну и на сколько подходящий сервис из сообщения выше).
Re[4]: Распарсить большой SQL файл
От: paucity  
Дата: 10.07.22 13:12
Оценка: 61 (2)
Здравствуйте, Михаил Романов, Вы писали:

МР>Если будет возможность, потом поделитесь, как решили задачу (ну и на сколько подходящий сервис из сообщения выше).


Работает в общем как описано и показано у них на картинках.

Единственное, пришлось включить в настройках опцию: indirect dataflow. Без этого не выводил в отчет некоторые таблицы, присутствующие в навороченых select/join запросах.

Так же инструмент выводит error log, если в SQL коде находит поля без явного указания к какой таблице они принадлежат.

В общем, я протестировал тул на десяти запросах, которые я до этого распарсил вручную, почти в каждом нашлось 1-2 поля которые я пропустил
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.