Class ActiveRecord::ConnectionAdapters::DB2Adapter
In: vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb
Parent: AbstractAdapter

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

[Source]

    # 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

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 182
182:         def active?
183:           @connection.select_one 'select 1 from ibm.sysdummy1'
184:           true
185:         rescue Exception
186:           false
187:         end

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 96
96:         def adapter_name()
97:           'DB2'
98:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 104
104:         def add_limit_offset!(sql, options)
105:           if limit = options[:limit]
106:             offset = options[:offset] || 0
107:             # The following trick was added by andrea+rails@webcom.it.
108:             sql.gsub!(/SELECT/i, 'SELECT B.* FROM (SELECT A.*, row_number() over () AS internal$rownum FROM (SELECT')
109:             sql << ") A ) B WHERE B.internal$rownum > #{offset} AND B.internal$rownum <= #{limit + offset}"
110:           end
111:         end

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 78
78:         def begin_db_transaction
79:           @connection.set_auto_commit_off
80:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 142
142:         def columns(table_name, name = nil)
143:           result = []
144:           schema = @connection_options[:schema] || '%'
145:           with_statement do |stmt|
146:             stmt.columns(table_name, schema).each do |c| 
147:               c_name = c[3].downcase
148:               c_default = c[12] == 'NULL' ? nil : c[12]
149:               c_default.gsub!(/^'(.*)'$/, '\1') if !c_default.nil?
150:               c_type = c[5].downcase
151:               c_type += "(#{c[6]})" if !c[6].nil? && c[6] != ''
152:               result << Column.new(c_name, c_default, c_type, c[17] == 'YES')
153:             end 
154:           end
155:           result
156:         end

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 82
82:         def commit_db_transaction
83:           @connection.commit
84:           @connection.set_auto_commit_on
85:         end
delete(sql, name = nil)

Alias for execute

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 64
64:         def execute(sql, name = nil)
65:           rows_affected = 0
66:           with_statement do |stmt|
67:             log(sql, name) do
68:               stmt.exec_direct(sql)
69:               rows_affected = stmt.row_count
70:             end
71:           end
72:           rows_affected
73:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 122
122:         def indexes(table_name, name = nil)
123:           tmp = {}
124:           schema = @connection_options[:schema] || ''
125:           with_statement do |stmt|
126:             stmt.indexes(table_name, schema).each do |t|
127:               next unless t[5]
128:               next if t[4] == 'SYSIBM' # Skip system indexes.
129:               idx_name = t[5].downcase
130:               col_name = t[8].downcase
131:               if tmp.has_key?(idx_name)
132:                 tmp[idx_name].columns << col_name
133:               else
134:                 is_unique = t[3] == 0
135:                 tmp[idx_name] = IndexDefinition.new(table_name, idx_name, is_unique, [col_name])
136:               end
137:             end
138:           end
139:           tmp.values
140:         end

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 59
59:         def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
60:           execute(sql, name = nil)
61:           id_value || last_insert_id
62:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 158
158:         def native_database_types
159:           {
160:             :primary_key => 'int generated by default as identity (start with 42) primary key',
161:             :string      => { :name => 'varchar', :limit => 255 },
162:             :text        => { :name => 'clob', :limit => 32768 },
163:             :integer     => { :name => 'int' },
164:             :float       => { :name => 'float' },
165:             :datetime    => { :name => 'timestamp' },
166:             :timestamp   => { :name => 'timestamp' },
167:             :time        => { :name => 'time' },
168:             :date        => { :name => 'date' },
169:             :binary      => { :name => 'blob', :limit => 32768 },
170:             :boolean     => { :name => 'decimal', :limit => 1 }
171:           }
172:         end

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 92
92:         def quote_column_name(column_name)
93:           column_name
94:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 100
100:         def quote_string(string)
101:           string.gsub(/'/, "''") # ' (for ruby-mode)
102:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 178
178:         def quoted_false
179:           '0'
180:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 174
174:         def quoted_true
175:           '1'
176:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 189
189:         def reconnect!
190:         end

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 87
87:         def rollback_db_transaction
88:           @connection.rollback
89:           @connection.set_auto_commit_on
90:         end

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 51
51:         def select_all(sql, name = nil)
52:           select(sql, name)
53:         end

[Source]

    # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 55
55:         def select_one(sql, name = nil)
56:           select(sql, name).first
57:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 192
192:         def table_alias_length
193:           128
194:         end

[Source]

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/db2_adapter.rb, line 113
113:         def tables(name = nil)
114:           result = []
115:           schema = @connection_options[:schema] || '%'
116:           with_statement do |stmt|
117:             stmt.tables(schema).each { |t| result << t[2].downcase }
118:           end
119:           result
120:         end
update(sql, name = nil)

Alias for execute

[Validate]