Module: ActiveRecord::ConnectionAdapters::Cubrid2::SchemaStatements
- Included in:
- AbstractCubrid2Adapter
- Defined in:
- lib/active_record/connection_adapters/cubrid2/schema_statements.rb
Overview
:nodoc:
Instance Method Summary collapse
- #create_schema_dumper(options) ⇒ Object
- #create_table(table_name, options: default_row_format) ⇒ Object
-
#indexes(table_name) ⇒ Object
Returns an array of indexes for the given table.
- #internal_string_options_for_primary_key ⇒ Object
- #remove_column(table_name, column_name, type = nil, **options) ⇒ Object
- #table_alias_length ⇒ Object
-
#type_to_sql(type, limit: nil, precision: nil, scale: nil, size: limit_to_size(limit, type), unsigned: nil, **options) ⇒ Object
Maps logical Rails types to Cubrid-specific data types.
- #update_table_definition(table_name, base) ⇒ Object
Instance Method Details
#create_schema_dumper(options) ⇒ Object
96 97 98 |
# File 'lib/active_record/connection_adapters/cubrid2/schema_statements.rb', line 96 def create_schema_dumper() Cubrid2::SchemaDumper.create(self, ) end |
#create_table(table_name, options: default_row_format) ⇒ Object
80 81 82 |
# File 'lib/active_record/connection_adapters/cubrid2/schema_statements.rb', line 80 def create_table(table_name, options: default_row_format, **) super end |
#indexes(table_name) ⇒ Object
Returns an array of indexes for the given table.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/active_record/connection_adapters/cubrid2/schema_statements.rb', line 8 def indexes(table_name) indexes = [] current_index = nil execute_and_free("SHOW KEYS FROM #{quote_table_name(table_name)}", 'SCHEMA') do |result| each_hash(result) do |row| if current_index != row[:Key_name] next if row[:Key_name] == 'PRIMARY' # skip the primary key current_index = row[:Key_name] cubrid_index_type = row[:Index_type].downcase.to_sym # currently only support btree # https://www.cubrid.org/manual/en/11.2/sql/query/show.html?highlight=show%20index#show-index index_using = cubrid_index_type index_type = nil indexes << [ row[:Table], row[:Key_name], row[:Non_unique].to_i == 0, [], { lengths: {}, orders: {}, type: index_type, using: index_using, comment: row[:Comment].presence, null: row[:Null] == 'YES', visible: row[:Visible] == 'YES' } ] end if row[:Func] expression = row[:Func] expression = +"(#{expression})" unless expression.start_with?('(') indexes.last[-2] << expression indexes.last[-1][:expressions] ||= {} indexes.last[-1][:expressions][expression] = expression indexes.last[-1][:orders][expression] = :desc if row[:Collation] == 'D' else indexes.last[-2] << row[:Column_name] indexes.last[-1][:lengths][row[:Column_name]] = row[:Sub_part].to_i if row[:Sub_part] indexes.last[-1][:orders][row[:Column_name]] = :desc if row[:Collation] == 'D' end end end indexes.map do |index| = index.pop if (expressions = .delete(:expressions)) orders = .delete(:orders) lengths = .delete(:lengths) columns = index[-1].map do |name| [name.to_sym, expressions[name] || +quote_column_name(name)] end.to_h index[-1] = ( columns, order: orders, length: lengths ).values.join(', ') end IndexDefinition.new(*index, **) end end |
#internal_string_options_for_primary_key ⇒ Object
84 85 86 87 88 89 90 |
# File 'lib/active_record/connection_adapters/cubrid2/schema_statements.rb', line 84 def super.tap do || if !row_format_dynamic_by_default? && charset =~ /^utf8/ [:collation] = collation.sub(/\A[^_]+/, 'utf8') end end end |
#remove_column(table_name, column_name, type = nil, **options) ⇒ Object
75 76 77 78 |
# File 'lib/active_record/connection_adapters/cubrid2/schema_statements.rb', line 75 def remove_column(table_name, column_name, type = nil, **) remove_foreign_key(table_name, column: column_name) if foreign_key_exists?(table_name, column: column_name) super end |
#table_alias_length ⇒ Object
130 131 132 133 |
# File 'lib/active_record/connection_adapters/cubrid2/schema_statements.rb', line 130 def table_alias_length # https://www.cubrid.org/manual/en/9.1.0/sql/identifier.html#id2 222 end |
#type_to_sql(type, limit: nil, precision: nil, scale: nil, size: limit_to_size(limit, type), unsigned: nil, **options) ⇒ Object
Maps logical Rails types to Cubrid-specific data types.
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/active_record/connection_adapters/cubrid2/schema_statements.rb', line 101 def type_to_sql(type, limit: nil, precision: nil, scale: nil, size: limit_to_size(limit, type), unsigned: nil, **) case type.to_s when 'integer' integer_to_sql(limit) when 'serial' integer_to_sql(8) # bigint when 'float', 'real', 'double', 'double precision' float_to_sql(limit) when 'text', 'string', 'varchar', 'char varing' type_with_size_to_sql('string', size) when 'char', 'character' type_with_size_to_sql('char', size) when 'blob', 'binary' type_with_size_to_sql('blob', size) when 'clob' type_with_size_to_sql('clob', size) when 'boolean' type_with_size_to_sql('boolean', size) when 'nchar', 'nchar varing' raise 'Not supported from cubrid 9.0' else super end end |