zer_owlet
Необычные пользователи
Проректор
Карма: +103/-16
Offline
Пол:
Сообщений: 2399
|
|
« : Август 06, 2010, 10:11:05 » |
|
Задача вот какая: есть SQL конструкция, ее нужно преобразовать в удобоваримый массив чтобы было понятно какие какие таблицы юзаются, что за операция проходит и что за значения полей записываются.
Мож кто-то реализовывал уже подобную задачу или видел нечто подобное? Желательно на ПХП.
Смысл этой задачи: логировать все нужные действия (например, запись кеша не нужна, обновление времени доступа тоже неинтересная информация) на сервере с целью переноса их (и только их, а не всей базы) на другой сервер.
|
|
|
Записан
|
Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили. Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит.. Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
|
|
|
naxellar
Главный флудер
Проректор
Карма: +101/-52
Offline
Пол:
Сообщений: 5015
Главный флудер
|
|
« Ответ #1 : Август 06, 2010, 11:49:33 » |
|
zer_owlet, это как задача для нас или для помощи вам? Насколько я понял, это решается с использованием RexExp, только нужно сначала выписать все варианты, то есть между какими словами находится имя таблицы, в каких местах изменяемые столбцы.
|
|
|
Записан
|
|
|
|
|
zer_owlet
Необычные пользователи
Проректор
Карма: +103/-16
Offline
Пол:
Сообщений: 2399
|
|
« Ответ #3 : Август 08, 2010, 10:31:16 » |
|
zer_owlet, это как задача для нас или для помощи вам? Насколько я понял, это решается с использованием RexExp, только нужно сначала выписать все варианты, то есть между какими словами находится имя таблицы, в каких местах изменяемые столбцы.
Эта задача из типа "мож кто уже делал и может подсказать оптимальное решение?" Ага, видел эти классы. Второй практически ничего не дает, т.к. выдает результаты в виде: SqlParser Object ( [handle] => [query:SqlParser:private] => Array ( [select] => SELECT DISTINCT b.* [from] => FROM blocks b LEFT JOIN blocks_roles r ON b.module = r.module AND b.delta = r.delta [where] => WHERE b.theme = 'garland' AND b.status = 1 AND (r.rid IN (2) OR r.rid IS NULL) [order] => ORDER BY b.region, b.weight, b.module )
) Первый выдает результаты чуть лучше, но это дерево потом хрен прочитаешь ))
|
|
|
Записан
|
Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили. Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит.. Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
|
|
|
zer_owlet
Необычные пользователи
Проректор
Карма: +103/-16
Offline
Пол:
Сообщений: 2399
|
|
« Ответ #4 : Август 17, 2010, 03:03:12 » |
|
Свой выбор я таки остановил на http://www.phpclasses.org/package/5007-PHP-Parse-and-compose-SQL-queries-programatically.htmlВо время тестов этот класс выдал очень хорошие результаты. Правда, не знаю как быстро он работает и сколько памяти ест. До тестирования этих моментов руки еще не дошли.
|
|
|
Записан
|
Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили. Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит.. Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
|
|
|
Alder
|
|
« Ответ #5 : Август 17, 2010, 04:20:36 » |
|
zer_owlet, а его планируется запускать постоянно при каждой операции с БД или только на время тестирования наиболее требовательных к производительности моментов?
|
|
|
Записан
|
"There are things known and there are things unknown, and in between are the doors..." (Jim Morrison)
|
|
|
zer_owlet
Необычные пользователи
Проректор
Карма: +103/-16
Offline
Пол:
Сообщений: 2399
|
|
« Ответ #6 : Август 17, 2010, 07:02:48 » |
|
Мне нужно в момент окончания работы скрипта проанализировать все запросы и сохранить лишь важные: изменение настроек, инсталяция модуля, операции с контентом. Для этого нужно определить тип запроса, таблицу, поля. Если операция попадает в список логируемых, таблица и поле не попадают в список игнорируемых, то что-то там бдует выполняться.
Вот как-то так.
|
|
|
Записан
|
Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили. Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит.. Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
|
|
|
artri
Cтудент
Карма: +1/-0
Offline
Сообщений: 85
artri@jabber.ru
|
|
« Ответ #7 : Август 17, 2010, 09:00:56 » |
|
изменение настроек, инсталяция модуля, операции с контентом. Для этого нужно определить тип запроса, таблицу, поля. Если операция попадает в список логируемых, таблица и поле не попадают в список игнорируемых, то что-то там бдует выполняться.
А не проще ли будет необходимые операции вынести в отдельный уровень бизнес логики и уже там сразу что-то выполнять?
|
|
|
Записан
|
oDesk Certified Java Developer - Телепатический локатор, - пояснил Петрович, вытирая руки ветошью.- Основной инструмент аналитика, позволяющий напрямую извлекать технические требования из головы заказчика. (с) Трое в серверной, не считая админа. Глава 8. Тестеры и аналитики
|
|
|
Alder
|
|
« Ответ #8 : Август 17, 2010, 09:09:28 » |
|
artri, тоже хотел задать вопрос этот.
|
|
|
Записан
|
"There are things known and there are things unknown, and in between are the doors..." (Jim Morrison)
|
|
|
zer_owlet
Необычные пользователи
Проректор
Карма: +103/-16
Offline
Пол:
Сообщений: 2399
|
|
« Ответ #9 : Август 17, 2010, 10:14:21 » |
|
Дело в том что эта фича является надстройкой над системой и логирует все важные выполняемые запросы, не меняя логику самого сайта. Что-то типа шпионской тулзы, поэтому приходится пристыковываться к системе и фильтровать запросы.
В итоге получится лог-файл со всеми изменениями на одном сервере, которые можно будет перенести на другой сервер, не запоминая и не записывая на бумажку.
|
|
|
Записан
|
Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили. Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит.. Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
|
|
|
|