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

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_registrationsObject

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_namesObject

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