Название: SQL parser Отправлено: zer_owlet от Август 06, 2010, 10:11:05 Задача вот какая: есть SQL конструкция, ее нужно преобразовать в удобоваримый массив чтобы было понятно какие какие таблицы юзаются, что за операция проходит и что за значения полей записываются.
Мож кто-то реализовывал уже подобную задачу или видел нечто подобное? Желательно на ПХП. Смысл этой задачи: логировать все нужные действия (например, запись кеша не нужна, обновление времени доступа тоже неинтересная информация) на сервере с целью переноса их (и только их, а не всей базы) на другой сервер. Название: Re: SQL parser Отправлено: naxellar от Август 06, 2010, 11:49:33 zer_owlet, это как задача для нас или для помощи вам?
Насколько я понял, это решается с использованием RexExp, только нужно сначала выписать все варианты, то есть между какими словами находится имя таблицы, в каких местах изменяемые столбцы. Название: Re: SQL parser Отправлено: Alder от Август 07, 2010, 03:58:43 zer_owlet,
http://www.phpclasses.org/package/4916-PHP-Build-a-tree-to-represent-an-SQL-query.html (http://www.phpclasses.org/package/4916-PHP-Build-a-tree-to-represent-an-SQL-query.html) http://www.tehuber.com/article.php?story=20081016164856267 (http://www.tehuber.com/article.php?story=20081016164856267) Название: Re: SQL parser Отправлено: zer_owlet от Август 08, 2010, 10:31:16 zer_owlet, это как задача для нас или для помощи вам? Насколько я понял, это решается с использованием RexExp, только нужно сначала выписать все варианты, то есть между какими словами находится имя таблицы, в каких местах изменяемые столбцы. Эта задача из типа "мож кто уже делал и может подсказать оптимальное решение?" :) zer_owlet, http://www.phpclasses.org/package/4916-PHP-Build-a-tree-to-represent-an-SQL-query.html (http://www.phpclasses.org/package/4916-PHP-Build-a-tree-to-represent-an-SQL-query.html) http://www.tehuber.com/article.php?story=20081016164856267 (http://www.tehuber.com/article.php?story=20081016164856267) Ага, видел эти классы. Второй практически ничего не дает, т.к. выдает результаты в виде: Код: SqlParser Object Первый выдает результаты чуть лучше, но это дерево потом хрен прочитаешь )) Название: Re: SQL parser Отправлено: zer_owlet от Август 17, 2010, 03:03:12 Свой выбор я таки остановил на http://www.phpclasses.org/package/5007-PHP-Parse-and-compose-SQL-queries-programatically.html
Во время тестов этот класс выдал очень хорошие результаты. Правда, не знаю как быстро он работает и сколько памяти ест. До тестирования этих моментов руки еще не дошли. Название: Re: SQL parser Отправлено: Alder от Август 17, 2010, 04:20:36 zer_owlet, а его планируется запускать постоянно при каждой операции с БД или только на время тестирования наиболее требовательных к производительности моментов?
Название: Re: SQL parser Отправлено: zer_owlet от Август 17, 2010, 07:02:48 Мне нужно в момент окончания работы скрипта проанализировать все запросы и сохранить лишь важные: изменение настроек, инсталяция модуля, операции с контентом. Для этого нужно определить тип запроса, таблицу, поля. Если операция попадает в список логируемых, таблица и поле не попадают в список игнорируемых, то что-то там бдует выполняться.
Вот как-то так. Название: Re: SQL parser Отправлено: artri от Август 17, 2010, 09:00:56 изменение настроек, инсталяция модуля, операции с контентом. Для этого нужно определить тип запроса, таблицу, поля. Если операция попадает в список логируемых, таблица и поле не попадают в список игнорируемых, то что-то там бдует выполняться. А не проще ли будет необходимые операции вынести в отдельный уровень бизнес логики и уже там сразу что-то выполнять? Название: Re: SQL parser Отправлено: Alder от Август 17, 2010, 09:09:28 artri, тоже хотел задать вопрос этот.
Название: Re: SQL parser Отправлено: zer_owlet от Август 17, 2010, 10:14:21 Дело в том что эта фича является надстройкой над системой и логирует все важные выполняемые запросы, не меняя логику самого сайта. Что-то типа шпионской тулзы, поэтому приходится пристыковываться к системе и фильтровать запросы.
В итоге получится лог-файл со всеми изменениями на одном сервере, которые можно будет перенести на другой сервер, не запоминая и не записывая на бумажку. |