Хитромудрое регулярное выражение

rsv

Новичок
Хитромудрое регулярное выражение

Есть строка. Это SQL запрос
Этот запрос к БД MYSQL.
Есть другая БД - MSSQL.
Ее структура полностью совпадает с БД в MYSQL.
Проблема: некоторые запросы к MSSQL не проходят, потому, что в некоторых таблицах БД есть поля, названия которых, совпадают с ключевыми словами в MSSQL.
Пример запроса который не проходит:
UPDATE nuke_counter SET count=count+1 WHERE (type='total' AND var='hits') OR (var='Netscape' AND type='browser') OR (var='Windows' AND type='os')

count это ключевое слово в MSSQL

Этот же запрос проходит в таком виде:
UPDATE nuke_counter SET [count]=[count]+1 WHERE (type='total' AND var='hits') OR (var='Netscape' AND type='browser') OR (var='Windows' AND type='os')
т.е. если название поля, которое совпадает с ключевым словом, указать в квадратных скобках, тогда все нормально.

Вопрос: реально ли написать регулярное выражение для корректировки запросов? Список ключевых слов имеется.
Сначала думал, что это элементарно, а потом подумал и почему то решил, что это не так уж и просто.
 

neko

tеam neko
можно проще сделать
все поля для mysql запростов просто взять в `` и заменять эти апострофы на скобки

-~{}~ 21.07.04 10:51:

каким боком тут str_replace поможет, это загадка
 

rsv

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

neko

tеam neko
чето я тебя непонимаю
есть sql запрос который корректно работает с mysql
ты в нем все поля квотишь вот этим символом, незнаю как он нзаывается правильно, тем который на букве Ё.

потом строишь по нему автоматом mssql запрос вместо символа ставя скобки
даже проще будет наоборот делать

но вообще, если бы я это делал, наверное просто собирал бы запросы из кусочков вставля вокруг полей эти скобки.
 

rsv

Новичок
sql запросы пишу не я
я использую готовую систему которая работает с MYSQL
мне нужно сделать так, что бы эта система могла работать с MSSQL

если я заменю во всех sql запросах названия полей на такие же но в кавычках, крыжиках или еще в чем нибудь, то мне будет легко парсить запросы что бы их переделывать для MSSQL
но!
эта готовая система периодически обновляется, и в каждой новой ее версии все sql запросы, которые я поменял, будут опять в первозданном виде, мне что же их опять все править каждый раз?

-~{}~ 21.07.04 14:19:

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

-~{}~ 21.07.04 14:20:

но только программно :)
 

neko

tеam neko
это тебе мало поможет
если запросы пишешь не ты, то нет никакой гарантии того, что ты автоматом не позаменяешь лишнего

единственное нормальное решение строить сразу минимально совместимые запросы.

например использовать какую-нибудь переменную для отделения полей и переопределять ее в зависимости от ситуации.
 

rsv

Новичок
вот я поэтому и спрашиваю
список зарезервированых слов есть
синтаксис SQL тоже вроде бы известен
по идее регулярное выражение написать можно
в конце концов mysql тоже есть функция count и поле с таким именем создавать можно и в запросе он на него не ругается и как то функцию от поля отличает :)
вопрос в том насколько это все сложно
 

neko

tеam neko
да ты пойми что тебе придется для сделать sql синтаксический анализ

чтоб опередлить где там поле count, а где данные count а где еще что.

это идиотизм

-~{}~ 21.07.04 11:30:

кто там такой недоступный делает эти запросы что никакой возможности эту банальность добавить нет
 

rsv

Новичок
про анализ я как раз то и подумал
а вопрос здесь задал, на тот случай, что может я подумал не правильно :)

кто бы они не были, ко мне они не прислушаются ;)
 

gray07

Новичок
Ну count заменить несложно, нужно проверить, чтобы непосредственно после него скобок небыло, с другими функциями тоже не проблема, а с ключевыми словами, которые не функции - тебе виднее, у тебя они есть
 

fixxxer

К.О.
Партнер клуба
Берем твой запрос.
Пишем в этом форуме в [ sql ] тэгах.
[sql]UPDATE nuke_counter SET count=count+1 WHERE (type='total' AND var='hits') OR (var='Netscape' AND type='browser') OR (var='Windows' AND type='os')[/sql]
Вспомнив, что этот код взят из phpMyAdmin, берем оттуда sql-парсер за основу
 
Сверху