Class: ActiveRecord::ConnectionAdapters::IBM_DataServer

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/connection_adapters/ibm_db_adapter.rb

Overview

This class contains common code across DB’s (DB2 LUW, zOS, i5 and IDS)

Direct Known Subclasses

IBM_DB2, IBM_IDS

Instance Method Summary collapse

Constructor Details

#initialize(adapter) ⇒ IBM_DataServer

Returns a new instance of IBM_DataServer.



1682
1683
1684
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1682

def initialize(adapter)
  @adapter = adapter
end

Instance Method Details

#change_column_default(table_name, column_name, default) ⇒ Object



1815
1816
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1815

def change_column_default(table_name, column_name, default)
end

#change_column_null(table_name, column_name, null, default) ⇒ Object



1818
1819
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1818

def change_column_null(table_name, column_name, null, default)
end

#check_reserved_words(col_name) ⇒ Object



1698
1699
1700
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1698

def check_reserved_words(col_name)
  col_name
end

#create_index_after_table(table_name, cloumn_name) ⇒ Object



1689
1690
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1689

def create_index_after_table (table_name,cloumn_name)
end

#execute(sql, name = nil) ⇒ Object



1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1780

def execute(sql, name = nil)
  begin
    if stmt = IBM_DB.exec(@adapter.connection, sql)
      stmt   # Return the statement object
    else
      raise StatementInvalid, IBM_DB.getErrormsg(@adapter.connection, IBM_DB::DB_CONN )
    end
  rescue StandardError => exec_err
    if exec_err && !exec_err.message.empty?
      raise "Failed to execute statement due to: #{exec_err}"
    else 
      raise
    end
  end
end

#get_datetime_mappingObject



1806
1807
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1806

def get_datetime_mapping
end

#get_double_mappingObject



1812
1813
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1812

def get_double_mapping
end

#get_time_mappingObject



1809
1810
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1809

def get_time_mapping
end

#last_generated_id(stmt) ⇒ Object



1686
1687
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1686

def last_generated_id(stmt)
end

#limit_not_supported_typesObject



1833
1834
1835
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1833

def limit_not_supported_types
  [:integer, :double, :date, :time, :timestamp, :xml, :bigint]
end

#prepare(sql, name = nil) ⇒ Object

Praveen



1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1763

def prepare(sql,name = nil)
  begin
    stmt = IBM_DB.prepare(@adapter.connection, sql)
    if( stmt )
      stmt
    else
      raise StatementInvalid, IBM_DB.getErrormsg(@adapter.connection, IBM_DB::DB_CONN )
    end
  rescue StandardError => prep_err
    if prep_err && !prep_err.message.empty?
      raise "Failed to prepare sql #{sql} due to: #{prep_err}"
    else 
      raise
    end
  end
end

#query_offset_limit(sql, offset, limit) ⇒ Object



1800
1801
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1800

def query_offset_limit(sql, offset, limit)
end

#query_offset_limit!(sql, offset, limit, options) ⇒ Object



1803
1804
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1803

def query_offset_limit!(sql, offset, limit, options)
end

#remove_column(table_name, column_name) ⇒ Object

This is supported by the DB2 for Linux, UNIX, Windows data servers and by the DB2 for i5 data servers



1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1704

def remove_column(table_name, column_name)
  begin
    @adapter.execute "ALTER TABLE #{table_name} DROP #{column_name}"
    reorg_table(table_name)
  rescue StandardError => exec_err
    # Provide details on the current XML columns support
    if exec_err.message.include?('SQLCODE=-1242') && exec_err.message.include?('42997')
      raise StatementInvalid, 
            "A column that is part of a table containing an XML column cannot be dropped. \
To remove the column, the table must be dropped and recreated without the #{column_name} column: #{exec_err}"
    else
      raise "#{exec_err}"
    end
  end
end

#reorg_table(table_name) ⇒ Object



1695
1696
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1695

def reorg_table(table_name)
end

#select(sql, name, stmt, results) ⇒ Object



1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1720

def select(sql, name, stmt, results)
  # Fetches all the results available. IBM_DB.fetch_assoc(stmt) returns
  # an hash for each single record.
  # The loop stops when there aren't any more valid records to fetch
  begin
    while single_hash = IBM_DB.fetch_assoc(stmt)
      # Add the record to the +results+ array
      results <<  single_hash
    end
  rescue StandardError => fetch_error # Handle driver fetch errors
    error_msg = IBM_DB.getErrormsg(stmt, IBM_DB::DB_STMT )
    if error_msg && !error_msg.empty?
      raise StatementInvalid,"Failed to retrieve data: #{error_msg}"
    else
      error_msg = "An unexpected error occurred during data retrieval"
      error_msg = error_msg + ": #{fetch_error.message}" if !fetch_error.message.empty?
      raise error_msg
    end
  end
end

#select_rows(sql, name, stmt, results) ⇒ Object



1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1741

def select_rows(sql, name, stmt, results)
  # Fetches all the results available. IBM_DB.fetch_array(stmt) returns
  # an array representing a row in a result set.
  # The loop stops when there aren't any more valid records to fetch
  begin
    while single_array = IBM_DB.fetch_array(stmt)
      #Add the array to results array
      results <<  single_array
    end
  rescue StandardError => fetch_error # Handle driver fetch errors
    error_msg = IBM_DB.getErrormsg(stmt, IBM_DB::DB_STMT )
    if error_msg && !error_msg.empty?
      raise StatementInvalid,"Failed to retrieve data: #{error_msg}"
    else
      error_msg = "An unexpected error occurred during data retrieval"
      error_msg = error_msg + ": #{fetch_error.message}" if !fetch_error.message.empty?
      raise error_msg
    end
  end
end

#set_binary_default(value) ⇒ Object



1821
1822
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1821

def set_binary_default(value)
end

#set_binary_valueObject



1824
1825
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1824

def set_binary_value
end

#set_case(value) ⇒ Object



1830
1831
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1830

def set_case(value)
end

#set_schema(schema) ⇒ Object



1796
1797
1798
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1796

def set_schema(schema)
  @adapter.execute("SET SCHEMA #{schema}")
end

#set_text_defaultObject



1827
1828
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1827

def set_text_default
end

#setup_for_lob_tableObject



1692
1693
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1692

def setup_for_lob_table ()
end