Как запустить метод из расширения Sequel как функцию SQL - PullRequest
1 голос
/ 08 мая 2020

Как я могу определить метод Ruby в настраиваемом расширении Sequel, хранящемся в /lib/sequel/extensions/, который будет отвечать за создание функции SQL сразу после загрузки расширения. Я не хочу иметь определение метода в файле миграции базы данных.

Я могу сделать это:

Sequel.migration do
  change do
    create_table :some_table do
      primary_key :id
      String :uuid, null: false, default: Sequel.function(:uuid_generate_v4), unique: true
    end
  end
end

И я знаю, что uuid_generate_v4 хранится в расширении uuid-ossp , поэтому все, что мне нужно сделать, чтобы вызвать эту функцию, - это добавить расширение в мою кодовую базу.

К сожалению, я не знаю как. Каким будет самый чистый способ определить такую ​​функцию и сделать ее вызываемой без ручного вызова метода Ruby сначала?

Мой файл расширения:

module Sequel
  module Extensions
    module StringGenerator
      def some_ruby_method
        DB.create_function('sql_function_name', 'SELECT 1', :returns=>:integer)
      end
    end

    Sequel::Database.register_extension(
      :string_generator,
      Sequel::Extensions::StringGenerator
    )
  end
end

sql_function недоступен из код без вызова some_ruby_method вручную.

Как uuid_generate_v4 исполняется сразу после добавления в качестве расширения и что мне нужно сделать для того же результата?

1 Ответ

3 голосов
/ 08 мая 2020

Думаю, вы можете спутать расширения Sequel и расширения PostgreSQL. uuid-ossp - это расширение PostgreSQL.

Наличие расширения Sequel для создания функции базы данных при загрузке, вероятно, плохая идея, но это возможно.

Sequel::Database.register_extension может принимать блок вместо модуля, и этот блок вызывается с экземпляром Sequel::Database, загружающим расширение.

...