Class: ActiveRecord::ConnectionAdapters::IBM_IDS
- Inherits:
-
IBM_DataServer
- Object
- IBM_DataServer
- ActiveRecord::ConnectionAdapters::IBM_IDS
- Defined in:
- lib/active_record/connection_adapters/ibm_db_adapter.rb
Overview
class IBM_DB2_I5
Instance Method Summary collapse
- #change_column(table_name, column_name, type, options) ⇒ Object
-
#change_column_default(table_name, column_name, default) ⇒ Object
IDS specific ALTER TABLE statement to add a default clause IDS requires the data type to be explicitly specified when adding the DEFAULT clause.
-
#change_column_null(table_name, column_name, null, default) ⇒ Object
IDS specific ALTER TABLE statement to change the nullability of a column.
-
#get_datetime_mapping ⇒ Object
This method returns the IDS SQL type corresponding to the Rails datetime/timestamp type.
-
#get_double_mapping ⇒ Object
This method returns the IDS SQL type corresponding to Rails double type.
-
#get_time_mapping ⇒ Object
This method returns the IDS SQL type corresponding to the Rails time type.
-
#last_generated_id(stmt) ⇒ Object
Method that returns the last automatically generated ID on the given @connection.
-
#primary_key_definition(start_id) ⇒ Object
End of rename_column.
-
#query_offset_limit(sql, offset, limit) ⇒ Object
Handling offset/limit as per Informix requirements.
-
#rename_column(table_name, column_name, new_column_name) ⇒ Object
IDS specific ALTER TABLE statement to rename a column.
-
#reorg_table(table_name) ⇒ Object
Reorganizes the table for column changes.
-
#set_binary_default(value) ⇒ Object
This method throws an error when trying to create a default value on a BLOB/CLOB column for IDS.
-
#set_binary_value ⇒ Object
For Informix Dynamic Server, we treat binary value same as we treat a text value.
-
#set_case(value) ⇒ Object
For Informix Dynamic Server, the arguments to the meta-data functions need to be in lower-case.
-
#set_schema(schema) ⇒ Object
IDS does not support the SET SCHEMA syntax.
-
#set_text_default(value) ⇒ Object
This method throws an error when trying to create a default value on a BLOB/CLOB column for IDS.
Methods inherited from IBM_DataServer
#check_reserved_words, #create_index_after_table, #execute, #initialize, #limit_not_supported_types, #remove_column, #select, #select_rows, #setup_for_lob_table
Constructor Details
This class inherits a constructor from ActiveRecord::ConnectionAdapters::IBM_DataServer
Instance Method Details
#change_column(table_name, column_name, type, options) ⇒ Object
2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2079 def change_column(table_name, column_name, type, ) if ![:null].nil? && ![:null] execute "ALTER TABLE #{table_name} MODIFY #{column_name} #{@adapter.type_to_sql(type, [:limit], [:precision], [:scale])} NOT NULL" else execute "ALTER TABLE #{table_name} MODIFY #{column_name} #{@adapter.type_to_sql(type, [:limit], [:precision], [:scale])}" end if ![:default].nil? change_column_default(table_name, column_name, [:default]) end reorg_table(table_name) end |
#change_column_default(table_name, column_name, default) ⇒ Object
IDS specific ALTER TABLE statement to add a default clause IDS requires the data type to be explicitly specified when adding the DEFAULT clause
2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2094 def change_column_default(table_name, column_name, default) sql_type = nil is_nullable = true @adapter.columns(table_name).select do |col| if (col.name == column_name) sql_type = @adapter.type_to_sql(col.type, col.limit, col.precision, col.scale) is_nullable = col.null end end # SQL statement which alters column's default value change_column_sql = "ALTER TABLE #{table_name} MODIFY #{column_name} #{sql_type} DEFAULT #{@adapter.quote(default)}" change_column_sql << " NOT NULL" unless is_nullable stmt = execute(change_column_sql) reorg_table(table_name) # Ensures to free the resources associated with the statement ensure IBM_DB.free_result stmt if stmt end |
#change_column_null(table_name, column_name, null, default) ⇒ Object
IDS specific ALTER TABLE statement to change the nullability of a column
2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2114 def change_column_null(table_name,column_name,null,default) if !default.nil? change_column_default table_name, column_name, default end sql_type = nil @adapter.columns(table_name).select do |col| if (col.name == column_name) sql_type = @adapter.type_to_sql(col.type, col.limit, col.precision, col.scale) end end if !null.nil? if !null change_column_sql = "ALTER TABLE #{table_name} MODIFY #{column_name} #{sql_type} NOT NULL" else change_column_sql = "ALTER TABLE #{table_name} MODIFY #{column_name} #{sql_type}" end end stmt = execute(change_column_sql) reorg_table(table_name) ensure IBM_DB.free_result stmt if stmt end |
#get_datetime_mapping ⇒ Object
This method returns the IDS SQL type corresponding to the Rails datetime/timestamp type
2144 2145 2146 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2144 def get_datetime_mapping return "datetime year to fraction(5)" end |
#get_double_mapping ⇒ Object
This method returns the IDS SQL type corresponding to Rails double type
2155 2156 2157 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2155 def get_double_mapping return "double precision" end |
#get_time_mapping ⇒ Object
This method returns the IDS SQL type corresponding to the Rails time type
2150 2151 2152 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2150 def get_time_mapping return "datetime hour to second" end |
#last_generated_id(stmt) ⇒ Object
Method that returns the last automatically generated ID on the given @connection. This method is required by the insert
method. IDS returns the last generated serial value in the SQLCA unlike DB2 where the generated value has to be retrieved using the IDENTITY_VAL_LOCAL function. We used the “stmt” parameter to identify the statement resource from which to get the last generated value
2182 2183 2184 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2182 def last_generated_id(stmt) IBM_DB.get_last_serial_value(stmt) end |
#primary_key_definition(start_id) ⇒ Object
End of rename_column
2075 2076 2077 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2075 def primary_key_definition(start_id) return "SERIAL(#{start_id}) PRIMARY KEY" end |
#query_offset_limit(sql, offset, limit) ⇒ Object
Handling offset/limit as per Informix requirements
2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2160 def query_offset_limit(sql, offset, limit) if limit != 0 if !offset.nil? # Modifying the SQL to utilize the skip and limit amounts sql.gsub!(/SELECT/i,"SELECT SKIP #{offset} LIMIT #{limit}") else # Modifying the SQL to retrieve only the first #{limit} rows sql = sql.gsub!("SELECT","SELECT FIRST #{limit}") end else # Modifying the SQL to ensure that no rows will be returned sql.gsub!(/SELECT/i,"SELECT * FROM (SELECT") sql << ") WHERE 0 = 1" end end |
#rename_column(table_name, column_name, new_column_name) ⇒ Object
IDS specific ALTER TABLE statement to rename a column
2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2040 def rename_column(table_name, column_name, new_column_name) _table_name = table_name.to_s _column_name = column_name.to_s _new_column_name = new_column_name.to_s nil_condition = _table_name.nil? || _column_name.nil? || _new_column_name.nil? empty_condition = _table_name.empty? || _column_name.empty? || _new_column_name.empty? unless nil_condition if nil_condition || empty_condition raise ArgumentError,"One of the arguments passed to rename_column is empty or nil" end begin rename_column_sql = "RENAME COLUMN #{table_name}.#{column_name} TO \ #{new_column_name}" unless stmt = execute(rename_column_sql) error_msg = IBM_DB.conn_errormsg error_msg = IBM_DB.stmt_errormsg if error_msg.empty? if error_msg && !error_msg.empty? raise "Rename column failed : #{error_msg}" else raise StandardError.new('An unexpected error occurred during renaming the column') end end reorg_table(_table_name) ensure IBM_DB.free_stmt stmt if stmt end #End of begin end |
#reorg_table(table_name) ⇒ Object
Reorganizes the table for column changes
2138 2139 2140 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2138 def reorg_table(table_name) execute("UPDATE STATISTICS FOR TABLE #{table_name}") end |
#set_binary_default(value) ⇒ Object
This method throws an error when trying to create a default value on a BLOB/CLOB column for IDS. The documentation states: “if the column is a BLOB or CLOB datatype, NULL is the only valid default value.”
2189 2190 2191 2192 2193 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2189 def set_binary_default(value) unless (value == 'NULL') raise "Informix Dynamic Server only allows NULL as a valid default value for a BLOB data type" end end |
#set_binary_value ⇒ Object
For Informix Dynamic Server, we treat binary value same as we treat a text value. We support literals by converting the insert into a dummy insert and an update (See handle_lobs method above)
2198 2199 2200 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2198 def set_binary_value "'@@@IBMBINARY@@@'" end |
#set_case(value) ⇒ Object
For Informix Dynamic Server, the arguments to the meta-data functions need to be in lower-case
2213 2214 2215 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2213 def set_case(value) value.downcase end |
#set_schema(schema) ⇒ Object
IDS does not support the SET SCHEMA syntax
2036 2037 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2036 def set_schema(schema) end |
#set_text_default(value) ⇒ Object
This method throws an error when trying to create a default value on a BLOB/CLOB column for IDS. The documentation states: “if the column is a BLOB or CLOB datatype, NULL is the only valid default value.”
2205 2206 2207 2208 2209 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 2205 def set_text_default(value) unless (value == 'NULL') raise "Informix Dynamic Server only allows NULL as a valid default value for a CLOB data type" end end |