SQL parser

(1/2) > >>

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
Во время тестов этот класс выдал очень хорошие результаты. Правда, не знаю как быстро он работает и сколько памяти ест. До тестирования этих моментов руки еще не дошли.

Навигация

[0] Главная страница сообщений

[#] Следующая страница