SQL parser
zer_owlet:
Задача вот какая: есть SQL конструкция, ее нужно преобразовать в удобоваримый массив чтобы было понятно какие какие таблицы юзаются, что за операция проходит и что за значения полей записываются.
Мож кто-то реализовывал уже подобную задачу или видел нечто подобное? Желательно на ПХП.
Смысл этой задачи: логировать все нужные действия (например, запись кеша не нужна, обновление времени доступа тоже неинтересная информация) на сервере с целью переноса их (и только их, а не всей базы) на другой сервер.
naxellar:
zer_owlet, это как задача для нас или для помощи вам?
Насколько я понял, это решается с использованием RexExp, только нужно сначала выписать все варианты, то есть между какими словами находится имя таблицы, в каких местах изменяемые столбцы.
Alder:
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
zer_owlet:
Цитата: naxellar от Август 06, 2010, 11:49:33
zer_owlet, это как задача для нас или для помощи вам?
Насколько я понял, это решается с использованием RexExp, только нужно сначала выписать все варианты, то есть между какими словами находится имя таблицы, в каких местах изменяемые столбцы.
Эта задача из типа "мож кто уже делал и может подсказать оптимальное решение?" :)
Цитата: 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.tehuber.com/article.php?story=20081016164856267
Ага, видел эти классы. Второй практически ничего не дает, т.к. выдает результаты в виде:
Код:
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:
Свой выбор я таки остановил на http://www.phpclasses.org/package/5007-PHP-Parse-and-compose-SQL-queries-programatically.html
Во время тестов этот класс выдал очень хорошие результаты. Правда, не знаю как быстро он работает и сколько памяти ест. До тестирования этих моментов руки еще не дошли.
Навигация