КИТА unofficial
Апрель 19, 2024, 09:03:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: [1]   Вниз
  Печать  
Автор Тема: SQL parser  (Прочитано 16319 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zer_owlet
Необычные пользователи
Проректор
*

Карма: +103/-16
Offline Offline

Пол: Мужской
Сообщений: 2399



« : Август 06, 2010, 10:11:05 »

Задача вот какая: есть SQL конструкция, ее нужно преобразовать в удобоваримый массив чтобы было понятно какие какие таблицы юзаются, что за операция проходит и что за значения полей записываются.

Мож кто-то реализовывал уже подобную задачу или видел нечто подобное? Желательно на ПХП.

Смысл этой задачи: логировать все нужные действия (например, запись кеша не нужна, обновление времени доступа тоже неинтересная информация) на сервере с целью переноса их (и только их, а не всей базы) на другой сервер.
Записан



Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили.

Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит..

Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #1 : Август 06, 2010, 11:49:33 »

zer_owlet, это как задача для нас или для помощи вам?
Насколько я понял, это решается с использованием RexExp, только нужно сначала выписать все варианты, то есть между какими словами находится имя таблицы, в каких местах изменяемые столбцы.
Записан
Alder
Администратор
Проректор
*****

Карма: +331/-16
Offline Offline

Пол: Мужской
Награды:
За II место в конкурсе поэзии (весна-2007)2 место в фотоконкурсе \За II место в фотоконкурсе \3 место в фотоконкурсе \2 место в фотоконкурсе \Лучший знаток музыки 2009Лучший знаток музыки 2010
Сообщений: 11224


just for fun


WWW
« Ответ #2 : Август 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.tehuber.com/article.php?story=20081016164856267
Записан

"There are things known and there are things unknown, and in between are the doors..." (Jim Morrison)
zer_owlet
Необычные пользователи
Проректор
*

Карма: +103/-16
Offline 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 Offline

Пол: Мужской
Сообщений: 2399



« Ответ #4 : Август 17, 2010, 03:03:12 »

Свой выбор я таки остановил на http://www.phpclasses.org/package/5007-PHP-Parse-and-compose-SQL-queries-programatically.html
Во время тестов этот класс выдал очень хорошие результаты. Правда, не знаю как быстро он работает и сколько памяти ест. До тестирования этих моментов руки еще не дошли.
Записан



Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили.

Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит..

Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
Alder
Администратор
Проректор
*****

Карма: +331/-16
Offline Offline

Пол: Мужской
Награды:
За II место в конкурсе поэзии (весна-2007)2 место в фотоконкурсе \За II место в фотоконкурсе \3 место в фотоконкурсе \2 место в фотоконкурсе \Лучший знаток музыки 2009Лучший знаток музыки 2010
Сообщений: 11224


just for fun


WWW
« Ответ #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 Offline

Пол: Мужской
Сообщений: 2399



« Ответ #6 : Август 17, 2010, 07:02:48 »

Мне нужно в момент окончания работы скрипта проанализировать все запросы и сохранить лишь важные: изменение настроек, инсталяция модуля, операции с контентом. Для этого нужно определить тип запроса, таблицу, поля. Если операция попадает в список логируемых, таблица и поле не попадают в список игнорируемых, то что-то там бдует выполняться.

Вот как-то так.
Записан



Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили.

Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит..

Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
artri
Cтудент
*

Карма: +1/-0
Offline Offline

Сообщений: 85


artri@jabber.ru


« Ответ #7 : Август 17, 2010, 09:00:56 »

изменение настроек, инсталяция модуля, операции с контентом. Для этого нужно определить тип запроса, таблицу, поля. Если операция попадает в список логируемых, таблица и поле не попадают в список игнорируемых, то что-то там бдует выполняться.

А не проще ли будет необходимые операции вынести в отдельный уровень бизнес логики и уже там сразу что-то выполнять?
Записан

oDesk Certified Java Developer
- Телепатический локатор, - пояснил Петрович, вытирая руки ветошью.- Основной инструмент аналитика, позволяющий напрямую извлекать технические требования из головы заказчика. (с) Трое в серверной, не считая админа. Глава 8. Тестеры и аналитики
Alder
Администратор
Проректор
*****

Карма: +331/-16
Offline Offline

Пол: Мужской
Награды:
За II место в конкурсе поэзии (весна-2007)2 место в фотоконкурсе \За II место в фотоконкурсе \3 место в фотоконкурсе \2 место в фотоконкурсе \Лучший знаток музыки 2009Лучший знаток музыки 2010
Сообщений: 11224


just for fun


WWW
« Ответ #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 Offline

Пол: Мужской
Сообщений: 2399



« Ответ #9 : Август 17, 2010, 10:14:21 »

Дело в том что эта фича является надстройкой над системой и логирует все важные выполняемые запросы, не меняя логику самого сайта. Что-то типа шпионской тулзы, поэтому приходится пристыковываться к системе и фильтровать запросы.

В итоге получится лог-файл со всеми изменениями на одном сервере, которые можно будет перенести на другой сервер, не запоминая и не записывая на бумажку.
Записан



Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили.

Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит..

Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.117 секунд. Запросов: 29.