Module: SqliteExt
- Defined in:
- lib/sqlite_ext.rb,
lib/sqlite_ext/version.rb,
lib/sqlite_ext/init_injection.rb,
lib/sqlite_ext.rb
Defined Under Namespace
Modules: InitInjection
Constant Summary collapse
- VERSION =
'0.2.2'
Class Method Summary collapse
-
.enhance_db_session(db) ⇒ Object
Creates all of the registered functions on an instance of ‘SQLite3::Database`.
-
.purge_function_registrations ⇒ Object
Removes all function registrations.
-
.register_create_function(name, arity, *other_args, &block) ⇒ Object
Registers a #create_function call to be invoked on every new instance of ‘SQLite3::Database` immidately after it is instantiated and before it is returned from the call to `.new` and before the invocation of a block that is passed to `.new`.
-
.register_function(name, &block) ⇒ Object
Registers a block of ruby code to be used as a function in SQL executed through subsequent new instances of ‘SQLite3::Database`.
-
.registered_function_names ⇒ Object
Returns an array of the names of all currently registered functions.
Class Method Details
.enhance_db_session(db) ⇒ Object
Creates all of the registered functions on an instance of ‘SQLite3::Database`.
This is normally called automatically for each new instance, but can also be used to add the functions to an instance that was created before the functions were registered.
94 95 96 97 98 |
# File 'lib/sqlite_ext.rb', line 94 def enhance_db_session(db) registered_function_creations.each_value do |(args,block)| db.create_function *args, &block end end |
.purge_function_registrations ⇒ Object
Removes all function registrations. Has no effect on existing instances of ‘SQLite3::Database`.
83 84 85 |
# File 'lib/sqlite_ext.rb', line 83 def purge_function_registrations registered_function_creations.clear end |
.register_create_function(name, arity, *other_args, &block) ⇒ Object
Registers a #create_function call to be invoked on every new instance of ‘SQLite3::Database` immidately after it is instantiated and before it is returned from the call to `.new` and before the invocation of a block that is passed to `.new`.
The parameters passed to ‘#register_create_function` are exactly the same as those that would be passed to `SQLite3::Database#create_function`.
Note that this only affects instances of ‘SQLite3::Database` that are subsequently created and has no effect on previously created instances.
Example:
SqliteExt.register_create_function ‘sqrt’, 1 do |fn,x|
fn.result =
case x
when nil then nil
else Math.sqrt(x)
end
end
SQLite3::Database.new ‘data.db’ do |db|
puts db.execute("SELECT sqrt(25)")[0][0]
end # Output: 5.0
67 68 69 70 71 72 73 |
# File 'lib/sqlite_ext.rb', line 67 def register_create_function(name, arity, *other_args, &block) name = "#{name}" registered_function_creations[name] = [ [name, arity, *other_args], block ] end |
.register_function(name, &block) ⇒ Object
Registers a block of ruby code to be used as a function in SQL executed through subsequent new instances of ‘SQLite3::Database`.
Example:
SqliteExt.register_function(‘sqrt’){ |x| Math.sqrt(x) }
SQLite3::Database.new ‘data.db’ do |db|
puts db.execute("SELECT sqrt(25)")[0][0]
end # Output: 5.0
32 33 34 35 36 |
# File 'lib/sqlite_ext.rb', line 32 def register_function(name, &block) register_create_function name, block.arity do |fn,*args| fn.result = block.call(*args) end end |
.registered_function_names ⇒ Object
Returns an array of the names of all currently registered functions.
77 78 79 |
# File 'lib/sqlite_ext.rb', line 77 def registered_function_names registered_function_creations.keys end |