Class SQLite3::Driver::DL::Driver
In: lib/sqlite3/driver/dl/driver.rb
Parent: Object

Methods

Constants

STATIC = ::DL::PtrData.new(0)
TRANSIENT = ::DL::PtrData.new(-1)

Public Class methods

[Source]

     # 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

Public Instance methods

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Validate]