Class Sequel::IBMDB::Database
In: lib/sequel/adapters/ibmdb.rb
Parent: Sequel::Database

Methods

Included Modules

Sequel::DB2::DatabaseMethods

Attributes

conversion_procs  [R]  Hash of connection procs for converting

Public Class methods

[Source]

     # File lib/sequel/adapters/ibmdb.rb, line 168
168:       def initialize(opts={})
169:         super
170:         @conversion_procs = DB2_TYPES.dup
171:         @conversion_procs[:timestamp] = method(:to_application_timestamp)
172:       end

Public Instance methods

REORG the related table whenever it is altered. This is not always required, but it is necessary for compatibilty with other Sequel code in many cases.

[Source]

     # File lib/sequel/adapters/ibmdb.rb, line 177
177:       def alter_table(name, generator=nil, &block)
178:         res = super
179:         reorg(name)
180:         res
181:       end

Create a new connection object for the given server.

[Source]

     # File lib/sequel/adapters/ibmdb.rb, line 184
184:       def connect(server)
185:         opts = server_opts(server)
186:         
187:         # use uncataloged connection so that host and port can be supported
188:         connection_string = ( \
189:             'Driver={IBM DB2 ODBC DRIVER};' \
190:             "Database=#{opts[:database]};" \
191:             "Hostname=#{opts[:host]};" \
192:             "Port=#{opts[:port] || 50000};" \
193:             'Protocol=TCPIP;' \
194:             "Uid=#{opts[:user]};" \
195:             "Pwd=#{opts[:password]};" \
196:         )
197: 
198:         Connection.new(connection_string)
199:       end

Execute the given SQL on the database.

[Source]

     # File lib/sequel/adapters/ibmdb.rb, line 202
202:       def execute(sql, opts={}, &block)
203:         if sql.is_a?(Symbol)
204:           execute_prepared_statement(sql, opts, &block)
205:         else
206:           synchronize(opts[:server]){|c| _execute(c, sql, opts, &block)}
207:         end
208:       rescue Connection::Error => e
209:         raise_error(e)
210:       end

Execute the given SQL on the database, returning the last inserted identity value.

[Source]

     # File lib/sequel/adapters/ibmdb.rb, line 214
214:       def execute_insert(sql, opts={})
215:         synchronize(opts[:server]) do |c|
216:           if sql.is_a?(Symbol)
217:             execute_prepared_statement(sql, opts)
218:           else
219:             _execute(c, sql, opts)
220:           end
221:           _execute(c, "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1", opts){|stmt| i = stmt.fetch_array.first.to_i; stmt.free; i}
222:         end
223:       rescue Connection::Error => e
224:         raise_error(e)
225:       end

Execute a prepared statement named by name on the database.

[Source]

     # File lib/sequel/adapters/ibmdb.rb, line 228
228:       def execute_prepared_statement(ps_name, opts)
229:         args = opts[:arguments]
230:         ps = prepared_statements[ps_name]
231:         sql = ps.prepared_sql
232:         synchronize(opts[:server]) do |conn|
233:           unless conn.prepared_statements.fetch(ps_name, []).first == sql
234:             log_yield("Preparing #{ps_name}: #{sql}"){conn.prepare(sql, ps_name)}
235:           end
236:           args = args.map{|v| v.nil? ? nil : prepared_statement_arg(v)}
237:           stmt = log_yield("Executing #{ps_name}: #{args.inspect}"){conn.execute_prepared(ps_name, *args)}
238: 
239:           if block_given?
240:             begin
241:               yield(stmt)
242:             ensure
243:               stmt.free
244:             end
245:           else  
246:             stmt.affected
247:           end
248:         end
249:       end

Convert smallint type to boolean if convert_smallint_to_bool is true

[Source]

     # File lib/sequel/adapters/ibmdb.rb, line 252
252:       def schema_column_type(db_type)
253:         if Sequel::IBMDB.convert_smallint_to_bool && db_type =~ /smallint/i 
254:           :boolean
255:         else
256:           super
257:         end
258:       end

On DB2, a table might need to be REORGed if you are testing existence of it. This REORGs automatically if the database raises a specific error that indicates it should be REORGed.

[Source]

     # File lib/sequel/adapters/ibmdb.rb, line 263
263:       def table_exists?(name)
264:         v ||= false # only retry once
265:         sch, table_name = schema_and_table(name)
266:         name = SQL::QualifiedIdentifier.new(sch, table_name) if sch
267:         from(name).first
268:         true
269:       rescue DatabaseError => e
270:         if e.to_s =~ /Operation not allowed for reason code "7" on table/ && v == false
271:           # table probably needs reorg
272:           reorg(name)
273:           v = true
274:           retry 
275:         end
276:         false
277:       end

[Validate]