| Class | SQLite3::Driver::DL::Driver |
| In: |
lib/sqlite3/driver/dl/driver.rb
|
| Parent: | Object |
| STATIC | = | ::DL::PtrData.new(0) |
| TRANSIENT | = | ::DL::PtrData.new(-1) |
# File lib/sqlite3/driver/dl/driver.rb, line 259
259: def self.api_delegate( name )
260: define_method( name ) { |*args| API.send( "sqlite3_#{name}", *args ) }
261: end
# File lib/sqlite3/driver/dl/driver.rb, line 222
222: def aggregate_context( context )
223: ptr = API.sqlite3_aggregate_context( context, 4 )
224: ptr.free = nil
225: obj = ( ptr ? ptr.to_object : nil )
226: if obj.nil?
227: obj = Hash.new
228: ptr.set_object obj
229: end
230: obj
231: end
# File lib/sqlite3/driver/dl/driver.rb, line 233
233: def bind_blob( stmt, index, value )
234: s = value.to_s
235: API.sqlite3_bind_blob( stmt, index, s, s.length, TRANSIENT )
236: end
# File lib/sqlite3/driver/dl/driver.rb, line 238
238: def bind_text( stmt, index, value, utf16=false )
239: s = value.to_s
240: method = ( utf16 ? :sqlite3_bind_text16 : :sqlite3_bind_text )
241: API.send( method, stmt, index, s, s.length, TRANSIENT )
242: end
# File lib/sqlite3/driver/dl/driver.rb, line 145
145: def busy_handler( db, data=nil, &block )
146: @busy_handler = block
147:
148: unless @busy_handler_callback
149: @busy_handler_callback = ::DL.callback( "IPI" ) do |cookie, timeout|
150: @busy_handler.call( cookie, timeout ) || 0
151: end
152: end
153:
154: API.sqlite3_busy_handler( db, block&&@busy_handler_callback, data )
155: end
# File lib/sqlite3/driver/dl/driver.rb, line 127
127: def column_blob( stmt, column )
128: blob = API.sqlite3_column_blob( stmt, column )
129: blob.free = nil
130: blob.to_s( API.sqlite3_column_bytes( stmt, column ) )
131: end
# File lib/sqlite3/driver/dl/driver.rb, line 254
254: def column_decltype( stmt, column )
255: result = API.sqlite3_column_decltype( stmt, column )
256: result ? result.to_s : nil
257: end
# File lib/sqlite3/driver/dl/driver.rb, line 249
249: def column_name( stmt, column )
250: result = API.sqlite3_column_name( stmt, column )
251: result ? result.to_s : nil
252: end
# File lib/sqlite3/driver/dl/driver.rb, line 244
244: def column_text( stmt, column )
245: result = API.sqlite3_column_text( stmt, column )
246: result ? result.to_s : nil
247: end
# File lib/sqlite3/driver/dl/driver.rb, line 311
311: def commit_hook( db, data=nil, &block )
312: @commit_hook_handler = block
313:
314: unless @commit_hook_handler_callback
315: @commit_hook_handler_callback = ::DL.callback( "IP" ) do |cookie|
316: @commit_hook_handler.call( cookie )
317: end
318: end
319:
320: API.sqlite3_commit_hook( db, block&&@commit_hook_handler_callback,
321: data )
322: end
# File lib/sqlite3/driver/dl/driver.rb, line 99
99: def complete?( sql, utf16=false )
100: API.send( utf16 ? :sqlite3_complete16 : :sqlite3_complete, sql+"\0" )
101: end
# File lib/sqlite3/driver/dl/driver.rb, line 184
184: def create_function( db, name, args, text, cookie,
185: func, step, final )
186: # begin
187: if @func_handler_callback.nil? && func
188: @func_handler_callback = ::DL.callback( "0PIP" ) do |context,nargs,args|
189: args = args.to_s(nargs*4).unpack("L*").map {|i| ::DL::PtrData.new(i)}
190: data = API.sqlite3_user_data( context ).to_object
191: data[:func].call( context, *args )
192: end
193: end
194:
195: if @step_handler_callback.nil? && step
196: @step_handler_callback = ::DL.callback( "0PIP" ) do |context,nargs,args|
197: args = args.to_s(nargs*4).unpack("L*").map {|i| ::DL::PtrData.new(i)}
198: data = API.sqlite3_user_data( context ).to_object
199: data[:step].call( context, *args )
200: end
201: end
202:
203: if @final_handler_callback.nil? && final
204: @final_handler_callback = ::DL.callback( "0P" ) do |context|
205: data = API.sqlite3_user_data( context ).to_object
206: data[:final].call( context )
207: end
208: end
209:
210: data = { :cookie => cookie,
211: :name => name,
212: :func => func,
213: :step => step,
214: :final => final }
215:
216: API.sqlite3_create_function( db, name, args, text, data,
217: ( func ? @func_handler_callback : nil ),
218: ( step ? @step_handler_callback : nil ),
219: ( final ? @final_handler_callback : nil ) )
220: end
# File lib/sqlite3/driver/dl/driver.rb, line 76
76: def errmsg( db, utf16=false )
77: if utf16
78: msg = API.sqlite3_errmsg16( db )
79: msg.free = nil
80: msg.to_s(utf16_length(msg))
81: else
82: API.sqlite3_errmsg( db )
83: end
84: end
# File lib/sqlite3/driver/dl/driver.rb, line 69
69: def open( filename, utf16=false )
70: handle = ::DL::PtrData.new(0)
71: result = API.send( ( utf16 ? :sqlite3_open16 : :sqlite3_open ),
72: filename+"\0", handle.ref )
73: [ result, handle ]
74: end
# File lib/sqlite3/driver/dl/driver.rb, line 86
86: def prepare( db, sql, utf16=false )
87: handle = ::DL::PtrData.new(0)
88: remainder = ::DL::PtrData.new(0)
89:
90: result = API.send( ( utf16 ? :sqlite3_prepare16 : :sqlite3_prepare ),
91: db, sql+"\0", sql.length, handle.ref, remainder.ref )
92:
93: args = utf16 ? [ utf16_length(remainder) ] : []
94: remainder = remainder.to_s( *args )
95:
96: [ result, handle, remainder ]
97: end
# File lib/sqlite3/driver/dl/driver.rb, line 298
298: def progress_handler( db, n, data=nil, &block )
299: @progress_handler = block
300:
301: unless @progress_handler_callback
302: @progress_handler_callback = ::DL.callback( "IP" ) do |cookie|
303: @progress_handler.call( cookie )
304: end
305: end
306:
307: API.sqlite3_progress_handler( db, n, block&&@progress_handler_callback,
308: data )
309: end
# File lib/sqlite3/driver/dl/driver.rb, line 133
133: def result_text( func, text, utf16=false )
134: method = case utf16
135: when false, nil then :sqlite3_result_text
136: when :le then :sqlite3_result_text16le
137: when :be then :sqlite3_result_text16be
138: else :sqlite3_result_text16
139: end
140:
141: s = text.to_s
142: API.send( method, func, s, s.length, TRANSIENT )
143: end
# File lib/sqlite3/driver/dl/driver.rb, line 157
157: def set_authorizer( db, data=nil, &block )
158: @authorizer_handler = block
159:
160: unless @authorizer_handler_callback
161: @authorizer_handler_callback = ::DL.callback( "IPIPPPP"
162: ) do |cookie,mode,a,b,c,d|
163: @authorizer_handler.call( cookie, mode,
164: a&&a.to_s, b&&b.to_s, c&&c.to_s, d&&d.to_s ) || 0
165: end
166: end
167:
168: API.sqlite3_set_authorizer( db, block&&@authorizer_handler_callback,
169: data )
170: end
# File lib/sqlite3/driver/dl/driver.rb, line 172
172: def trace( db, data=nil, &block )
173: @trace_handler = block
174:
175: unless @trace_handler_callback
176: @trace_handler_callback = ::DL.callback( "IPS" ) do |cookie,sql|
177: @trace_handler.call( cookie ? cookie.to_object : nil, sql ) || 0
178: end
179: end
180:
181: API.sqlite3_trace( db, block&&@trace_handler_callback, data )
182: end
# File lib/sqlite3/driver/dl/driver.rb, line 103
103: def value_blob( value )
104: blob = API.sqlite3_value_blob( value )
105: blob.free = nil
106: blob.to_s( API.sqlite3_value_bytes( value ) )
107: end
# File lib/sqlite3/driver/dl/driver.rb, line 109
109: def value_text( value, utf16=false )
110: method = case utf16
111: when nil, false then :sqlite3_value_text
112: when :le then :sqlite3_value_text16le
113: when :be then :sqlite3_value_text16be
114: else :sqlite3_value_text16
115: end
116:
117: result = API.send( method, value )
118: if utf16
119: result.free = nil
120: size = API.sqlite3_value_bytes( value )
121: result = result.to_s( size )
122: end
123:
124: result
125: end