The DB2 adapter works with the C-based CLI driver (rubyforge.org/projects/ruby-dbi/)

Options:

  • :username — Defaults to nothing
  • :password — Defaults to nothing
  • :database — The name of the database. No default, must be provided.
  • :schema — Database schema to be set initially.
Methods
Public Class methods
new(connection, logger, connection_options)
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 41
41:         def initialize(connection, logger, connection_options)
42:           super(connection, logger)
43:           @connection_options = connection_options
44:           if schema = @connection_options[:schema]
45:             with_statement do |stmt|
46:               stmt.exec_direct("SET SCHEMA=#{schema}")
47:             end
48:           end
49:         end
Public Instance methods
active?()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 172
172:         def active?
173:           @connection.select_one 'select 1 from ibm.sysdummy1'
174:           true
175:         rescue Exception
176:           false
177:         end
adapter_name()
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 85
85:         def adapter_name()
86:           'DB2'
87:         end
add_limit_offset!(sql, options)
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 93
 93:         def add_limit_offset!(sql, options)
 94:           if limit = options[:limit]
 95:             offset = options[:offset] || 0
 96:             # The following trick was added by andrea+rails@webcom.it.
 97:             sql.gsub!(/SELECT/i, 'SELECT B.* FROM (SELECT A.*, row_number() over () AS internal$rownum FROM (SELECT')
 98:             sql << ") A ) B WHERE B.internal$rownum > #{offset} AND B.internal$rownum <= #{limit + offset}"
 99:           end
100:         end
begin_db_transaction()
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 67
67:         def begin_db_transaction
68:           @connection.set_auto_commit_off
69:         end
columns(table_name, name = nil)
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 131
131:         def columns(table_name, name = nil)
132:           result = []
133:           schema = @connection_options[:schema] || '%'
134:           with_statement do |stmt|
135:             stmt.columns(table_name, schema).each do |c| 
136:               c_name = c[3].downcase
137:               c_default = c[12] == 'NULL' ? nil : c[12]
138:               c_default.gsub!(/^'(.*)'$/, '\1') if !c_default.nil?
139:               c_type = c[5].downcase
140:               c_type += "(#{c[6]})" if !c[6].nil? && c[6] != ''
141:               result << Column.new(c_name, c_default, c_type, c[17] == 'YES')
142:             end 
143:           end
144:           result
145:         end
commit_db_transaction()
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 71
71:         def commit_db_transaction
72:           @connection.commit
73:           @connection.set_auto_commit_on
74:         end
execute(sql, name = nil)
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 56
56:         def execute(sql, name = nil)
57:           rows_affected = 0
58:           with_statement do |stmt|
59:             log(sql, name) do
60:               stmt.exec_direct(sql)
61:               rows_affected = stmt.row_count
62:             end
63:           end
64:           rows_affected
65:         end
indexes(table_name, name = nil)
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 111
111:         def indexes(table_name, name = nil)
112:           tmp = {}
113:           schema = @connection_options[:schema] || ''
114:           with_statement do |stmt|
115:             stmt.indexes(table_name, schema).each do |t|
116:               next unless t[5]
117:               next if t[4] == 'SYSIBM' # Skip system indexes.
118:               idx_name = t[5].downcase
119:               col_name = t[8].downcase
120:               if tmp.has_key?(idx_name)
121:                 tmp[idx_name].columns << col_name
122:               else
123:                 is_unique = t[3] == 0
124:                 tmp[idx_name] = IndexDefinition.new(table_name, idx_name, is_unique, [col_name])
125:               end
126:             end
127:           end
128:           tmp.values
129:         end
insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 51
51:         def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
52:           execute(sql, name = nil)
53:           id_value || last_insert_id
54:         end
native_database_types()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 147
147:         def native_database_types
148:           {
149:             :primary_key => 'int generated by default as identity (start with 42) primary key',
150:             :string      => { :name => 'varchar', :limit => 255 },
151:             :text        => { :name => 'clob', :limit => 32768 },
152:             :integer     => { :name => 'int' },
153:             :float       => { :name => 'float' },
154:             :decimal     => { :name => 'decimal' },
155:             :datetime    => { :name => 'timestamp' },
156:             :timestamp   => { :name => 'timestamp' },
157:             :time        => { :name => 'time' },
158:             :date        => { :name => 'date' },
159:             :binary      => { :name => 'blob', :limit => 32768 },
160:             :boolean     => { :name => 'decimal', :limit => 1 }
161:           }
162:         end
quote_column_name(column_name)
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 81
81:         def quote_column_name(column_name)
82:           column_name
83:         end
quote_string(string)
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 89
89:         def quote_string(string)
90:           string.gsub(/'/, "''") # ' (for ruby-mode)
91:         end
quoted_false()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 168
168:         def quoted_false
169:           '0'
170:         end
quoted_true()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 164
164:         def quoted_true
165:           '1'
166:         end
reconnect!()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 179
179:         def reconnect!
180:         end
rollback_db_transaction()
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 76
76:         def rollback_db_transaction
77:           @connection.rollback
78:           @connection.set_auto_commit_on
79:         end
table_alias_length()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 182
182:         def table_alias_length
183:           128
184:         end
tables(name = nil)
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 102
102:         def tables(name = nil)
103:           result = []
104:           schema = @connection_options[:schema] || '%'
105:           with_statement do |stmt|
106:             stmt.tables(schema).each { |t| result << t[2].downcase }
107:           end
108:           result
109:         end