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