Изменить имена таблиц / столбцов SQL в запросе с помощью c # - PullRequest
0 голосов
/ 06 июня 2011

Я хочу предоставить веб-API, аналогичный FQL-интерфейсу Facebook. https://developers.facebook.com/docs/reference/fql/

Моя идея состоит в том, чтобы создать сопоставление реальных таблиц SQL с поддельными, с приятными понятными именами и т. Д., А затем применить условие к отправленному запросу, чтобы ограничить доступ там, где это необходимо.

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

Мой план состоит в том, чтобы «прочитать» опубликованный запрос, интерпретировать его в виде своего рода графа объектов, а затем воссоздать запрос, поменяв местами соответствующие имена и добавив мои обязательные условия для рассматриваемой таблицы.

У кого-нибудь есть идеи по поводу лучшего способа сделать это ИЛИ несколько советов по созданию графа объектов запроса? Я пробовал традиционные методы лексера / парсера, но я изо всех сил стараюсь сделать код явно читабельным. Есть ли что-то, что я мог бы использовать заранее?

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Возможно, вы захотите создать собственное абстрактное синтаксическое дерево, которое вы используете для интерпретации отправленного вам запроса.Если вы можете построить полное синтаксическое дерево с этим (посмотрите, что деревья выражений могут сделать для LINQ), вы должны иметь возможность построить что-то, что преобразует ваш AST в FQL, который вам нужен.

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

0 голосов
/ 06 июня 2011

Вы можете создавать дружественные виды каждой таблицы:

create view dbo.tableAView as
select id as UserIdentifier,
       fname as UserFirstName,
...
...
from tableA

Информация о просмотрах: http://msdn.microsoft.com/en-us/library/aa214068(v=sql.80).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...