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

  • Автор темы Автор темы rsv
  • Дата начала Дата начала

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')
т.е. если название поля, которое совпадает с ключевым словом, указать в квадратных скобках, тогда все нормально.

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

-~{}~ 21.07.04 10:51:

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

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

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

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

-~{}~ 21.07.04 14:19:

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

-~{}~ 21.07.04 14:20:

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

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

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

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

это идиотизм

-~{}~ 21.07.04 11:30:

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

кто бы они не были, ко мне они не прислушаются ;)
 
Ну count заменить несложно, нужно проверить, чтобы непосредственно после него скобок небыло, с другими функциями тоже не проблема, а с ключевыми словами, которые не функции - тебе виднее, у тебя они есть
 
Берем твой запрос.
Пишем в этом форуме в [ 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-парсер за основу
 
Сверху