Module: Sequel::DB2::DatabaseMethods
- Included in:
- IBMDB::Database, JDBC::DB2::DatabaseMethods
- Defined in:
- lib/sequel/adapters/shared/db2.rb
Instance Attribute Summary collapse
- 
  
    
      #use_clob_as_blob  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    Whether to use clob as the generic File type, false by default. 
Instance Method Summary collapse
- #database_type ⇒ Object
- 
  
    
      #db2_version  ⇒ Object 
    
    
      (also: #server_version)
    
  
  
  
  
  
  
  
  
  
    Return the database version as a string. 
- #freeze ⇒ Object
- 
  
    
      #indexes(table, opts = OPTS)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Use SYSCAT.INDEXES to get the indexes for the table. 
- #offset_strategy ⇒ Object
- 
  
    
      #schema_parse_table(table, opts = OPTS)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Use SYSIBM.SYSCOLUMNS to get the information on the tables. 
- 
  
    
      #supports_transaction_isolation_levels?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    DB2 supports transaction isolation levels. 
- 
  
    
      #table_exists?(name)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    On DB2, a table might need to be REORGed if you are testing existence of it. 
- 
  
    
      #tables  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Use SYSCAT.TABLES to get the tables for the database. 
- 
  
    
      #views  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Use SYSCAT.TABLES to get the views for the database. 
Instance Attribute Details
#use_clob_as_blob ⇒ Object
Whether to use clob as the generic File type, false by default.
| 12 13 14 | # File 'lib/sequel/adapters/shared/db2.rb', line 12 def use_clob_as_blob @use_clob_as_blob end | 
Instance Method Details
#database_type ⇒ Object
| 14 15 16 | # File 'lib/sequel/adapters/shared/db2.rb', line 14 def database_type :db2 end | 
#db2_version ⇒ Object 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.
| 20 21 22 23 | # File 'lib/sequel/adapters/shared/db2.rb', line 20 def db2_version return @db2_version if defined?(@db2_version) @db2_version = .with_sql("select service_level from sysibmadm.env_inst_info").first[:service_level] end | 
#freeze ⇒ Object
| 26 27 28 29 30 | # File 'lib/sequel/adapters/shared/db2.rb', line 26 def freeze db2_version offset_strategy super end | 
#indexes(table, opts = OPTS) ⇒ Object
Use SYSCAT.INDEXES to get the indexes for the table
| 71 72 73 74 75 76 77 78 79 80 81 82 83 | # File 'lib/sequel/adapters/shared/db2.rb', line 71 def indexes(table, opts = OPTS) m = output_identifier_meth table = table.value if table.is_a?(Sequel::SQL::Identifier) indexes = {} . from(Sequel[:syscat][:indexes]). select(:indname, :uniquerule, :colnames). where(:tabname=>input_identifier_meth.call(table), :system_required=>0). each do |r| indexes[m.call(r[:indname])] = {:unique=>(r[:uniquerule]=='U'), :columns=>r[:colnames][1..-1].split('+').map{|v| m.call(v)}} end indexes end | 
#offset_strategy ⇒ Object
| 85 86 87 88 89 90 91 92 93 94 | # File 'lib/sequel/adapters/shared/db2.rb', line 85 def offset_strategy return @offset_strategy if defined?(@offset_strategy) @offset_strategy = case strategy = opts[:offset_strategy].to_s when "limit_offset", "offset_fetch" opts[:offset_strategy] = strategy.to_sym else opts[:offset_strategy] = :emulate end end | 
#schema_parse_table(table, opts = OPTS) ⇒ Object
Use SYSIBM.SYSCOLUMNS to get the information on the tables.
| 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | # File 'lib/sequel/adapters/shared/db2.rb', line 33 def schema_parse_table(table, opts = 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] =~ /\A(VAR)?CHAR\z/ column[:db_type] << "(#{column[:length]})" end if column[:db_type] == "DECIMAL" column[:db_type] << "(#{column[:longlength]},#{column[:scale]})" end column[:allow_null] = column.delete(:nulls) == 'Y' identity = column.delete(:identity) == 'Y' if column[:primary_key] = identity || !column[:keyseq].nil? column[:auto_increment] = identity end column[:type] = schema_column_type(column[:db_type]) column[:max_length] = column[:longlength] if column[:type] == :string [ m.call(column.delete(:name)), column] end end | 
#supports_transaction_isolation_levels? ⇒ Boolean
DB2 supports transaction isolation levels.
| 97 98 99 | # File 'lib/sequel/adapters/shared/db2.rb', line 97 def supports_transaction_isolation_levels? true end | 
#table_exists?(name) ⇒ Boolean
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.
| 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | # File 'lib/sequel/adapters/shared/db2.rb', line 104 def table_exists?(name) v ||= false # only retry once sch, table_name = schema_and_table(name) name = SQL::QualifiedIdentifier.new(sch, table_name) if sch from(name).first true rescue DatabaseError => e if e.to_s.include?('Operation not allowed for reason code "7" on table') && v == false # table probably needs reorg reorg(name) v = true retry end false end | 
#tables ⇒ Object
Use SYSCAT.TABLES to get the tables for the database
| 57 58 59 60 61 | # File 'lib/sequel/adapters/shared/db2.rb', line 57 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 | 
#views ⇒ Object
Use SYSCAT.TABLES to get the views for the database
| 64 65 66 67 68 | # File 'lib/sequel/adapters/shared/db2.rb', line 64 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 |