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, ar3) ⇒ IBM_DataServer

Returns a new instance of IBM_DataServer.



2016
2017
2018
2019
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2016

def initialize(adapter, ar3)
  @adapter = adapter
		@isAr3 = ar3
end

Instance Method Details

#change_column_default(table_name, column_name, default) ⇒ Object



2160
2161
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2160

def change_column_default(table_name, column_name, default)
end

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



2163
2164
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2163

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

#check_reserved_words(col_name) ⇒ Object



2033
2034
2035
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2033

def check_reserved_words(col_name)
  col_name.to_s
end

#create_index_after_table(table_name, cloumn_name) ⇒ Object



2024
2025
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2024

def create_index_after_table (table_name,cloumn_name)
end

#execute(sql, name = nil) ⇒ Object



2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2125

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



2151
2152
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2151

def get_datetime_mapping
end

#get_double_mappingObject



2157
2158
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2157

def get_double_mapping
end

#get_time_mappingObject



2154
2155
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2154

def get_time_mapping
end

#last_generated_id(stmt) ⇒ Object



2021
2022
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2021

def last_generated_id(stmt)
end

#limit_not_supported_typesObject



2178
2179
2180
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2178

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

#prepare(sql, name = nil) ⇒ Object

Praveen



2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2108

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



2145
2146
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2145

def query_offset_limit(sql, offset, limit)
end

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



2148
2149
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2148

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



2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2039

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



2030
2031
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2030

def reorg_table(table_name)
end

#select(stmt) ⇒ Object



2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2055

def select(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
  if(@isAr3)
      while single_hash = IBM_DB.fetch_assoc(stmt)
        # Add the record to the +results+ array
        results <<  single_hash
      end
    else
      while single_hash = IBM_DB.fetch_array(stmt)
        # Add the record to the +results+ array
        results <<  single_hash
      end
    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
  return results
end

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



2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2085

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
  return results
end

#set_binary_default(value) ⇒ Object



2166
2167
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2166

def set_binary_default(value)
end

#set_binary_valueObject



2169
2170
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2169

def set_binary_value
end

#set_case(value) ⇒ Object



2175
2176
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2175

def set_case(value)
end

#set_schema(schema) ⇒ Object



2141
2142
2143
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2141

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

#set_text_defaultObject



2172
2173
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2172

def set_text_default
end

#setup_for_lob_tableObject



2027
2028
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2027

def setup_for_lob_table ()
end