繁体   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