Есть ли какая-либо структура для разбора SQL-подобного запроса на его составные части? - PullRequest
0 голосов
/ 03 сентября 2010

Меня интересует написание SQL-подобного синтаксиса запроса для CMS, с которой я работаю.Идея состояла бы в том, что запрос CMS мог бы быть написан в синтаксисе SQL-кода, и я преобразовал бы его для выполнения через CMS API.

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

SELECT WHERE Something = 'something' AND (SomethingElse != 'something' OR AnotherThing == 'something')

По сути, мне нужен какой-то способ правильно сгруппировать предложения WHERE, основанные на их круглых скобках и / / ИЛИ.

Есть ли какая-то структура для этого?Некоторый пример того, когда это было сделано?Я не хочу заново изобретать колесо, и я знаю, что кто-то другой должен был делать это в прошлом.

1 Ответ

1 голос
/ 04 сентября 2010

Ответ - да, есть много фреймворков, которые работают на аналоге SQL и конвертируются в SQL. Linq и различные переводчики Linq являются ярким примером. Точное знание того, с какой CMS вы работаете, и, следовательно, с каким языком и платформой вы разрабатываете, было бы полезно. Некоторые .NET ORM, которые поддерживают запросы кода:

NHibernate - позволяет использовать в строках SQL-язык, называемый HQL, или более основанное на коде построение запросов с использованием списков выражений и Linq.

Linq2SQL - На выходе, но для ваших более простых приложений это должно быть хорошо. Среда генерирует классы DAO, которые отображаются между таблицами и объектами вашего домена, и вы можете использовать закодированные запросы Linq для работы с классами, очень похожими на реальные таблицы.

И, конечно, вы можете использовать хороший старый ADO.NET со строковым SQL-запросом. Это имеет множество недостатков, но если вы хотите, чтобы в вашем коде были запросы, почему бы не сделать их настоящими SQL? Если вы хотите скрыть структуру таблицы, вы можете перевести имена таблиц перед отправкой запросов, поэтому SQL, содержащийся на веб-слое (дрожит), не будет работать с вашей БД.

...