Реляции...
Реляции...
Как-то писал об том в каком виде у меня производственные базы - в базах нет реляций.
И что было бы хорошо как-нибудь вычислить какими они предполагаются.
Ну а днями мне это просто потребовалось - тестовая машинка с СИ наконец-то закрывается файрволом
и надо смотреть какие данные можно/нужно/необходимо тащить на нее для тестирования.
Без реляций - непонятно что выбирать для загрузки, а целую базу машинка не потянет.
В общем за пару дней слепил следующее:
- за исходные данные взял результат поиска по тексту ключевого слова "WHERЕ", как часть SQL-statement
- записи об вхождениях "WHERE" по полученному списку нарезаются на блоки - от -3 строки до +10 от отметки
- внутри блока ищется подходящее "FROM ... WHERE" и режется на определения "таблиц"
- часть после "WHERЕ" проверяется на наличие "реляции" - Таблица1.Поле1=Таблица2.Поле2
- переподставляются синонимы, все сортируется, дистинктится и дампится списком
Много чего не делается:
- не устанавливается конкретный тип реляции left-, right- join.
- не парсятся джойны если они есть (ну надо писать еще один распознаватель)
В остальном - приемлемо - ошибок много - прихватил местами лишнего и кое-что пропустиl, но из того что есть... а результат экстрагирован с двух дисков общим объемом 750 Гб... нетрудно выделить нужную мне часть - там сего 20 Кб и каждая связка в отдельной строке.
Кому будет надо - стучитесь.
Предупреждаю сразу - код - очень грязный, сделан наживую только-только чтобы решить задачу и поддерживать его Я не планирую.