Module: Sequel::DB2::DatabaseMethods

Included in:
Database, IBMDB::Database, JDBC::DB2::DatabaseMethods, ODBC::DB2::DatabaseMethods
Defined in:
lib/sequel/adapters/shared/db2.rb

Constant Summary collapse

AUTOINCREMENT =
'GENERATED ALWAYS AS IDENTITY'.freeze
NOT_NULL =
' NOT NULL'.freeze
NULL =
''.freeze

Instance Method Summary collapse

Instance Method Details

#database_typeObject

DB2 always uses :db2 as it’s database type



18
19
20
# File 'lib/sequel/adapters/shared/db2.rb', line 18

def database_type
  :db2
end

#db2_versionObject Also known as: server_version

Return the database version as a string. Don’t rely on this, it may return an integer in the future.



24
25
26
27
# File 'lib/sequel/adapters/shared/db2.rb', line 24

def db2_version
  return @db2_version if @db2_version
  @db2_version = .with_sql("select service_level from sysibmadm.env_inst_info").first[:service_level]
end

#indexes(table, opts = {}) ⇒ Object

Use SYSCAT.INDEXES to get the indexes for the table



62
63
64
65
66
# File 'lib/sequel/adapters/shared/db2.rb', line 62

def indexes(table, opts = {})
  .
    with_sql("SELECT INDNAME,UNIQUERULE,MADE_UNIQUE,SYSTEM_REQUIRED FROM SYSCAT.INDEXES WHERE TABNAME = #{literal(input_identifier_meth.call(table))}").
    all.map{|h| Hash[ h.map{|k,v| [k.to_sym, v]} ] }
end

#schema_parse_table(table, opts = {}) ⇒ Object

Use SYSIBM.SYSCOLUMNS to get the information on the tables.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/sequel/adapters/shared/db2.rb', line 31

def schema_parse_table(table, opts = {})
  m = output_identifier_meth(opts[:dataset])
  im = input_identifier_meth(opts[:dataset])
  .with_sql("SELECT * FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = #{literal(im.call(table))} ORDER BY COLNO").
    collect do |column| 
      column[:db_type]     = column.delete(:typename)
      if column[:db_type]  == "DECIMAL"
        column[:db_type] << "(#{column[:longlength]},#{column[:scale]})"
      end
      column[:allow_null]  = column.delete(:nulls) == 'Y'
      column[:primary_key] = column.delete(:identity) == 'Y' || !column[:keyseq].nil?
      column[:type]        = schema_column_type(column[:db_type])
      [ m.call(column.delete(:name)), column]
    end
end

#tablesObject

Use SYSCAT.TABLES to get the tables for the database



48
49
50
51
52
# File 'lib/sequel/adapters/shared/db2.rb', line 48

def tables
  .
    with_sql("SELECT TABNAME FROM SYSCAT.TABLES WHERE TYPE='T' AND OWNER = #{literal(input_identifier_meth.call(opts[:user]))}").
    all.map{|h| output_identifier_meth.call(h[:tabname]) }
end

#viewsObject

Use SYSCAT.TABLES to get the views for the database



55
56
57
58
59
# File 'lib/sequel/adapters/shared/db2.rb', line 55

def views
  .
    with_sql("SELECT TABNAME FROM SYSCAT.TABLES WHERE TYPE='V' AND OWNER = #{literal(input_identifier_meth.call(opts[:user]))}").
    all.map{|h| output_identifier_meth.call(h[:tabname]) }
end