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.



1642
1643
1644
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1642

def initialize(adapter)
  @adapter = adapter
end

Instance Method Details

#change_column_default(table_name, column_name, default) ⇒ Object



1775
1776
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1775

def change_column_default(table_name, column_name, default)
end

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



1778
1779
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1778

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

#check_reserved_words(col_name) ⇒ Object



1658
1659
1660
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1658

def check_reserved_words(col_name)
  col_name
end

#create_index_after_table(table_name, cloumn_name) ⇒ Object



1649
1650
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1649

def create_index_after_table (table_name,cloumn_name)
end

#execute(sql, name = nil) ⇒ Object



1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1740

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



1766
1767
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1766

def get_datetime_mapping
end

#get_double_mappingObject



1772
1773
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1772

def get_double_mapping
end

#get_time_mappingObject



1769
1770
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1769

def get_time_mapping
end

#last_generated_id(stmt) ⇒ Object



1646
1647
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1646

def last_generated_id(stmt)
end

#limit_not_supported_typesObject



1793
1794
1795
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1793

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

#prepare(sql, name = nil) ⇒ Object

Praveen



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

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



1760
1761
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1760

def query_offset_limit(sql, offset, limit)
end

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



1763
1764
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1763

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



1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1664

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



1655
1656
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1655

def reorg_table(table_name)
end

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



1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1680

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



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

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



1781
1782
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1781

def set_binary_default(value)
end

#set_binary_valueObject



1784
1785
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1784

def set_binary_value
end

#set_case(value) ⇒ Object



1790
1791
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1790

def set_case(value)
end

#set_schema(schema) ⇒ Object



1756
1757
1758
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1756

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

#set_text_defaultObject



1787
1788
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1787

def set_text_default
end

#setup_for_lob_tableObject



1652
1653
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 1652

def setup_for_lob_table ()
end