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.
-
#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, #prepare, #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
3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3499 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
3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3514 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.sql_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_stmt(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
3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3534 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.sql_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 stmt = execute(change_column_sql) reorg_table(table_name) end ensure IBM_DB.free_stmt(stmt) if stmt end |
#get_datetime_mapping ⇒ Object
This method returns the IDS SQL type corresponding to the Rails datetime/timestamp type
3565 3566 3567 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3565 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
3576 3577 3578 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3576 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
3571 3572 3573 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3571 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
3586 3587 3588 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3586 def last_generated_id(stmt) IBM_DB.get_last_serial_value(stmt) end |
#primary_key_definition(start_id) ⇒ Object
End of rename_column
3495 3496 3497 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3495 def primary_key_definition(start_id) return "SERIAL(#{start_id}) PRIMARY KEY" end |
#rename_column(table_name, column_name, new_column_name) ⇒ Object
IDS specific ALTER TABLE statement to rename a column
3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3461 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.getErrormsg(@adapter.connection, IBM_DB::DB_CONN ) 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
3559 3560 3561 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3559 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.”
3593 3594 3595 3596 3597 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3593 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)
3602 3603 3604 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3602 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
3617 3618 3619 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3617 def set_case(value) value.downcase end |
#set_schema(schema) ⇒ Object
IDS does not support the SET SCHEMA syntax
3457 3458 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3457 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.”
3609 3610 3611 3612 3613 |
# File 'lib/active_record/connection_adapters/ibm_db_adapter.rb', line 3609 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 |