Module Sequel::DB2::DatabaseMethods
In: lib/sequel/adapters/shared/db2.rb

Methods

Constants

AUTOINCREMENT = 'GENERATED ALWAYS AS IDENTITY'.freeze
NOT_NULL = ' NOT NULL'.freeze
NULL = ''.freeze
DATABASE_ERROR_REGEXPS = { /DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505|One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index/ => UniqueConstraintViolation, /DB2 SQL Error: (SQLCODE=-530, SQLSTATE=23503|SQLCODE=-532, SQLSTATE=23504)|The insert or update value of the FOREIGN KEY .+ is not equal to any value of the parent key of the parent table|A parent row cannot be deleted because the relationship .+ restricts the deletion/ => ForeignKeyConstraintViolation, /DB2 SQL Error: SQLCODE=-545, SQLSTATE=23513|The requested operation is not allowed because a row does not satisfy the check constraint/ => CheckConstraintViolation, /DB2 SQL Error: SQLCODE=-407, SQLSTATE=23502|Assignment of a NULL value to a NOT NULL column/ => NotNullConstraintViolation, /DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001|The current transaction has been rolled back because of a deadlock or timeout/ => SerializationFailure, }.freeze

Public Instance methods

DB2 always uses :db2 as it‘s database type

[Source]

    # File lib/sequel/adapters/shared/db2.rb, line 20
20:       def database_type
21:         :db2
22:       end

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

[Source]

    # File lib/sequel/adapters/shared/db2.rb, line 26
26:       def db2_version
27:         return @db2_version if @db2_version
28:         @db2_version = metadata_dataset.with_sql("select service_level from sysibmadm.env_inst_info").first[:service_level]
29:       end

Use SYSCAT.INDEXES to get the indexes for the table

[Source]

    # File lib/sequel/adapters/shared/db2.rb, line 64
64:       def indexes(table, opts = OPTS)
65:         m = output_identifier_meth
66:         indexes = {}
67:         metadata_dataset.
68:          from(:syscat__indexes).
69:          select(:indname, :uniquerule, :colnames).
70:          where(:tabname=>input_identifier_meth.call(table), :system_required=>0).
71:          each do |r|
72:           indexes[m.call(r[:indname])] = {:unique=>(r[:uniquerule]=='U'), :columns=>r[:colnames][1..-1].split('+').map{|v| m.call(v)}}
73:         end
74:         indexes
75:       end

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

[Source]

    # File lib/sequel/adapters/shared/db2.rb, line 33
33:       def schema_parse_table(table, opts = OPTS)
34:         m = output_identifier_meth(opts[:dataset])
35:         im = input_identifier_meth(opts[:dataset])
36:         metadata_dataset.with_sql("SELECT * FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = #{literal(im.call(table))} ORDER BY COLNO").
37:           collect do |column| 
38:             column[:db_type]     = column.delete(:typename)
39:             if column[:db_type]  == "DECIMAL"
40:               column[:db_type] << "(#{column[:longlength]},#{column[:scale]})"
41:             end
42:             column[:allow_null]  = column.delete(:nulls) == 'Y'
43:             column[:primary_key] = column.delete(:identity) == 'Y' || !column[:keyseq].nil?
44:             column[:type]        = schema_column_type(column[:db_type])
45:             [ m.call(column.delete(:name)), column]
46:           end
47:       end
server_version()

Alias for db2_version

DB2 supports transaction isolation levels.

[Source]

    # File lib/sequel/adapters/shared/db2.rb, line 78
78:       def supports_transaction_isolation_levels?
79:         true
80:       end

Use SYSCAT.TABLES to get the tables for the database

[Source]

    # File lib/sequel/adapters/shared/db2.rb, line 50
50:       def tables
51:         metadata_dataset.
52:           with_sql("SELECT TABNAME FROM SYSCAT.TABLES WHERE TYPE='T' AND OWNER = #{literal(input_identifier_meth.call(opts[:user]))}").
53:           all.map{|h| output_identifier_meth.call(h[:tabname]) }
54:       end

Use SYSCAT.TABLES to get the views for the database

[Source]

    # File lib/sequel/adapters/shared/db2.rb, line 57
57:       def views
58:         metadata_dataset.
59:           with_sql("SELECT TABNAME FROM SYSCAT.TABLES WHERE TYPE='V' AND OWNER = #{literal(input_identifier_meth.call(opts[:user]))}").
60:           all.map{|h| output_identifier_meth.call(h[:tabname]) }
61:       end

[Validate]