[英]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.