|
|
|
Приведение SQL-запроса к каноническому виду
|
|||
|---|---|---|---|
|
#18+
Возникла проблема: необходимо сравнить 2 SQL-запроса, написанные разными людьми, причем один из них (образец) находится в каноническом виде. Для этого нужно привести проверяемый запрос к каноническому виду. Как разобрать на лексемы и как построить структуру - это понятно, но как найти алгоритм для преобразования запроса? Может кто сталкивался с подобной проблемой? Для примера привожу 2 эквивалентных по результатам запроса: Код: plaintext 1. 2. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 20:42 |
|
||
|
Приведение SQL-запроса к каноническому виду
|
|||
|---|---|---|---|
|
#18+
OlgerdaВозникла проблема: необходимо сравнить 2 SQL-запроса, написанные разными людьми, причем один из них (образец) находится в каноническом виде. Для этого нужно привести проверяемый запрос к каноническому виду. Как разобрать на лексемы и как построить структуру - это понятно, но как найти алгоритм для преобразования запроса? Может кто сталкивался с подобной проблемой? Для примера привожу 2 эквивалентных по результатам запроса: Код: plaintext 1. 2. Код: plaintext 1. 2. 3. Самое простое решение об эквивалентности запросов заключается в их выполнении на нескольких разных тестовых комбинациях. Если получаемые результаты равны, то с некоторой долей вероятности можно утверждать их тождество. А привести все возможные варианты запросов к одному виду, практически из области фантастики. Не в смысле, что это невозможно в принципе, но, IMHO, это будет очень дорогой задачей. Разумеется, если решать ее в общем виде, а не рассматривать ограниченное число вариантов, не содержащих "шумов"(когда запрос будет содержать лишние слияния, никак не влияющие на получаемый результат). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 23:51 |
|
||
|
Приведение SQL-запроса к каноническому виду
|
|||
|---|---|---|---|
|
#18+
Формально, это разные, не приводимые запросы. Одинаковые результаты в этих запросах получились либо случайно, либо в силу наличия ограничений целостности, которые обеспечили создание удачного набора данных. В общем случае преобразованием выражений (для SQL обычно с целью ускорения кода) занимается каждый оптимизирующий компилятор. Так что ответ ищи в теории компиляторов. Для Оракла в первом приближении можно сравнивать планы выполнения запросов. Если план одного запроса может применяться для выполнения другого запроса, то запросы частично совпадают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 03:28 |
|
||
|
Приведение SQL-запроса к каноническому виду
|
|||
|---|---|---|---|
|
#18+
Olgerda пишет: > Возникла проблема: необходимо сравнить 2 SQL-запроса, написанные разными > людьми, причем один из них (образец) находится в каноническом виде. Для > этого нужно привести проверяемый запрос к каноническому виду. > Как разобрать на лексемы и как построить структуру - это понятно, но как > найти алгоритм для преобразования запроса? Вообще, тема хорошая такая, на дисер потянет ! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 18:44 |
|
||
|
Приведение SQL-запроса к каноническому виду
|
|||
|---|---|---|---|
|
#18+
Olgerda wrote: > Для примера привожу 2 эквивалентных по результатам запроса: кстате, они вроде неэквивалтенты... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 18:56 |
|
||
|
Приведение SQL-запроса к каноническому виду
|
|||
|---|---|---|---|
|
#18+
locky Olgerda wrote: > Для примера привожу 2 эквивалентных по результатам запроса: кстате, они вроде неэквивалтенты...Угу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 00:50 |
|
||
|
Приведение SQL-запроса к каноническому виду
|
|||
|---|---|---|---|
|
#18+
Чисто интуитивно, преобразоваваь и приводить к некоторому каноническму виду можно только запросы с INNER JOIN и NOT NULL. Дальше остановиться на дизъюнктивной (например) форме запроса. Применить кванотры существования для IN и EXSIST. Потом помудрить с утсранением пересекабщихся условий. И бегом на Нобеля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 01:08 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35134357&tid=1544033]: |
0ms |
get settings: |
12ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 529ms |

| 0 / 0 |
