簡體   English   中英

向Rails注冊SQLite用戶定義函數

[英]Register SQLite user-defined functions with Rails

我正在開發使用SQLite作為DBMS的Ruby on Rails Web應用程序。 我們的某些報告需要一定程度的高級數學,因此我想使用SQLite C API定義幾個數學函數。

根據《 SQLite權威指南》第二版 (第5.2節):

由於用戶定義的擴展名存儲在程序存儲器中,因此必須逐個連接進行注冊。 也就是說,它們不像大型關系數據庫系統中的存儲過程那樣存儲在數據庫中。 它們存儲在您的程序中。 當程序或腳本啟動時,它負責為打算使用它們的每個連接注冊所需的用戶定義擴展。

如何在Rails中注冊功能? 我假設我需要向我的database.yml文件添加一些咒語。 哪個咒語?

例如,要使用2個參數注冊新函數'regexp',您需要創建具有以下內容的文件config / initializers / sqlite3_regexp.rb:

require 'active_record/connection_adapters/sqlite3_adapter'

class ActiveRecord::ConnectionAdapters::SQLite3Adapter
  def initialize(db, logger, config)
    super

    db.create_function('regexp', 2) do |func, pattern, expression|
       regexp = Regexp.new(pattern.to_s, Regexp::IGNORECASE)
       if expression.to_s.match(regexp)
         func.result = 1
       else
         func.result = 0
       end
    end
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM