Как express SQL запросов в формате yaml? - PullRequest
0 голосов
/ 04 марта 2020

Я экспериментирую с какой-то случайной идеей конечного пользователя, выражающего запрос в формате yaml. Этот файл yaml будет передан в некоторый промежуточный преобразователь для преобразования yaml в оператор SQL.

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

Вопрос : как определить запрос SQL в формате yaml и при этом охватить весь сценарий ios? (Существуют ли какие-либо библиотеки, которые могут делать такие виды магов c)

table:
    schema: test
    name: test_table
  select:
    columns:
      - column: * # retrieve all columns     
  where:
    columns:
      - column: user_id
      - column: customer_id
  limit:
    value: 10
  # groupBy
  # orderBy

1 Ответ

1 голос
/ 05 марта 2020

Ответ на ваш вопрос: вы сериализуете синтаксическое дерево оператора SQL в YAML.

Бегло взгляните на pg_query , чтобы получить представление о том, насколько это сложно. дерево ищет даже простые запросы (этот инструмент использует синтаксический анализатор Postgres 'SQL для генерации синтаксического дерева оператора SQL). Эта сложность требуется для , охватывающего весь сценарий ios.

Теперь вы, конечно, можете попробовать и упростить эту структуру таким образом, чтобы она сохраняла всю информацию, необходимую для восстановления исходного синтаксического дерева. , И это именно то, что делает язык запросов SQL! Ни один пользователь не хочет записывать явную структуру, когда он может использовать четко определенный и хорошо поддерживаемый синтаксис для выражения запроса.

По сути, вы бы создали совершенно новый язык на основе YAML где-нибудь между синтаксическим деревом и исходным языком SQL. Его использование потребует от пользователя знания как YAML, так и семантики вашей структуры. Поэтому, если ваша цель - повысить удобство для пользователя, вряд ли это будет способ достижения этого.

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