Class: SQLite3::Driver::Native::Driver

Inherits:
Object
  • Object
show all
Defined in:
lib/sqlite3/driver/native/driver.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDriver

Returns a new instance of Driver.



15
16
17
18
19
20
# 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

Class Method Details

.api_delegate(name) ⇒ Object



169
170
171
# File 'lib/sqlite3/driver/native/driver.rb', line 169

def self.api_delegate( name )
  eval "def #{name} (*args) API.sqlite3_#{name}( *args ) ; end"
end

Instance Method Details

#bind_text(stmt, index, value, utf16 = false) ⇒ Object



88
89
90
91
# 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) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 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) ⇒ Object



98
99
100
101
102
# 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) ⇒ Object



93
94
95
96
# 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) ⇒ Object



104
105
106
107
# 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) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
# 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) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# 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) ⇒ Object



79
80
81
# 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) ⇒ Object



75
76
77
# 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) ⇒ Object



83
84
85
86
# 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) ⇒ Object



164
165
166
167
# 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) ⇒ Object



153
154
155
156
157
158
159
160
161
162
# 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) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 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) ⇒ Object



142
143
144
145
146
147
148
149
150
151
# 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