class SQLite3::Driver::Native::Driver

Public Class Methods

api_delegate( name ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 169
def self.api_delegate( name )
  eval "def #{name} (*args) API.sqlite3_#{name}( *args ) ; end"
end
new() click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 15
def initialize
  @callback_data = Hash.new
  @authorizer = Hash.new
  @busy_handler = Hash.new
  @trace = Hash.new
end

Public Instance Methods

bind_text( stmt, index, value, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 88
def bind_text( stmt, index, value, utf16=false )
  API.send( ( utf16 ? :sqlite3_bind_text16 : :sqlite3_bind_text ),
    stmt, index, value.to_s )
end
busy_handler( db, data=nil, &block ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 26
def busy_handler( db, data=nil, &block )
  if block
    cb = API::CallbackData.new
    cb.proc = block
    cb.data = data
    result = API.sqlite3_busy_handler( db, API::Sqlite3_ruby_busy_handler, cb )
    # Reference the Callback object so that 
    # it is not deleted by the GC
    @busy_handler[db] = cb
  else
    # Unreference the callback *after* having removed it
    # from sqlite
    result = API.sqlite3_busy_handler( db, nil, nil )
    @busy_handler.delete(db)
  end

  result
end
column_decltype( stmt, index, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 98
def column_decltype( stmt, index, utf16=false )
  API.send(
    ( utf16 ? :sqlite3_column_decltype16 : :sqlite3_column_decltype ),
    stmt, index )
end
column_name( stmt, index, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 93
def column_name( stmt, index, utf16=false )
  API.send( ( utf16 ? :sqlite3_column_name16 : :sqlite3_column_name ),
    stmt, index )
end
column_text( stmt, index, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 104
def column_text( stmt, index, utf16=false )
  API.send( ( utf16 ? :sqlite3_column_text16 : :sqlite3_column_text ),
    stmt, index )
end
complete?( sql, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 22
def complete?( sql, utf16=false )
  API.send( utf16 ? :sqlite3_complete16 : :sqlite3_complete, sql ) != 0
end
create_function( db, name, args, text, cookie, func, step, final ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 109
def create_function( db, name, args, text, cookie, func, step, final )
  if func || ( step && final )
    cb = API::CallbackData.new
    cb.proc = cb.proc2 = nil
    cb.data = cookie
  end

  if func
    cb.proc = func

    func = API::Sqlite3_ruby_function_step
    step = final = nil
  elsif step && final
    cb.proc = step
    cb.proc2 = final

    func = nil
    step = API::Sqlite3_ruby_function_step
    final = API::Sqlite3_ruby_function_final
  end

  result = API.sqlite3_create_function( db, name, args, text, cb, func, step, final )

  # see comments in busy_handler
  if cb
    @callback_data[ name ] = cb
  else
    @callback_data.delete( name )
  end

  return result
end
errmsg( db, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 79
def errmsg( db, utf16=false )
  API.send( utf16 ? :sqlite3_errmsg16 : :sqlite3_errmsg, db )
end
open( filename, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 75
def open( filename, utf16=false )
  API.send( utf16 ? :sqlite3_open16 : :sqlite3_open, filename )
end
prepare( db, sql, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 83
def prepare( db, sql, utf16=false )
  API.send( ( utf16 ? :sqlite3_prepare16 : :sqlite3_prepare ),
    db, sql )
end
result_error( context, value, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 164
def result_error( context, value, utf16=false )
  API.send( ( utf16 ? :sqlite3_result_error16 : :sqlite3_result_error ),
    context, value )
end
result_text( context, result, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 153
def result_text( context, result, utf16=false )
  method = case utf16
    when nil, false then :sqlite3_result_text
    when :le then :sqlite3_result_text16le
    when :be then :sqlite3_result_text16be
    else :sqlite3_result_text16
  end

  API.send( method, context, result.to_s )
end
set_authorizer( db, data=nil, &block ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 45
def set_authorizer( db, data=nil, &block )
  if block
    cb = API::CallbackData.new
    cb.proc = block
    cb.data = data
    result = API.sqlite3_set_authorizer( db, API::Sqlite3_ruby_authorizer, cb )
    @authorizer[db] = cb # see comments in busy_handler
  else
    result = API.sqlite3_set_authorizer( db, nil, nil )
    @authorizer.delete(db) # see comments in busy_handler
  end

  result
end
trace( db, data=nil, &block ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 60
def trace( db, data=nil, &block )
  if block
    cb = API::CallbackData.new
    cb.proc = block
    cb.data = data
    result = API.sqlite3_trace( db, API::Sqlite3_ruby_trace, cb )
    @trace[db] = cb # see comments in busy_handler
  else
    result = API.sqlite3_trace( db, nil, nil )
    @trace.delete(db) # see comments in busy_handler
  end

  result
end
value_text( value, utf16=false ) click to toggle source
# File lib/sqlite3/driver/native/driver.rb, line 142
def value_text( value, utf16=false )
  method = case utf16
    when nil, false then :sqlite3_value_text
    when :le then :sqlite3_value_text16le
    when :be then :sqlite3_value_text16be
    else :sqlite3_value_text16
  end

  API.send( method, value )
end