Построить SQL-запрос на основе входного параметра - PullRequest
0 голосов
/ 14 марта 2019

Я строю SQL-запрос и создал метод выполнения для его запуска следующим образом:

module Helper
  module Action

    BASE_SQL_QUERY = 'SELECT a,b,c FROM SOME_TABLE'

    SELECT_QUERY = "#{BASE_SQL_QUERY}"

    def self.execute(action:, db_client:, data:)
      db_client.prepare(Helper::Count::SELECT_QUERY).execute
    end
  end
end

Он работает нормально, но у меня будет точно такой же модуль, и только разные будут взапрос.Вместо SELECT a,b,c это будет SELECT count(*), а все остальное будет таким же.

В методе действия аргумент action будет иметь то, что я хочу сделать action == 'read' do SELECT a,b,c и для action == count doSELECT count(*).

То, что я пытаюсь сделать, это иметь только один модуль Action и основанный на значении action build sql.Возможно ли это сделать?Я пробовал несколько способов, таких как создание метода и передача ему действия, и пытался построить SQL, но я получаю ошибку dynamic constant assignment, потому что значение CONSTANT не может быть в методе.

возможно ли построить SQL на основе действиязначение?

1 Ответ

0 голосов
/ 14 марта 2019

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

Помимо больших и страшных полнофункциональных ORM, есть несколько драгоценных камней, которые выполняют только ту работу, которую вы ищете - построение запросов. Вы можете проверить, как они реализованы, и позаимствовать там некоторые идеи (например, https://github.com/izniburak/qruby)

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